diff options
author | Lukas Larsson <[email protected]> | 2019-03-21 10:31:44 +0100 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2019-03-21 10:31:44 +0100 |
commit | d19f68f99cdc723b942acf1e62178b820da5c12d (patch) | |
tree | debed99dd2cf7087d552067e7fcaef2e2512eddb /erts/emulator | |
parent | 5f324f5077c45b51c727356c0d32a3847cf510af (diff) | |
parent | 8368589a9b69b0c8f9d0e9a9c94f51f7afecafa8 (diff) | |
download | otp-d19f68f99cdc723b942acf1e62178b820da5c12d.tar.gz otp-d19f68f99cdc723b942acf1e62178b820da5c12d.tar.bz2 otp-d19f68f99cdc723b942acf1e62178b820da5c12d.zip |
Merge branch 'max-au/erts/dirty_scheduler_shutdown/PR-2172/OTP-15690'
* max-au/erts/dirty_scheduler_shutdown/PR-2172/OTP-15690:
erts: release dirty runqueue lock before entering endless loop when BEAM is shutting down
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/beam/erl_process.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c index 0a099e69bb..3fa06d1407 100644 --- a/erts/emulator/beam/erl_process.c +++ b/erts/emulator/beam/erl_process.c @@ -9460,6 +9460,7 @@ Process *erts_schedule(ErtsSchedulerData *esdp, Process *p, int calls) if (!is_normal_sched & !!(flags & ERTS_RUNQ_FLG_HALTING)) { /* Wait for emulator to terminate... */ + erts_runq_unlock(rq); while (1) erts_milli_sleep(1000*1000); } @@ -13403,10 +13404,10 @@ void erts_halt(int code) if (-1 == erts_atomic32_cmpxchg_acqb(&erts_halt_progress, erts_no_schedulers, -1)) { + notify_reap_ports_relb(); ERTS_RUNQ_FLGS_SET(ERTS_DIRTY_CPU_RUNQ, ERTS_RUNQ_FLG_HALTING); ERTS_RUNQ_FLGS_SET(ERTS_DIRTY_IO_RUNQ, ERTS_RUNQ_FLG_HALTING); erts_halt_code = code; - notify_reap_ports_relb(); } } |