From 1357d9f5f77f573a97b31c46750e55081a30dee0 Mon Sep 17 00:00:00 2001 From: danielk1977 Date: Tue, 16 Sep 2008 05:12:24 +0000 Subject: [PATCH] Do not attempt to change the page size after a pager has entered the error state (Pager.errCode!=SQLITE_OK). This prevents an assertion failure in vacuum3.test. (CVS 5703) FossilOrigin-Name: aa5c9455be961e712d5c56de8d699adabb186cdc --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/pager.c | 40 +++++++++++++++++++++------------------- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/manifest b/manifest index 2faba63354..0c1135cdda 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Minor\scomment\schange\sto\stest_async.c.\sNo\scode\schanges.\s(CVS\s5702) -D 2008-09-15T15:49:34 +C Do\snot\sattempt\sto\schange\sthe\spage\ssize\safter\sa\spager\shas\sentered\sthe\serror\sstate\s(Pager.errCode!=SQLITE_OK).\sThis\sprevents\san\sassertion\sfailure\sin\svacuum3.test.\s(CVS\s5703) +D 2008-09-16T05:12:24 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in d15a7ebfe5e057a72a49805ffb302dbb601c8329 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -137,7 +137,7 @@ F src/os_common.h 24525d8b7bce66c374dfc1810a6c9043f3359b60 F src/os_os2.c e391fc95adc744bbdcefd4d11e3066998185a0a0 F src/os_unix.c 8f4def6a92681735908fa1b87b5cc0291ebafde6 F src/os_win.c 3209dc0ed734291764393ea8d534ba0d8696a540 -F src/pager.c b1ea487022bf91ffba58fc4c02518398290ac2c2 +F src/pager.c f21654d1fcfd62ce058dbb88d07159745dc5bd84 F src/pager.h c45380ca9d0933ea5bc4ecb3a43958b6d2ec5a9c F src/parse.y d0f76d2cb8d6883d5600dc20beb961a6022b94b8 F src/pcache.c d3c0f4ad708929fba15886914b18b82d64e286bf @@ -636,7 +636,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P 3bc221b940565133ae8d95f59b3b120e57df0124 -R 169d88f35cd96cb7ad2b2ca745637258 +P b134106000e2e694cf5e1e5ae2f5b1e2956ee74a +R cdc2f80804241449a7b7980720e97dd8 U danielk1977 -Z 0fe4cdd19c8dedfd7534f209f2501a4f +Z 91cb718d4a8f6d563442b7b2dfb3b695 diff --git a/manifest.uuid b/manifest.uuid index 7ce4c5fed6..b36c80ca65 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -b134106000e2e694cf5e1e5ae2f5b1e2956ee74a \ No newline at end of file +aa5c9455be961e712d5c56de8d699adabb186cdc \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 6a4cbd1dc3..cb2f3849ba 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.489 2008/09/11 10:29:16 danielk1977 Exp $ +** @(#) $Id: pager.c,v 1.490 2008/09/16 05:12:24 danielk1977 Exp $ */ #ifndef SQLITE_OMIT_DISKIO #include "sqliteInt.h" @@ -1950,26 +1950,28 @@ void sqlite3PagerSetReiniter(Pager *pPager, void (*xReinit)(DbPage*,int)){ ** value before returning. */ int sqlite3PagerSetPagesize(Pager *pPager, u16 *pPageSize){ - int rc = SQLITE_OK; - u16 pageSize = *pPageSize; - assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) ); - if( pageSize && pageSize!=pPager->pageSize - && (pPager->memDb==0 || pPager->dbSize==0) - && sqlite3PcacheRefCount(pPager->pPCache)==0 - ){ - char *pNew = (char *)sqlite3PageMalloc(pageSize); - if( !pNew ){ - rc = SQLITE_NOMEM; - }else{ - pager_reset(pPager); - pPager->pageSize = pageSize; - if( !pPager->memDb ) setSectorSize(pPager); - sqlite3PageFree(pPager->pTmpSpace); - pPager->pTmpSpace = pNew; - sqlite3PcacheSetPageSize(pPager->pPCache, pageSize); + int rc = pPager->errCode; + if( rc==SQLITE_OK ){ + u16 pageSize = *pPageSize; + assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) ); + if( pageSize && pageSize!=pPager->pageSize + && (pPager->memDb==0 || pPager->dbSize==0) + && sqlite3PcacheRefCount(pPager->pPCache)==0 + ){ + char *pNew = (char *)sqlite3PageMalloc(pageSize); + if( !pNew ){ + rc = SQLITE_NOMEM; + }else{ + pager_reset(pPager); + pPager->pageSize = pageSize; + if( !pPager->memDb ) setSectorSize(pPager); + sqlite3PageFree(pPager->pTmpSpace); + pPager->pTmpSpace = pNew; + sqlite3PcacheSetPageSize(pPager->pPCache, pageSize); + } } + *pPageSize = pPager->pageSize; } - *pPageSize = pPager->pageSize; return rc; }