diff options
author | Sverker Eriksson <[email protected]> | 2018-10-16 14:27:42 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2018-10-19 19:44:52 +0200 |
commit | bfacc491d99156cef23de4e99a2d3cb0965eb075 (patch) | |
tree | 3f59e872a6bafb95e94d97a14c35749762201ed3 /erts | |
parent | 76f7e5a04e1dc8150ac0f90d983e0d1488e705a5 (diff) | |
download | otp-bfacc491d99156cef23de4e99a2d3cb0965eb075.tar.gz otp-bfacc491d99156cef23de4e99a2d3cb0965eb075.tar.bz2 otp-bfacc491d99156cef23de4e99a2d3cb0965eb075.zip |
erts: Remove tree merging for print and foreach_offheap
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/beam/erl_db_catree.c | 26 |
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, |