Lock model check when we terminate proxy thread
[c11tester.git] / snapshot.cc
index 2901be3c385db322689a3b8793c340c613921920..dab1a480d5910d84ed97ec2782e6fa73d7e50a85 100644 (file)
@@ -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 modellock = 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;
+
+               modellock = 1;
                forkedID = fork();
+               modellock = 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);
                }
        }
 }