summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Bostic <keith.bostic@mongodb.com>2016-08-14 20:48:34 -0400
committerAlex Gorrod <alexander.gorrod@mongodb.com>2016-08-15 10:48:34 +1000
commit74d7c06233ce4a2c9033e2ad07a69985574724cb (patch)
tree2f6df84958ef2a9a2bde932d858215b04ccff595
parent359e079fed1740c3ea1cb694cf37c531d47cac27 (diff)
downloadmongo-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.c21
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);
}