summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/erl_proc_sig_queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/beam/erl_proc_sig_queue.c')
-rw-r--r--erts/emulator/beam/erl_proc_sig_queue.c6
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: