aboutsummaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog9
-rw-r--r--nptl/init.c10
2 files changed, 16 insertions, 3 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index ae652ff738..49edfc82a0 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,12 @@
+2009-01-03 Ulrich Drepper <drepper@redhat.com>
+
+ * init.c (__pthread_initialize_minimal_internal): Cheat a bit by
+ only passing five parameters to FUTEX_WAIT_BITSET call.
+
+ * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+ (__lll_timedlock_wait): Use FUTEX_WAIT_BITSET|FUTEX_CLOCK_READTIME
+ instead of computing relative timeout.
+
2009-01-02 Ulrich Drepper <drepper@redhat.com>
* init.c (__pthread_initialize_minimal_internal): Check for
diff --git a/nptl/init.c b/nptl/init.c
index af5bb24b59..05883af1f4 100644
--- a/nptl/init.c
+++ b/nptl/init.c
@@ -305,10 +305,14 @@ __pthread_initialize_minimal_internal (void)
#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
{
int word = 0;
- word = INTERNAL_SYSCALL (futex, err, 6, &word,
+ /* NB: the syscall actually takes six parameters. The last is the
+ bit mask. But since we will not actually wait at all the value
+ is irrelevant. Given that passing six parameters is difficult
+ on some architectures we just pass whatever random value the
+ calling convention calls for to the kernel. It causes no harm. */
+ word = INTERNAL_SYSCALL (futex, err, 5, &word,
FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME
- | FUTEX_PRIVATE_FLAG, 1, NULL, 0,
- FUTEX_BITSET_MATCH_ANY);
+ | FUTEX_PRIVATE_FLAG, 1, NULL, 0);
if (!INTERNAL_SYSCALL_ERROR_P (word, err)
|| (INTERNAL_SYSCALL_ERRNO (word, err) != ENOSYS
&& INTERNAL_SYSCALL_ERRNO (word, err) != EINVAL))