diff options
author | Florian Weimer <fweimer@redhat.com> | 2018-07-25 16:31:45 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2018-07-25 16:31:45 +0200 |
commit | d6b8f8470990db2d36b8e50f1055a673fdf1cea0 (patch) | |
tree | 1ba242d4123707db42c35a352ff4e95671e81d64 /nptl/tst-cnd-timedwait.c | |
parent | 25123a1c5c96429d70e75b85a9749b405909d7f2 (diff) | |
download | glibc-d6b8f8470990db2d36b8e50f1055a673fdf1cea0.tar.gz glibc-d6b8f8470990db2d36b8e50f1055a673fdf1cea0.tar.xz glibc-d6b8f8470990db2d36b8e50f1055a673fdf1cea0.zip |
C11 threads: Fix timeout and locking issues
Diffstat (limited to 'nptl/tst-cnd-timedwait.c')
-rw-r--r-- | nptl/tst-cnd-timedwait.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/nptl/tst-cnd-timedwait.c b/nptl/tst-cnd-timedwait.c index 45a1512940..7d8a8e3557 100644 --- a/nptl/tst-cnd-timedwait.c +++ b/nptl/tst-cnd-timedwait.c @@ -31,8 +31,14 @@ static mtx_t mutex; static int signal_parent (void *arg) { + /* Acquire the lock so that cnd_signal does not run until + cnd_timedwait has been called. */ + if (mtx_lock (&mutex) != thrd_success) + FAIL_EXIT1 ("mtx_lock failed"); if (cnd_signal (&cond) != thrd_success) FAIL_EXIT1 ("cnd_signal failed"); + if (mtx_unlock (&mutex) != thrd_success) + FAIL_EXIT1 ("mtx_unlock"); thrd_exit (thrd_success); } @@ -47,10 +53,15 @@ do_test (void) FAIL_EXIT1 ("cnd_init failed"); if (mtx_init (&mutex, mtx_plain) != thrd_success) FAIL_EXIT1 ("mtx_init failed"); + if (mtx_lock (&mutex) != thrd_success) + FAIL_EXIT1 ("mtx_lock failed"); if (clock_gettime (CLOCK_REALTIME, &w_time) != 0) FAIL_EXIT1 ("clock_gettime failed"); - w_time.tv_nsec += 150000; + + /* This needs to be sufficiently long to prevent the cnd_timedwait + call from timing out. */ + w_time.tv_sec += 3600; if (thrd_create (&id, signal_parent, NULL) != thrd_success) FAIL_EXIT1 ("thrd_create failed"); @@ -61,6 +72,9 @@ do_test (void) if (thrd_join (id, NULL) != thrd_success) FAIL_EXIT1 ("thrd_join failed"); + if (mtx_unlock (&mutex) != thrd_success) + FAIL_EXIT1 ("mtx_unlock"); + mtx_destroy (&mutex); cnd_destroy (&cond); |