X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=snapshot.cc;fp=snapshot.cc;h=2402bbde894f8a2134741636f24ebc8882aac306;hp=a69915ebe41c6e8c7bff79f8362531735c1f2905;hb=f81aa4f774d93dbe091573577c4001aa92843029;hpb=bd4d831da77ae594a6790c4af7cb14abb022f80b diff --git a/snapshot.cc b/snapshot.cc index a69915eb..2402bbde 100644 --- a/snapshot.cc +++ b/snapshot.cc @@ -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; }