X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=mymemory.cc;h=23f448f3b1dfefb04b2a55b96913adab54967f61;hb=HEAD;hp=8d95dfa68e2277f60f9cd4287ae62ec6499c780b;hpb=4f614d5fb6b6e8060910f3d5db1e6d5e8611cffa;p=satcheck.git diff --git a/mymemory.cc b/mymemory.cc index 8d95dfa..23f448f 100644 --- a/mymemory.cc +++ b/mymemory.cc @@ -26,6 +26,7 @@ size_t allocatedReqs[REQUESTS_BEFORE_ALLOC] = { 0 }; int nextRequest = 0; int howManyFreed = 0; +int switch_alloc = 0; #if !USE_MPROTECT_SNAPSHOT static mspace sStaticSpace = NULL; #endif @@ -211,7 +212,7 @@ void * real_user_malloc(size_t size) size=(size+7)&~((size_t)7); void *tmp = snapshot_struct->allocation_ptr; snapshot_struct->allocation_ptr = (void *)((char *) snapshot_struct->allocation_ptr +size); - + ASSERT(snapshot_struct->allocation_ptr <= snapshot_struct->top_ptr); return tmp; } @@ -226,7 +227,11 @@ void *malloc(size_t size) { if (user_snapshot_space) { /* Only perform user allocations from user context */ - return user_malloc(size); + if (switch_alloc) { + return model_malloc(size); + } else { + return user_malloc(size); + } } else return HandleEarlyAllocationRequest(size); } @@ -234,8 +239,13 @@ void *malloc(size_t size) /** @brief Snapshotting free implementation for user programs */ void free(void * ptr) { - if (!DontFree(ptr)) - mspace_free(user_snapshot_space, ptr); + if (!DontFree(ptr)) { + if (switch_alloc) { + model_free(ptr); + } else { + mspace_free(user_snapshot_space, ptr); + } + } } /** @brief Snapshotting realloc implementation for user programs */ @@ -298,7 +308,7 @@ void operator delete[](void *p, size_t size) free(p); } -#else /* !USE_MPROTECT_SNAPSHOT */ +#else /* !USE_MPROTECT_SNAPSHOT */ /** @brief Snapshotting allocation function for use by the Thread class only */ void * Thread_malloc(size_t size) @@ -312,4 +322,4 @@ void Thread_free(void *ptr) free(ptr); } -#endif /* !USE_MPROTECT_SNAPSHOT */ +#endif/* !USE_MPROTECT_SNAPSHOT */