diff options
author | Michael Cahill <michael.cahill@wiredtiger.com> | 2015-01-14 08:38:59 +1100 |
---|---|---|
committer | Michael Cahill <michael.cahill@wiredtiger.com> | 2015-01-14 08:38:59 +1100 |
commit | 712fadc6e2759c00ca601132b52ce0e27d086e35 (patch) | |
tree | 1f8ae53f897829e7d30cf7e3e21baabab23aede7 /src/btree/bt_delete.c | |
parent | 4afb64d35aba7af9bc4e89e93758c025e2fe8815 (diff) | |
download | mongo-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.c | 3 |
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); |