X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=snapshot.cc;h=fb1f911557e09345ed7b8299e19d6edce97eb399;hb=3f77119600ac3aa246258dec2776056d09f8e4e0;hp=73a9d3a6878f925ca92e3e7484513f2d9adda0cd;hpb=a0ed364eeb0fe5f0cc179fb49b0d280e1fe8a314;p=model-checker.git diff --git a/snapshot.cc b/snapshot.cc index 73a9d3a..fb1f911 100644 --- a/snapshot.cc +++ b/snapshot.cc @@ -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);