/* 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());
}
Beispiel #3
0
static void
parent_handler(void *_data)
{
    MU_TRACE("Fork parent handler active in thread %p", dcethread_self());
    ((struct called_s*) _data)->parent = 1;
}