diff options
Diffstat (limited to 'test/nptl/tst-timer2.c')
| -rw-r--r-- | test/nptl/tst-timer2.c | 65 | 
1 files changed, 65 insertions, 0 deletions
| diff --git a/test/nptl/tst-timer2.c b/test/nptl/tst-timer2.c new file mode 100644 index 000000000..60026c1ef --- /dev/null +++ b/test/nptl/tst-timer2.c @@ -0,0 +1,65 @@ +/* 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" | 
