aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_process.h
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2011-03-07 17:04:02 +0100
committerRickard Green <[email protected]>2011-03-08 09:47:52 +0100
commita37ee29884eaaf8b177cec19821159c938ddf6ff (patch)
tree192cdf554814a4ebf6d354443a9a607417fd2efd /erts/emulator/beam/erl_process.h
parent422c3eda25ce9cb67a815aac5b0254432b0d44f7 (diff)
downloadotp-a37ee29884eaaf8b177cec19821159c938ddf6ff.tar.gz
otp-a37ee29884eaaf8b177cec19821159c938ddf6ff.tar.bz2
otp-a37ee29884eaaf8b177cec19821159c938ddf6ff.zip
The emulator could get into a state where it didn't check for I/O.
Diffstat (limited to 'erts/emulator/beam/erl_process.h')
-rw-r--r--erts/emulator/beam/erl_process.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_process.h b/erts/emulator/beam/erl_process.h
index e871a9834a..8f78a7d76e 100644
--- a/erts/emulator/beam/erl_process.h
+++ b/erts/emulator/beam/erl_process.h
@@ -1592,7 +1592,9 @@ ERTS_GLB_INLINE void erts_sched_poke(ErtsSchedulerSleepInfo *ssi);
ERTS_GLB_INLINE void
erts_sched_poke(ErtsSchedulerSleepInfo *ssi)
{
- erts_aint32_t flags = erts_smp_atomic32_read(&ssi->flags);
+ erts_aint32_t flags;
+ ERTS_THR_MEMORY_BARRIER;
+ flags = erts_smp_atomic32_read(&ssi->flags);
ASSERT(!(flags & ERTS_SSI_FLG_SLEEPING)
|| (flags & ERTS_SSI_FLG_WAITING));
if (flags & ERTS_SSI_FLG_SLEEPING) {