Skip to content

fix(rw): forget the async lock's worker after fork - #828

Merged
gaborbernat merged 1 commit into
mainfrom
fix/async-rw-fork-exit
Oct 14, 2026
Merged

gaborbernat merged 1 commit into
mainfrom
fix/async-rw-fork-exit

Conversation

@gaborbernat

Copy link
Copy Markdown
Member

test_async_read_write_lock_fork_behavior[held] hung on PyPy 3.11 in #827's CI. The hang is in filelock, not the test.

A forked child that exits normally runs the concurrent.futures exit hook, which wakes every registered executor worker by putting None on its queue. The worker AsyncReadWriteLock owns does not exist in the child. On PyPy that queue is the pure-Python _PySimpleQueue, whose lock the worker takes again right after finishing an operation. A fork that lands in that window leaves the lock held forever in the child, and the exit hook's put blocks. A stack dump of a hung child shows it parked there.

CPython 3.12+ clears that registry in the child (os.register_at_fork(after_in_child=_threads_queues.clear)); PyPy 3.11 ships without it. The lock's after-fork hook now drops its own worker from the registry the same way.

Running the test's fork script under PyPy hung 4 of 1920 times before this change and 0 of 5760 after. The full suite passes on CPython 3.14 (100% coverage) and PyPy 3.11.

A forked child that exits normally ran concurrent.futures' exit hook,
which wakes every registered executor worker by putting None on its
queue. The parent's worker does not exist in the child, and on PyPy the
queue is pure Python: if the fork landed while the worker held the
queue's lock, the put blocked forever. CPython 3.12+ clears that registry
in the child; do the same for the executor AsyncReadWriteLock owns.

The PyPy fork test hung in 4 of 1920 runs before and 0 of 5760 after.
@gaborbernat
gaborbernat force-pushed the fix/async-rw-fork-exit branch from 3cae2e3 to 1a90164 Compare October 14, 2026 08:10
@gaborbernat
gaborbernat merged commit 1649e88 into main Oct 14, 2026
47 checks passed
parthea pushed a commit to googleapis/google-cloud-python that referenced this pull request Oct 16, 2026
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [filelock](https://redirect.github.com/tox-dev/py-filelock) |
`==3.32.7` → `==4.2.0` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/filelock/4.2.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/filelock/3.32.7/4.2.0?slim=true)
|

---

### Release Notes

<details>
<summary>tox-dev/py-filelock (filelock)</summary>

###
[`v4.2.0`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.2.0)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.1.2...4.2.0)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.2.0 -->

#### What's Changed

- fix(strict): skip Windows claims pending deletion by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#829](https://redirect.github.com/tox-dev/filelock/pull/829)
- perf(import): defer asyncio and sqlite3 loading by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#831](https://redirect.github.com/tox-dev/filelock/pull/831)

**Full Changelog**:
<tox-dev/filelock@4.1.2...4.2.0>

###
[`v4.1.2`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.1.2)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.1.1...4.1.2)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.1.2 -->

#### What's Changed

- fix: prioritize S_ISDIR check in raise_on_not_writable_file by
[@&#8203;feiiiiii5](https://redirect.github.com/feiiiiii5) in
[tox-dev/filelock#822](https://redirect.github.com/tox-dev/filelock/pull/822)
- 🔧 chore(security): enroll in Anthropic OSS Scanner by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#823](https://redirect.github.com/tox-dev/filelock/pull/823)
- 📝 docs(security): add an email reporting contact by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#825](https://redirect.github.com/tox-dev/filelock/pull/825)
- docs: hash all keys in the lock filename recipe by
[@&#8203;xiehuanyi](https://redirect.github.com/xiehuanyi) in
[tox-dev/filelock#824](https://redirect.github.com/tox-dev/filelock/pull/824)
- fix(read-write): use sqlite_master for read lock schema probe on older
SQLite by [@&#8203;DawnofGenX](https://redirect.github.com/DawnofGenX)
in
[tox-dev/filelock#827](https://redirect.github.com/tox-dev/filelock/pull/827)
- fix(rw): forget the async lock's worker after fork by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#828](https://redirect.github.com/tox-dev/filelock/pull/828)

#### New Contributors

- [@&#8203;xiehuanyi](https://redirect.github.com/xiehuanyi) made their
first contribution in
[tox-dev/filelock#824](https://redirect.github.com/tox-dev/filelock/pull/824)

**Full Changelog**:
<tox-dev/filelock@4.1.1...4.1.2>

###
[`v4.1.1`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.1.1)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.1.0...4.1.1)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.1.1 -->

#### What's Changed

- feat(python): default to Python 3.15 by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#816](https://redirect.github.com/tox-dev/filelock/pull/816)
- fix(rw): avoid macOS descriptor lookups by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#820](https://redirect.github.com/tox-dev/filelock/pull/820)
- fix(tests): bound concurrent lock progress by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#819](https://redirect.github.com/tox-dev/filelock/pull/819)
- test: make lock error checks deterministic by
[@&#8203;adenzhou1350](https://redirect.github.com/adenzhou1350) in
[tox-dev/filelock#817](https://redirect.github.com/tox-dev/filelock/pull/817)
- fix(read-write): reject a hostile pid in \_owner_is_gone by
[@&#8203;dxbjavid](https://redirect.github.com/dxbjavid) in
[tox-dev/filelock#821](https://redirect.github.com/tox-dev/filelock/pull/821)

#### New Contributors

- [@&#8203;adenzhou1350](https://redirect.github.com/adenzhou1350) made
their first contribution in
[tox-dev/filelock#817](https://redirect.github.com/tox-dev/filelock/pull/817)

**Full Changelog**:
<tox-dev/filelock@4.1.0...4.1.1>

###
[`v4.1.0`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.1.0)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.12...4.1.0)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.1.0 -->

#### What's Changed

- ci: download coverage during tool setup by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#776](https://redirect.github.com/tox-dev/filelock/pull/776)
- 🐛 fix(api): validate timeout and poll_interval bounds by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#781](https://redirect.github.com/tox-dev/filelock/pull/781)
- 🐛 fix(read-write): accept inf and reject nan timeouts by
[@&#8203;darrenhuai](https://redirect.github.com/darrenhuai) in
[tox-dev/filelock#779](https://redirect.github.com/tox-dev/filelock/pull/779)
- 🐛 fix(soft-rw): ignore non-ASCII generation names by
[@&#8203;dxbjavid](https://redirect.github.com/dxbjavid) in
[tox-dev/filelock#778](https://redirect.github.com/tox-dev/filelock/pull/778)
- 🐛 fix(soft): check start token in is_lock_held_by_us by
[@&#8203;lprnmns](https://redirect.github.com/lprnmns) in
[tox-dev/filelock#774](https://redirect.github.com/tox-dev/filelock/pull/774)
- 🐛 fix(soft): clean up marker when rollback close fails by
[@&#8203;harbinresearcher](https://redirect.github.com/harbinresearcher)
in
[tox-dev/filelock#775](https://redirect.github.com/tox-dev/filelock/pull/775)
- 🐛 fix(read-write): clamp waits to threading.TIMEOUT_MAX by
[@&#8203;darrenhuai](https://redirect.github.com/darrenhuai) in
[tox-dev/filelock#780](https://redirect.github.com/tox-dev/filelock/pull/780)
- 🐛 fix(soft): treat truncated markers as malformed by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#782](https://redirect.github.com/tox-dev/filelock/pull/782)
- 🐛 fix(acquire): keep every acquire wait within the timeout by
[@&#8203;feiiiiii5](https://redirect.github.com/feiiiiii5) in
[tox-dev/filelock#777](https://redirect.github.com/tox-dev/filelock/pull/777)
- 📝 docs: fix hanging example and platform claims by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#783](https://redirect.github.com/tox-dev/filelock/pull/783)
- 🐛 fix(unix): keep peer marker on ENOSYS fallback by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#785](https://redirect.github.com/tox-dev/filelock/pull/785)
- 🐛 fix(async): clear the task hold after a canceled release by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#789](https://redirect.github.com/tox-dev/filelock/pull/789)
- ✨ feat(api): export lease types and has_fcntl by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#790](https://redirect.github.com/tox-dev/filelock/pull/790)
- 🐛 fix(strict): age private records by the filesystem clock by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#792](https://redirect.github.com/tox-dev/filelock/pull/792)
- 🐛 fix(async): surface executor shutdown as an error by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#793](https://redirect.github.com/tox-dev/filelock/pull/793)
- 🐛 fix(soft): expire leases on the contender's clock by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#796](https://redirect.github.com/tox-dev/filelock/pull/796)
- 🐛 fix(soft-rw): stop an acquire that close() overtook by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#798](https://redirect.github.com/tox-dev/filelock/pull/798)
- 🐛 fix(strict): record claims before linking them by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#787](https://redirect.github.com/tox-dev/filelock/pull/787)
- 🐛 fix(soft): restore a live marker a stale break moved aside by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#786](https://redirect.github.com/tox-dev/filelock/pull/786)
- 🐛 fix(api): chain errors on 3.10 without exceptiongroup by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#788](https://redirect.github.com/tox-dev/filelock/pull/788)
- 🐛 fix(soft): release a dropped SoftFileLease by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#791](https://redirect.github.com/tox-dev/filelock/pull/791)
- 🐛 fix(read-write): keep probe fds until the last connection closes by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#794](https://redirect.github.com/tox-dev/filelock/pull/794)
- 📦 build(sdist): ship docs and update SECURITY.md by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#812](https://redirect.github.com/tox-dev/filelock/pull/812)
- 🐛 fix(soft-rw): survive a removed generation log by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#795](https://redirect.github.com/tox-dev/filelock/pull/795)
- 🐛 fix(soft): tell PID namespaces apart in the marker host by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#797](https://redirect.github.com/tox-dev/filelock/pull/797)
- 🐛 fix(async): release from the finalizer and keep I/O off the loop by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#800](https://redirect.github.com/tox-dev/filelock/pull/800)
- 🐛 fix(strict): name what blocks the lock path by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#804](https://redirect.github.com/tox-dev/filelock/pull/804)
- 🐛 fix(read-write): reject WAL databases and link beside the db by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#805](https://redirect.github.com/tox-dev/filelock/pull/805)
- 🐛 fix(read-write): track read depth per thread by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#806](https://redirect.github.com/tox-dev/filelock/pull/806)
- 🐛 fix(soft): honour mode and tighten marker grammar by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#807](https://redirect.github.com/tox-dev/filelock/pull/807)
- 🧪 test: drop timing races from two runner-load flakes by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#809](https://redirect.github.com/tox-dev/filelock/pull/809)
- 🐛 fix(descriptor): reject poll intervals above TIMEOUT_MAX by
[@&#8203;sricharanreddycheruku](https://redirect.github.com/sricharanreddycheruku)
in
[tox-dev/filelock#802](https://redirect.github.com/tox-dev/filelock/pull/802)
- 🐛 fix(api): validate lock options up front by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#803](https://redirect.github.com/tox-dev/filelock/pull/803)
- 🐛 fix(soft-rw): publish the head through gen/HEAD by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#799](https://redirect.github.com/tox-dev/filelock/pull/799)
- 🐛 fix(api): release thread holds, guard reentry by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#810](https://redirect.github.com/tox-dev/filelock/pull/810)
- 🧪 test(lease): give the age-out test a real-time margin by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#814](https://redirect.github.com/tox-dev/filelock/pull/814)
- 📝 docs: point canonical and og:url at versioned pages by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#813](https://redirect.github.com/tox-dev/filelock/pull/813)
- 🐛 fix(read-write): refuse a database moved mid-acquire by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#808](https://redirect.github.com/tox-dev/filelock/pull/808)
- 🐛 fix: close regressions since 4.0.12 by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#815](https://redirect.github.com/tox-dev/filelock/pull/815)

#### New Contributors

- [@&#8203;darrenhuai](https://redirect.github.com/darrenhuai) made
their first contribution in
[tox-dev/filelock#779](https://redirect.github.com/tox-dev/filelock/pull/779)
-
[@&#8203;harbinresearcher](https://redirect.github.com/harbinresearcher)
made their first contribution in
[tox-dev/filelock#775](https://redirect.github.com/tox-dev/filelock/pull/775)
-
[@&#8203;sricharanreddycheruku](https://redirect.github.com/sricharanreddycheruku)
made their first contribution in
[tox-dev/filelock#802](https://redirect.github.com/tox-dev/filelock/pull/802)

**Full Changelog**:
<tox-dev/filelock@4.0.12...4.1.0>

###
[`v4.0.12`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.12)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.11...4.0.12)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.12 -->

#### What's Changed

- fix: support older SQLite read locks by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#771](https://redirect.github.com/tox-dev/filelock/pull/771)

**Full Changelog**:
<tox-dev/filelock@4.0.11...4.0.12>

###
[`v4.0.11`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.11)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.10...4.0.11)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.11 -->

#### What's Changed

- docs: select an existing tox environment in contributing guide by
[@&#8203;raghav-sharma-ai](https://redirect.github.com/raghav-sharma-ai)
in
[tox-dev/filelock#767](https://redirect.github.com/tox-dev/filelock/pull/767)
- fix(read-write): handle NetBSD fd limits by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#768](https://redirect.github.com/tox-dev/filelock/pull/768)

#### New Contributors

-
[@&#8203;raghav-sharma-ai](https://redirect.github.com/raghav-sharma-ai)
made their first contribution in
[tox-dev/filelock#767](https://redirect.github.com/tox-dev/filelock/pull/767)

**Full Changelog**:
<tox-dev/filelock@4.0.10...4.0.11>

###
[`v4.0.10`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.10)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.9...4.0.10)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.10 -->

#### What's Changed

- ♻️ refactor(util): test helpers via public locks by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#764](https://redirect.github.com/tox-dev/filelock/pull/764)
- 🐛 fix(singleton): reject conflicting async and lease options by
[@&#8203;kokotatan](https://redirect.github.com/kokotatan) in
[tox-dev/filelock#765](https://redirect.github.com/tox-dev/filelock/pull/765)

#### New Contributors

- [@&#8203;kokotatan](https://redirect.github.com/kokotatan) made their
first contribution in
[tox-dev/filelock#765](https://redirect.github.com/tox-dev/filelock/pull/765)

**Full Changelog**:
<tox-dev/filelock@4.0.9...4.0.10>

###
[`v4.0.9`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.9)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.8...4.0.9)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.9 -->

#### What's Changed

- 📝 docs(util): correct write and break guarantees by
[@&#8203;pralav-25](https://redirect.github.com/pralav-25) in
[tox-dev/filelock#762](https://redirect.github.com/tox-dev/filelock/pull/762)
- 🐛 fix(read-write): close db fd after connect by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#763](https://redirect.github.com/tox-dev/filelock/pull/763)

#### New Contributors

- [@&#8203;pralav-25](https://redirect.github.com/pralav-25) made their
first contribution in
[tox-dev/filelock#762](https://redirect.github.com/tox-dev/filelock/pull/762)

**Full Changelog**:
<tox-dev/filelock@4.0.8...4.0.9>

###
[`v4.0.8`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.8)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.7...4.0.8)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.8 -->

#### What's Changed

- 🐛 fix(read-write): refuse cross-thread write release by
[@&#8203;feiiiiii5](https://redirect.github.com/feiiiiii5) in
[tox-dev/filelock#761](https://redirect.github.com/tox-dev/filelock/pull/761)

**Full Changelog**:
<tox-dev/filelock@4.0.7...4.0.8>

###
[`v4.0.7`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.7)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.6...4.0.7)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.7 -->

#### What's Changed

- 🐛 fix(mode): require owner read and write by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#760](https://redirect.github.com/tox-dev/filelock/pull/760)

**Full Changelog**:
<tox-dev/filelock@4.0.6...4.0.7>

###
[`v4.0.6`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.6)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.5...4.0.6)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.6 -->

#### What's Changed

- fix(read-write): validate reentrant timeouts by
[@&#8203;feiiiiii5](https://redirect.github.com/feiiiiii5) in
[tox-dev/filelock#756](https://redirect.github.com/tox-dev/filelock/pull/756)

**Full Changelog**:
<tox-dev/filelock@4.0.5...4.0.6>

###
[`v4.0.5`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.5)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.4...4.0.5)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.5 -->

#### What's Changed

- fix(marker): preserve live owners by
[@&#8203;DawnofGenX](https://redirect.github.com/DawnofGenX) in
[tox-dev/filelock#751](https://redirect.github.com/tox-dev/filelock/pull/751)
- fix(tests): separate mode and access checks by
[@&#8203;pasmud](https://redirect.github.com/pasmud) in
[tox-dev/filelock#753](https://redirect.github.com/tox-dev/filelock/pull/753)
- fix(read-write): honor instance defaults by
[@&#8203;DawnofGenX](https://redirect.github.com/DawnofGenX) in
[tox-dev/filelock#752](https://redirect.github.com/tox-dev/filelock/pull/752)
- fix(async): validate blocking read-write timeouts by
[@&#8203;pasmud](https://redirect.github.com/pasmud) in
[tox-dev/filelock#755](https://redirect.github.com/tox-dev/filelock/pull/755)
- fix(strict): handle vanished unreadable claims by
[@&#8203;januththedev](https://redirect.github.com/januththedev) in
[tox-dev/filelock#754](https://redirect.github.com/tox-dev/filelock/pull/754)

#### New Contributors

- [@&#8203;DawnofGenX](https://redirect.github.com/DawnofGenX) made
their first contribution in
[tox-dev/filelock#751](https://redirect.github.com/tox-dev/filelock/pull/751)
- [@&#8203;pasmud](https://redirect.github.com/pasmud) made their first
contribution in
[tox-dev/filelock#753](https://redirect.github.com/tox-dev/filelock/pull/753)
- [@&#8203;januththedev](https://redirect.github.com/januththedev) made
their first contribution in
[tox-dev/filelock#754](https://redirect.github.com/tox-dev/filelock/pull/754)

**Full Changelog**:
<tox-dev/filelock@4.0.4...4.0.5>

###
[`v4.0.4`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.4)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.3...4.0.4)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.4 -->

#### What's Changed

- 🐛 fix(identity): digest the cut tail of long hostnames by
[@&#8203;feiiiiii5](https://redirect.github.com/feiiiiii5) in
[tox-dev/filelock#748](https://redirect.github.com/tox-dev/filelock/pull/748)

#### New Contributors

- [@&#8203;feiiiiii5](https://redirect.github.com/feiiiiii5) made their
first contribution in
[tox-dev/filelock#748](https://redirect.github.com/tox-dev/filelock/pull/748)

**Full Changelog**:
<tox-dev/filelock@4.0.3...4.0.4>

###
[`v4.0.3`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.3)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.2...4.0.3)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.3 -->

#### What's Changed

- 🐛 fix(api): skip the fork audit hook on CPython <3.12 by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#747](https://redirect.github.com/tox-dev/filelock/pull/747)

**Full Changelog**:
<tox-dev/filelock@4.0.2...4.0.3>

###
[`v4.0.2`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.2)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.1...4.0.2)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.2 -->

#### What's Changed

- docs: create the data directory in the async cache example by
[@&#8203;agammann](https://redirect.github.com/agammann) in
[tox-dev/filelock#740](https://redirect.github.com/tox-dev/filelock/pull/740)
- fix: ignore broken sphinx-llm release by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#742](https://redirect.github.com/tox-dev/filelock/pull/742)
- 🐛 fix(api): serialize concurrent transitions on shared locks by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#745](https://redirect.github.com/tox-dev/filelock/pull/745)
- 🐛 fix(async-rw): give each task its own hold by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#746](https://redirect.github.com/tox-dev/filelock/pull/746)

#### New Contributors

- [@&#8203;agammann](https://redirect.github.com/agammann) made their
first contribution in
[tox-dev/filelock#740](https://redirect.github.com/tox-dev/filelock/pull/740)

**Full Changelog**:
<tox-dev/filelock@4.0.1...4.0.2>

###
[`v4.0.1`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.1)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/4.0.0...4.0.1)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.1 -->

#### What's Changed

- fix: reject invalid poll_interval before sleep by
[@&#8203;Pitchfork-and-Torch](https://redirect.github.com/Pitchfork-and-Torch)
in
[tox-dev/filelock#739](https://redirect.github.com/tox-dev/filelock/pull/739)

#### New Contributors

-
[@&#8203;Pitchfork-and-Torch](https://redirect.github.com/Pitchfork-and-Torch)
made their first contribution in
[tox-dev/filelock#739](https://redirect.github.com/tox-dev/filelock/pull/739)

**Full Changelog**:
<tox-dev/filelock@4.0.0...4.0.1>

###
[`v4.0.0`](https://redirect.github.com/tox-dev/filelock/releases/tag/4.0.0)

[Compare
Source](https://redirect.github.com/tox-dev/py-filelock/compare/3.32.7...4.0.0)

<!-- Release notes generated using configuration in .github/release.yaml
at 4.0.0 -->

#### What's Changed

- 🐛 fix(soft-rw): replace the state mutex with a generation log by
[@&#8203;gaborbernat](https://redirect.github.com/gaborbernat) in
[tox-dev/filelock#738](https://redirect.github.com/tox-dev/filelock/pull/738)

**Full Changelog**:
<tox-dev/filelock@3.32.7...4.0.0>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/google-cloud-python).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNTUuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE1Ni4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant