mas01cr@496: #include "audioDB.h" mas01cr@496: mas01cr@496: int acquire_lock(int fd, bool exclusive) { mas01cr@496: struct flock lock; mas01cr@496: int status; mas01cr@496: mas01cr@496: lock.l_type = exclusive ? F_WRLCK : F_RDLCK; mas01cr@496: lock.l_whence = SEEK_SET; mas01cr@496: lock.l_start = 0; mas01cr@496: lock.l_len = 0; /* "the whole file" */ mas01cr@496: mas01cr@496: retry: mas01cr@496: do { mas01cr@496: status = fcntl(fd, F_SETLKW, &lock); mas01cr@496: } while (status != 0 && errno == EINTR); mas01cr@496: mas01cr@496: if (status) { mas01cr@496: if (errno == EAGAIN) { mas01cr@496: sleep(1); mas01cr@496: goto retry; mas01cr@496: } else { mas01cr@496: return status; mas01cr@496: } mas01cr@496: } mas01cr@496: return 0; mas01cr@496: } mas01cr@496: mas01cr@496: int divest_lock(int fd) { mas01cr@496: struct flock lock; mas01cr@496: mas01cr@496: lock.l_type = F_UNLCK; mas01cr@496: lock.l_whence = SEEK_SET; mas01cr@496: lock.l_start = 0; mas01cr@496: lock.l_len = 0; mas01cr@496: mas01cr@496: return fcntl(fd, F_SETLKW, &lock); mas01cr@496: }