aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_db_catree.c
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2018-10-16 14:27:42 +0200
committerSverker Eriksson <[email protected]>2018-10-19 19:44:52 +0200
commitbfacc491d99156cef23de4e99a2d3cb0965eb075 (patch)
tree3f59e872a6bafb95e94d97a14c35749762201ed3 /erts/emulator/beam/erl_db_catree.c
parent76f7e5a04e1dc8150ac0f90d983e0d1488e705a5 (diff)
downloadotp-bfacc491d99156cef23de4e99a2d3cb0965eb075.tar.gz
otp-bfacc491d99156cef23de4e99a2d3cb0965eb075.tar.bz2
otp-bfacc491d99156cef23de4e99a2d3cb0965eb075.zip
erts: Remove tree merging for print and foreach_offheap
Diffstat (limited to 'erts/emulator/beam/erl_db_catree.c')
-rw-r--r--erts/emulator/beam/erl_db_catree.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/erts/emulator/beam/erl_db_catree.c b/erts/emulator/beam/erl_db_catree.c
index 46441c060b..1b4e5d45e7 100644
--- a/erts/emulator/beam/erl_db_catree.c
+++ b/erts/emulator/beam/erl_db_catree.c
@@ -2304,9 +2304,16 @@ static int db_take_catree(Process *p, DbTable *tbl, Eterm key, Eterm *ret)
static void db_print_catree(fmtfn_t to, void *to_arg,
int show, DbTable *tbl)
{
- DbTableCATreeNode *base = merge_to_one_locked_base_node(&tbl->catree);
- db_print_tree_common(to, to_arg, show, base->u.base.root, tbl);
- wunlock_base_node(&(base->u.base));
+ CATreeRootIterator iter;
+ TreeDbTerm** root;
+
+ init_root_iterator(&tbl->catree, &iter, 1);
+ root = catree_find_first_root(&iter);
+ do {
+ db_print_tree_common(to, to_arg, show, *root, tbl);
+ root = catree_find_next_root(&iter);
+ } while (root);
+ ASSERT(!iter.locked_bnode);
}
/* Release all memory occupied by a single table */
@@ -2382,9 +2389,16 @@ static void db_foreach_offheap_catree(DbTable *tbl,
void (*func)(ErlOffHeap *, void *),
void *arg)
{
- DbTableCATreeNode *base = merge_to_one_locked_base_node(&tbl->catree);
- db_foreach_offheap_tree_common(base->u.base.root, func, arg);
- wunlock_base_node(&(base->u.base));
+ CATreeRootIterator iter;
+ TreeDbTerm** root;
+
+ init_root_iterator(&tbl->catree, &iter, 1);
+ root = catree_find_first_root(&iter);
+ do {
+ db_foreach_offheap_tree_common(*root, func, arg);
+ root = catree_find_next_root(&iter);
+ } while (root);
+ ASSERT(!iter.locked_bnode);
}
static int db_lookup_dbterm_catree(Process *p, DbTable *tbl, Eterm key, Eterm obj,