about summary refs log tree commit diff
path: root/nptl
diff options
context:
space:
mode:
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog5
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S3
-rw-r--r--nptl/tst-cancel4.c8
3 files changed, 12 insertions, 4 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 21157bca0d..65cf4efb59 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,8 @@
+2003-06-27  Ulrich Drepper  <drepper@redhat.com>
+
+	* tst-cancel4.c (tf_msgrcv): Strengthen test against valid
+	premature returns a bit more.
+
 2003-06-26  Ulrich Drepper  <drepper@redhat.com>
 
 	* sysdeps/pthread/librt-cancellation.c: Move __pthread_unwind
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
index 2eba326fa3..f09be4403d 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
@@ -334,8 +334,9 @@ versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait,
 
 	.type	__condvar_tw_cleanup3, @function
 __condvar_tw_cleanup3:
-	leal	wakeup_seq(%edx), %ebx # XXX Is this correct?  %edx preserved?
+	movl	40(%esp), %ebx
 .LSbl5:
+	jmp	__condvar_tw_cleanup
 	.size	__condvar_tw_cleanup3, .-__condvar_tw_cleanup3
 	.type	__condvar_tw_cleanup2, @function
 __condvar_tw_cleanup2:
diff --git a/nptl/tst-cancel4.c b/nptl/tst-cancel4.c
index 8b0b735ada..a8142d9768 100644
--- a/nptl/tst-cancel4.c
+++ b/nptl/tst-cancel4.c
@@ -1891,6 +1891,8 @@ tf_msgrcv (void *arg)
 	}
     }
 
+  ssize_t s;
+
   pthread_cleanup_push (cl, NULL);
 
   struct
@@ -1906,13 +1908,13 @@ tf_msgrcv (void *arg)
   do
     {
       errno = 0;
-      msgrcv (tempmsg, (struct msgbuf *) &m, 10, randnr, 0);
+      s = msgrcv (tempmsg, (struct msgbuf *) &m, 10, randnr, 0);
     }
-  while (errno == EIDRM);
+  while (errno == EIDRM || errno == EINTR);
 
   pthread_cleanup_pop (0);
 
-  printf ("%s: msgrcv returned\n", __FUNCTION__);
+  printf ("%s: msgrcv returned %zd with errno = %m\n", __FUNCTION__, s);
 
   exit (1);
 }