Mail Archives: cygwin/2012/08/16/15:52:44
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
- Raw text -