diff options
Diffstat (limited to 'src/btree')
-rw-r--r-- | src/btree/bt_discard.c | 5 | ||||
-rw-r--r-- | src/btree/bt_slvg.c | 8 | ||||
-rw-r--r-- | src/btree/bt_split.c | 1 | ||||
-rw-r--r-- | src/btree/bt_walk.c | 4 |
4 files changed, 7 insertions, 11 deletions
diff --git a/src/btree/bt_discard.c b/src/btree/bt_discard.c index c876da6309c..30e19147e12 100644 --- a/src/btree/bt_discard.c +++ b/src/btree/bt_discard.c @@ -252,10 +252,7 @@ __wt_free_ref( } /* Free any address allocation. */ - if (ref->addr != NULL && __wt_off_page(page, ref->addr)) { - __wt_free(session, ((WT_ADDR *)ref->addr)->addr); - __wt_free(session, ref->addr); - } + __wt_ref_addr_free(session, ref); /* Free any page-deleted information. */ if (ref->page_del != NULL) { diff --git a/src/btree/bt_slvg.c b/src/btree/bt_slvg.c index 89355baeb5c..e4e611f947a 100644 --- a/src/btree/bt_slvg.c +++ b/src/btree/bt_slvg.c @@ -1299,9 +1299,7 @@ __slvg_col_build_leaf(WT_SESSION_IMPL *session, WT_TRACK *trk, WT_REF *ref) * would have been lost.) Clear the reference addr so eviction doesn't * free the underlying blocks. */ - __wt_free(session, ((WT_ADDR *)ref->addr)->addr); - __wt_free(session, ref->addr); - ref->addr = NULL; + __wt_ref_addr_free(session, ref); /* Write the new version of the leaf page to disk. */ WT_ERR(__slvg_modify_init(session, page)); @@ -2008,9 +2006,7 @@ __slvg_row_build_leaf( * would have been lost.) Clear the reference addr so eviction doesn't * free the underlying blocks. */ - __wt_free(session, ((WT_ADDR *)ref->addr)->addr); - __wt_free(session, ref->addr); - ref->addr = NULL; + __wt_ref_addr_free(session, ref); /* Write the new version of the leaf page to disk. */ WT_ERR(__slvg_modify_init(session, page)); diff --git a/src/btree/bt_split.c b/src/btree/bt_split.c index 6f31ff89aa7..26fed53708c 100644 --- a/src/btree/bt_split.c +++ b/src/btree/bt_split.c @@ -1116,6 +1116,7 @@ __split_parent(WT_SESSION_IMPL *session, WT_REF *ref, * Add it to the session discard list, to be freed when it's safe. */ size = sizeof(WT_PAGE_INDEX) + pindex->entries * sizeof(WT_REF *); + WT_TRET(__wt_ref_block_free(session, next_ref)); WT_TRET(__split_safe_free(session, split_gen, closing, pindex, size)); parent_decr += size; diff --git a/src/btree/bt_walk.c b/src/btree/bt_walk.c index 8e0f4036b79..c7d83d8dfff 100644 --- a/src/btree/bt_walk.c +++ b/src/btree/bt_walk.c @@ -244,7 +244,8 @@ ascend: /* * If we see any child states other than deleted, the * page isn't empty. */ - if (ref->state != WT_REF_DELETED) + if (ref->state != WT_REF_DELETED && + !LF_ISSET(WT_READ_TRUNCATE)) empty_internal = false; if (LF_ISSET(WT_READ_CACHE)) { @@ -270,6 +271,7 @@ ascend: /* WT_ERR(__wt_delete_page(session, ref, &skip)); if (skip) break; + empty_internal = false; } else if (LF_ISSET(WT_READ_COMPACT)) { /* * Skip deleted pages, rewriting them doesn't |