diff options
Diffstat (limited to 'src/third_party/wiredtiger/src/btree/bt_discard.c')
-rw-r--r-- | src/third_party/wiredtiger/src/btree/bt_discard.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/third_party/wiredtiger/src/btree/bt_discard.c b/src/third_party/wiredtiger/src/btree/bt_discard.c index 965aec16fc2..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,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); } |