Skip to content

Replacement nix::fcntl::Flock does not cover all use cases for deprecated nix::fcntl::flock #2356

Closed
@allenap

Description

@allenap

#2170 deprecated flock and replaced it with a Flock struct, allowing for automatic unlock-on-drop behaviour. So far, so good, but I think there are several ways in which flock can be used that cannot be modelled with this replacement. For example, upgrading or downgrading locks.

Suppose I have a shared lock and I want to upgrade it to an exclusive lock. With flock, if there's any error, e.g. EWOULDBLOCK/EAGAIN (same thing), I typically would not lose the existing shared lock.

However, using Flock, I cannot call Flock::lock with the Flock itself, so I would have to call Flock::unlock first to return the enclosed Flockable, before then calling Flock::lock. An error in that last step would leave me with no lock.

Some ideas for how to resolve this:

  • Remove the deprecation of flock.
  • Add a Flock::relock method that allows for upgrading/downgrading locks.
  • Add an impl Flockable for Flock<T> so that one can call Flock::lock with a Flock.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions