ftrylockfile.c 330 B

123456789101112131415161718
  1. #include "stdio_impl.h"
  2. #include "pthread_impl.h"
  3. int ftrylockfile(FILE *f)
  4. {
  5. int tid = pthread_self()->tid;
  6. if (f->lock == tid) {
  7. if (f->lockcount == LONG_MAX)
  8. return -1;
  9. f->lockcount++;
  10. return 0;
  11. }
  12. if (f->lock < 0) f->lock = 0;
  13. if (f->lock || a_cas(&f->lock, 0, tid))
  14. return -1;
  15. f->lockcount = 1;
  16. return 0;
  17. }