Unreliable flock

Andrey Repin anrdaemon@yandex.ru
Mon Apr 4 17:05:00 GMT 2016


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



More information about the Cygwin mailing list