This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: Unreliable flock
- From: Andrey Repin <anrdaemon at yandex dot ru>
- To: Corinna Vinschen <cygwin at cygwin dot com>, cygwin at cygwin dot com
- Date: Mon, 4 Apr 2016 19:51:11 +0300
- Subject: Re: Unreliable flock
- Authentication-results: sourceware.org; auth=none
- References: <175808986 dot 20160403002257 at yandex dot ru> <20160404151644 dot GB29337 at calimero dot vinschen dot de>
- Reply-to: cygwin at cygwin dot com
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