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.3
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.4
Choose a head ref
  • 3 commits
  • 7 files changed
  • 3 contributors

Commits on Jun 11, 2026

  1. verify inode in break_lock_file before unlinking a stale lock (#561)

    break_lock_file renames a lock it judged stale aside and then re-checks
    only the modification time before unlinking it, but on a filesystem with
    coarse mtime granularity like nfs or fat a peer can break and recreate
    the lock within the same second, so the live recreation carries the same
    mtime the waiter saw and gets unlinked, letting a second process acquire
    it. the sibling marker break in _soft_rw already re-verifies the marker
    token for exactly this reason, so this captures the inode at the stale
    decision and aborts the break when the renamed file's inode no longer
    matches. i added a regression test that recreates the lock with a fresh
    inode under an identical mtime, which unlinks the live file before this
    change and leaves it untouched after.
    dxbjavid authored Jun 11, 2026
    Configuration menu
    Copy the full SHA
    406d0a2 View commit details
    Browse the repository at this point in the history

Commits on Jun 13, 2026

  1. keep the read/write heartbeat alive on a transient touch error (#562)

    SoftReadWriteLock._refresh_marker only catches FileNotFoundError around
    its heartbeat touch, so a transient ESTALE or EIO (routine on the
    NFS-style filesystems this lock is meant for) escapes as an unhandled
    OSError and kills the heartbeat thread without ever setting
    heartbeat_stop. The holder still believes it holds the lock while the
    marker stops being refreshed, so it goes stale, a peer evicts it and
    acquires, and two processes end up holding conflicting locks. The
    writer-drain touch in readers_drained_touching already wraps the same
    call in suppress(OSError), so this just brings the heartbeat into line:
    a transient touch error is swallowed and retried on the next tick, since
    the read just above has already confirmed the marker is still ours and a
    genuinely vanished marker is caught by the next iteration's
    _read_marker.
    
    ---------
    
    Co-authored-by: Bernát Gábor <[email protected]>
    dxbjavid and gaborbernat authored Jun 13, 2026
    Configuration menu
    Copy the full SHA
    5d663ee View commit details
    Browse the repository at this point in the history
  2. Release 3.29.4

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