From: drh Date: Fri, 30 Mar 2007 14:46:01 +0000 (+0000) Subject: Tease apart the two phases of pager commit. (CVS 3763) X-Git-Tag: version-3.6.10~2407 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3cdd7d37c6d8d176b57cc3ca0dbc1325e932216e;p=thirdparty%2Fsqlite.git Tease apart the two phases of pager commit. (CVS 3763) FossilOrigin-Name: e5f17078a28b6a47d6943d40c526390c36258392 --- diff --git a/manifest b/manifest index 33db0ae37c..ed247c7429 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Refactoring\sthe\sbtree\sand\spager\sroutines\sinto\sdistinct\stwo-phase\scommit\nroutines.\s\sWe've\salways\sdone\sa\stwo-phase\scommit\s-\sthis\schange\sis\sjust\nmaking\sthat\smore\sapparent\sin\sthe\scode.\s(CVS\s3762) -D 2007-03-30T14:06:34 +C Tease\sapart\sthe\stwo\sphases\sof\spager\scommit.\s(CVS\s3763) +D 2007-03-30T14:46:01 F Makefile.in 2f2c3bf69faf0ae7b8e8af4f94f1986849034530 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -86,7 +86,7 @@ F src/os_unix.c 4291be23eec73d1ec04010ae702364b781b5f773 F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e F src/os_win.c c3a8403ea28bbb89d6507fa984c5919bd3fe7539 F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b -F src/pager.c f9131543cc602202de8a436ca9207e4c28b3f41e +F src/pager.c 08e997b91657fd82dc19c1d06f965eeaaa2de7f5 F src/pager.h e79a24cf200b8771366217f5bca414f5b7823f42 F src/parse.y 207ab04273ae13aa4a729b96008d294d5f334ab3 F src/pragma.c 8fd4f98822007a8d2c34e235ad3c35f1d77b3e51 @@ -447,7 +447,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P 70c8c7e2ce5213778e63c200a6637849920deea6 -R a5a112b3409ee86a088223323643c5e6 +P 66b3ad09ea657d25d48cb75ec2671ea2dc1b6005 +R 87f3fb17b92b06ba0363d652e2c2e851 U drh -Z 49017f06f92594291d8addf7b78eb7c9 +Z a7a4533761023a234a1b0962226a7a23 diff --git a/manifest.uuid b/manifest.uuid index 66ce391f31..50b28b268e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -66b3ad09ea657d25d48cb75ec2671ea2dc1b6005 \ No newline at end of file +e5f17078a28b6a47d6943d40c526390c36258392 \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index fdf0c9379b..dc681a8dee 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.307 2007/03/30 14:06:34 drh Exp $ +** @(#) $Id: pager.c,v 1.308 2007/03/30 14:46:01 drh Exp $ */ #ifndef SQLITE_OMIT_DISKIO #include "sqliteInt.h" @@ -3707,6 +3707,7 @@ int sqlite3PagerCommitPhaseOne(Pager *pPager, const char *zMaster, Pgno nTrunc){ pPg = pager_get_all_dirty_pages(pPager); rc = pager_write_pagelist(pPg); if( rc!=SQLITE_OK ) goto sync_exit; + pPager->pDirty = 0; /* Sync the database file. */ if( !pPager->noSync ){ @@ -3766,18 +3767,9 @@ int sqlite3PagerCommitPhaseTwo(Pager *pPager){ pPager->state = PAGER_SHARED; return SQLITE_OK; } - if( pPager->dirtyCache==0 ){ - /* Exit early (without doing the time-consuming sqlite3OsSync() calls) - ** if there have been no changes to the database file. */ - assert( pPager->needSync==0 ); - rc = pager_end_transaction(pPager); - }else{ - assert( pPager->journalOpen ); - rc = sqlite3PagerCommitPhaseOne(pPager, 0, 0); - if( rc==SQLITE_OK ){ - rc = pager_end_transaction(pPager); - } - } + assert( pPager->journalOpen || !pPager->dirtyCache ); + assert( pPager->state==PAGER_SYNCED || !pPager->dirtyCache ); + rc = pager_end_transaction(pPager); return pager_error(pPager, rc); }