| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | /* Test for bogus per-thread deletion of timers.  */#include <stdio.h>#include <error.h>#include <time.h>#include <signal.h>#include <stdint.h>#include <string.h>#include <sys/time.h>#include <sys/resource.h>#include <unistd.h>#if _POSIX_THREADS# include <pthread.h>/* Creating timers in another thread should work too.  */static void *do_timer_create (void *arg){  struct sigevent *const sigev = arg;  timer_t *const timerId = sigev->sigev_value.sival_ptr;  if (timer_create (CLOCK_REALTIME, sigev, timerId) < 0)    {      printf ("timer_create: %m\n");      return NULL;    }  return timerId;}static intdo_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_SIGNAL;  sigev.sigev_signo = SIGALRM;  sigev.sigev_value.sival_ptr = (void *) &timerId;  for (i = 0; i < 100; i++)    {      printf ("cnt = %d\n", i);      pthread_t thr;      res = pthread_create (&thr, NULL, &do_timer_create, &sigev);      if (res)	{	  printf ("pthread_create: %s\n", strerror (res));	  continue;	}      void *val;      res = pthread_join (thr, &val);      if (res)	{	  printf ("pthread_join: %s\n", strerror (res));	  continue;	}      if (val == NULL)	continue;      res = timer_settime (timerId, 0, &itval, NULL);      if (res < 0)	printf ("timer_settime: %m\n");      res = timer_delete (timerId);      if (res < 0)	printf ("timer_delete: %m\n");    }  return 0;}# define TEST_FUNCTION do_test ()#else# define TEST_FUNCTION 0#endif#include "../test-skeleton.c"
 |