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/powerpc/pthread_once.c1
2 files changed, 6 insertions, 0 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index c2e50552d8..43ce661be4 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,8 @@
+2003-07-21  Steven Munroe  <sjmunroe@us.ibm.com>
+
+	* sysdeps/unix/sysv/linux/powerpc/pthread_once.c (__pthread_once):
+	Retry if the stwcx fails to store once_control.
+
 2003-07-20  Ulrich Drepper  <drepper@redhat.com>
 
 	* Makefile (libpthread-routines): Add pthread_attr_getaffinity and
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c
index 88acb26e03..ea46cc9023 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c
@@ -55,6 +55,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
 			"	andi.	%1,%0,2\n"
 			"	bne	2f\n"
 			"	stwcx.	%4,0,%3\n"
+			"	bne	1b\n"
 			"2:	isync"
 			: "=&r" (oldval), "=&r" (tmp), "=m" (*once_control)
 			: "r" (once_control), "r" (newval), "m" (*once_control)