aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_proc_sig_queue.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2019-03-21 16:28:15 +0100
committerRickard Green <[email protected]>2019-03-21 16:28:15 +0100
commit2e599cf4c3176d50240a6b1f72e34213c4f8de5d (patch)
treeecc295ea2e89c81f6cd16d1147e90907a52af215 /erts/emulator/beam/erl_proc_sig_queue.c
parent99d91508edc97d66ad26dd7b6eaf1fc0888882a9 (diff)
parent984ccc38e160963bfd1a70f408365cba45245cad (diff)
downloadotp-2e599cf4c3176d50240a6b1f72e34213c4f8de5d.tar.gz
otp-2e599cf4c3176d50240a6b1f72e34213c4f8de5d.tar.bz2
otp-2e599cf4c3176d50240a6b1f72e34213c4f8de5d.zip
Merge branch 'maint'
* maint: Fix reception of resume signal on process executing dirty
Diffstat (limited to 'erts/emulator/beam/erl_proc_sig_queue.c')
-rw-r--r--erts/emulator/beam/erl_proc_sig_queue.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_proc_sig_queue.c b/erts/emulator/beam/erl_proc_sig_queue.c
index 9c74a2c355..bd59c4afa3 100644
--- a/erts/emulator/beam/erl_proc_sig_queue.c
+++ b/erts/emulator/beam/erl_proc_sig_queue.c
@@ -3429,9 +3429,15 @@ erts_proc_sig_handle_incoming(Process *c_p, erts_aint32_t *statep,
erts_nif_demonitored((ErtsResource *) tmon->other.ptr);
cnt++;
break;
- case ERTS_MON_TYPE_SUSPEND:
- erts_resume(c_p, ERTS_PROC_LOCK_MAIN);
+ case ERTS_MON_TYPE_SUSPEND: {
+ 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)
+ erts_resume(c_p, ERTS_PROC_LOCK_MAIN);
break;
+ }
default:
break;
}