aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pager.c1
-rw-r--r--src/test_vfs.c4
-rw-r--r--src/wal.c6
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;
}
diff --git a/src/wal.c b/src/wal.c
index 0eb525f41..4bbf7960c 100644
--- a/src/wal.c
+++ b/src/wal.c
@@ -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)]);
}