about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-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
-rw-r--r--rt/Makefile1
5 files changed, 17 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 9e1d50addf..8275df1f69 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2003-06-27  Ulrich Drepper  <drepper@redhat.com>
+
+	* rt/Makefile (CFLAGS-librt-cancellation.c): Define.
+
 2003-06-26  Roland McGrath  <roland@frob.com>
 
 	* sysdeps/mach/configure.in: Barf rather than define NO_CREATION_TIME.
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);
 }
diff --git a/rt/Makefile b/rt/Makefile
index b99949240a..9f49a02e0c 100644
--- a/rt/Makefile
+++ b/rt/Makefile
@@ -51,6 +51,7 @@ include ../Rules
 
 CFLAGS-aio_suspend.c = -fexceptions
 CFLAGS-clock_nanosleep.c = -fexceptions -fasynchronous-unwind-tables
+CFLAGS-librt-cancellation.c = -fasynchronous-unwind-tables
 
 # Depend on libc.so so a DT_NEEDED is generated in the shared objects.
 # This ensures they will load libc.so for needed symbols if loaded by