diff options
author | Rickard Green <rickard@erlang.org> | 2023-01-10 19:24:52 +0100 |
---|---|---|
committer | Rickard Green <rickard@erlang.org> | 2023-01-10 19:24:52 +0100 |
commit | d1f2cd28414fd30dfcb528e9c019f41cc0633639 (patch) | |
tree | 5a1a84369958dd9acb6f71c914e678019e38a90a /erts/emulator/beam/erl_process.c | |
parent | d6eb1c53d688a242bfb5e3b4febcea66c49c0fe7 (diff) | |
parent | c3603bd7c0d5f2928c68157e843955c7bf25a9ef (diff) | |
download | erlang-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.c | 7 |
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; |