aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_proc_sig_queue.h
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2018-05-15 20:58:28 +0200
committerSverker Eriksson <[email protected]>2018-05-15 21:11:05 +0200
commit827b96ae2d657905ada2ec49de1f0b863cf83401 (patch)
tree742f8d89dd7981db03fed2471df63993c6ff8805 /erts/emulator/beam/erl_proc_sig_queue.h
parenta5a8672522b585e093cf2017827004171c72b295 (diff)
downloadotp-827b96ae2d657905ada2ec49de1f0b863cf83401.tar.gz
otp-827b96ae2d657905ada2ec49de1f0b863cf83401.tar.bz2
otp-827b96ae2d657905ada2ec49de1f0b863cf83401.zip
erts: Fix bug when scheduling monitor-msg combo
Bug introduced in master by 613cde66c25464121f2f6dace99782bad0e07d9b
Diffstat (limited to 'erts/emulator/beam/erl_proc_sig_queue.h')
-rw-r--r--erts/emulator/beam/erl_proc_sig_queue.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_proc_sig_queue.h b/erts/emulator/beam/erl_proc_sig_queue.h
index 3ea6418283..8edd277309 100644
--- a/erts/emulator/beam/erl_proc_sig_queue.h
+++ b/erts/emulator/beam/erl_proc_sig_queue.h
@@ -744,6 +744,10 @@ erts_enqueue_signals(Process *rp, ErtsMessage *first,
void
erts_proc_sig_send_pending(ErtsSchedulerData* esdp);
+/* SVERK Doc me up! */
+ERTS_GLB_INLINE void erts_proc_notify_new_sig(Process* rp, erts_aint32_t state,
+ erts_aint32_t enable_flag);
+
void erts_make_dirty_proc_handled(Eterm pid, erts_aint32_t state,
erts_aint32_t prio);
@@ -882,6 +886,24 @@ erts_proc_sig_fetch(Process *proc)
return res;
}
+ERTS_GLB_INLINE void
+erts_proc_notify_new_sig(Process* rp, erts_aint32_t state,
+ erts_aint32_t enable_flag)
+{
+ if (~(state & (ERTS_PSFLG_EXITING
+ | ERTS_PSFLG_ACTIVE_SYS
+ | ERTS_PSFLG_SIG_IN_Q))
+ | (~state & enable_flag)) {
+ /* Schedule process... */
+ state = erts_proc_sys_schedule(rp, state, enable_flag);
+ }
+
+ if (state & (ERTS_PSFLG_DIRTY_RUNNING
+ | ERTS_PSFLG_DIRTY_RUNNING_SYS)) {
+ erts_make_dirty_proc_handled(rp->common.id, state, -1);
+ }
+}
+
#endif /* ERTS_GLB_INLINE_INCL_FUNC_DEF */
#endif /* ERTS_PROC_SIG_QUEUE_H__ */