aboutsummaryrefslogtreecommitdiffstats
path: root/erts/lib_src/ose
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/lib_src/ose
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/lib_src/ose')
-rw-r--r--erts/lib_src/ose/ethr_event.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/erts/lib_src/ose/ethr_event.c b/erts/lib_src/ose/ethr_event.c
index 1cb3c223ab..5905fe22a9 100644
--- a/erts/lib_src/ose/ethr_event.c
+++ b/erts/lib_src/ose/ethr_event.c
@@ -127,6 +127,12 @@ wait__(ethr_event *e, int spincount)
#else
/* --- OSE implementation of events ---------------------------- */
+#ifdef DEBUG
+union SIGNAL {
+ SIGSELECT signo;
+};
+#endif
+
int
ethr_event_init(ethr_event *e)
{
@@ -180,8 +186,26 @@ wait__(ethr_event *e, int spincount)
ETHR_ASSERT(val == ETHR_EVENT_OFF__);
}
-
+#if defined(DEBUG)
+ while (1) {
+ /* In debug we also receive any signals to make sure that we do
+ not get any! redir tables should send all to scheduler_1 */
+ SIGSELECT sigsel[] = {0};
+ union SIGNAL *sig = receive_fsem(OSE_NO_TIMEOUT,sigsel,1);
+ //ETHR_ASSERT(sig == OS_RCV_FSEM);
+ if (sig != OS_RCV_FSEM) {
+ int i;
+ printf("0x%x: Got signal in wait: %u ",current_process(),sig->signo);
+ for (i = 0; i < (sigsize(&sig) / sizeof(SIGSELECT)) && i < 5; i++) {
+ printf("%x ",sig[i+1]);
+ }
+ printf("\n");
+ } else
+ break;
+ }
+#else
wait_fsem(1);
+#endif
ETHR_ASSERT(get_fsem(current_process()) == 0);
}
}