1 /* 2 * Copyright (c) 2002, Intel Corporation. All rights reserved. 3 * Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com 4 * This file is licensed under the GPL license. For the full content 5 * of this license, see the COPYING file at the top level of this 6 * source tree. 7 * 8 * Test having two timers in different processes set to expire at the 9 * same time, and ensure they both expire at the same time. 10 */ 11 #include <stdio.h> 12 #include <time.h> 13 #include <signal.h> 14 #include <stdlib.h> 15 #include <sys/types.h> 16 #include <sys/wait.h> 17 #include <unistd.h> 18 #include "posixtest.h" 19 20 #define EXPIREDELTA 3 21 #define LONGTIME 5 22 23 #define CHILDPASS 1 24 25 int caughtabort = 0; 26 int caughtalarm = 0; 27 28 void handler_abrt(int signo) 29 { 30 printf("Caught abort signal\n"); 31 caughtabort++; 32 } 33 34 void handler_alrm(int signo) 35 { 36 printf("Caught alarm signal\n"); 37 caughtalarm++; 38 } 39 40 int main(int argc, char *argv[]) 41 { 42 struct sigaction act1, act2; 43 struct sigevent ev1, ev2; 44 timer_t tid1, tid2; 45 struct timespec ts; 46 struct itimerspec its; 47 int flags = 0; 48 49 act1.sa_handler = handler_abrt; 50 act1.sa_flags = 0; 51 act2.sa_handler = handler_alrm; 52 act2.sa_flags = 0; 53 54 if ((sigemptyset(&act1.sa_mask) != 0) || 55 (sigemptyset(&act2.sa_mask) != 0)) { 56 perror("sigemptyset() did not return success\n"); 57 return PTS_UNRESOLVED; 58 } 59 if ((sigaction(SIGABRT, &act1, 0) != 0) || 60 (sigaction(SIGALRM, &act2, 0) != 0)) { 61 perror("sigaction() did not return success\n"); 62 return PTS_UNRESOLVED; 63 } 64 65 ev1.sigev_notify = SIGEV_SIGNAL; 66 ev1.sigev_signo = SIGABRT; 67 ev2.sigev_notify = SIGEV_SIGNAL; 68 ev2.sigev_signo = SIGALRM; 69 if ((timer_create(CLOCK_REALTIME, &ev1, &tid1) != 0) || 70 (timer_create(CLOCK_REALTIME, &ev2, &tid2) != 0)) { 71 perror("timer_create() did not return success\n"); 72 return PTS_UNRESOLVED; 73 } 74 75 if (clock_gettime(CLOCK_REALTIME, &ts) != 0) { 76 perror("clock_gettime() did not return success\n"); 77 return PTS_UNRESOLVED; 78 } 79 80 its.it_value.tv_sec = ts.tv_sec + EXPIREDELTA; 81 its.it_value.tv_nsec = ts.tv_nsec; 82 its.it_interval.tv_sec = 0; 83 its.it_interval.tv_nsec = 0; 84 85 flags |= TIMER_ABSTIME; 86 if (timer_settime(tid1, flags, &its, NULL) != 0) { 87 perror("timer_settime() did not return success\n"); 88 return PTS_UNRESOLVED; 89 } 90 91 if (timer_settime(tid2, flags, &its, NULL) != 0) { 92 perror("timer_settime() did not return success\n"); 93 return PTS_UNRESOLVED; 94 } 95 96 sleep(EXPIREDELTA + 1); 97 98 if ((caughtalarm == 1) && (caughtabort == 1)) { 99 printf("Test PASSED\n"); 100 return PTS_PASS; 101 } else { 102 printf("Test FAILED\n"); 103 return PTS_FAIL; 104 } 105 106 printf("This code should not be executed.\n"); 107 return PTS_UNRESOLVED; 108 } 109