diff options
author | Keith Bostic <keith.bostic@mongodb.com> | 2016-08-14 20:48:34 -0400 |
---|---|---|
committer | Alex Gorrod <alexander.gorrod@mongodb.com> | 2016-08-15 10:48:34 +1000 |
commit | 74d7c06233ce4a2c9033e2ad07a69985574724cb (patch) | |
tree | 2f6df84958ef2a9a2bde932d858215b04ccff595 | |
parent | 359e079fed1740c3ea1cb694cf37c531d47cac27 (diff) | |
download | mongo-74d7c06233ce4a2c9033e2ad07a69985574724cb.tar.gz |
WT-2835 Stop WT_CONNECTION.leak-memory skipping memory map and cache cleanup (#2954)
Don't skip memory map cleanups and cache updates when leak-memory is
configured.
-rw-r--r-- | src/btree/bt_discard.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/btree/bt_discard.c b/src/btree/bt_discard.c index 965aec16fc2..4b132e311c5 100644 --- a/src/btree/bt_discard.c +++ b/src/btree/bt_discard.c @@ -103,6 +103,15 @@ __wt_page_out(WT_SESSION_IMPL *session, WT_PAGE **pagep) /* Update the cache's information. */ __wt_cache_page_evict(session, page); + dsk = (WT_PAGE_HEADER *)page->dsk; + if (F_ISSET_ATOMIC(page, WT_PAGE_DISK_ALLOC)) + __wt_cache_page_image_decr(session, dsk->mem_size); + + /* Discard any mapped image. */ + if (F_ISSET_ATOMIC(page, WT_PAGE_DISK_MAPPED)) + (void)S2BT(session)->bm->map_discard( + S2BT(session)->bm, session, dsk, (size_t)dsk->mem_size); + /* * If discarding the page as part of process exit, the application may * configure to leak the memory rather than do the work. @@ -129,17 +138,9 @@ __wt_page_out(WT_SESSION_IMPL *session, WT_PAGE **pagep) break; } - /* Discard any disk image. */ - dsk = (WT_PAGE_HEADER *)page->dsk; - if (F_ISSET_ATOMIC(page, WT_PAGE_DISK_ALLOC)) { - __wt_cache_page_image_decr(session, dsk->mem_size); + /* Discard any allocated disk image. */ + if (F_ISSET_ATOMIC(page, WT_PAGE_DISK_ALLOC)) __wt_overwrite_and_free_len(session, dsk, dsk->mem_size); - } - - /* Discard any mapped image. */ - if (F_ISSET_ATOMIC(page, WT_PAGE_DISK_MAPPED)) - (void)S2BT(session)->bm->map_discard( - S2BT(session)->bm, session, dsk, (size_t)dsk->mem_size); __wt_overwrite_and_free(session, page); } |