aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_process_dump.c
diff options
context:
space:
mode:
authorLukas Larsson <[email protected]>2019-03-18 13:33:30 +0100
committerLukas Larsson <[email protected]>2019-03-25 16:34:11 +0100
commitc0ca8209570b42bfbb029eb7e9ae8750a43fb739 (patch)
tree913beb0e76931019b657d873dd0821554391ac2d /erts/emulator/beam/erl_process_dump.c
parent1b90b7311d6ccdb39f54d655b82cf6900c60761b (diff)
downloadotp-c0ca8209570b42bfbb029eb7e9ae8750a43fb739.tar.gz
otp-c0ca8209570b42bfbb029eb7e9ae8750a43fb739.tar.bz2
otp-c0ca8209570b42bfbb029eb7e9ae8750a43fb739.zip
erts: Add crash dumping of EXITING and FREE processes
Diffstat (limited to 'erts/emulator/beam/erl_process_dump.c')
-rw-r--r--erts/emulator/beam/erl_process_dump.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/erts/emulator/beam/erl_process_dump.c b/erts/emulator/beam/erl_process_dump.c
index a164ed543e..71262061dd 100644
--- a/erts/emulator/beam/erl_process_dump.c
+++ b/erts/emulator/beam/erl_process_dump.c
@@ -121,12 +121,14 @@ Uint erts_process_memory(Process *p, int include_sigs_in_transit)
size += sizeof(Process);
- erts_link_tree_foreach(ERTS_P_LINKS(p),
- link_size, (void *) &size);
- erts_monitor_tree_foreach(ERTS_P_MONITORS(p),
- monitor_size, (void *) &size);
- erts_monitor_list_foreach(ERTS_P_LT_MONITORS(p),
- monitor_size, (void *) &size);
+ if ((erts_atomic32_read_nob(&p->state) & ERTS_PSFLG_EXITING) == 0) {
+ erts_link_tree_foreach(ERTS_P_LINKS(p),
+ link_size, (void *) &size);
+ erts_monitor_tree_foreach(ERTS_P_MONITORS(p),
+ monitor_size, (void *) &size);
+ erts_monitor_list_foreach(ERTS_P_LT_MONITORS(p),
+ monitor_size, (void *) &size);
+ }
size += (p->heap_sz + p->mbuf_sz) * sizeof(Eterm);
if (p->abandoned_heap)
size += (p->hend - p->heap) * sizeof(Eterm);