diff options
author | Sverker Eriksson <[email protected]> | 2018-10-16 12:19:32 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2018-10-19 19:44:51 +0200 |
commit | 76f7e5a04e1dc8150ac0f90d983e0d1488e705a5 (patch) | |
tree | dd03ff2d40ba7a8eb71622d64e7afa3886233660 /erts/emulator/beam/erl_db_catree.c | |
parent | fd66782f1832966c5ee27bf756f1255bf0102bc9 (diff) | |
download | otp-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.c | 12 |
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; } |