aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2013-10-21 17:39:24 +0200
committerBjörn-Egil Dahlberg <[email protected]>2013-10-21 17:39:24 +0200
commit7cf1ce9d805414d5cb1bf29852d2a5bf48ea4235 (patch)
tree5cf52df42ab9a6699fede95712c80c826bbe8530
parentf6c8336de4bc28f98db3b8d76cb448afa86e0308 (diff)
parente25f74afd0705f686d0fc949e4362c73d6da15fa (diff)
downloadotp-7cf1ce9d805414d5cb1bf29852d2a5bf48ea4235.tar.gz
otp-7cf1ce9d805414d5cb1bf29852d2a5bf48ea4235.tar.bz2
otp-7cf1ce9d805414d5cb1bf29852d2a5bf48ea4235.zip
Merge branch 'egil/fix-crashdump-pointer-crash/OTP-11420' into maint
* egil/fix-crashdump-pointer-crash/OTP-11420: erts: Fix segfaulting crashdump writing
-rw-r--r--erts/emulator/beam/break.c5
-rw-r--r--erts/emulator/beam/erl_process.c2
2 files changed, 5 insertions, 2 deletions
diff --git a/erts/emulator/beam/break.c b/erts/emulator/beam/break.c
index ad9a89b642..99604fa3bc 100644
--- a/erts/emulator/beam/break.c
+++ b/erts/emulator/beam/break.c
@@ -76,7 +76,10 @@ process_info(int to, void *to_arg)
for (i = 0; i < max; i++) {
Process *p = erts_pix2proc(i);
if (p && p->i != ENULL) {
- if (!ERTS_PROC_IS_EXITING(p))
+ /* Do not include processes with no heap,
+ * they are most likely just created and has invalid data
+ */
+ if (!ERTS_PROC_IS_EXITING(p) && p->heap != NULL)
print_process_info(to, to_arg, p);
}
}
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index 79f382674a..1efd070afd 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -7471,6 +7471,7 @@ alloc_process(ErtsRunQueue *rq, erts_aint32_t state)
p->approx_started = erts_get_approx_time();
p->rcount = 0;
+ p->heap = NULL;
ASSERT(p == (Process *) (erts_ptab_pix2intptr_nob(
@@ -7583,7 +7584,6 @@ erl_create_process(Process* parent, /* Parent of process (default group leader).
hipe_init_process_smp(&p->hipe_smp);
#endif
#endif
-
p->heap = (Eterm *) ERTS_HEAP_ALLOC(ERTS_ALC_T_HEAP, sizeof(Eterm)*sz);
p->old_hend = p->old_htop = p->old_heap = NULL;
p->high_water = p->heap;