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.1
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.2
Choose a head ref
  • 6 commits
  • 15 files changed
  • 5 contributors

Commits on Jun 4, 2026

  1. open marker reads non-blocking to refuse attacker-placed fifo (#549)

    _read_marker in the soft read/write lock opens marker files with
    O_RDONLY | O_NOFOLLOW but no O_NONBLOCK, which is the same gap #548
    closed in _soft._read_lock_file. I was going through the soft_rw markers
    after that change and noticed O_NOFOLLOW only rejects a symlink, not a
    real FIFO, so a non-cooperating same-UID process can pre-create a named
    pipe at a predictable marker path like foo.lock.write and any peer that
    reads it during stale-break or slot-claim blocks forever on the open,
    all while holding the state SoftFileLock. Adding O_NONBLOCK makes the
    open return at once so a hostile FIFO reads as a malformed marker and
    gets evicted like any other stale entry.
    
    ---------
    
    Co-authored-by: Bernát Gábor <[email protected]>
    dxbjavid and gaborbernat authored Jun 4, 2026
    Configuration menu
    Copy the full SHA
    150ba66 View commit details
    Browse the repository at this point in the history

Commits on Jun 6, 2026

  1. 🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks (…

    …#551)
    
    A process sharing the lock directory on the same host could swap a held
    soft lock file for a symlink pointing at an old file, so the lifetime
    check saw the target's stale mtime, a waiter broke the still-live lock,
    and two processes held it at once. 🔒 This builds on @dxbjavid's #550,
    which switched the lifetime check to `os.lstat` so it reads the
    symlink's own mtime, and closes the remaining gaps in the same
    stale-breaking path.
    
    Breaking a stale lock now claims the file by inode before removing it. A
    shared `break_lock_file` helper renames the lock to a process-private
    name, re-checks the modification time, and unlinks only when it still
    matches the value seen at the stale decision. A newer time means a peer
    recreated the lock in the gap, so the helper leaves the file in place
    rather than deleting it out from under a live holder. Both the soft lock
    and the lifetime path use this helper, replacing the duplicated rename
    logic. Malformed lock files self-heal more reliably too: a non-integer
    PID or creation time now counts as unparseable, so a two or three line
    garbage file gets evicted once it ages past the safety window instead of
    wedging acquirers forever.
    
    `AsyncReadWriteLock` gained a destructor that shuts down the
    single-thread executor it owns, so forgetting to call `close()` no
    longer leaks the worker thread, while a caller-supplied executor stays
    untouched. Reviewers should know that releasing a soft lock may now
    remove the lock file as part of self-healing, and that filelock evicts
    malformed files automatically after a brief safety window. Supersedes
    #550. 🙏
    
    ---------
    
    Co-authored-by: dxbjavid <[email protected]>
    gaborbernat and dxbjavid authored Jun 6, 2026
    Configuration menu
    Copy the full SHA
    d244c6d View commit details
    Browse the repository at this point in the history

Commits on Jun 8, 2026

  1. check hostname in is_lock_held_by_us (#553)

    is_lock_held_by_us compares only the pid from the lock file against
    os.getpid() and ignores the hostname stored alongside it, so on a shared
    filesystem where the same pid is live on two hosts a lock genuinely held
    by another node is reported as held by us, and a caller acting on that
    by releasing or breaking it can drop a lock another host still holds.
    the lock file already records the hostname for exactly this
    disambiguation and the stale-break path checks it, so this reads the
    holder through _parse_lock_holder and requires both the pid and the
    hostname to match before returning true. added a regression case to the
    existing is_lock_held_by_us parametrisation covering a same-pid,
    different-host file.
    dxbjavid authored Jun 8, 2026
    Configuration menu
    Copy the full SHA
    2ff7c3c View commit details
    Browse the repository at this point in the history
  2. [pre-commit.ci] pre-commit autoupdate (#554)

    <!--pre-commit.ci start-->
    updates:
    - [github.com/astral-sh/ruff-pre-commit: v0.15.15 →
    v0.15.16](astral-sh/ruff-pre-commit@v0.15.15...v0.15.16)
    <!--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 8, 2026
    Configuration menu
    Copy the full SHA
    b862ead View commit details
    Browse the repository at this point in the history

Commits on Jun 9, 2026

  1. build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (#555)

    Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2
    to 6.0.3.
    <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>v6.0.3</h2>
    <h2>What's Changed</h2>
    <ul>
    <li>Update changelog by <a
    href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2357">actions/checkout#2357</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>
    <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>Update changelog for v6.0.3 by <a
    href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/2446">actions/checkout#2446</a></li>
    </ul>
    <h2>New Contributors</h2>
    <ul>
    <li><a href="https://github.com/yaananth"><code>@​yaananth</code></a>
    made their first contribution in <a
    href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
    </ul>
    <p><strong>Full Changelog</strong>: <a
    href="https://github.com/actions/checkout/compare/v6...v6.0.3">https://github.com/actions/checkout/compare/v6...v6.0.3</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>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>
    <h2>v4.2.0</h2>
    <ul>
    <li>Add Ref and Commit outputs by <a
    href="https://github.com/lucacome"><code>@​lucacome</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/1180">actions/checkout#1180</a></li>
    <li>Dependency updates by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a>- <a
    href="https://redirect.github.com/actions/checkout/pull/1777">actions/checkout#1777</a>,
    <a
    href="https://redirect.github.com/actions/checkout/pull/1872">actions/checkout#1872</a></li>
    </ul>
    <h2>v4.1.7</h2>
    <ul>
    <li>Bump the minor-npm-dependencies group across 1 directory with 4
    updates by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li>
    <li>Bump actions/checkout from 3 to 4 by <a
    href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li>
    <li>Check out other refs/* by commit by <a
    href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
    href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</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/df4cb1c069e1874edd31b4311f1884172cec0e10"><code>df4cb1c</code></a>
    Update changelog for v6.0.3 (<a
    href="https://redirect.github.com/actions/checkout/issues/2446">#2446</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/1cce3390c2bfda521930d01229c073c7ff920824"><code>1cce339</code></a>
    Fix checkout init for SHA-256 repositories (<a
    href="https://redirect.github.com/actions/checkout/issues/2439">#2439</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/900f2210b1d28bbbd0bd22d17926b9e224e8f231"><code>900f221</code></a>
    fix: expand merge commit SHA regex and add SHA-256 test cases (<a
    href="https://redirect.github.com/actions/checkout/issues/2414">#2414</a>)</li>
    <li><a
    href="https://github.com/actions/checkout/commit/0c366fd6a839edf440554fa01a7085ccba70ac98"><code>0c366fd</code></a>
    Update changelog (<a
    href="https://redirect.github.com/actions/checkout/issues/2357">#2357</a>)</li>
    <li>See full diff in <a
    href="https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10">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.2&new-version=6.0.3)](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] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    dependabot[bot] authored Jun 9, 2026
    Configuration menu
    Copy the full SHA
    ab6844d View commit details
    Browse the repository at this point in the history

Commits on Jun 10, 2026

  1. Release 3.29.2

    gaborbernat committed Jun 10, 2026
    Configuration menu
    Copy the full SHA
    d9216de View commit details
    Browse the repository at this point in the history
Loading