aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/beam_emu.c
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2016-08-11 16:24:00 +0200
committerErlang/OTP <[email protected]>2016-08-11 16:24:00 +0200
commit44b2c3e91509f210c2ad18eb296e34b61e0f52cb (patch)
treea3357c77e4666919ab6b58489f7d2af921f5448f /erts/emulator/beam/beam_emu.c
parente7966ef5cb0c2337a674d8cdca7c89802fa01bf6 (diff)
parent17c838402c6d71aef041548ad36ee66db6f24a56 (diff)
downloadotp-44b2c3e91509f210c2ad18eb296e34b61e0f52cb.tar.gz
otp-44b2c3e91509f210c2ad18eb296e34b61e0f52cb.tar.bz2
otp-44b2c3e91509f210c2ad18eb296e34b61e0f52cb.zip
Merge branch 'rickard/proc-tmo-bug/OTP-13798' into maint-18
* rickard/proc-tmo-bug/OTP-13798: Fix race causing lost wakeup on receive-after timeout
Diffstat (limited to 'erts/emulator/beam/beam_emu.c')
-rw-r--r--erts/emulator/beam/beam_emu.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c
index 1fe4cc9374..3a15287555 100644
--- a/erts/emulator/beam/beam_emu.c
+++ b/erts/emulator/beam/beam_emu.c
@@ -2182,7 +2182,10 @@ void process_main(void)
c_p->i = (BeamInstr *) Arg(0); /* L1 */
SWAPOUT;
c_p->arity = 0;
- erts_smp_atomic32_read_band_relb(&c_p->state, ~ERTS_PSFLG_ACTIVE);
+
+ if (!ERTS_PTMR_IS_TIMED_OUT(c_p))
+ erts_smp_atomic32_read_band_relb(&c_p->state,
+ ~ERTS_PSFLG_ACTIVE);
ASSERT(!ERTS_PROC_IS_EXITING(c_p));
erts_smp_proc_unlock(c_p, ERTS_PROC_LOCKS_MSG_RECEIVE);
c_p->current = NULL;