On Mon, Mar 12, 2012 at 1:23 AM, James Russell Moore < j.russell.mo...@gmail.com> wrote:
> Hello, I just saw what could be a possible typo when acquiring a pending > lock. > > In the current version of the amalgamation (3.7.10) line 23200 there is the > following code: > The code in question is part of the OS/2 driver, which is contributed code. Nobody on the core SQLite team has the capability of compiling or testing SQLite on OS/2. If any OS/2 users see this, can you please look into the matter for us? > > /* Acquire a PENDING lock > */ > if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){ > newLocktype = PENDING_LOCK; > gotPendingLock = 0; > OSTRACE(( "LOCK %d acquire pending lock. pending lock boolean unset.\n", > pFile->h )); > } > > In the surroundings of that snippet there are checks to acquire the > different kinds of locks but in all of them the lock type is tested against > what's is being acquired. Furthermore, the next test following this one to > acquire an exclusive lock has the same condition, which wouldn't > be necessary if the current code for the pending lock is correct: > > /* Acquire an EXCLUSIVE lock > */ > if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){ > assert( pFile->locktype>=SHARED_LOCK ); > res = unlockReadLock(pFile); > ... > > In line 33996 the same situation happens: > > /* Acquire a PENDING lock > */ > if( locktype==EXCLUSIVE_LOCK && res ){ > newLocktype = PENDING_LOCK; > gotPendingLock = 0; > } > > It could be nothing, since I don't have a deep knowledge on how SQLite is > implemented, but in the documentation in > SQLite.org<http://sqlite.org/lockingv3.html>the following text > appears: > > "A PENDING lock means that the process holding the lock wants to write to > the database as soon as possible and is just waiting on all current SHARED > locks to clear so that it can get an EXCLUSIVE lock." > > Given the name of the variables involved in those pieces of code going from > an EXCLUSIVE lock to a PENDING lock doesn't seem logical. I've attached a > patch on how I think is correct in case it is preferable (available > here<http://pastebin.com/phEUEAiY> > too). > > Sorry for the trouble caused if the current state is correct. > > Kind regards, > James Russell. > > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > -- D. Richard Hipp d...@sqlite.org _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users