tests: use nanosleep instead of usleep
authorMarek Chalupa <mchqwerty@gmail.com>
Tue, 9 Sep 2014 09:11:52 +0000 (11:11 +0200)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Tue, 9 Sep 2014 09:43:38 +0000 (12:43 +0300)
man usleep says that bahaviour of using usleep with SIGALRM signal
is unspecified. So create our own usleep that calls nanosleep instead.

Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
tests/display-test.c

index 1289866..451cabd 100644 (file)
@@ -333,6 +333,21 @@ register_reading(struct wl_display *display)
        assert(wl_display_flush(display) >= 0);
 }
 
+#define USEC_TO_NSEC(n) (1000 * (n))
+
+/* since we are using alarm() and SIGABRT, we can not
+ * use usleep function (see 'man usleep') */
+static void
+test_usleep(useconds_t usec)
+{
+       struct timespec ts = {
+               .tv_sec = 0,
+               .tv_nsec = USEC_TO_NSEC(usec)
+       };
+
+       assert(nanosleep(&ts, NULL) == 0);
+}
+
 /* create thread that will call prepare+read so that
  * it will block */
 static pthread_t
@@ -349,8 +364,8 @@ create_thread(struct client *c, void *(*func)(void*))
         * so call usleep once again after the loop ends - it should
         * be sufficient... */
        while (c->display_stopped == 0)
-               usleep(500);
-       usleep(10000);
+               test_usleep(500);
+       test_usleep(10000);
 
        return thread;
 }
@@ -517,8 +532,8 @@ threading_read_after_error(void)
 
        /* make sure thread is sleeping */
        while (c->display_stopped == 0)
-               usleep(500);
-       usleep(10000);
+               test_usleep(500);
+       test_usleep(10000);
 
        assert(wl_display_read_events(c->wl_display) == -1);