diff options
Diffstat (limited to 'erts/emulator/beam/external.c')
-rw-r--r-- | erts/emulator/beam/external.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c index 15dcb069d2..b2bb251db3 100644 --- a/erts/emulator/beam/external.c +++ b/erts/emulator/beam/external.c @@ -4249,7 +4249,6 @@ dec_term_atom_common: (void) PSTACK_POP(hamt_array); } while (!PSTACK_IS_EMPTY(hamt_array)); - PSTACK_DESTROY(hamt_array); } /* Iterate through all the (flat)maps and check for validity and sort keys @@ -4261,6 +4260,9 @@ dec_term_atom_common: if (!erts_validate_and_sort_flatmap((flatmap_t*)next)) goto error; } + + /* Now that no more errors can occur, the stacks can be destroyed safely. */ + PSTACK_DESTROY(hamt_array); WSTACK_DESTROY(flat_maps); ASSERT((Eterm*)*dbg_resultp != NULL); @@ -4847,6 +4849,7 @@ init_done: if (n <= MAP_SMALL_MAP_LIMIT) { heap_size += 3 + n + 1 + n; } else { + CHKSIZE(2*n); /* Conservative size check */ heap_size += HASHMAP_ESTIMATED_HEAP_SIZE(n); } break; |