summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/erl_process.c
diff options
context:
space:
mode:
authorRickard Green <rickard@erlang.org>2023-01-10 19:24:52 +0100
committerRickard Green <rickard@erlang.org>2023-01-10 19:24:52 +0100
commitd1f2cd28414fd30dfcb528e9c019f41cc0633639 (patch)
tree5a1a84369958dd9acb6f71c914e678019e38a90a /erts/emulator/beam/erl_process.c
parentd6eb1c53d688a242bfb5e3b4febcea66c49c0fe7 (diff)
parentc3603bd7c0d5f2928c68157e843955c7bf25a9ef (diff)
downloaderlang-d1f2cd28414fd30dfcb528e9c019f41cc0633639.tar.gz
Merge branch 'rickard/signal-handling-fix/24.3.4/OTP-18388' into rickard/signal-handling-fix/25.2/OTP-18388
* rickard/signal-handling-fix/24.3.4/OTP-18388: [erts] Prevent execution of a process while dirty signal handling is done
Diffstat (limited to 'erts/emulator/beam/erl_process.c')
-rw-r--r--erts/emulator/beam/erl_process.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index 3e56d6c62b..94c5745797 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -10083,6 +10083,13 @@ Process *erts_schedule(ErtsSchedulerData *esdp, Process *p, int calls)
}
else {
/* On normal scheduler */
+
+ /*
+ * Check if a dirty signal handler is handling signals for
+ * us and if so, wait for it to complete before continuing...
+ */
+ state = erts_proc_sig_check_wait_dirty_handle_signals(p, state);
+
if (state & ERTS_PSFLG_RUNNING_SYS) {
if (state & (ERTS_PSFLG_SIG_Q|ERTS_PSFLG_SIG_IN_Q)) {
int sig_reds;