aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_db_catree.c
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2018-10-16 12:19:32 +0200
committerSverker Eriksson <[email protected]>2018-10-19 19:44:51 +0200
commit76f7e5a04e1dc8150ac0f90d983e0d1488e705a5 (patch)
treedd03ff2d40ba7a8eb71622d64e7afa3886233660 /erts/emulator/beam/erl_db_catree.c
parentfd66782f1832966c5ee27bf756f1255bf0102bc9 (diff)
downloadotp-76f7e5a04e1dc8150ac0f90d983e0d1488e705a5.tar.gz
otp-76f7e5a04e1dc8150ac0f90d983e0d1488e705a5.tar.bz2
otp-76f7e5a04e1dc8150ac0f90d983e0d1488e705a5.zip
erts: Remove tree merging for ets:slot
Brute force solution will always iterate tree from slot 0 and forward. ToDo1: Yield. ToDo2: Maybe optimize by caching AVL tree size in each base node.
Diffstat (limited to 'erts/emulator/beam/erl_db_catree.c')
-rw-r--r--erts/emulator/beam/erl_db_catree.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/erts/emulator/beam/erl_db_catree.c b/erts/emulator/beam/erl_db_catree.c
index 62c616e66d..46441c060b 100644
--- a/erts/emulator/beam/erl_db_catree.c
+++ b/erts/emulator/beam/erl_db_catree.c
@@ -2128,11 +2128,13 @@ static int db_slot_catree(Process *p, DbTable *tbl,
Eterm slot_term, Eterm *ret)
{
int result;
- DbTableCATreeNode *base;
- base = merge_to_one_locked_base_node(&tbl->catree);
- result = db_slot_tree_common(p, tbl, base->u.base.root,
- slot_term, ret, NULL);
- wunlock_base_node(&(base->u.base));
+ CATreeRootIterator iter;
+
+ init_root_iterator(&tbl->catree, &iter, 1);
+ result = db_slot_tree_common(p, tbl, *catree_find_first_root(&iter),
+ slot_term, ret, NULL, &iter);
+ if (iter.locked_bnode)
+ runlock_base_node(iter.locked_bnode);
return result;
}