FileFd: fix sleeping while mutex is locked
GitOrigin-RevId: fb6b5bb1967a4c144e9393b2ab82ccf6dfe2f15a
This commit is contained in:
parent
ad686717e7
commit
4e03ee1293
@ -301,8 +301,16 @@ Status FileFd::lock(const LockFlags flags, const string &path, int32 max_tries)
|
||||
CHECK(flags == LockFlags::Write);
|
||||
VLOG(fd) << "Trying to lock file \"" << path << '"';
|
||||
while (true) {
|
||||
std::unique_lock<std::mutex> lock(in_process_lock_mutex);
|
||||
if (locked_files.find(path) != locked_files.end()) {
|
||||
{ // mutex lock scope
|
||||
std::lock_guard<std::mutex> lock(in_process_lock_mutex);
|
||||
if (locked_files.find(path) == locked_files.end()) {
|
||||
VLOG(fd) << "Lock file \"" << path << '"';
|
||||
need_local_unlock = true;
|
||||
locked_files.insert(path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (--max_tries > 0) {
|
||||
usleep_for(100000);
|
||||
continue;
|
||||
@ -311,12 +319,6 @@ Status FileFd::lock(const LockFlags flags, const string &path, int32 max_tries)
|
||||
return Status::Error(
|
||||
0, PSLICE() << "Can't lock file \"" << path << "\", because it is already in use by current program");
|
||||
}
|
||||
|
||||
VLOG(fd) << "Lock file \"" << path << '"';
|
||||
need_local_unlock = true;
|
||||
locked_files.insert(path);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
SCOPE_EXIT {
|
||||
|
Reference in New Issue
Block a user