From a24865789e18ecc8625a9518db00c95607d541af Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Thu, 26 Jun 2014 12:12:16 +0200 Subject: [PATCH 1/1] [mc] Forgot to decrease the page refcounts when freeing a snapshot --- src/mc/mc_checkpoint.c | 3 +++ src/mc/mc_page_store.cpp | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mc/mc_checkpoint.c b/src/mc/mc_checkpoint.c index abb2dee35a..202a2f10a0 100644 --- a/src/mc/mc_checkpoint.c +++ b/src/mc/mc_checkpoint.c @@ -64,6 +64,9 @@ static void MC_region_destroy(mc_mem_region_t reg) { //munmap(reg->data, reg->size); xbt_free(reg->data); + if (reg->page_numbers) { + mc_free_page_snapshot_region(reg->page_numbers, mc_page_count(reg->size)); + } xbt_free(reg); } diff --git a/src/mc/mc_page_store.cpp b/src/mc/mc_page_store.cpp index 787815d0c4..b6ba6f74cb 100644 --- a/src/mc/mc_page_store.cpp +++ b/src/mc/mc_page_store.cpp @@ -113,7 +113,7 @@ size_t s_mc_pages_store::alloc_page() void s_mc_pages_store::remove_page(size_t pageno) { this->free_pages_.push_back(pageno); - void* page = mc_page_from_number(this->memory_, pageno); + const void* page = this->get_page(pageno); uint64_t hash = mc_hash_page(page); this->hash_index_[hash].erase(pageno); } @@ -146,6 +146,7 @@ size_t s_mc_pages_store::store_page(void* page) // Otherwise, a new page is allocated in the page store and the content // of the page is `memcpy()`-ed to this new page. size_t pageno = alloc_page(); + xbt_assert(this->page_counts_[pageno]==0, "Allocated page is already used"); void* snapshot_page = (void*) this->get_page(pageno); memcpy(snapshot_page, page, xbt_pagesize); page_set.insert(pageno); -- 2.20.1