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