*/
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
/* 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);
}
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);
}
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;
}
{
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;
}