diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-09-15 12:51:47 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2006-09-15 12:51:47 +0000 |
commit | 5d456f7eba1c5083679973d53ef78b45b22818ca (patch) | |
tree | f4be894988fc80cdc48f3ff1a8d4a86d27decb9a /nptl/tst-cond22.c | |
parent | effe3e2d1a084fde8fae9b91febb28c97781f9e5 (diff) |
Updated to fedora-glibc-20060915T0943
Diffstat (limited to 'nptl/tst-cond22.c')
-rw-r--r-- | nptl/tst-cond22.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/nptl/tst-cond22.c b/nptl/tst-cond22.c index 1094c09068..aff38fcc8d 100644 --- a/nptl/tst-cond22.c +++ b/nptl/tst-cond22.c @@ -30,11 +30,17 @@ tf (void *arg) exit (1); } pthread_cleanup_push (cl, NULL); - if (pthread_cond_wait (&c, &m) != 0) - { - printf ("%s: cond_wait failed\n", __func__); - exit (1); - } + /* We have to loop here because the cancellation might come after + the cond_wait call left the cancelable area and is then waiting + on the mutex. In this case the beginning of the second cond_wait + call will cause the cancellation to happen. */ + do + if (pthread_cond_wait (&c, &m) != 0) + { + printf ("%s: cond_wait failed\n", __func__); + exit (1); + } + while (arg == NULL); pthread_cleanup_pop (0); if (pthread_mutex_unlock (&m) != 0) { @@ -105,7 +111,7 @@ do_test (void) c.__data.__wakeup_seq, c.__data.__woken_seq, c.__data.__mutex, c.__data.__nwaiters, c.__data.__broadcast_seq); - if (pthread_create (&th, NULL, tf, NULL) != 0) + if (pthread_create (&th, NULL, tf, (void *) 1l) != 0) { puts ("2nd create failed"); return 1; |