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 "stdio_impl.h" |
||||
#include "pthread_impl.h" |
#include "pthread_impl.h" |
||||
|
|
||||
#define MAYBE_WAITERS 0x40000000 |
void __register_locked_file(FILE *, pthread_t); |
||||
|
|
||||
void flockfile(FILE *f) |
void flockfile(FILE *f) |
||||
{ |
{ |
||||
while (ftrylockfile(f)) { |
if (!ftrylockfile(f)) return; |
||||
int owner = f->lock; |
__lockfile(f); |
||||
if (!owner) continue; |
__register_locked_file(f, __pthread_self()); |
||||
a_cas(&f->lock, owner, owner|MAYBE_WAITERS); |
|
||||
__futexwait(&f->lock, owner|MAYBE_WAITERS, 1); |
|
||||
} |
|
||||
} |
} |
||||
|
|||||
Loading…
Reference in new issue