summaryrefslogtreecommitdiff
path: root/src/btree/bt_delete.c
diff options
context:
space:
mode:
authorMichael Cahill <michael.cahill@wiredtiger.com>2015-01-14 08:38:59 +1100
committerMichael Cahill <michael.cahill@wiredtiger.com>2015-01-14 08:38:59 +1100
commit712fadc6e2759c00ca601132b52ce0e27d086e35 (patch)
tree1f8ae53f897829e7d30cf7e3e21baabab23aede7 /src/btree/bt_delete.c
parent4afb64d35aba7af9bc4e89e93758c025e2fe8815 (diff)
downloadmongo-712fadc6e2759c00ca601132b52ce0e27d086e35.tar.gz
Fixes for discarding deleted references:
1. deal with overflow keys; 2. (safely) free memory associated with the WT_REF; 3. atomically swap the ref state so that concurrent readers can't race. refs SERVER-16775, #1548
Diffstat (limited to 'src/btree/bt_delete.c')
-rw-r--r--src/btree/bt_delete.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/btree/bt_delete.c b/src/btree/bt_delete.c
index 570b7f80742..622dfb1b294 100644
--- a/src/btree/bt_delete.c
+++ b/src/btree/bt_delete.c
@@ -234,7 +234,8 @@ __wt_delete_page_skip(WT_SESSION_IMPL *session, WT_REF *ref)
if (!WT_ATOMIC_CAS4(ref->state, WT_REF_DELETED, WT_REF_LOCKED))
return (0);
- skip = __wt_txn_visible(session, ref->page_del->txnid) ? 1 : 0;
+ skip = (ref->page_del == NULL ||
+ __wt_txn_visible(session, ref->page_del->txnid));
WT_PUBLISH(ref->state, WT_REF_DELETED);
return (skip);