diff --git a/manifest b/manifest index cb939577b2..9854168bf6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Modify\sthe\sjournal\sformat\sto\sbe\smore\srobust\sagainst\sgarbage\sthat\smight\sappear\nin\sthe\sfile\safter\sa\spower\sfailure.\s\sThe\schanges\sare\smostly\sworking\sbut\smore\ntesting\sis\sstill\srequired.\s\sThis\scheck-in\sis\sto\scheckpoint\sthe\schanges\sso\sfar.\s(CVS\s861) -D 2003-02-11T14:55:41 +C Fix\sa\sbug\sin\sthe\slegacy\sjournal\sformat\swriting\slogic.\s(CVS\s862) +D 2003-02-12T02:10:15 F Makefile.in 6606854b1512f185b8e8c779b8d7fc2750463d64 F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd @@ -33,7 +33,7 @@ F src/main.c 764a72e6a4f021ae1d3db7e82dab625075f4fedb F src/md5.c fe4f9c9c6f71dfc26af8da63e4d04489b1430565 F src/os.c ed27e178e0c4b71f2807da81b8851f0fadc50778 F src/os.h afa3e096213bad86845f8bdca81a9e917505e401 -F src/pager.c 4adf3cc6d031504e2941791f5838138d4fad2803 +F src/pager.c 1748a01ed18d7507c4c4dd54985c4aa613583a52 F src/pager.h ce264d558c8ec289f5a9c50ca4ad499e3522a67e F src/parse.y cdaed5009423d851708848bd279147c268e6022e F src/printf.c f8fd911a8738f9b2eb07aca2870473d34707055d @@ -155,7 +155,7 @@ F www/speed.tcl 4d463e2aea41f688ed320a937f93ff885be918c3 F www/sqlite.tcl ae3dcfb077e53833b59d4fcc94d8a12c50a44098 F www/tclsqlite.tcl 1db15abeb446aad0caf0b95b8b9579720e4ea331 F www/vdbe.tcl 2013852c27a02a091d39a766bc87cff329f21218 -P e21afb82b53eade9ee267a97c58db0606f0c0a41 -R 4995a0d231005397acc1e0444b8f7298 +P 8ec5632536eea31197a3b1fd6abc57881a0cf1d7 +R b30735c88387ed3f8675a36136884368 U drh -Z 334d201676289fffaf14b926d96d12b8 +Z b9a60900a465cbc97d661e720b92ed2b diff --git a/manifest.uuid b/manifest.uuid index 60f0f4c99e..04ad9bd851 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8ec5632536eea31197a3b1fd6abc57881a0cf1d7 \ No newline at end of file +6c927dd36c19ebb8bb8222b4d18ed67f4fe733e8 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index a8aa1467a6..533a6bbd0a 100644 --- a/src/pager.c +++ b/src/pager.c @@ -18,7 +18,7 @@ ** file simultaneously, or one process from reading the database while ** another is writing. ** -** @(#) $Id: pager.c,v 1.73 2003/02/11 14:55:41 drh Exp $ +** @(#) $Id: pager.c,v 1.74 2003/02/12 02:10:15 drh Exp $ */ #include "os.h" /* Must be first to enable large file support */ #include "sqliteInt.h" @@ -612,12 +612,14 @@ static int pager_playback(Pager *pPager){ nRec = (szJ - JOURNAL_HDR_SZ(3))/JOURNAL_PG_SZ(3); } }else{ - nRec = (szJ - (sizeof(aMagic)+sizeof(Pgno))) / sizeof(PageRecord); + nRec = (szJ - JOURNAL_HDR_SZ(2))/JOURNAL_PG_SZ(2); + assert( nRec*JOURNAL_PG_SZ(2)+JOURNAL_HDR_SZ(2)==szJ ); } rc = read32bits(format, &pPager->jfd, &mxPg); if( rc!=SQLITE_OK ){ goto end_playback; } + assert( pPager->origDbSize==0 || pPager->origDbSize==mxPg ); rc = sqliteOsTruncate(&pPager->fd, SQLITE_PAGE_SIZE*(off_t)mxPg); if( rc!=SQLITE_OK ){ goto end_playback; @@ -630,7 +632,6 @@ static int pager_playback(Pager *pPager){ rc = pager_playback_one_page(pPager, &pPager->jfd, format); if( rc!=SQLITE_OK ){ if( rc==SQLITE_DONE ){ -fprintf(stderr,"Playback complete after %d of %d records\n", i, nRec); rc = SQLITE_OK; } break; @@ -1026,7 +1027,6 @@ static int syncAllPages(Pager *pPager){ */ if( pPager->needSync ){ if( !pPager->tempFile ){ - off_t szJ; assert( pPager->journalOpen ); assert( !pPager->noSync ); #ifndef NDEBUG @@ -1039,16 +1039,19 @@ static int syncAllPages(Pager *pPager){ assert( pPager->nRec*pgSz+hdrSz==pPager->syncJSize ); } #endif - if( pPager->fullSync ){ - TRACE1("SYNC\n"); - rc = sqliteOsSync(&pPager->jfd); - if( rc!=0 ) return rc; + if( journal_format>=3 ){ + off_t szJ; + if( pPager->fullSync ){ + TRACE1("SYNC\n"); + rc = sqliteOsSync(&pPager->jfd); + if( rc!=0 ) return rc; + } + sqliteOsSeek(&pPager->jfd, sizeof(aJournalMagic1)); + write32bits(&pPager->jfd, pPager->nRec); + szJ = JOURNAL_HDR_SZ(journal_format) + + pPager->nRec*JOURNAL_PG_SZ(journal_format); + sqliteOsSeek(&pPager->jfd, szJ); } - sqliteOsSeek(&pPager->jfd, sizeof(aJournalMagic1)); - write32bits(&pPager->jfd, pPager->nRec); - szJ = JOURNAL_HDR_SZ(journal_format) + - pPager->nRec*JOURNAL_PG_SZ(journal_format); - sqliteOsSeek(&pPager->jfd, szJ); TRACE1("SYNC\n"); rc = sqliteOsSync(&pPager->jfd); if( rc!=0 ) return rc;