File tree 1 file changed +11
-5
lines changed
1 file changed +11
-5
lines changed Original file line number Diff line number Diff line change @@ -395,16 +395,22 @@ def _acquire(self):
395
395
except (IOError , OSError ):
396
396
os .close (fd )
397
397
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 before
401
+ # we called fcntl.flock. This means that lock is not valid (since
402
+ # another process will just lock a different file) and we need to
403
+ # try again.
404
+ # See https://stackoverflow.com/a/51070775
405
+ os .close (fd )
406
+ else :
407
+ self ._lock_file_fd = fd
399
408
return None
400
409
401
410
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
406
411
fd = self ._lock_file_fd
407
412
self ._lock_file_fd = None
413
+ os .unlink (self ._lock_file )
408
414
fcntl .flock (fd , fcntl .LOCK_UN )
409
415
os .close (fd )
410
416
return None
You can’t perform that action at this time.
0 commit comments