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).
This commit is contained in:
Rich Felker
2012-04-24 06:36:50 -04:00
parent 1b0ce9af6d
commit f34d0ea511
2 changed files with 29 additions and 7 deletions

View File

@ -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);