mirror of https://git.musl-libc.org/git/musl
2 changed files with 14 additions and 12 deletions
@ -1,14 +1,11 @@ |
|||
#include "stdio_impl.h" |
|||
#include "pthread_impl.h" |
|||
|
|||
#define MAYBE_WAITERS 0x40000000 |
|||
void __register_locked_file(FILE *, pthread_t); |
|||
|
|||
void flockfile(FILE *f) |
|||
{ |
|||
while (ftrylockfile(f)) { |
|||
int owner = f->lock; |
|||
if (!owner) continue; |
|||
a_cas(&f->lock, owner, owner|MAYBE_WAITERS); |
|||
__futexwait(&f->lock, owner|MAYBE_WAITERS, 1); |
|||
} |
|||
if (!ftrylockfile(f)) return; |
|||
__lockfile(f); |
|||
__register_locked_file(f, __pthread_self()); |
|||
} |
|||
|
|||
Loading…
Reference in new issue