|
@@ -8,13 +8,13 @@ int __lockfile(FILE *f)
|
|
|
int owner = f->lock, tid = __pthread_self()->tid;
|
|
|
if ((owner & ~MAYBE_WAITERS) == tid)
|
|
|
return 0;
|
|
|
- for (;;) {
|
|
|
- owner = a_cas(&f->lock, 0, tid);
|
|
|
- if (!owner) return 1;
|
|
|
- if (a_cas(&f->lock, owner, owner|MAYBE_WAITERS)==owner) break;
|
|
|
+ owner = a_cas(&f->lock, 0, tid);
|
|
|
+ if (!owner) return 1;
|
|
|
+ while ((owner = a_cas(&f->lock, 0, tid|MAYBE_WAITERS))) {
|
|
|
+ if ((owner & MAYBE_WAITERS) ||
|
|
|
+ a_cas(&f->lock, owner, owner|MAYBE_WAITERS)==owner)
|
|
|
+ __futexwait(&f->lock, owner|MAYBE_WAITERS, 1);
|
|
|
}
|
|
|
- while ((owner = a_cas(&f->lock, 0, tid|MAYBE_WAITERS)))
|
|
|
- __futexwait(&f->lock, owner, 1);
|
|
|
return 1;
|
|
|
}
|
|
|
|