about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--linuxthreads/ChangeLog7
-rw-r--r--linuxthreads/Versions5
-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
5 files changed, 61 insertions, 26 deletions
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index 862c96ea17..ecd57bf81c 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,10 @@
+2003-03-18  Roland McGrath  <roland@redhat.com>
+
+	* Versions (libpthread: GLIBC_2.2): Remove
+	pthread_barrierattr_getpshared, never really existed.
+	(libpthread: GLIBC_2.0): Move __pthread_initialize to ...
+	(libpthread: GLIBC_PRIVATE): ... here.
+
 2003-03-14  Jakub Jelinek  <jakub@redhat.com>
 
 	* sysdeps/unix/sysv/linux/sparc/sparc64/Makefile: New file.
diff --git a/linuxthreads/Versions b/linuxthreads/Versions
index 0facfbc4c7..88668e6483 100644
--- a/linuxthreads/Versions
+++ b/linuxthreads/Versions
@@ -80,7 +80,7 @@ libpthread {
     sigwait;
 
     # Protected names for functions used in other shared objects.
-    __pthread_atfork; __pthread_initialize; __pthread_getspecific;
+    __pthread_atfork; __pthread_getspecific;
     __pthread_key_create; __pthread_mutex_destroy; __pthread_mutex_init;
     __pthread_mutex_lock; __pthread_mutex_trylock; __pthread_mutex_unlock;
     __pthread_mutexattr_destroy; __pthread_mutexattr_init;
@@ -147,7 +147,7 @@ libpthread {
     pthread_getcpuclockid;
     pthread_barrier_destroy; pthread_barrier_init; pthread_barrier_wait;
     pthread_barrierattr_destroy; pthread_barrierattr_init;
-    pthread_barrierattr_getpshared; pthread_barrierattr_setpshared;
+    pthread_barrierattr_setpshared;
     pthread_mutex_timedlock;
     pthread_rwlock_timedrdlock; pthread_rwlock_timedwrlock;
 
@@ -170,6 +170,7 @@ libpthread {
   }
   GLIBC_PRIVATE {
     # Internal libc interface to libpthread
+    __pthread_initialize;
     __pthread_kill_other_threads_np;
   }
 }
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) \