summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSverker Eriksson <sverker@erlang.org>2023-05-02 15:09:18 +0200
committerSverker Eriksson <sverker@erlang.org>2023-05-02 15:09:18 +0200
commit1692be7bd98e9fa37666b7444fe56c30f3e9a3df (patch)
tree437ae543fff8f5aec32731164fbd8db20f6b1ad8
parent01009aa8dcebe7a5e72a49460f8704aaa23e960e (diff)
parentc26caba0e7a66c44615a47ce3ffcad908f76f32e (diff)
downloaderlang-1692be7bd98e9fa37666b7444fe56c30f3e9a3df.tar.gz
Merge branch 'sverker/25/erts/hashmap-collision-nodes/OTP-18569' into maint
AGAIN
-rw-r--r--erts/emulator/beam/erl_map.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/erts/emulator/beam/erl_map.c b/erts/emulator/beam/erl_map.c
index 119bd5ebea..8a336765f9 100644
--- a/erts/emulator/beam/erl_map.c
+++ b/erts/emulator/beam/erl_map.c
@@ -1520,10 +1520,10 @@ BIF_RETTYPE maps_merge_trap_1(BIF_ALIST_1) {
#define MAP_MERGE_LOOP_FACTOR 8
-static Eterm merge_maybe_collision_node(Process* p,
- Eterm* srcA, Uint szA,
- Eterm* srcB, Uint szB,
- Uint* map_sizep)
+static Eterm merge_collision_node(Process* p,
+ Eterm* srcA, Uint szA,
+ Eterm* srcB, Uint szB,
+ Uint* map_sizep)
{
Eterm *hp;
Eterm *hdr_ptr;
@@ -1556,12 +1556,7 @@ static Eterm merge_maybe_collision_node(Process* p,
}
}
}
- if (arity == 1) { /* no collision node needed */
- Eterm ret_cons = hdr_ptr[1];
- ASSERT(!szA && !szB);
- HRelease(p, hp_end, hdr_ptr);
- return ret_cons;
- }
+ ASSERT(arity >= 2);
for ( ; szA; szA--)
*hp++ = *srcA++;
@@ -1745,8 +1740,8 @@ merge_nodes:
ASSERT(!(sp->rbm == 0 && ctx->lvl > 0));
}
else {
- res = merge_maybe_collision_node(p, sp->srcA, coll_szA,
- sp->srcB, coll_szB, &ctx->size);
+ res = merge_collision_node(p, sp->srcA, coll_szA,
+ sp->srcB, coll_szB, &ctx->size);
sp->mix = 3;
coll_szA = coll_szB = 0;
continue;