| /* Test for crashing bugs when trying to create too many timers. */ |
| |
| #include <stdio.h> |
| #include <time.h> |
| #include <signal.h> |
| #include <sys/time.h> |
| #include <sys/resource.h> |
| #include <unistd.h> |
| |
| #if _POSIX_THREADS |
| # include <pthread.h> |
| |
| void |
| thread (union sigval arg) |
| { |
| puts ("Timeout"); |
| } |
| |
| int |
| do_test (void) |
| { |
| int i, res; |
| timer_t timerId; |
| struct itimerspec itval; |
| struct sigevent sigev; |
| |
| itval.it_interval.tv_sec = 2; |
| itval.it_interval.tv_nsec = 0; |
| itval.it_value.tv_sec = 2; |
| itval.it_value.tv_nsec = 0; |
| |
| sigev.sigev_notify = SIGEV_THREAD; |
| sigev.sigev_signo = SIGRTMIN; |
| sigev.sigev_notify_function = thread; |
| sigev.sigev_notify_attributes = 0; |
| sigev.sigev_value.sival_ptr = (void *) &timerId; |
| |
| for (i = 0; i < 100; i++) |
| { |
| printf ("cnt = %d\n", i); |
| |
| if (timer_create (CLOCK_REALTIME, &sigev, &timerId) < 0) |
| { |
| perror ("timer_create"); |
| continue; |
| } |
| |
| res = timer_settime (timerId, 0, &itval, NULL); |
| if (res < 0) |
| perror ("timer_settime"); |
| |
| res = timer_delete (timerId); |
| if (res < 0) |
| perror ("timer_delete"); |
| } |
| |
| return 0; |
| } |
| |
| # define TEST_FUNCTION do_test () |
| #else |
| # define TEST_FUNCTION 0 |
| #endif |
| |
| #include "../test-skeleton.c" |