Skip to content

Commit 89502dc

Browse files
committed
Cleanup lock files in UNIX
See tox-dev/filelock#31 And https://stackoverflow.com/a/51070775 Without this change the `cache/symbol_lists` directory ends up full of many lock files that might never get cleaned up (At least since #24029 landed).
1 parent e014359 commit 89502dc

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

tools/filelock.py

+10-5
Original file line numberDiff line numberDiff line change
@@ -395,16 +395,21 @@ def _acquire(self):
395395
except (IOError, OSError):
396396
os.close(fd)
397397
else:
398-
self._lock_file_fd = fd
398+
st = os.fstat(fd);
399+
if st.st_nlink == 0:
400+
# We raced with another process that deleted the lock file
401+
# before we called fcntl.flock. This means that lock is not valie and we need to try
402+
# again.
403+
# See https://stackoverflow.com/a/51070775
404+
os.close(fd)
405+
else:
406+
self._lock_file_fd = fd
399407
return None
400408

401409
def _release(self):
402-
# Do not remove the lockfile:
403-
#
404-
# https://github.com/benediktschmitt/py-filelock/issues/31
405-
# https://stackoverflow.com/questions/17708885/flock-removing-locked-file-without-race-condition
406410
fd = self._lock_file_fd
407411
self._lock_file_fd = None
412+
os.unlink(self._lock_file)
408413
fcntl.flock(fd, fcntl.LOCK_UN)
409414
os.close(fd)
410415
return None

0 commit comments

Comments
 (0)