diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pager.c | 1 | ||||
-rw-r--r-- | src/test_vfs.c | 4 | ||||
-rw-r--r-- | src/wal.c | 6 |
3 files changed, 8 insertions, 3 deletions
diff --git a/src/pager.c b/src/pager.c index 8d126144f..74384197b 100644 --- a/src/pager.c +++ b/src/pager.c @@ -5263,6 +5263,7 @@ int sqlite3PagerRollback(Pager *pPager){ rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1); rc2 = pager_end_transaction(pPager, pPager->setMaster); if( rc==SQLITE_OK ) rc = rc2; + rc = pager_error(pPager, rc); }else if( !pPager->dbModified || !isOpen(pPager->jfd) ){ rc = pager_end_transaction(pPager, pPager->setMaster); }else if( pPager->errCode && pPager->errCode!=SQLITE_FULL ){ diff --git a/src/test_vfs.c b/src/test_vfs.c index bf9a3b6cb..c9efb5bda 100644 --- a/src/test_vfs.c +++ b/src/test_vfs.c @@ -495,7 +495,9 @@ static int tvfsShmGet( Tcl_NewStringObj(pShm->pBuffer->zFile, -1), pShm->id, 0 ); tvfsResultCode(p, &rc); - *pp = pShm->pBuffer->a; + if( rc==SQLITE_OK ){ + *pp = pShm->pBuffer->a; + } return rc; } @@ -399,6 +399,7 @@ static int walIndexMap(Wal *pWal, int reqSize){ assert( pWal->szWIndex==0 ); pWal->pWiData = &pWal->iCallback; } + assert( rc==SQLITE_OK || pWal->pWiData==0 ); } return rc; } @@ -1117,12 +1118,13 @@ int sqlite3WalWriteLock(Wal *pWal, int op){ */ int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx){ int unused; - int rc = SQLITE_OK; + int rc; Pgno iMax = pWal->hdr.iLastPg; Pgno iFrame; + assert( pWal->pWiData==0 ); rc = walIndexReadHdr(pWal, &unused); - for(iFrame=pWal->hdr.iLastPg+1; iFrame<=iMax && rc==SQLITE_OK; iFrame++){ + for(iFrame=pWal->hdr.iLastPg+1; rc==SQLITE_OK && iFrame<=iMax; iFrame++){ assert( pWal->lockState==SQLITE_SHM_WRITE ); rc = xUndo(pUndoCtx, pWal->pWiData[walIndexEntry(iFrame)]); } |