Repository navigation
fix(deps): update dependency filelock to v4 - #465
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
renovate
Bot
force-pushed
the
renovate/filelock-4.x
branch
2 times, most recently
from
September 24, 2026 05:03
57e3d19 to
2fad156
Compare
renovate
Bot
force-pushed
the
renovate/filelock-4.x
branch
6 times, most recently
from
October 2, 2026 00:41
e4b4f26 to
a30e2ea
Compare
renovate
Bot
force-pushed
the
renovate/filelock-4.x
branch
4 times, most recently
from
October 10, 2026 01:43
1c4b94d to
aed37a4
Compare
renovate
Bot
force-pushed
the
renovate/filelock-4.x
branch
5 times, most recently
from
October 18, 2026 09:51
96daa21 to
5b3eb55
Compare
renovate
Bot
force-pushed
the
renovate/filelock-4.x
branch
from
October 19, 2026 01:42
5b3eb55 to
c92749e
Compare
renovate
Bot
force-pushed
the
renovate/filelock-4.x
branch
from
October 19, 2026 06:07
c92749e to
f5fd5f3
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
>=3.20.3,<4→>=4.2.4,<5Release Notes
tox-dev/py-filelock (filelock)
v4.2.4Compare Source
PyPI release
Full Changelog: tox-dev/filelock@4.2.3...4.2.4
v4.2.3Compare Source
types.LazyImportTypeno longer triggersAttributeErroratexit. #860
EFTYPEwhen a no-follow open refuses a symlink in a soft reader/writer lock's protocol tree, so heartbeatreports lost ownership rather than a transient refresh error.
PyPI release
Full Changelog: tox-dev/filelock@4.2.2...4.2.3
v4.2.2Compare Source
with lock:ended, when an earlieracquire()hadfailed because the working directory no longer exists. That call still raises
FileNotFoundError, and it nowleaves the lock's hold count unchanged. #856
PyPI release
Full Changelog: tox-dev/filelock@4.2.1...4.2.2
v4.2.1Compare Source
close>andclose>end only the holds that tasks acquiredthrough that wrapper. A reader that arrives during
close()gets the closed error instead of joining the ending hold.After synchronous code closes or force-releases the shared lock, the wrappers refuse to admit readers into the ended
hold, and
close()on such a wrapper returns.Closing one wrapper no longer ends a task's nested hold taken through another wrapper on the same path. #832
ReadWriteLocklocks again after arelease()that an exception from a signal handler interrupted.The async read-write wrappers stop admitting readers into such a level. The async read-write locks forget a hold whose
backend release failed after the backend let go, and they free the memory of each acquire that times out or is canceled.
AsyncFileLockreturns fromrelease()after a few hundred acquires gave up behind a waiting one. An exception from a signal handler delivered while anAsyncFileLockcall joinsits queue no longer blocks every later call on that lock. #833
ReadWriteLockacting on-journal,-walor-shmfiles another process puts beside itsdatabase: a write could land in another file, a reader could get in beside a writer, and an acquire could fail. SQLite
now opens the database by name only in a directory no other account can write, and through a private hard link
elsewhere. On Windows the directory's access control list decides. Where hard links are unavailable, keep the database
in a directory other accounts cannot write, such as one under
%LOCALAPPDATA%. The lock removes link directoriesthrough a checked descriptor rather than by name, reads a link directory's name only when the locking account owns it,
and leaves alone a directory with other content renamed onto a link directory's name. A database whose schema takes more
than a few kilobytes to load raises
ValueErrorinstead of running past the acquire timeout. #834UnixFileLockno longer truncates a file it did not create,such as one renamed to the lock path, and no longer applies
modeto it. Anon_acquiredhook that writes holdermetadata now truncates the file itself. A lease (Linux) or an oplock (Windows) on the lock file or a soft lock's marker
no longer holds
acquire()past itstimeoutorblocking=False, and an oplock no longer holdsrelease();ReadWriteLockon Windows waits for itstimeoutand raisesTimeout. On Windows,a
modewithout group and other bits, such as0o600, now creates the lock file with an owner-only permissionlist; the
ReadWriteLockdatabase gets the same. The soft locks' writability check no longer follows asymlink swapped in at the lock path. On a filesystem without
flock, a contender from another account now waits on amarker it cannot write instead of raising
PermissionError. #835SoftFileLock,MarkerSoftFileLockandSoftFileLeaseremovinga live holder's marker in three cases: the holder and the contender run in Linux time namespaces with different boottime
offsets; only one of them can read the boot id; a process other than the owner rewrote the marker. Soft markers no
longer carry group or other write bits. A process name containing a carriage return or another line separator no longer
makes the stale check raise
ValueError. When/proc/self/ns/timeexists but cannot be read, the stale checkno longer compares start times and keeps the marker. #836
the hold can no longer re-enter or release it.
AsyncSoftReadWriteLockgives back one level onrelease, so synchronous readers of a shared singleton keep theirs.
SoftReadWriteLocktracks readlevels per thread:
release()from a thread that holds none raisesRuntimeError. After its heartbeatrecorded a lost hold, it refuses new acquires until that hold is released. #838
StrictSoftFileLockcreates<path>.filelockand itsclaimsdirectory with the lock'smodeand sets the sticky bit (a directory flag that lets only a file's owner remove it) on both. On the next acquisition it
narrows a directory it owns that an earlier release created wider; it leaves a directory of another account as it is,
so remove such leftovers by hand. It reaches
claimsthrough a descriptor opened without following symlinks; onWindows it holds both directories open and refuses a junction (a directory that points at another directory). Under a
sticky parent such as
/tmpit refuses a coordination directory of another account, asSoftReadWriteLockdoes for<path>.rw. One read grace now covers a whole claim scan, a failedclaim cleanup no longer leaves the sentinel descriptor open, and a non-regular node at a sentinel private-record name
raises
SoftFileLockProtocolError. On Windows, contenders read claims without blocking their owner'sunlink. #839
acquireorrelease. A release that a signal handler cutsshort after it has started now completes before the error propagates. A handler that acquires the lock its own thread is
releasing now gets
RuntimeErrorinstead of a hold that stays held. The singleton cache no longer hands out anis_singleton=Truelock or aReadWriteLockwhose finalizer is running, which released the newholder's lock. A signal during
os.fork()no longer leaves the other threads blocked in their next lock call, and afork from another thread no longer waits for a
ReadWriteLockacquire on a busy database. #840its marker behind on release after such a change. The path resolved when an acquisition starts stays in use until
the hold ends. An
is_singleton=Truelookup no longer returns a cached lock whose relative path now resolves toanother file; a held lock still matches the file it holds. A rename of the lock's directory during a hold no longer
leaves the marker behind or reports a false lease compromise, and a waiter no longer creates a second lock file in a
directory that was renamed away. #841
SoftReadWriteLockreaches its records through descriptors of<path>.rwandgenorholdersopened without following symlinks. On Windows it holds those directories open and refuses a junction (a directory that
points at another directory). A tree swapped in after an earlier acquire therefore cannot redirect them. Its heartbeat
rewrites a holder record only when the name still leads to the file it created, and does not block on a FIFO (a named
pipe). A heartbeat that finds
<path>.rwreplaced by a symlink or junction reports the hold lost instead of endingthe heartbeat thread. A live lock object repeats the ownership check whenever the tree it opens is not the one it
prepared. #842
SoftFileLock,MarkerSoftFileLockandSoftFileLeaseremovingor displacing a live holder's marker in five cases. ext4 gave a freed inode number to the next marker. A stalled
FileLockremoved itsENOSYSplaceholder after a peer replaced it. A failed acquire cleaned upafter a successor took the path. A stale break left the lock path empty while it checked the marker it had moved. A
lifetimebreak judged a marker by a reused inode number. On Linux and macOS a stale marker now changes hands in oneatomic exchange. On other platforms without one, except Windows, including NFS and SMB, the marker stays in place and
waits for
timeoutorbreak_lock(). Restoring a marker no longer follows a symlink found under the break name. Aholder that releases while a peer's exchange has its marker aside leaves a record no lock parses, so the put-back lands
a marker that ages out. A lease heartbeat that finds another file at the lock path once, while a peer's break has its
marker aside, waits for the next refresh before it reports a compromise. A contender that finds a dead breaker's marker
puts back the marker that breaker left under its break name. A marker is the breaker's own only when it names the
breaker's process on this host; the same process number on another host is a holder. A contender takes a stranded marker
under a name of its own before it puts the marker back, so two contenders no longer reverse each other's exchange and
remove the live holder's marker. A claim left behind by a failed put-back is retried on the next poll. #843
AsyncReadWriteLockorAsyncSoftReadWriteLockacquire that waits foranother process now stops the wait and raises the cancellation. It used to wait until that process released, or raise
Timeout. Athread_local=TrueAsyncFileLockthat threads with their own eventloops share no longer deadlocks when one thread waits for the lock while another holds it. #844
SoftReadWriteLockrefuses a commit that lands a whole retention window behind the log, so twocommitters stalled at adjacent generations can no longer admit a second writer. Its stale check samples the clock before
it reads a holder record, so a pause between the two no longer counts as time the record stayed unchanged. #845
SoftFileLockcontender evicting an empty marker after two seconds while its owner held thelock. The owner is a
SoftFileLockbefore 3.22, which writes nothing into its marker, or a current one still writingits record. An empty marker now reads as held, and
timeout,lifetimeorbreak_lock()clears it. A contenderthat finds an empty marker a dead breaker left aside puts it back instead of removing it. #846
ReadWriteLockon Windows acting on-journaland-walfiles another account places besideits database: an acquire could fail with
OperationalError, or SQLite could replay the journal anddelete the file it names. The lock now reads the database directory's access control list. Where an account other than
the locking account,
SYSTEMandAdministratorscan add or remove names, SQLite opens a hard link inside adirectory only those accounts can write. A filesystem without hard links raises
OSError. #854SoftReadWriteLocksubclasses sharing singleton instances with the base class or sibling subclasses.Each concrete class now keeps its own cache and construction guard, including after fork, while preserving
cooperative class-definition keywords. #855
fail on unrelated changes. #849
PyPI release
Full Changelog: tox-dev/filelock@4.2.0...4.2.1
v4.2.0Compare Source
import filelockis about twice as fast: lock types other thanFileLockload on first use. #831StrictSoftFileLockraisingSoftFileLockProtocolErroron Windows when acontender read a claim whose owner was still finishing its unlink. #829
PyPI release
Full Changelog: tox-dev/filelock@4.1.2...4.2.0
v4.1.2Compare Source
sqlite_masterfor the schema probe. #770IsADirectoryError(orPermissionErroron Windows) for a directory lock path regardless of its writepermissions. #822
AsyncReadWriteLockworker thread was between two operations. #828accepts path-derived surrogate escapes and works before the cache directory exists. #824
PyPI release
Full Changelog: tox-dev/filelock@4.1.1...4.1.2
v4.1.1Compare Source
/dev/fdlookup implicated in a kernel panic by opening SQLite through a validated hard link.The database directory must be writable and support hard links; alias creation failure raises
OSError. #820ReadWriteLockhard-link directory names so forgedowners cannot abort acquisition. #821
PyPI release
Full Changelog: tox-dev/filelock@4.1.0...4.1.1
v4.1.0Compare Source
OwnerMode,CompromiseReasonandhas_fcntlfromfilelock. #790AcquireReturnProxyis generic in the lock type, sowith lock.acquire() as held:typesheldasthe lock's own class. #803
Timeoutfrom a soft lock names a holder on another host or in another PID namespace, which nocontender ever reclaims. #815
is_lock_held_by_usandis_lock_held_by_usreturnFalsefor a marker an earlier process with the same PID left behind. #774SoftFileLockremoves its marker when writing it fails and closing the descriptor fails too, so thelock path no longer stays blocked. #775
acquireandacquireno longer wait pasttimeoutwhen
poll_intervalis longer than the time left. #777SoftReadWriteLockignores a generation-log entry whose name is not 20 ASCII digits, which used tostop its heartbeat thread or delete real generations. #778
ReadWriteLock,SoftReadWriteLockand their async wrappers treat ainftimeout like-1and raiseValueErrorfor a blockingnanone. #779ReadWriteLockandSoftReadWriteLockaccept a timeout aboveTIMEOUT_MAXinstead of raisingOverflowError. #780acquireraisesValueErrorfor a blockingnantimeout or apoll_intervalabove
TIMEOUT_MAX, and treats ainftimeout like-1. #781SoftFileLockandMarkerSoftFileLocktreat a marker cut before its final newline asmalformed, so a crash-truncated record self-heals and a read mid-write no longer breaks a live lock. #782
UnixFileLockno longer deletes another process's live marker when it falls back to a soft lock onENOSYS, and on macOS a lock path ending in a separator raisesFileNotFoundErrorinstead of retrying. #785SoftFileLockandSoftFileLeaseput back a live successor's marker that a racingstale break moved aside, so a third contender no longer acquires beside the successor. #786
StrictSoftFileLockremoves every claim a failed acquire published, counts anEEXISTlink thatlanded as published, and no longer reports
is_lockedafter a failed claim cleanup. #787exceptiongroupbackport, a release failure under the defaultcontext_error_policynolonger turns into
ModuleNotFoundError; cleanup failures chain instead of grouping, andon_acquiredis allowed. #788AsyncReadWriteLockandAsyncSoftReadWriteLockdrop a task's hold when a callercancels it during a release that still completes, instead of blocking every later writer. #789
SoftFileLeasereleases a lease dropped while held, at garbage collection or interpreter exit, andraises
ValueErrorfor aheartbeat_intervalaboveTIMEOUT_MAX. #791StrictSoftFileLockjudges an abandoned private record's age by the filesystem's clock, so a clientclock ahead of an NFS server no longer aborts live publications. #792
BaseAsyncFileLockraisesRuntimeErrorinstead ofCancelledErrorwhen itsexecutor shuts down with the call still queued, and a waiter interrupted by anything else no longer wedges later calls. #793
ReadWriteLockon a held database no longer drops the holder's lock,so other processes stay excluded. #794
SoftReadWriteLockno longer admits a second writer after<path>.rwis removed under a liveinstance, and flushes each snapshot before publishing it so a crash cannot leave an empty one that wedges every peer. #795
SoftFileLeasereclaims a deadMarkerSoftFileLockowner, and expires a lease or amalformed soft marker after it stays unchanged on the contender's own monotonic clock, so clock skew cannot break it. #796
that shares the hostname and volume no longer breaks a live lock. #797
close>makes an acquire still waiting in another threadraise
RuntimeError, where it used to take the lock on the closed instance and hold it until the process exited. #798SoftReadWriteLockreads the head fromgen/HEAD, so a client whose cached directory listing ismore than 64 generations stale no longer takes an old generation for the head and forks the log. #799
BaseAsyncFileLock, it releases on alooprunning inanother thread, or in place once no loop is left; the
lifetimecheck and path resolution now run in the executor. #800SoftReadWriteLockwaits out a holder's ownstale_thresholdbefore evicting it, keys its singletonon the path its log sits beside, and no longer leaks ledger entries or the holder record of a failed acquire. #801
lock_descriptorraisesValueErrorfor a blockingpoll_intervalaboveTIMEOUT_MAXup front, instead ofOverflowErroronce the descriptor is contended. #802BaseFileLockrejects aboolor string timeout, an out-of-rangemodeand a non-boolblockingset at any time, rejects unknown options on a singleton cache hit, and tracks anon_acquiredreacquire. #803StrictSoftFileLockraisesSoftFileLockProtocolErrornaming a directory, symlinkor exited soft-lock owner's marker at the lock path, and
lock_path_occupantshows what blocks it. #804ReadWriteLockraisesValueErrorfor a WAL-mode database instead ofdisk I/O error, andits
/dev/fdfallback links beside the database, so a lock off the TMPDIR filesystem no longer fails withEXDEV. #805release>from a thread that holds no read level raisesRuntimeErrorinstead of ending another thread's read lock and letting a writer in. #806SoftFileLockLifetimeWarningderives fromFutureWarninginstead ofDeprecationWarning, so Python shows it by default outside__main__. #807SoftFileLockapplies an explicitmodepast the umask asUnixFileLockdoes, andreads a marker number spelled other than in ASCII digits, or a lease with an empty token, as malformed. #807
ReadWriteLockraisesOSErrorwhen its database is unlinked or replaced while an acquisitionwaits, instead of taking a lock that no later opener sees. #808
releasewithforce=Trueand garbage collectionrelease holds exited threads left, and a
release()re-entered from a signal handler closes the descriptor once. #810SoftFileLeaserecords alease_durationgiven as afloatsubclass, such as NumPy's, in aform every contender parses, so a live lease is no longer evicted as malformed. #815
StrictSoftFileLockraisesSoftFileLockProtocolErrorfor a file at the lock path itcannot parse once it stays unchanged for two seconds, instead of waiting on it forever. #815
timeout>from a string emits aDeprecationWarningand from a
boolraisesTypeError; pass the number of seconds instead. #815ValueErrorfor a timeout too large for afloat, and a singleton accepts a timeoutthat waits as long as the cached one, such as
inffor-1. #815DecimalorFraction, as a file lock'stimeoutalready did, and a read-write lock or lease refuses aboolor string one. #815ReadWriteLockconnects through a private hard link, so cycling a lock beside a holder nolonger adds an open descriptor per connection. #815
SoftFileLockandSoftFileLeasere-check a stale marker right before breaking it,so a marker recreated since the check is no longer moved aside for a third contender to take the path. #815
RuntimeError,where it used to hang that thread or leave the lock held after the outer release. #815
BaseAsyncFileLocksingleton the garbage collector finalizes leaves the singleton cache first, so anew lock on the path waits for its release instead of re-entering a hold that release then drops. #815
BaseAsyncFileLockreleases every thread's hold, including one on a daemonthread's event loop at interpreter exit, instead of leaving it held. #815
while the kernel shows its owner running in another namespace under the recorded PID and start time. #815
SoftFileLockand its marker and lease variants no longer leave their marker behind when a signalhandler interrupts a release; the retried release, or the next acquire on Windows, removes it. #815
SoftReadWriteLockraisesValueErrorfor aheartbeat_intervalaboveTIMEOUT_MAX, which killed its heartbeat thread, and an interrupted release still removes its record. #815AsyncReadWriteLockreleases only its own hold on a singleton it shares with synchronous users, whereit used to end their read transaction too. #815
og:urland sitemap entries point at the versioned page on Read the Docs insteadof a domain-root URL that returns 404. #813
docs/, sotox -e docsbuilds the documentation from an unpacked sdist. #812PyPI release
Full Changelog: tox-dev/filelock@4.0.12...4.1.0
v4.0.12Compare Source
sqlite_masterfor the schema probe. #769PyPI release
Full Changelog: tox-dev/filelock@4.0.11...4.0.12
v4.0.11Compare Source
ReadWriteLockandAsyncReadWriteLockuse a validated private hard link when/dev/fdhas no entry for thedatabase descriptor, supporting NetBSD's static descriptor directory beyond descriptor 63. The temporary location must
share a filesystem with the database. The symlink refusal test accepts NetBSD's error wording.
PyPI release
Full Changelog: tox-dev/filelock@4.0.10...4.0.11
v4.0.10Compare Source
AsyncFileLockwith anotherloop,executororrun_in_executor, or a singletonSoftFileLeasewith anotherlease_duration,heartbeat_intervaloron_compromise, now raisesValueErrorinstead of returning the lock with its original options. #765PyPI release
Full Changelog: tox-dev/filelock@4.0.9...4.0.10
v4.0.9Compare Source
ReadWriteLockandAsyncReadWriteLockclose the descriptor that checks the database path once SQLite hasconnected, so on PyPy a dropped lock leaves no descriptor open until garbage collection runs. #763
ReadWriteLockandAsyncReadWriteLockrefuse a symlink at the database path instead of following it, so auser who can create names in a shared lock directory cannot point the lock at another file (GHSA-j8f7-rjxc-mr56).
PyPI release
Full Changelog: tox-dev/filelock@4.0.8...4.0.9
v4.0.8Compare Source
ReadWriteLock.release()andSoftReadWriteLock.release()from a thread that does not hold the write lock nowraise
RuntimeErrorinstead of dropping the holder's lock and letting a second writer in. #761PyPI release
Full Changelog: tox-dev/filelock@4.0.7...4.0.8
v4.0.7Compare Source
ValueErrorat construction whenmodedenies the owner read or write, such asmode=0o444, instead of failing on a later acquire and staying broken until someone deletes the lock file. #760PyPI release
Full Changelog: tox-dev/filelock@4.0.6...4.0.7
v4.0.6Compare Source
-1before reentrantReadWriteLockandSoftReadWriteLockacquisition. Preserve unlimited waits and nonblocking acquisition. #756
PyPI release
Full Changelog: tox-dev/filelock@4.0.5...4.0.6
v4.0.5Compare Source
MarkerSoftFileLockacquisition and prevent contenders from evicting live protocol-2 owners after two seconds.Reclaim recognized records after owner death; preserve unknown contracts. #749
timeoutandblockingsettings in sync and asyncReadWriteLockacquisition, including waitsbetween tasks on one instance. Preserve explicit per-call overrides. #750
0o000files. Keep mode-bit checks enabled for privilegedprocesses on filesystems that support POSIX permissions. #753
StrictSoftFileLockclaims after a read-permission retry expires. Recheck the directory before raisinga protocol error so concurrent removal does not turn a stale claim listing into an acquisition failure. #754
-1in blockingAsyncReadWriteLockandAsyncSoftReadWriteLockacquisitions.Keep
-1as an unlimited wait and ignore timeouts whenblocking=False. #755PyPI release
Full Changelog: tox-dev/filelock@4.0.4...4.0.5
v4.0.4Compare Source
longer takes another such host's live holder for its own and reclaims its marker. #748
PyPI release
Full Changelog: tox-dev/filelock@4.0.3...4.0.4
v4.0.3Compare Source
RuntimeError: Cannot install a trace function while another trace function is being installedunder coverage or a debugger. filelock skips its fork-safetyaudit hook there, so forking from inside a thread's own lock-state transition no longer raises immediately on those
versions. #747
PyPI release
Full Changelog: tox-dev/filelock@4.0.2...4.0.3
v4.0.2Compare Source
acquire()andrelease()on athread_local=Falselock no longer leak the OS lock, close adescriptor twice, drop a lease token, or leave a false deadlock after a cross-thread release (#744). #745
AsyncReadWriteLockandAsyncSoftReadWriteLocknow give eachasynciotask itsown hold, so tasks sharing one instance no longer enter the write lock together. #746
PyPI release
Full Changelog: tox-dev/filelock@4.0.1...4.0.2
v4.0.1Compare Source
poll_intervalis now validated at construction, on the setter, and onacquire(): a negative, non-finite, ornon-numeric value raises
ValueError/TypeErrorimmediately instead of failing insidetime.sleep. #739PyPI release
Full Changelog: tox-dev/filelock@4.0.0...4.0.1
v4.0.0Compare Source
SoftReadWriteLockon-disk protocol is a generation log under<path>.rw, and a processrunning an earlier release does not see it: an old and a new participant on one lock path do not exclude each
other. Stop every participant, upgrade them all, then restart them; the new code ignores leftover
.state,.writeand.readers/files, and you can delete them. The filesystem must provide no-replace hard links, asit must for
StrictSoftFileLock, so a runtime withoutos.linkraisesSoftFileLockProtocolErroron acquire. Constructing a singleton again with a differenton_compromise, or withpoll_intervalat or abovestale_threshold, now raisesValueError. #735SoftReadWriteLockexposesgenerationas a fencing token forthe protected resource and reports a lost hold through
on_compromiseandcompromise. #735SoftReadWriteLockno longer deadlocks when a holder dies on another host mid-transition, andrelease()no longer waits on a mutex a dead host left behind (#725, #735). The state mutex is gone.Each transition is one atomic snapshot commit, and liveness is a heartbeat nonce read on the observer's own clock
rather than an
mtimeread against another host's. #735PyPI release
Full Changelog: tox-dev/filelock@3.32.7...4.0.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.