diff options
author | Sverker Eriksson <[email protected]> | 2018-07-12 15:54:57 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2018-07-12 15:54:57 +0200 |
commit | 346494638829cb4440aea106dbfc3ede45e1d274 (patch) | |
tree | fcd64f7eee2e66790dd42f26295c74ddc94e397e | |
parent | 44b09e036b31b29dddc3b178e8f6b9fc96a9a874 (diff) | |
download | otp-346494638829cb4440aea106dbfc3ede45e1d274.tar.gz otp-346494638829cb4440aea106dbfc3ede45e1d274.tar.bz2 otp-346494638829cb4440aea106dbfc3ede45e1d274.zip |
erts: Fix bug in crash dump generation
Symptom: emulator core dumps during crash dump generation.
Problem:
erts_dump_lit_areas did not grow correctly
to always be equal or larger than number of loaded modules.
The comment about twice the size to include both curr and old
did not seem right. The beam_ranges structure contains *all* loaded
module instances until they are removed when purged.
-rw-r--r-- | erts/emulator/beam/beam_ranges.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/erts/emulator/beam/beam_ranges.c b/erts/emulator/beam/beam_ranges.c index fac4289271..8e96b762bf 100644 --- a/erts/emulator/beam/beam_ranges.c +++ b/erts/emulator/beam/beam_ranges.c @@ -34,10 +34,8 @@ typedef struct { /* * Used for crash dumping of literals. The size of erts_dump_lit_areas is - * always twice the number of active ranges (to allow for literals in both - * current and old code). + * always at least the number of active ranges. */ - ErtsLiteralArea** erts_dump_lit_areas; Uint erts_dump_num_lit_areas; @@ -179,8 +177,8 @@ erts_end_staging_ranges(int commit) (erts_aint_t) (r[dst].modules + r[dst].n / 2)); - if (r[dst].allocated * 2 > erts_dump_num_lit_areas) { - erts_dump_num_lit_areas *= 2; + if (r[dst].allocated > erts_dump_num_lit_areas) { + erts_dump_num_lit_areas = r[dst].allocated * 2; erts_dump_lit_areas = (ErtsLiteralArea **) erts_realloc(ERTS_ALC_T_CRASH_DUMP, (void *) erts_dump_lit_areas, |