public inbox for util-linux@vger.kernel.org
 help / color / mirror / Atom feed
* flock(1): working with fcntl locks
@ 2014-01-03 13:59 Kjetil Torgrim Homme
  2014-01-03 14:40 ` Karel Zak
  0 siblings, 1 reply; 5+ messages in thread
From: Kjetil Torgrim Homme @ 2014-01-03 13:59 UTC (permalink / raw)
  To: util-linux

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


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-01-10 20:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-03 13:59 flock(1): working with fcntl locks Kjetil Torgrim Homme
2014-01-03 14:40 ` Karel Zak
2014-01-03 15:12   ` Kjetil Torgrim Homme
2014-01-04  8:31     ` Karel Zak
2014-01-10 20:46       ` Andy Lutomirski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox