Repository navigation
fix(rw): forget the async lock's worker after fork - #828
Merged
Merged
Conversation
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
force-pushed
the
fix/async-rw-fork-exit
branch
from
October 14, 2026 08:10
3cae2e3 to
1a90164
Compare
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` |  |  | --- ### 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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​gaborbernat](https://redirect.github.com/gaborbernat) in [tox-dev/filelock#828](https://redirect.github.com/tox-dev/filelock/pull/828) #### New Contributors - [@​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 [@​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 [@​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 [@​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 [@​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 [@​dxbjavid](https://redirect.github.com/dxbjavid) in [tox-dev/filelock#821](https://redirect.github.com/tox-dev/filelock/pull/821) #### New Contributors - [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​gaborbernat](https://redirect.github.com/gaborbernat) in [tox-dev/filelock#815](https://redirect.github.com/tox-dev/filelock/pull/815) #### New Contributors - [@​darrenhuai](https://redirect.github.com/darrenhuai) made their first contribution in [tox-dev/filelock#779](https://redirect.github.com/tox-dev/filelock/pull/779) - [@​harbinresearcher](https://redirect.github.com/harbinresearcher) made their first contribution in [tox-dev/filelock#775](https://redirect.github.com/tox-dev/filelock/pull/775) - [@​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 [@​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 [@​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 [@​gaborbernat](https://redirect.github.com/gaborbernat) in [tox-dev/filelock#768](https://redirect.github.com/tox-dev/filelock/pull/768) #### New Contributors - [@​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 [@​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 [@​kokotatan](https://redirect.github.com/kokotatan) in [tox-dev/filelock#765](https://redirect.github.com/tox-dev/filelock/pull/765) #### New Contributors - [@​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 [@​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 [@​gaborbernat](https://redirect.github.com/gaborbernat) in [tox-dev/filelock#763](https://redirect.github.com/tox-dev/filelock/pull/763) #### New Contributors - [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​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 [@​januththedev](https://redirect.github.com/januththedev) in [tox-dev/filelock#754](https://redirect.github.com/tox-dev/filelock/pull/754) #### New Contributors - [@​DawnofGenX](https://redirect.github.com/DawnofGenX) made their first contribution in [tox-dev/filelock#751](https://redirect.github.com/tox-dev/filelock/pull/751) - [@​pasmud](https://redirect.github.com/pasmud) made their first contribution in [tox-dev/filelock#753](https://redirect.github.com/tox-dev/filelock/pull/753) - [@​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 [@​feiiiiii5](https://redirect.github.com/feiiiiii5) in [tox-dev/filelock#748](https://redirect.github.com/tox-dev/filelock/pull/748) #### New Contributors - [@​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 [@​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 [@​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 [@​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 [@​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 [@​gaborbernat](https://redirect.github.com/gaborbernat) in [tox-dev/filelock#746](https://redirect.github.com/tox-dev/filelock/pull/746) #### New Contributors - [@​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 [@​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 - [@​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 [@​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-->
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.
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.futuresexit hook, which wakes every registered executor worker by puttingNoneon its queue. The workerAsyncReadWriteLockowns 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'sputblocks. 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.