about summary refs log tree commit diff
path: root/rt/tst-timer2.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2003-07-29 09:32:03 +0000
committerRoland McGrath <roland@gnu.org>2003-07-29 09:32:03 +0000
commita7f6c66ec36b297bead2e4d12de1802f757905ed (patch)
treeb433ddb76557f0d5ef7d021bcfa6c78c4ef0101a /rt/tst-timer2.c
parent172ce013bdd864ba22b6b22611ffd893f1f9f2a6 (diff)
downloadglibc-a7f6c66ec36b297bead2e4d12de1802f757905ed.tar.gz
glibc-a7f6c66ec36b297bead2e4d12de1802f757905ed.tar.xz
glibc-a7f6c66ec36b297bead2e4d12de1802f757905ed.zip
* rt/tst-timer2.c: New file.
	* rt/Makefile (tests): Add it.
Diffstat (limited to 'rt/tst-timer2.c')
-rw-r--r--rt/tst-timer2.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/rt/tst-timer2.c b/rt/tst-timer2.c
new file mode 100644
index 0000000000..74ccc492b0
--- /dev/null
+++ b/rt/tst-timer2.c
@@ -0,0 +1,62 @@
+/* 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");
+
+      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"