diff options
author | Lukas Larsson <[email protected]> | 2013-09-25 11:53:59 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2014-02-24 15:15:57 +0100 |
commit | e6c7086e6befb3eb9e8ad4fb7de62f1ee810508c (patch) | |
tree | 16c710da5e6c0684d07cb490de0dea7ad481acea /erts/include/internal | |
parent | eed38c1bb1a12015377d30e9ceff9525e050850e (diff) | |
download | otp-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.h | 13 |
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); } } |