X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=snapshot.cc;h=6725a7aed80ffefab54247fde99e87d848c60329;hb=cf1bbeaa6a7bf2228101be7f0c5a588b67e12163;hp=2901be3c385db322689a3b8793c340c613921920;hpb=c56ca6ef155dc69125bfc53bf9893016b699a0c2;p=c11tester.git diff --git a/snapshot.cc b/snapshot.cc index 2901be3c..6725a7ae 100644 --- a/snapshot.cc +++ b/snapshot.cc @@ -372,23 +372,26 @@ static void fork_snapshot_init(unsigned int numbackingpages, if (!fork_snap) createSharedMemory(); - void *base_model_snapshot_space = malloc((numheappages + 1) * PAGESIZE); - void *pagealignedbase = PageAlignAddressUpward(base_model_snapshot_space); - model_snapshot_space = create_mspace_with_base(pagealignedbase, numheappages * PAGESIZE, 1); + model_snapshot_space = create_mspace(numheappages * PAGESIZE, 1); } +volatile int forklock = 0; + static void fork_loop() { /* switch back here when takesnapshot is called */ snapshotid = fork_snap->currSnapShotID; if (model->params.nofork) { setcontext(&fork_snap->shared_ctxt); - exit(EXIT_SUCCESS); + _Exit(EXIT_SUCCESS); } while (true) { pid_t forkedID; fork_snap->currSnapShotID = snapshotid + 1; + + forklock = 1; forkedID = fork(); + forklock = 0; if (0 == forkedID) { setcontext(&fork_snap->shared_ctxt); @@ -405,7 +408,7 @@ static void fork_loop() { } if (fork_snap->mIDToRollback != snapshotid) - exit(EXIT_SUCCESS); + _Exit(EXIT_SUCCESS); } } }