From ff48874d6a0d557eee3326b3a53e1503eb48f96d Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 11 Dec 2003 09:39:06 +0000 Subject: Update. 2003-12-11 Ulrich Drepper * sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_futex_wait): Assume parameter is a pointer. (lll_futex_wake): Likewise. Reported by Boris Hu. * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): Pass pointer to refcntr to lll_futex_wait. * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Simplify a bit. --- nptl/ChangeLog | 11 +++++++++++ nptl/perf.c | 8 +++++++- nptl/sysdeps/unix/sysv/linux/sem_wait.c | 9 ++------- nptl/sysdeps/unix/sysv/linux/unregister-atfork.c | 2 +- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 441f0baa91..90e321a86c 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,14 @@ +2003-12-11 Ulrich Drepper + + * sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_futex_wait): + Assume parameter is a pointer. + (lll_futex_wake): Likewise. + Reported by Boris Hu. + * sysdeps/unix/sysv/linux/unregister-atfork.c + (__unregister_atfork): Pass pointer to refcntr to lll_futex_wait. + + * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Simplify a bit. + 2003-12-10 Ulrich Drepper * sysdeps/pthread/bits/libc-lock.h (__rtld_lock_initialize): Define. diff --git a/nptl/perf.c b/nptl/perf.c index 515f493069..5b920d719d 100644 --- a/nptl/perf.c +++ b/nptl/perf.c @@ -304,7 +304,7 @@ start_threads (void *arg) } err = pthread_create (&ths[i], &attr, work, - (void *) (rand_r (&state) + starts + i)); + (void *) (long) (rand_r (&state) + starts + i)); if (err != 0) error (EXIT_FAILURE, err, "cannot start thread"); @@ -703,7 +703,13 @@ clock_getcpuclockid (pid_t pid, clockid_t *clock_id) } +#ifdef i386 #define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rdtsc" : "=A" (Var)) +#elif defined __ia64__ +#define HP_TIMING_NOW(Var) __asm__ __volatile__ ("mov %0=ar.itc" : "=r" (Var) : : "memory") +#else +#error "HP_TIMING_NOW missing" +#endif /* Get current value of CLOCK and store it in TP. */ int diff --git a/nptl/sysdeps/unix/sysv/linux/sem_wait.c b/nptl/sysdeps/unix/sysv/linux/sem_wait.c index 36bb158e09..e6733e88a3 100644 --- a/nptl/sysdeps/unix/sysv/linux/sem_wait.c +++ b/nptl/sysdeps/unix/sysv/linux/sem_wait.c @@ -35,17 +35,12 @@ __new_sem_wait (sem_t *sem) CANCELLATION_P (THREAD_SELF); int *futex = (int *) sem; - int val; int err; do { - if (*futex > 0) - { - val = atomic_decrement_if_positive (futex); - if (val > 0) - return 0; - } + if (atomic_decrement_if_positive (futex) > 0) + return 0; /* Enable asynchronous cancellation. Required by the standard. */ int oldtype = __pthread_enable_asynccancel (); diff --git a/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c b/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c index ac4b3c5d4c..72c8d615eb 100644 --- a/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c +++ b/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c @@ -104,7 +104,7 @@ __unregister_atfork (dso_handle) atomic_decrement (&deleted->handler->refcntr); unsigned int val; while ((val = deleted->handler->refcntr) != 0) - lll_futex_wait (deleted->handler->refcntr, val); + lll_futex_wait (&deleted->handler->refcntr, val); deleted = deleted->next; } -- cgit v1.2.3