Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: tox-dev/filelock
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 3.29.4
Choose a base ref
...
head repository: tox-dev/filelock
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 3.29.5
Choose a head ref
  • 14 commits
  • 17 files changed
  • 6 contributors

Commits on Jun 15, 2026

  1. serialise read/write release rollback against a concurrent acquire (#563

    )
    
    ReadWriteLock.release() rolls back the transaction on the shared sqlite3
    connection outside _transaction_lock, even though acquire() runs its own
    BEGIN under that lock. Once release has put lock_level back to 0 inside
    the internal lock but has not yet rolled back, another thread acquiring
    on the same instance sees the level at 0, takes _transaction_lock and
    issues BEGIN against the connection whose transaction is still open,
    which raises "cannot start a transaction within a transaction"
    (re-raised, since it is not a "database is locked" timeout); in the
    reverse ordering the rollback instead ends the new holder's freshly
    started transaction and quietly drops the database lock while it still
    thinks it holds it. The added test parks the rollback with the level
    already at 0 and shows the racing acquirer now waits rather than
    erroring. Wrapping the rollback in _transaction_lock keeps it serialised
    against acquire the same way the rest of the transaction work already
    is.
    
    ---------
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    dxbjavid and pre-commit-ci[bot] authored Jun 15, 2026
    Configuration menu
    Copy the full SHA
    897930f View commit details
    Browse the repository at this point in the history
  2. [pre-commit.ci] pre-commit autoupdate (#564)

    <!--pre-commit.ci start-->
    updates:
    - [github.com/python-jsonschema/check-jsonschema: 0.37.2 →
    0.37.3](python-jsonschema/check-jsonschema@0.37.2...0.37.3)
    - [github.com/tox-dev/pyproject-fmt: v2.23.0 →
    v2.24.1](tox-dev/pyproject-fmt@v2.23.0...v2.24.1)
    - [github.com/astral-sh/ruff-pre-commit: v0.15.16 →
    v0.15.17](astral-sh/ruff-pre-commit@v0.15.16...v0.15.17)
    - [github.com/rbubley/mirrors-prettier: v3.8.3 →
    v3.8.4](rbubley/mirrors-prettier@v3.8.3...v3.8.4)
    <!--pre-commit.ci end-->
    
    ---------
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
    pre-commit-ci[bot] and gaborbernat authored Jun 15, 2026
    Configuration menu
    Copy the full SHA
    65c3b65 View commit details
    Browse the repository at this point in the history

Commits on Jun 16, 2026

  1. don't follow symlinks when refreshing soft read/write lock markers (#565

    )
    
    Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
    dxbjavid and gaborbernat authored Jun 16, 2026
    Configuration menu
    Copy the full SHA
    2e20c75 View commit details
    Browse the repository at this point in the history

Commits on Jun 19, 2026

  1. Configuration menu
    Copy the full SHA
    64f0c29 View commit details
    Browse the repository at this point in the history

Commits on Jun 21, 2026

  1. don't follow symlinks in raise_on_not_writable_file (#567)

    raise_on_not_writable_file is the pre-acquire writability/exists gate
    used by SoftFileLock and WindowsFileLock, and it still uses os.stat
    which follows symlinks. If a hostile process plants a symlink at the
    lock path, the check inspects the link target rather than the lock path
    itself, so a symlink to a directory raises IsADirectoryError and a
    symlink to a read-only file raises PermissionError, turning a normal
    contended acquire into a misleading hard failure and leaking whether
    arbitrary target paths are writable to the caller. The actual open
    already uses O_NOFOLLOW and refuses a symlinked lock file, and every
    other lock-path op here (the O_NOFOLLOW reads, the lstat in
    break_lock_file and the lifetime check) already declines to follow
    symlinks, so this precheck was the odd one out. Switching it to os.lstat
    reads the link itself; behaviour is unchanged for ordinary lock files,
    and a real read-only file or directory is still rejected.
    dxbjavid authored Jun 21, 2026
    Configuration menu
    Copy the full SHA
    022394c View commit details
    Browse the repository at this point in the history

