aboutsummaryrefslogtreecommitdiff
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
glibc-043ad426e7927a49a872e915c3cde88b682aea71.tar.gz
glibc-043ad426e7927a49a872e915c3cde88b682aea71.tar.bz2
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) \