X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RP_MATCHES_RCVD,TW_SV X-Spam-Check-By: sourceware.org Message-ID: <502D4F2F.5080306@etr-usa.com> Date: Thu, 16 Aug 2012 13:51:11 -0600 From: Warren Young User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64; rv:14.0) Gecko/20120713 Thunderbird/14.0 MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: Options for getting mandatory locking in cygwin1.dll (was: Promote sqlite 3.7.13-1 from test status?) References: <502C0B7D DOT 10909 AT etr-usa DOT com> <20120816085016 DOT GB5536 AT calimero DOT vinschen DOT de> <502CCBB1 DOT 2070600 AT etr-usa DOT com> <20120816105507 DOT GD17546 AT calimero DOT vinschen DOT de> <502CE120 DOT 4050900 AT etr-usa DOT com> <20120816122654 DOT GG17546 AT calimero DOT vinschen DOT de> In-Reply-To: <20120816122654.GG17546@calimero.vinschen.de> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com 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