Commits on Jun 24, 2026

  1. [pre-commit.ci] pre-commit autoupdate (#568)

    <!--pre-commit.ci start-->
    updates:
    - [github.com/tox-dev/pyproject-fmt: v2.24.1 →
    v2.25.0](tox-dev/pyproject-fmt@v2.24.1...v2.25.0)
    - [github.com/astral-sh/ruff-pre-commit: v0.15.17 →
    v0.15.18](astral-sh/ruff-pre-commit@v0.15.17...v0.15.18)
    - [github.com/zizmorcore/zizmor-pre-commit: v1.25.2 →
    v1.26.1](zizmorcore/zizmor-pre-commit@v1.25.2...v1.26.1)
    <!--pre-commit.ci end-->
    
    ---------
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
    pre-commit-ci[bot] and gaborbernat authored Jun 24, 2026
    Configuration menu
    Copy the full SHA
    dbcc83a View commit details
    Browse the repository at this point in the history
  2. build(deps): bump actions/checkout from 6.0.3 to 7.0.0 (#570)

    Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.3
    to 7.0.0.
    <details>
    <summary>Release notes</summary>
    <p><em>Sourced from <a
    href="https://github.com/actions/checkout/releases">actions/checkout's
    releases</a>.</em></p>
    <blockquote>
    <h2>v7.0.0</h2>
    <h2>What's Changed</h2>
    <ul>
    <li>block checking out fork pr for pull_request_target and workflow_run
    by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
    <li>Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the
    minor-actions-dependencies group across 1 directory by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2458">actions/checkout#2458</a></li>
    <li>Bump flatted from 3.3.1 to 3.4.2 by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2460">actions/checkout#2460</a></li>
    <li>Bump js-yaml from 4.1.0 to 4.2.0 by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2461">actions/checkout#2461</a></li>
    <li>Bump <code>@​actions/core</code> and
    <code>@​actions/tool-cache</code> and Remove uuid by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2459">actions/checkout#2459</a></li>
    <li>upgrade module to esm and update dependencies by <a
    href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2463">actions/checkout#2463</a></li>
    <li>Bump the minor-npm-dependencies group across 1 directory with 3
    updates by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2462">actions/checkout#2462</a></li>
    <li>getting ready for checkout v7 release by <a
    href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2464">actions/checkout#2464</a></li>
    <li>update error wording by <a
    href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2467">actions/checkout#2467</a></li>
    </ul>
    <h2>New Contributors</h2>
    <ul>
    <li><a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> made
    their first contribution in <a
    href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
    </ul>
    <p><strong>Full Changelog</strong>: <a
    href="https://github.com/actions/checkout/compare/v6.0.3...v7.0.0">https://github.com/actions/checkout/compare/v6.0.3...v7.0.0</a></p>
    </blockquote>
    </details>
    <details>
    <summary>Changelog</summary>
    <p><em>Sourced from <a
    href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
    changelog</a>.</em></p>
    <blockquote>
    <h1>Changelog</h1>
    <h2>v7.0.0</h2>
    <ul>
    <li>Block checking out fork PR for pull_request_target and workflow_run
    by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
    <li>Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the
    minor-actions-dependencies group across 1 directory by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2458">actions/checkout#2458</a></li>
    <li>Bump flatted from 3.3.1 to 3.4.2 by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2460">actions/checkout#2460</a></li>
    <li>Bump js-yaml from 4.1.0 to 4.2.0 by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2461">actions/checkout#2461</a></li>
    <li>Bump <code>@​actions/core</code> and
    <code>@​actions/tool-cache</code> and Remove uuid by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2459">actions/checkout#2459</a></li>
    <li>upgrade module to esm and update dependencies by <a
    href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2463">actions/checkout#2463</a></li>
    <li>Bump the minor-npm-dependencies group across 1 directory with 3
    updates by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2462">actions/checkout#2462</a></li>
    </ul>
    <h2>v6.0.3</h2>
    <ul>
    <li>Fix checkout init for SHA-256 repositories by <a
    href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
    <li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
    href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
    </ul>
    <h2>v6.0.2</h2>
    <ul>
    <li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
    href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
    </ul>
    <h2>v6.0.1</h2>
    <ul>
    <li>Add worktree support for persist-credentials includeIf by <a
    href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
    </ul>
    <h2>v6.0.0</h2>
    <ul>
    <li>Persist creds to a separate file by <a
    href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
    <li>Update README to include Node.js 24 support details and requirements
    by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
    </ul>
    <h2>v5.0.1</h2>
    <ul>
    <li>Port v6 cleanup to v5 by <a
    href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
    </ul>
    <h2>v5.0.0</h2>
    <ul>
    <li>Update actions checkout to use node 24 by <a
    href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
    </ul>
    <h2>v4.3.1</h2>
    <ul>
    <li>Port v6 cleanup to v4 by <a
    href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
    </ul>
    <h2>v4.3.0</h2>
    <ul>
    <li>docs: update README.md by <a
    href="https://github.com/motss"><code>@​motss</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
    <li>Add internal repos for checking out multiple repositories by <a
    href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
    <li>Documentation update - add recommended permissions to Readme by <a
    href="https://github.com/benwells"><code>@​benwells</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
    <li>Adjust positioning of user email note and permissions heading by <a
    href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
    <li>Update README.md by <a
    href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
    <li>Update CODEOWNERS for actions by <a
    href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
    in <a
    href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
    <li>Update package dependencies by <a
    href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
    </ul>
    <h2>v4.2.2</h2>
    <ul>
    <li><code>url-helper.ts</code> now leverages well-known environment
    variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
    in <a
    href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
    <li>Expand unit test coverage for <code>isGhes</code> by <a
    href="https://github.com/jww3"><code>@​jww3</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
    </ul>
    <h2>v4.2.1</h2>
    <ul>
    <li>Check out other refs/* by commit if provided, fall back to ref by <a
    href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
    </ul>
    <!-- raw HTML omitted -->
    </blockquote>
    <p>... (truncated)</p>
    </details>
    <details>
    <summary>Commits</summary>
    <ul>
    <li><a
    href="https://github.com/actions/checkout/commit/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0"><code>9c091bb</code></a>
    update error wording (<a
    href="https://redirect.github.com/actions/checkout/issues/2467">#2467</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/1044a6dea927916f2c38ba5aeffbc0a847b1221a"><code>1044a6d</code></a>
    getting ready for checkout v7 release (<a
    href="https://redirect.github.com/actions/checkout/issues/2464">#2464</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/f0282184c7ce73ab54c7e4ab5a617122602e575f"><code>f028218</code></a>
    Bump the minor-npm-dependencies group across 1 directory with 3 updates
    (<a
    href="https://redirect.github.com/actions/checkout/issues/2462">#2462</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/d914b262ffc244530a203ab40decab34c3abf34d"><code>d914b26</code></a>
    upgrade module to esm and update dependencies (<a
    href="https://redirect.github.com/actions/checkout/issues/2463">#2463</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/537c7ef99cef6e5ddb5e7ff5d16d14510503801d"><code>537c7ef</code></a>
    Bump <code>@​actions/core</code> and <code>@​actions/tool-cache</code>
    and Remove uuid (<a
    href="https://redirect.github.com/actions/checkout/issues/2459">#2459</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/130a169078a413d3a5246a393625e8e742f387f6"><code>130a169</code></a>
    Bump js-yaml from 4.1.0 to 4.2.0 (<a
    href="https://redirect.github.com/actions/checkout/issues/2461">#2461</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/7d09575332117a40b46e5e020664df234cd416f3"><code>7d09575</code></a>
    Bump flatted from 3.3.1 to 3.4.2 (<a
    href="https://redirect.github.com/actions/checkout/issues/2460">#2460</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/0f9f3aa320cb53abeb534aeb54048075d9697a0e"><code>0f9f3aa</code></a>
    Bump actions/publish-immutable-action (<a
    href="https://redirect.github.com/actions/checkout/issues/2458">#2458</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/f9e715a95fcd1f9253f77dd28f11e88d2d6460c7"><code>f9e715a</code></a>
    block checking out fork pr for pull_request_target and workflow_run (<a
    href="https://redirect.github.com/actions/checkout/issues/2454">#2454</a>)</li>
    <li>See full diff in <a
    href="https://github.com/actions/checkout/compare/df4cb1c069e1874edd31b4311f1884172cec0e10...9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0">compare
    view</a></li>
    </ul>
    </details>
    <br />
    
    
    [![Dependabot compatibility
    score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=6.0.3&new-version=7.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
    
    Dependabot will resolve any conflicts with this PR as long as you don't
    alter it yourself. You can also trigger a rebase manually by commenting
    `@dependabot rebase`.
    
    [//]: # (dependabot-automerge-start)
    [//]: # (dependabot-automerge-end)
    
    ---
    
    <details>
    <summary>Dependabot commands and options</summary>
    <br />
    
    You can trigger Dependabot actions by commenting on this PR:
    - `@dependabot rebase` will rebase this PR
    - `@dependabot recreate` will recreate this PR, overwriting any edits
    that have been made to it
    - `@dependabot show <dependency name> ignore conditions` will show all
    of the ignore conditions of the specified dependency
    - `@dependabot ignore this major version` will close this PR and stop
    Dependabot creating any more for this major version (unless you reopen
    the PR or upgrade to it yourself)
    - `@dependabot ignore this minor version` will close this PR and stop
    Dependabot creating any more for this minor version (unless you reopen
    the PR or upgrade to it yourself)
    - `@dependabot ignore this dependency` will close this PR and stop
    Dependabot creating any more for this dependency (unless you reopen the
    PR or upgrade to it yourself)
    
    
    </details>
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    dependabot[bot] authored Jun 24, 2026
    Configuration menu
    Copy the full SHA
    70ecdb2 View commit details
    Browse the repository at this point in the history

Commits on Jun 29, 2026

  1. don't complete a writer acquire on a peer's reclaimed marker (#571)

    the writer acquire is two-phase, and in phase 2 (waiting for readers to
    drain) it refreshes the .write marker on every scan. if the writer is
    paused longer than stale_threshold a peer can evict that now-stale
    marker and reclaim the slot with its own token, but phase 2 carried on
    touching whatever sat at the path and reported success once the readers
    had gone, so the original writer would finish its acquire on top of the
    peer's live marker and two writers could end up believing they hold the
    exclusive lock at the same time. this re-checks that the marker still
    carries our token before refreshing it, the same identity check the
    heartbeat refresh and the release path already rely on, and re-claims
    the slot (waiting behind the peer when it currently holds .write)
    instead of trusting a foreign marker. the regression test drives the
    eviction mid phase-2 and asserts the acquire no longer completes on a
    stranger's marker.
    dxbjavid authored Jun 29, 2026
    Configuration menu
    Copy the full SHA
    22ecd6a View commit details
    Browse the repository at this point in the history
  2. [pre-commit.ci] pre-commit autoupdate (#572)

    <!--pre-commit.ci start-->
    updates:
    - [github.com/tox-dev/pyproject-fmt: v2.25.0 →
    v2.25.1](tox-dev/pyproject-fmt@v2.25.0...v2.25.1)
    - [github.com/astral-sh/ruff-pre-commit: v0.15.18 →
    v0.15.20](astral-sh/ruff-pre-commit@v0.15.18...v0.15.20)
    - [github.com/rbubley/mirrors-prettier: v3.8.4 →
    v3.9.1](rbubley/mirrors-prettier@v3.8.4...v3.9.1)
    <!--pre-commit.ci end-->
    
    ---------
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Jun 29, 2026
    Configuration menu
    Copy the full SHA
    0b707fe View commit details
    Browse the repository at this point in the history

Commits on Jul 2, 2026

  1. use a private break name in break_lock_file (#576)

    break_lock_file renames a stale lock aside before re-checking and
    unlinking it, but the aside name is a fixed `<lock>.break.<pid>`. Two
    breakers in the same process share that name (a thread pool where each
    worker holds its own lock instance with a lifetime, all contending on
    one expired lock), so a second break can rename a freshly recreated live
    lock onto that path in the small window between the re-verify lstat and
    the unlink, and the first breaker then deletes a live lock the inode
    check just approved, letting a second holder in. The soft read/write
    marker break already appends a random token to its aside name for
    exactly this reason; this makes break_lock_file do the same so no peer
    can target our break path.
    dxbjavid authored Jul 2, 2026
    Configuration menu
    Copy the full SHA
    7595a7b View commit details
    Browse the repository at this point in the history
  2. Keep Unix lock files after release (#577)

    ## Problem
    
    Since `03b0ab7` (`feat(unix): delete lock file on release`),
    `UnixFileLock._release()` unlinks the path before unlocking and closing
    the fd. That lets a process that already opened the old inode keep
    waiting on that deleted file while another process recreates the
    filename and locks a new inode, so both can believe they hold the same
    lock.
    
    Fixes #574.
    
    ## Solution
    
    - stop unlinking the Unix lock file on release
    - keep the Unix-specific expectations aligned with the persistent-path
    behavior
    - add a regression that proves a waiter fd cannot acquire a different
    inode after another lock instance reacquires the same path
    
    ## Testing
    
    - `.venv-ci/bin/python -m pytest tests/test_filelock.py
    tests/test_unix_fallback.py tests/test_self_deadlock.py -q`
    - `.venv-ci/bin/python -m ruff check src/filelock/_unix.py
    tests/test_filelock.py tests/test_unix_fallback.py
    tests/test_self_deadlock.py`
    - `.venv-ci/bin/python -m ruff format --check src/filelock/_unix.py
    tests/test_filelock.py tests/test_unix_fallback.py
    tests/test_self_deadlock.py`
    itscloud0 authored Jul 2, 2026
    Configuration menu
    Copy the full SHA
    ea594a5 View commit details
    Browse the repository at this point in the history

Commits on Jul 3, 2026

  1. Configuration menu
    Copy the full SHA
    c76dee6 View commit details
    Browse the repository at this point in the history
  2. roll back a read acquire's open transaction when its SELECT fails (#575)

    Co-authored-by: Bernát Gábor <gaborjbernat@gmail.com>
    dxbjavid and gaborbernat authored Jul 3, 2026
    Configuration menu
    Copy the full SHA
    1f6cde4 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    be56227 View commit details
    Browse the repository at this point in the history
Loading