aboutsummaryrefslogtreecommitdiffstats
path: root/erts/include/internal
diff options
context:
space:
mode:
authorLukas Larsson <[email protected]>2013-09-25 11:53:59 +0200
committerLukas Larsson <[email protected]>2014-02-24 15:15:57 +0100
commite6c7086e6befb3eb9e8ad4fb7de62f1ee810508c (patch)
tree16c710da5e6c0684d07cb490de0dea7ad481acea /erts/include/internal
parenteed38c1bb1a12015377d30e9ceff9525e050850e (diff)
downloadotp-e6c7086e6befb3eb9e8ad4fb7de62f1ee810508c.tar.gz
otp-e6c7086e6befb3eb9e8ad4fb7de62f1ee810508c.tar.bz2
otp-e6c7086e6befb3eb9e8ad4fb7de62f1ee810508c.zip
ose: Debug wait__ does receive_fsem instead of wait_fsem
This is done in order to catch rogue signals
Diffstat (limited to 'erts/include/internal')
-rw-r--r--erts/include/internal/ose/ethr_event.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/erts/include/internal/ose/ethr_event.h b/erts/include/internal/ose/ethr_event.h
index 86811a87db..000a600813 100644
--- a/erts/include/internal/ose/ethr_event.h
+++ b/erts/include/internal/ose/ethr_event.h
@@ -78,8 +78,17 @@ ETHR_INLINE_FUNC_NAME_(ethr_event_set)(ethr_event *e)
{
ethr_sint32_t val = ethr_atomic32_xchg_mb(&e->state, ETHR_EVENT_ON__);
if (val == ETHR_EVENT_OFF_WAITER__) {
- ETHR_ASSERT(get_fsem(e->proc) == -1);
- signal_fsem(e->proc);
+#ifdef DEBUG
+ OSFSEMVAL fsem_val = get_fsem(e->proc);
+
+ /* There is a race in this assert.
+ This is because the state is set before the wait call in wait__.
+ We hope that a delay of 10 ms is enough */
+ if (fsem_val == 0)
+ delay(10);
+ ETHR_ASSERT(get_fsem(e->proc) == -1);
+#endif
+ signal_fsem(e->proc);
}
}