summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/erl_process_dump.c
diff options
context:
space:
mode:
authorRickard Green <rickard@erlang.org>2021-05-11 19:17:32 +0200
committerRickard Green <rickard@erlang.org>2022-07-13 19:09:44 +0200
commitac579bbec058b313af19de4a6d536c6ab446bfed (patch)
tree406f890da197933180a7c6f860686aa505e75b8d /erts/emulator/beam/erl_process_dump.c
parente053340291b303064023707aff03f297cf219552 (diff)
downloaderlang-ac579bbec058b313af19de4a6d536c6ab446bfed.tar.gz
[erts] Improve flushing of signals
Diffstat (limited to 'erts/emulator/beam/erl_process_dump.c')
-rw-r--r--erts/emulator/beam/erl_process_dump.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/erts/emulator/beam/erl_process_dump.c b/erts/emulator/beam/erl_process_dump.c
index f95c7ad1d7..9fa5969b5e 100644
--- a/erts/emulator/beam/erl_process_dump.c
+++ b/erts/emulator/beam/erl_process_dump.c
@@ -159,9 +159,12 @@ Uint erts_process_memory(Process *p, int include_sigs_in_transit)
* Size of message queue plus size of all signals
* in transit to the process!
*/
- erts_proc_sig_queue_lock(p);
- erts_proc_sig_fetch(p);
- erts_proc_unlock(p, ERTS_PROC_LOCK_MSGQ);
+ if (!(p->sig_qs.flags & FS_FLUSHING_SIGS)
+ || ERTS_IS_CRASH_DUMPING) {
+ erts_proc_sig_queue_lock(p);
+ erts_proc_sig_fetch(p);
+ erts_proc_unlock(p, ERTS_PROC_LOCK_MSGQ);
+ }
ERTS_FOREACH_SIG_PRIVQS(
p, mp,
@@ -228,7 +231,9 @@ dump_process_info(fmtfn_t to, void *to_arg, Process *p)
if (ERTS_TRACE_FLAGS(p) & F_SENSITIVE)
return;
- erts_proc_sig_fetch(p);
+ if (!(p->sig_qs.flags & FS_FLUSHING_SIGS) || ERTS_IS_CRASH_DUMPING) {
+ erts_proc_sig_fetch(p);
+ }
if (p->sig_qs.first || p->sig_qs.cont) {
erts_print(to, to_arg, "=proc_messages:%T\n", p->common.id);
@@ -1123,8 +1128,8 @@ erts_dump_extended_process_state(fmtfn_t to, void *to_arg, erts_aint32_t psflg)
erts_print(to, to_arg, "FREE"); break;
case ERTS_PSFLG_EXITING:
erts_print(to, to_arg, "EXITING"); break;
- case ERTS_PSFLG_UNUSED:
- erts_print(to, to_arg, "UNUSED"); break;
+ case ERTS_PSFLG_MAYBE_SELF_SIGS:
+ erts_print(to, to_arg, "MAYBE_SELF_SIGS"); break;
case ERTS_PSFLG_ACTIVE:
erts_print(to, to_arg, "ACTIVE"); break;
case ERTS_PSFLG_IN_RUNQ: