mirror of git://sourceware.org/git/glibc.git
				
				
				
			
		
			
				
	
	
		
			66 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
| /* 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"
 |