* init.c (__pthread_initialize_minimal_internal): Cheat a bit by
authorUlrich Drepper <drepper@redhat.com>
Sat, 3 Jan 2009 23:18:34 +0000 (23:18 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 3 Jan 2009 23:18:34 +0000 (23:18 +0000)
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.

nptl/ChangeLog
nptl/init.c

index ae652ff..49edfc8 100644 (file)
@@ -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
index af5bb24..05883af 100644 (file)
@@ -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))