[everything] Fix circular shared pointer references.
We had a cycle from transaction_manager <-> space_map, and also from the ref_counters back up to the tm. This prevented objects being destroyed when various programs exited. From now on we'll try and only use a shared ptr if ownership is implied. Otherwise a reference will be used (eg, for up pointers).
This commit is contained in:
@@ -217,14 +217,14 @@ namespace {
|
||||
writeset_tree_reporter wt_rep(out);
|
||||
{
|
||||
era_detail_traits::ref_counter rc(tm);
|
||||
writeset_tree wt(tm, sb.writeset_tree_root, rc);
|
||||
writeset_tree wt(*tm, sb.writeset_tree_root, rc);
|
||||
check_writeset_tree(tm, wt, wt_rep);
|
||||
}
|
||||
|
||||
era_array_reporter ea_rep(out);
|
||||
{
|
||||
uint32_traits::ref_counter rc;
|
||||
era_array ea(tm, rc, sb.era_array_root, sb.nr_blocks);
|
||||
era_array ea(*tm, rc, sb.era_array_root, sb.nr_blocks);
|
||||
check_era_array(ea, sb.current_era, ea_rep);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,12 +51,12 @@ metadata::create_metadata(block_manager<>::ptr bm)
|
||||
tm_ = open_tm(bm);
|
||||
|
||||
space_map::ptr core = tm_->get_sm();
|
||||
metadata_sm_ = create_metadata_sm(tm_, tm_->get_bm()->get_nr_blocks());
|
||||
metadata_sm_ = create_metadata_sm(*tm_, tm_->get_bm()->get_nr_blocks());
|
||||
copy_space_maps(metadata_sm_, core);
|
||||
tm_->set_sm(metadata_sm_);
|
||||
|
||||
writeset_tree_ = writeset_tree::ptr(new writeset_tree(tm_, era_detail_traits::ref_counter(tm_)));
|
||||
era_array_ = era_array::ptr(new era_array(tm_,
|
||||
writeset_tree_ = writeset_tree::ptr(new writeset_tree(*tm_, era_detail_traits::ref_counter(tm_)));
|
||||
era_array_ = era_array::ptr(new era_array(*tm_,
|
||||
uint32_traits::ref_counter()));
|
||||
}
|
||||
|
||||
@@ -66,11 +66,11 @@ metadata::open_metadata(block_manager<>::ptr bm, block_address loc)
|
||||
tm_ = open_tm(bm);
|
||||
sb_ = read_superblock(tm_->get_bm(), loc);
|
||||
|
||||
writeset_tree_ = writeset_tree::ptr(new writeset_tree(tm_,
|
||||
writeset_tree_ = writeset_tree::ptr(new writeset_tree(*tm_,
|
||||
sb_.writeset_tree_root,
|
||||
era_detail_traits::ref_counter(tm_)));
|
||||
|
||||
era_array_ = era_array::ptr(new era_array(tm_,
|
||||
era_array_ = era_array::ptr(new era_array(*tm_,
|
||||
uint32_traits::ref_counter(),
|
||||
sb_.era_array_root,
|
||||
sb_.nr_blocks));
|
||||
|
||||
@@ -52,7 +52,7 @@ namespace {
|
||||
in_writeset_ = true;
|
||||
era_ = era;
|
||||
|
||||
bits_.reset(new bitset(md_.tm_));
|
||||
bits_.reset(new bitset(*md_.tm_));
|
||||
bits_->grow(nr_bits, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace {
|
||||
|
||||
void visit(btree_path const &path, era_detail const &era) {
|
||||
era_ = path[0];
|
||||
persistent_data::bitset bs(tm_, era.writeset_root, era.nr_bits);
|
||||
persistent_data::bitset bs(*tm_, era.writeset_root, era.nr_bits);
|
||||
writeset_v_.writeset_begin(era_, era.nr_bits);
|
||||
bs.walk_bitset(*this);
|
||||
writeset_v_.writeset_end();
|
||||
|
||||
Reference in New Issue
Block a user