This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Options for getting mandatory locking in cygwin1.dll (was: Promote sqlite 3.7.13-1 from test status?)


On 8/16/2012 6:26 AM, Corinna Vinschen wrote:
On Aug 16 06:01, Warren Young wrote:
Advisory locking only works when all players cooperate.  We can't
assume that on Windows, unless we set up an insular Cygwin ghetto.

So, are you saying that Cygwin should use mandatory file locking?

Of course not. That would be a disaster.


You are aware that there's no chance at all to implement the UNIX
locking API calls correctly this way since Windows locking has nothing
in common with UNIX locking except for the word "locking".

Not even on a per-process basis (cygwin_set_mandatory_locking(1)), in conjunction with fcntl(F_SETLK)? That's how SQLite's unixFileLock() function is implemented.


That is, this proposal would put the DLL in a mode where it called LockFileEx() to establish the reader/writer lock byte ranges instead of using its private advisory locking scheme.

Alternately, Cygwin could follow Linux and implement 'mount -o mand'. You could get mandatory locking on just your svn checkout tree this way, for example. It would apply to all Cygwin programs, not just svn/SQLite, but it shouldn't be any more problematic than normal day to day Windows use. Cygwin programs not run within that mount wouldn't be affected.

I'm aware that fcntl(F_SETLK) isn't thread-safe[1] but we're arguing "if it's good enough for Unix, it's good enough for Cygwin" here, aren't we? The other objection in reference [1] is that it doesn't work with NFS, which doesn't matter to us here, I think.

If neither of those proposals will work, I think we'll have no choice but to continue to try and chase a SQLite specific solution. You can't fix it on the Windows native side of things. I doubt you can fix it in Subversion, and even if you could, that's no better than fixing it in SQLite. Worse, actually, because then you've got a fix that affects only one program, not all SQLite dependents.


[1] http://0pointer.de/blog/projects/locking.html


--
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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]