public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Andrey Repin <anrdaemon@yandex.ru>
To: Corinna Vinschen <cygwin@cygwin.com>, cygwin@cygwin.com
Subject: Re: Unreliable flock
Date: Mon, 04 Apr 2016 17:05:00 -0000	[thread overview]
Message-ID: <59768064.20160404195111@yandex.ru> (raw)
In-Reply-To: <20160404151644.GB29337@calimero.vinschen.de>

Greetings, Corinna Vinschen!

>> The script (let's call it test.sh):
>> 
>> #!/bin/dash -x
>> _lock="./console-session.lock"
>> {
>>   flock -n 9 || {
>>       echo "The $(cat "$_lock") command is running already."
>>       exit 3
>>     } >&2
>> 
>>   printf "$1" >&9
>> 
>>   trap 'rm "$_lock";' EXIT HUP INT ABRT TERM
>> 
>>   sleep 20
>> 
>> } 9>> "$_lock"
>> 
>> Very simple in essence.
>> The one-liner:
>> 
>> { flock -n 9 && sleep 10 || echo Fail;} 9>> ./console-session.lock
>> 
>> Also extremely simple.
>> 
>> Open two terminals. mintty or native, bash or dash, doesn't matter.
>> chdir to the directory with the script.
>> 
>> Start script in one terminal. ./test.sh
>> Start oneliner in another terminal. Fail. How predictable!

> I don't know what I'm doing wrong, but this WJFFM with Cygwin 2.4.1
> as well as 2.5.0.  Additionally I tried to put the oneliner into a
> script but it still WFM.

It works for me, too. From time to time. But this work is completely
unreliable. It may work five times, then fail ten times in a row.
Most often it fails, if I run oneliner first. Almost 100%.

> Apart from that, did you notice the flock restrictions outlined in
> https://cygwin.com/cygwin-api/std-notes.html ?

If you mean the part about

> BSD file locks created via flock are only propagated to the direct parent
> process, not to grand parents or sibling processes. The locks are only valid
> in the creating process, its parent process, and subsequently started child
> processes sharing the same file descriptor.

then that's a showstopper. In short, it makes the function literally useless.
I can work around it in a given script, but... *sad panda*

Why they aren't real locks? What's use for "advisory locks"? "I think I may
have a use for this file, but you are free to delete it, if you wish" ?


-- 
With best regards,
Andrey Repin
Monday, April 4, 2016 19:27:11

Sorry for my terrible english...


--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

  reply	other threads:[~2016-04-04 17:05 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-02 21:35 Andrey Repin
2016-04-04 15:16 ` Corinna Vinschen
2016-04-04 17:05   ` Andrey Repin [this message]
2016-04-04 19:06     ` Corinna Vinschen
2016-04-05  2:20       ` Andrey Repin
2016-04-05  8:33         ` Corinna Vinschen
2016-04-04 19:24     ` Warren Young

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=59768064.20160404195111@yandex.ru \
    --to=anrdaemon@yandex.ru \
    --cc=cygwin@cygwin.com \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).