src/robust.cpp
@@ -35,24 +35,30 @@ bool FMutex::try_lock() { if (mtx_.try_lock()) { if (flock(fd_, LOCK_EX | LOCK_NB) == 0) { if (flock(fd_, LOCK_EX | LOCK_NB) == 0) { ++count_; if (mtx_.try_lock()) { return true; } else { mtx_.unlock(); if (--count_ == 0) { flock(fd_, LOCK_UN); } } } return false; } void FMutex::lock() { mtx_.lock(); flock(fd_, LOCK_EX); ++count_; mtx_.lock(); } void FMutex::unlock() { flock(fd_, LOCK_UN); mtx_.unlock(); if (--count_ == 0) { flock(fd_, LOCK_UN); } } } // namespace robust