aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorSteve Vinoski <[email protected]>2016-02-21 20:32:40 -0500
committerSteve Vinoski <[email protected]>2016-02-21 20:32:40 -0500
commit9f60b6ea108b625affe5aef745443c8422c8d64f (patch)
treebd393b07696a5eff428ef9005d3eaa7bfede55b9 /erts
parent33f8fe899ec052ab0a33566f7e9e92fadf3f0a68 (diff)
downloadotp-9f60b6ea108b625affe5aef745443c8422c8d64f.tar.gz
otp-9f60b6ea108b625affe5aef745443c8422c8d64f.tar.bz2
otp-9f60b6ea108b625affe5aef745443c8422c8d64f.zip
Skip run queue lock check for dirty schedulers
The wake_scheduler function asserts that the run queue is not locked, but this assertion sometimes fails for dirty schedulers (in January 2016 a user in erlang-questions reported a dirty schedulers problem related to this). After discussing it with Rickard, we decided modifying the assertion was the most practical way to address the problem.
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/beam/erl_process.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index b7499c5b5a..fd29c22810 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -3250,7 +3250,8 @@ wake_scheduler(ErtsRunQueue *rq)
* so all code *should* handle this without having
* the lock on the run queue.
*/
- ERTS_SMP_LC_ASSERT(!erts_smp_lc_runq_is_locked(rq));
+ ERTS_SMP_LC_ASSERT(!erts_smp_lc_runq_is_locked(rq)
+ || ERTS_RUNQ_IX_IS_DIRTY(rq->ix));
ssi = rq->scheduler->ssi;