From: Kjetil Torgrim Homme <kjetil.homme@redpill-linpro.com>
To: util-linux@vger.kernel.org
Subject: flock(1): working with fcntl locks
Date: Fri, 03 Jan 2014 14:59:26 +0100 [thread overview]
Message-ID: <52C6C23E.1070207@redpill-linpro.com> (raw)
I was a bit surprised to find that flock(2) specifically ignores fcntl
locks. from its manual page:
Since kernel 2.0, flock() is implemented as a system call in
its own
right rather than being emulated in the GNU C library as a
call to
fcntl(2). This yields true BSD semantics: there is no
interaction
between the types of lock placed by flock() and fcntl(2), and
flock()
does not detect deadlock.
I was trying to check if dpkg or apt-get was holding its lock and skip
running my cron job if so, but unfortunately it uses fcntl (F_SETLK),
and flock(1) will happily call flock(2) which succeeds.
it's a bit sad to have to write the lock testing in C or Perl rather
than use the nice little flock(1), so I wonder if we could "fix"
flock(1) somehow. I think I'm not alone to be surprised that flock(1)
is so ineffective against locking done by other utilities, so my
prefered solution would be to switch to using fcntl(2).
the chance of a problematic regression is small, I think. my *guess* is
that most flock(1) usage is only interacting with other usage of
flock(1) (not flock(2)). also relying on flock(1) succeeding on a
fcntl-locked file would be just Wrong(tm).
the "safe" solution is to add a flag, --fcntl, but isn't that just cruft?
I can provide patches when I hear what the mailing list wants.
--
Kjetil T. Homme
Redpill Linpro - Changing the game
next reply other threads:[~2014-01-03 14:06 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-03 13:59 Kjetil Torgrim Homme [this message]
2014-01-03 14:40 ` flock(1): working with fcntl locks Karel Zak
2014-01-03 15:12 ` Kjetil Torgrim Homme
2014-01-04 8:31 ` Karel Zak
2014-01-10 20:46 ` Andy Lutomirski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52C6C23E.1070207@redpill-linpro.com \
--to=kjetil.homme@redpill-linpro.com \
--cc=util-linux@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox