aboutsummaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
authorLuis Machado <luisgpm@br.ibm.com>2010-03-24 14:46:03 -0700
committerRyan Arnold <ryanarn@etna.rchland.ibm.com>2010-05-11 21:32:26 -0500
commitc29c935857812826b11ce486ed7ee669f39c1c7d (patch)
tree83ddcfecb1e93d5af667fc60ecdfd535482af05b /nptl
parent8f0c277566d806f62ac02015660e3044b70bfc0f (diff)
downloadglibc-c29c935857812826b11ce486ed7ee669f39c1c7d.zip
glibc-c29c935857812826b11ce486ed7ee669f39c1c7d.tar.gz
glibc-c29c935857812826b11ce486ed7ee669f39c1c7d.tar.bz2
Enable common version of pthread_cond_timedwait to use clock_gettime in VDSO
(cherry pick of commit 7749bf5fe6ac0464db10a3a17a31121517f92530)
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog7
-rw-r--r--nptl/pthread_cond_timedwait.c12
2 files changed, 17 insertions, 2 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 08a55ee..dde74f4 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,10 @@
+2010-03-23 Luis Machado <luisgpm@br.ibm.com>
+
+ * pthread_cond_timedwait.c: Add check for
+ HAVE_CLOCK_GETTIME_VSYSCALL to use VDSO whenever possible.
+ (pthread_cond_timedwait): Use INTERNAL_VSYSCALL instead of
+ INTERNAL_SYSCALL.
+
2009-11-27 Andreas Schwab <schwab@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/cancellation.S: Reload
diff --git a/nptl/pthread_cond_timedwait.c b/nptl/pthread_cond_timedwait.c
index 9d268e9..7278ec4 100644
--- a/nptl/pthread_cond_timedwait.c
+++ b/nptl/pthread_cond_timedwait.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2007, 2010 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
@@ -27,6 +27,14 @@
#include <shlib-compat.h>
+#ifndef HAVE_CLOCK_GETTIME_VSYSCALL
+# undef INTERNAL_VSYSCALL
+# define INTERNAL_VSYSCALL INTERNAL_SYSCALL
+# undef INLINE_VSYSCALL
+# define INLINE_VSYSCALL INLINE_SYSCALL
+#else
+# include <bits/libc-vdso.h>
+#endif
/* Cleanup handler, defined in pthread_cond_wait.c. */
extern void __condvar_cleanup (void *arg)
@@ -102,7 +110,7 @@ __pthread_cond_timedwait (cond, mutex, abstime)
#ifdef __NR_clock_gettime
INTERNAL_SYSCALL_DECL (err);
int ret;
- ret = INTERNAL_SYSCALL (clock_gettime, err, 2,
+ ret = INTERNAL_VSYSCALL (clock_gettime, err, 2,
(cond->__data.__nwaiters
& ((1 << COND_NWAITERS_SHIFT) - 1)),
&rt);