diff options
author | Rich Felker <dalias@aerifal.cx> | 2012-04-24 06:36:50 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012-04-24 06:36:50 -0400 |
commit | f34d0ea511e552851c8c6148fb113816f41e6759 (patch) | |
tree | 51b1dbdf2058697ab51782b96c6317f2c6051d5a /src/internal | |
parent | 1b0ce9af6d2aa7b92edaf3e9c631cb635bae22bd (diff) | |
download | musl-f34d0ea511e552851c8c6148fb113816f41e6759.tar.gz musl-f34d0ea511e552851c8c6148fb113816f41e6759.tar.bz2 musl-f34d0ea511e552851c8c6148fb113816f41e6759.tar.xz musl-f34d0ea511e552851c8c6148fb113816f41e6759.zip |
new internal locking primitive; drop spinlocks
we use priority inheritance futexes if possible so that the library
cannot hit internal priority inversion deadlocks in the presence of
realtime priority scheduling (full support to be added later).
Diffstat (limited to 'src/internal')
-rw-r--r-- | src/internal/libc.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/internal/libc.h b/src/internal/libc.h index 39a18658..d6797f90 100644 --- a/src/internal/libc.h +++ b/src/internal/libc.h @@ -45,10 +45,11 @@ extern struct __libc *__libc_loc(void) __attribute__((const)); /* Designed to avoid any overhead in non-threaded processes */ void __lock(volatile int *); +void __unlock(volatile int *); int __lockfile(FILE *); void __unlockfile(FILE *); #define LOCK(x) (libc.threads_minus_1 ? (__lock(x),1) : ((void)(x),1)) -#define UNLOCK(x) (*(volatile int *)(x)=0) +#define UNLOCK(x) (libc.threads_minus_1 ? (__unlock(x),1) : ((void)(x),1)) void __synccall(void (*)(void *), void *); void __synccall_wait(void); |