diff options
author | Sverker Eriksson <[email protected]> | 2015-06-02 19:23:49 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2015-06-15 14:48:22 +0200 |
commit | 02d0ce034598297565f2b35ecc3d1af121787f33 (patch) | |
tree | a415e4b7d21c240352ae8737806e516caa2f2b43 /erts/emulator/beam/erl_db_hash.c | |
parent | 512c321bdaf25b685124405e287a3839be467149 (diff) | |
download | otp-02d0ce034598297565f2b35ecc3d1af121787f33.tar.gz otp-02d0ce034598297565f2b35ecc3d1af121787f33.tar.bz2 otp-02d0ce034598297565f2b35ecc3d1af121787f33.zip |
erts: Remove hashmap probabilistic heap overestimation
by adding a dynamic heap factory.
"binary_to_term" is now a hybrid solution with both
a call to decoded_size() to calculate needed heap space
AND possible dynamic allocation of more heap space
if needed for big maps.
The heap size returned from decoded_size() is guaranteed
to be sufficient for all term heap data except for hashmap
nodes. All hashmap nodes are created at the end of dec_term()
by invoking the heap factory interface that may allocate more
heap space on process heap or in fragments.
With this commit it is no longer guaranteed that a message
is confined to only one heap fragment.
Diffstat (limited to 'erts/emulator/beam/erl_db_hash.c')
-rw-r--r-- | erts/emulator/beam/erl_db_hash.c | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_db_hash.c b/erts/emulator/beam/erl_db_hash.c index 383ee7c430..6e50e9c5b4 100644 --- a/erts/emulator/beam/erl_db_hash.c +++ b/erts/emulator/beam/erl_db_hash.c @@ -1049,7 +1049,6 @@ static int db_get_element_hash(Process *p, DbTable *tbl, Eterm copy = db_copy_element_from_ets(&tb->common, p, &b->dbterm, ndex, &hp, 2); elem_list = CONS(hp, copy, elem_list); - hp += 2; } b = b->next; } |