diff options
Diffstat (limited to 'erts/emulator/beam/erl_proc_sig_queue.c')
-rw-r--r-- | erts/emulator/beam/erl_proc_sig_queue.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_proc_sig_queue.c b/erts/emulator/beam/erl_proc_sig_queue.c index 5a062a0302..5c83d05f3d 100644 --- a/erts/emulator/beam/erl_proc_sig_queue.c +++ b/erts/emulator/beam/erl_proc_sig_queue.c @@ -3444,9 +3444,11 @@ erts_proc_sig_handle_incoming(Process *c_p, erts_aint32_t *statep, ErtsMonitorSuspend *msp; erts_aint_t mstate; msp = (ErtsMonitorSuspend *) erts_monitor_to_data(tmon); - mstate = erts_atomic_read_acqb(&msp->state); - if (mstate & ERTS_MSUSPEND_STATE_FLG_ACTIVE) + mstate = erts_atomic_read_band_acqb( + &msp->state, ~ERTS_MSUSPEND_STATE_FLG_ACTIVE); + if (mstate & ERTS_MSUSPEND_STATE_FLG_ACTIVE) { erts_resume(c_p, ERTS_PROC_LOCK_MAIN); + } break; } default: |