bug fix for snapshotting code
authorroot <root@dw-6.eecs.uci.edu>
Wed, 31 Jul 2019 05:40:01 +0000 (22:40 -0700)
committerroot <root@dw-6.eecs.uci.edu>
Wed, 31 Jul 2019 05:40:01 +0000 (22:40 -0700)
snapshot.cc

index a69915ebe41c6e8c7bff79f8362531735c1f2905..2402bbde894f8a2134741636f24ebc8882aac306 100644 (file)
@@ -277,20 +277,14 @@ struct fork_snapshotter {
         */
        volatile snapshot_id mIDToRollback;
 
-       /**
-        * @brief The context for the shared (non-snapshot) stack
-        *
-        * This context is passed between the various processes which represent
-        * various snapshot states. It should be used primarily for the
-        * "client-side" code, not the main snapshot loop.
-        */
-       ucontext_t shared_ctxt;
+
 
        /** @brief Inter-process tracking of the next snapshot ID */
        snapshot_id currSnapShotID;
 };
 
 static struct fork_snapshotter *fork_snap = NULL;
+ucontext_t shared_ctxt;
 
 /** @statics
  *   These variables are necessary because the stack is shared region and
@@ -381,7 +375,7 @@ static void fork_loop() {
        /* switch back here when takesnapshot is called */
        snapshotid = fork_snap->currSnapShotID;
        if (model->params.nofork) {
-               setcontext(&fork_snap->shared_ctxt);
+               setcontext(&shared_ctxt);
                _Exit(EXIT_SUCCESS);
        }
 
@@ -394,7 +388,7 @@ static void fork_loop() {
                modellock = 0;
 
                if (0 == forkedID) {
-                       setcontext(&fork_snap->shared_ctxt);
+                       setcontext(&shared_ctxt);
                } else {
                        DEBUG("parent PID: %d, child PID: %d, snapshot ID: %d\n",
                                                getpid(), forkedID, snapshotid);
@@ -425,7 +419,7 @@ static void fork_startExecution(ucontext_t *context, VoidFuncPtr entryPoint) {
 }
 
 static snapshot_id fork_take_snapshot() {
-       model_swapcontext(&fork_snap->shared_ctxt, &private_ctxt);
+       model_swapcontext(&shared_ctxt, &private_ctxt);
        DEBUG("TAKESNAPSHOT RETURN\n");
        return snapshotid;
 }
@@ -434,7 +428,7 @@ static void fork_roll_back(snapshot_id theID)
 {
        DEBUG("Rollback\n");
        fork_snap->mIDToRollback = theID;
-       model_swapcontext(&fork_snap->shared_ctxt, &exit_ctxt);
+       model_swapcontext(model->get_system_context(), &exit_ctxt);
        fork_snap->mIDToRollback = -1;
 }