diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-01-06 03:08:04 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-01-06 03:08:04 +0000 |
commit | 679d83bac2f4bed0e398122fdf3e05ce261e16b7 (patch) | |
tree | 9b40b6068a156c300bcb260453a97ae1168ae6db /nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h | |
parent | 17041e4ff09d3a9308c15bdfc2e63e629d9b364b (diff) | |
download | glibc-679d83bac2f4bed0e398122fdf3e05ce261e16b7.tar glibc-679d83bac2f4bed0e398122fdf3e05ce261e16b7.tar.gz glibc-679d83bac2f4bed0e398122fdf3e05ce261e16b7.tar.bz2 glibc-679d83bac2f4bed0e398122fdf3e05ce261e16b7.zip |
* sysdeps/pthread/aio_misc.h [!DONT_USE_BOOTSTRAP_MAP]
(struct waitlist): Don't add cond.
* sysdeps/pthread/aio_notify.c [!DONT_USE_BOOTSTRAP_MAP]
(__aio_notify): Use AIO_MISC_NOTIFY instead of pthread_cond_signal.
* sysdeps/pthread/aio_suspend.c [!DONT_USE_BOOTSTRAP_MAP]: Don't
use condvar, use AIO_MISC_WAIT.
* sysdeps/pthread/lio_listio.c: Likewise.
* rt/Makefile (tests): Add aio_suspend.
* rt/tst-aio9.c: New file.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h index b86f11c9b4..fd1ee4569d 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h +++ b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -66,17 +66,33 @@ #define lll_futex_wait(futex, val) \ - do { \ - int __ignore; \ + ({ \ + int __status; \ register __typeof (val) _val asm ("edx") = (val); \ __asm __volatile (LLL_EBX_LOAD \ LLL_ENTER_KERNEL \ LLL_EBX_LOAD \ - : "=a" (__ignore) \ + : "=a" (__status) \ : "0" (SYS_futex), LLL_EBX_REG (futex), "S" (0), \ "c" (FUTEX_WAIT), "d" (_val), \ "i" (offsetof (tcbhead_t, sysinfo))); \ - } while (0) + __status; \ + }) + + +#define lll_futex_timed_wait(futex, val, timeout) \ + ({ \ + int __status; \ + register __typeof (val) _val asm ("edx") = (val); \ + __asm __volatile (LLL_EBX_LOAD \ + LLL_ENTER_KERNEL \ + LLL_EBX_LOAD \ + : "=a" (__status) \ + : "0" (SYS_futex), LLL_EBX_REG (futex), "S" (timeout), \ + "c" (FUTEX_WAIT), "d" (_val), \ + "i" (offsetof (tcbhead_t, sysinfo))); \ + __status; \ + }) #define lll_futex_wake(futex, nr) \ |