/* Test for regression of bug 6935, where dcethread_checkinterrupt() does not properly clear the interrupted state of the thread */ MU_TEST(dcethread_checkinterrupt, bug_6935) { int interrupted_once = 0; int interrupted_twice = 0; dcethread_interrupt(dcethread_self()); DCETHREAD_TRY { dcethread_checkinterrupt(); } DCETHREAD_CATCH(dcethread_interrupt_e) { interrupted_once = 1; } DCETHREAD_ENDTRY; DCETHREAD_TRY { dcethread_checkinterrupt(); } DCETHREAD_CATCH(dcethread_interrupt_e) { interrupted_twice = 1; } DCETHREAD_ENDTRY; MU_ASSERT(interrupted_once && !interrupted_twice); }
void wait_for_signals(void) { sigset_t signals; sigemptyset(&signals); sigaddset(&signals, SIGINT); dcethread_signal_to_interrupt(&signals, dcethread_self()); }
static void parent_handler(void *_data) { MU_TRACE("Fork parent handler active in thread %p", dcethread_self()); ((struct called_s*) _data)->parent = 1; }