#include <sys/time.h>
#include <pthread.h>
#include <signal.h>
#include <unistd.h>
#include "test.h"
int main (int argc, char *argv[])
{
sigset_t mask;
int sig;
int r;
if (argc > 2) {
printf("trigger sigalrm[1] [test should die]\n");
ualarm(100000, 0);
CHECKe(sleep(1));
}
CHECKe(sigemptyset(&mask));
CHECKe(sigaddset(&mask, SIGALRM));
CHECKr(pthread_sigmask(SIG_BLOCK, &mask, NULL));
r = pthread_sigmask(-1, &mask, NULL);
ASSERTe(r, == EINVAL);
printf("trigger sigalrm[2] [masked, test should not die]\n");
ualarm(100000, 0);
CHECKe(sleep(1));
CHECKr(sigwait(&mask, &sig));
ASSERT(sig == SIGALRM);
printf("trigger sigalrm[3] after sigwait [masked, test should not die]\n");
ualarm(100000, 0);
CHECKe(sleep(1));
if (argc > 1) {
printf("trigger sigalrm[4] [unmasked, test should die]\n");
CHECKr(pthread_sigmask(SIG_UNBLOCK, &mask, NULL));
ualarm(100000, 0);
CHECKe(sleep(1));
}
SUCCEED;
}