-C Do\snot\sjournal\sthe\sfile\slocking\spage\swhen\sdoing\sa\sdatabase\scopy\sas\npart\sof\sa\sVACUUM.\s\sTicket\s#1432.\s(CVS\s2703)
-D 2005-09-16T11:32:18
+C Do\snot\sjournal\sthe\slocking\spage\swhich\sdoing\san\sautovacuum.\s\sSimilar\sto\sthe\nproblem\sof\s#1432\sexcept\sthat\sthis\sone\soccurs\son\sautovacuum\sinstead\sof\svacuum.\nAn\sassert()\shas\sbeen\sadded\sto\scatch\sany\sfuture\sincidents\sof\sthis\stype.\s(CVS\s2704)
+D 2005-09-16T17:16:53
F Makefile.in 12784cdce5ffc8dfb707300c34e4f1eb3b8a14f1
F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e
F src/os_win.c ed03a35b2894f9b99840415f941a9f8594dea756
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
-F src/pager.c 96802068d3f387a6a4f016d840366ac9f8afcf6e
+F src/pager.c 68b059546919456925a90c5c30c451642f07893c
F src/pager.h 17b13225abd93c1e9f470060f40a21b9edb5a164
F src/parse.y 5602d5cb894dda2932bf50b7e88782a4440ae3ae
F src/pragma.c 69413fbdc0c6aaa493a776ea52c1b3e6cf35dfb2
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 35a8893537ae5faed6ee49270ac9c01a6010993f
-R 4f6752612df08a912c75d90f62aa8a80
+P 248f77972bb1be3325708ea143fd87bb7ce914a7
+R 62af5c92fcfe64d9cc594ec8493542ca
U drh
-Z 5f588c09ac24589f63c729ebd13fcd32
+Z 0ea04e760a26e6d28f44fdc2389d9391
-248f77972bb1be3325708ea143fd87bb7ce914a7
\ No newline at end of file
+5b6dc12b7d25d999be5d282cd0b06e02e2bda765
\ No newline at end of file
** file simultaneously, or one process from reading the database while
** another is writing.
**
-** @(#) $Id: pager.c,v 1.213 2005/09/16 10:18:46 danielk1977 Exp $
+** @(#) $Id: pager.c,v 1.214 2005/09/16 17:16:53 drh Exp $
*/
#ifndef SQLITE_OMIT_DISKIO
#include "sqliteInt.h"
/* The maximum page number is 2^31. Return SQLITE_CORRUPT if a page
** number greater than this, or zero, is requested.
*/
- if( pgno>PAGER_MAX_PGNO || pgno==0 ){
+ if( pgno>PAGER_MAX_PGNO || pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){
return SQLITE_CORRUPT;
}
}
}else{
u32 cksum;
+ /* We should never write to the journal file the page that
+ ** contains the database locks. The following assert verifies
+ ** that we do not. */
+ assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
CODEC(pPager, pData, pPg->pgno, 7);
cksum = pager_cksum(pPager, pPg->pgno, pData);
saved = *(u32*)PGHDR_TO_EXTRA(pPg, pPager);
*/
Pgno i;
void *pPage;
+ int iSkip = PAGER_MJ_PGNO(pPager);
for( i=nTrunc+1; i<=pPager->origDbSize; i++ ){
- if( !(pPager->aInJournal[i/8] & (1<<(i&7))) ){
+ if( !(pPager->aInJournal[i/8] & (1<<(i&7))) && i!=iSkip ){
rc = sqlite3pager_get(pPager, i, &pPage);
if( rc!=SQLITE_OK ) goto sync_exit;
rc = sqlite3pager_write(pPage);