summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/btree/bt_discard.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/src/btree/bt_discard.c')
-rw-r--r--src/third_party/wiredtiger/src/btree/bt_discard.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/third_party/wiredtiger/src/btree/bt_discard.c b/src/third_party/wiredtiger/src/btree/bt_discard.c
index a00bb7dc2b5..162bc07a1c2 100644
--- a/src/third_party/wiredtiger/src/btree/bt_discard.c
+++ b/src/third_party/wiredtiger/src/btree/bt_discard.c
@@ -61,7 +61,7 @@ __wt_page_out(WT_SESSION_IMPL *session, WT_PAGE **pagep)
*/
WT_ASSERT(session, !__wt_page_is_modified(page));
WT_ASSERT(session, !F_ISSET_ATOMIC(page, WT_PAGE_EVICT_LRU));
- WT_ASSERT(session, !__wt_fair_islocked(session, &page->page_lock));
+ WT_ASSERT(session, !__wt_rwlock_islocked(session, &page->page_lock));
#ifdef HAVE_DIAGNOSTIC
{
@@ -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,16 +138,10 @@ __wt_page_out(WT_SESSION_IMPL *session, WT_PAGE **pagep)
break;
}
- /* Discard any disk image. */
- dsk = (WT_PAGE_HEADER *)page->dsk;
+ /* 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);
}