1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-08 14:02:16 +03:00

Fix a pager bug introduced by the wal code.

FossilOrigin-Name: 4a0b29dc5e573a5d696ede17db5d7acf8d23aa98
This commit is contained in:
dan
2010-04-13 11:18:40 +00:00
parent 835ae8bcdd
commit 9281bf2a9f
4 changed files with 27 additions and 16 deletions

View File

@@ -3782,20 +3782,17 @@ int sqlite3PagerSharedLock(Pager *pPager){
pager_reset(pPager);
}
if( pPager->noReadlock ){
assert( pPager->readOnly );
pPager->state = PAGER_SHARED;
}else{
if( pagerUseLog(pPager) ){
int changed = 0;
/* TODO: Change the following block to grab a WAL read-lock. Or,
** combine obtaining the read-lock with LogOpenSnapshot()? */
rc = pager_wait_on_lock(pPager, SHARED_LOCK);
if( rc!=SQLITE_OK ){
assert( pPager->state==PAGER_UNLOCK );
return pager_error(pPager, rc);
}
}
assert( pPager->state>=SHARED_LOCK );
if( pagerUseLog(pPager) ){
int changed = 0;
rc = sqlite3LogOpenSnapshot(pPager->pLog, &changed);
if( rc==SQLITE_OK ){
if( changed ){
@@ -3810,6 +3807,17 @@ int sqlite3PagerSharedLock(Pager *pPager){
int isHotJournal = 0;
assert( !MEMDB );
assert( sqlite3PcacheRefCount(pPager->pPCache)==0 );
if( pPager->noReadlock ){
assert( pPager->readOnly );
pPager->state = PAGER_SHARED;
}else{
rc = pager_wait_on_lock(pPager, SHARED_LOCK);
if( rc!=SQLITE_OK ){
assert( pPager->state==PAGER_UNLOCK );
return pager_error(pPager, rc);
}
}
assert( pPager->state>=SHARED_LOCK );
/* If a journal file exists, and there is no RESERVED lock on the
** database file, then it either needs to be played back or deleted.