model: schedule appropriate fence backtracking points
[c11tester.git] / snapshot.cc
index 73a9d3a6878f925ca92e3e7484513f2d9adda0cd..fb1f911557e09345ed7b8299e19d6edce97eb399 100644 (file)
@@ -57,6 +57,7 @@ static void * ReturnPageAlignedAddress(void *addr)
 /* Primary struct for snapshotting system */
 struct mprot_snapshotter {
        mprot_snapshotter(unsigned int numbackingpages, unsigned int numsnapshots, unsigned int nummemoryregions);
+       ~mprot_snapshotter();
 
        struct MemoryRegion *regionsToSnapShot; //This pointer references an array of memory regions to snapshot
        snapshot_page_t *backingStore; //This pointer references an array of snapshotpage's that form the backing store
@@ -93,6 +94,14 @@ mprot_snapshotter::mprot_snapshotter(unsigned int backing_pages, unsigned int sn
        snapShots = (struct SnapShotRecord *)model_malloc(sizeof(struct SnapShotRecord) * snapshots);
 }
 
+mprot_snapshotter::~mprot_snapshotter()
+{
+       model_free(regionsToSnapShot);
+       model_free(backingStoreBasePtr);
+       model_free(backingRecords);
+       model_free(snapShots);
+}
+
 /** mprot_handle_pf is the page fault handler for mprotect based snapshotting
  * algorithm.
  */
@@ -165,12 +174,12 @@ static void mprot_snapshot_init(unsigned int numbackingpages,
        void *basemySpace = model_malloc((numheappages + 1) * PAGESIZE);
        void *pagealignedbase = PageAlignAddressUpward(basemySpace);
        user_snapshot_space = create_mspace_with_base(pagealignedbase, numheappages * PAGESIZE, 1);
-       addMemoryRegionToSnapShot(pagealignedbase, numheappages);
+       snapshot_add_memory_region(pagealignedbase, numheappages);
 
        void *base_model_snapshot_space = model_malloc((numheappages + 1) * PAGESIZE);
        pagealignedbase = PageAlignAddressUpward(base_model_snapshot_space);
        model_snapshot_space = create_mspace_with_base(pagealignedbase, numheappages * PAGESIZE, 1);
-       addMemoryRegionToSnapShot(pagealignedbase, numheappages);
+       snapshot_add_memory_region(pagealignedbase, numheappages);
 
        entryPoint();
 }
@@ -389,10 +398,11 @@ static void fork_roll_back(snapshot_id theID)
 
 #endif /* !USE_MPROTECT_SNAPSHOT */
 
-/** The initSnapshotLibrary function initializes the snapshot library.
- *  @param entryPoint the function that should run the program.
+/**
+ * @brief Initializes the snapshot system
+ * @param entryPoint the function that should run the program.
  */
-void initSnapshotLibrary(unsigned int numbackingpages,
+void snapshot_system_init(unsigned int numbackingpages,
                unsigned int numsnapshots, unsigned int nummemoryregions,
                unsigned int numheappages, VoidFuncPtr entryPoint)
 {
@@ -403,8 +413,8 @@ void initSnapshotLibrary(unsigned int numbackingpages,
 #endif
 }
 
-/** The addMemoryRegionToSnapShot function assumes that addr is page aligned. */
-void addMemoryRegionToSnapShot(void *addr, unsigned int numPages)
+/** Assumes that addr is page aligned. */
+void snapshot_add_memory_region(void *addr, unsigned int numPages)
 {
 #if USE_MPROTECT_SNAPSHOT
        mprot_add_to_snapshot(addr, numPages);
@@ -413,10 +423,10 @@ void addMemoryRegionToSnapShot(void *addr, unsigned int numPages)
 #endif
 }
 
-/** The takeSnapshot function takes a snapshot.
+/** Takes a snapshot of memory.
  * @return The snapshot identifier.
  */
-snapshot_id takeSnapshot()
+snapshot_id take_snapshot()
 {
 #if USE_MPROTECT_SNAPSHOT
        return mprot_take_snapshot();
@@ -425,10 +435,10 @@ snapshot_id takeSnapshot()
 #endif
 }
 
-/** The rollBack function rollback to the given snapshot identifier.
+/** Rolls the memory state back to the given snapshot identifier.
  *  @param theID is the snapshot identifier to rollback to.
  */
-void rollBack(snapshot_id theID)
+void snapshot_roll_back(snapshot_id theID)
 {
 #if USE_MPROTECT_SNAPSHOT
        mprot_roll_back(theID);