about summary refs log tree commit diff
path: root/nptl
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2003-03-19 03:34:48 +0000
committerRoland McGrath <roland@gnu.org>2003-03-19 03:34:48 +0000
commit043ad426e7927a49a872e915c3cde88b682aea71 (patch)
tree5bb6178c065a279b56573a3fca4b2d06b45c2f32 /nptl
parent8a477363f4c791c64c6a7e4c2c5f961863db601d (diff)
downloadglibc-043ad426e7927a49a872e915c3cde88b682aea71.tar.gz
glibc-043ad426e7927a49a872e915c3cde88b682aea71.tar.xz
glibc-043ad426e7927a49a872e915c3cde88b682aea71.zip
* Versions (libpthread: GLIBC_2.2): Remove
	pthread_barrierattr_getpshared, never really existed.
	(libpthread: GLIBC_2.0): Move __pthread_initialize to ...
	(libpthread: GLIBC_PRIVATE): ... here.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog13
-rw-r--r--nptl/sysdeps/pthread/pthread_cond_timedwait.c50
-rw-r--r--nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h12
3 files changed, 51 insertions, 24 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 0150cadb70..3c9693abd0 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,16 @@
+2003-03-18  Roland McGrath  <roland@redhat.com>
+
+	* Versions (libpthread: GLIBC_2.3.2): Move pthread_tryjoin_np and
+	pthread_timedjoin_np to ...
+	(libpthread: GLIBC_2.3.3): ... here.
+	(libpthread: GLIBC_2.2): Move pthread_barrierattr_getpshared there too.
+
+	* sysdeps/pthread/pthread_cond_timedwait.c (__pthread_cond_timedwait):
+	Avoid shadowing VAL variable.
+
+	* sysdeps/unix/sysv/linux/powerpc/lowlevellock.h (__lll_test_and_set):
+	New macro.
+
 2003-03-18  Ulrich Drepper  <drepper@redhat.com>
 
 	* Makefile (tests): Add tst-cond11.
diff --git a/nptl/sysdeps/pthread/pthread_cond_timedwait.c b/nptl/sysdeps/pthread/pthread_cond_timedwait.c
index e0200b4cd8..23cf0acb99 100644
--- a/nptl/sysdeps/pthread/pthread_cond_timedwait.c
+++ b/nptl/sysdeps/pthread/pthread_cond_timedwait.c
@@ -93,36 +93,38 @@ __pthread_cond_timedwait (cond, mutex, abstime)
   while (1)
     {
       struct timespec rt;
+      {
 #ifdef __NR_clock_gettime
-      INTERNAL_SYSCALL_DECL (err);
-      int val = INTERNAL_SYSCALL (clock_gettime, err, 2, cond->__data.__clock,
-				  &ts);
+	INTERNAL_SYSCALL_DECL (err);
+	int val = INTERNAL_SYSCALL (clock_gettime, err, 2,
+				    cond->__data.__clock, &rt);
 # ifndef __ASSUME_POSIX_TIMERS
-      if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (val, err), 0))
-	{
-	  struct timeval tv;
-	  (void) gettimeofday (&tv, NULL);
-
-	  /* Convert the absolute timeout value to a relative timeout.  */
-	  rt.tv_sec = abstime->tv_sec - tv.tv_sec;
-	  rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000;
-	}
-      else
+	if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (val, err), 0))
+	  {
+	    struct timeval tv;
+	    (void) gettimeofday (&tv, NULL);
+
+	    /* Convert the absolute timeout value to a relative timeout.  */
+	    rt.tv_sec = abstime->tv_sec - tv.tv_sec;
+	    rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000;
+	  }
+	else
 # endif
-	{
-	  /* Convert the absolute timeout value to a relative timeout.  */
-	  rt.tv_sec = abstime->tv_sec - rt.tv_sec;
-	  rt.tv_nsec = abstime->tv_nsec - rt.tv_nsec;
-	}
+	  {
+	    /* Convert the absolute timeout value to a relative timeout.  */
+	    rt.tv_sec = abstime->tv_sec - rt.tv_sec;
+	    rt.tv_nsec = abstime->tv_nsec - rt.tv_nsec;
+	  }
 #else
-      /* Get the current time.  So far we support only one clock.  */
-      struct timeval tv;
-      (void) gettimeofday (&tv, NULL);
+	/* Get the current time.  So far we support only one clock.  */
+	struct timeval tv;
+	(void) gettimeofday (&tv, NULL);
 
-      /* Convert the absolute timeout value to a relative timeout.  */
-      rt.tv_sec = abstime->tv_sec - tv.tv_sec;
-      rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000;
+	/* Convert the absolute timeout value to a relative timeout.  */
+	rt.tv_sec = abstime->tv_sec - tv.tv_sec;
+	rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000;
 #endif
+      }
       if (rt.tv_nsec < 0)
 	{
 	  rt.tv_nsec += 1000000000;
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
index bfd109f080..2b58d2e63a 100644
--- a/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+++ b/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
@@ -99,6 +99,18 @@
      __val;								      \
   })
 
+/* Atomically store newval and return the old value.  */
+#define __lll_test_and_set(futex, newval)				      \
+  ({ int __val;								      \
+      __asm __volatile ("1:	lwarx	%0,0,%3\n"			      \
+			"	stwcx.	%2,0,%3\n"			      \
+			"	bne-	1b"				      \
+			: "=&r" (__val), "=m" (*futex)			      \
+			: "r" (futex), "r" (newval), "1" (*futex)	      \
+			: "cr0");					      \
+      __val; })
+
+
 extern void __lll_lock_wait (int *futex, int val) attribute_hidden;
 
 #define lll_mutex_lock(lock) \