Fix a problem with the savepoint code and in-memory journals. (CVS 6061)

FossilOrigin-Name: 26ceebf38e7ae7bbda3284995b03f829a2d2493f
This commit is contained in:
danielk1977 2008-12-23 19:15:56 +00:00
parent 3368a24e62
commit 67ddef6922
3 changed files with 16 additions and 11 deletions

View File

@ -1,5 +1,5 @@
C Fix\san\sOOM\sproblem\sin\swhere.c.\s(CVS\s6060) C Fix\sa\sproblem\swith\sthe\ssavepoint\scode\sand\sin-memory\sjournals.\s(CVS\s6061)
D 2008-12-23T16:23:05 D 2008-12-23T19:15:57
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 77635d0909c2067cee03889a1e04ce910d8fb809 F Makefile.in 77635d0909c2067cee03889a1e04ce910d8fb809
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -142,7 +142,7 @@ F src/os_common.h 24525d8b7bce66c374dfc1810a6c9043f3359b60
F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5 F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5
F src/os_unix.c e6eacc7ec735ded605fefcbaf250058baa8feb12 F src/os_unix.c e6eacc7ec735ded605fefcbaf250058baa8feb12
F src/os_win.c 496e3ceb499aedc63622a89ef76f7af2dd902709 F src/os_win.c 496e3ceb499aedc63622a89ef76f7af2dd902709
F src/pager.c 5998dc0bfa382d43e1d8c1c498597d2600cc495b F src/pager.c 67af495bcd0723a1574dcdefebeac8edc3fee492
F src/pager.h 7191294438881eb4d13eedade97891e8dc993905 F src/pager.h 7191294438881eb4d13eedade97891e8dc993905
F src/parse.y 4d0e33a702dc3ea7b69d8ae1914b3fbd32e46057 F src/parse.y 4d0e33a702dc3ea7b69d8ae1914b3fbd32e46057
F src/pcache.c 16dc8da6e6ba6250f8dfd9ee46036db1cbceedc6 F src/pcache.c 16dc8da6e6ba6250f8dfd9ee46036db1cbceedc6
@ -684,7 +684,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
P 8d0f724477422db05ed46e58ce40a720107384f0 P d2105f617eeb04c8177546c45bf6c63e72757f91
R c726708670ccf95f167692db119dc409 R 62a2a7b3ecef75a74f7c0626bd24ccb4
U drh U danielk1977
Z c22e3c6f94cff34311c193678421dc1d Z 52a2a6db5bd35226b01afc59433c7e60

View File

@ -1 +1 @@
d2105f617eeb04c8177546c45bf6c63e72757f91 26ceebf38e7ae7bbda3284995b03f829a2d2493f

View File

@ -18,7 +18,7 @@
** file simultaneously, or one process from reading the database while ** file simultaneously, or one process from reading the database while
** another is writing. ** another is writing.
** **
** @(#) $Id: pager.c,v 1.522 2008/12/23 10:37:47 danielk1977 Exp $ ** @(#) $Id: pager.c,v 1.523 2008/12/23 19:15:57 danielk1977 Exp $
*/ */
#ifndef SQLITE_OMIT_DISKIO #ifndef SQLITE_OMIT_DISKIO
#include "sqliteInt.h" #include "sqliteInt.h"
@ -938,6 +938,7 @@ static void releaseAllSavepoint(Pager *pPager){
sqlite3_free(pPager->aSavepoint); sqlite3_free(pPager->aSavepoint);
pPager->aSavepoint = 0; pPager->aSavepoint = 0;
pPager->nSavepoint = 0; pPager->nSavepoint = 0;
pPager->stmtNRec = 0;
} }
/* /*
@ -3327,7 +3328,7 @@ static int pager_write(PgHdr *pPg){
if( rc==SQLITE_OK ){ if( rc==SQLITE_OK ){
rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4); rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4);
} }
PAGERTRACE3("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno); PAGERTRACE3("STMT-JOURNAL %d page %d @ %d\n", PAGERID(pPager), pPg->pgno);
if( rc!=SQLITE_OK ){ if( rc!=SQLITE_OK ){
return rc; return rc;
} }
@ -3968,7 +3969,11 @@ int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){
for(/* no-op */; ii<nSavepoint; ii++){ for(/* no-op */; ii<nSavepoint; ii++){
assert( pPager->dbSizeValid ); assert( pPager->dbSizeValid );
aNew[ii].nOrig = pPager->dbSize; aNew[ii].nOrig = pPager->dbSize;
aNew[ii].iOffset = (pPager->journalOpen ? pPager->journalOff : 0); if( pPager->journalOpen && pPager->journalOff>0 ){
aNew[ii].iOffset = pPager->journalOff;
}else{
aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager);
}
aNew[ii].iSubRec = pPager->stmtNRec; aNew[ii].iSubRec = pPager->stmtNRec;
aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize); aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize);
if( !aNew[ii].pInSavepoint ){ if( !aNew[ii].pInSavepoint ){