From: drh Date: Tue, 26 Feb 2008 16:16:45 +0000 (+0000) Subject: Add commentary to clarify what is happening when an I/O error occurs while X-Git-Tag: version-3.6.10~1366 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=04c3a46ed9403f568d6c6d95f130c1017bdc0288;p=thirdparty%2Fsqlite.git Add commentary to clarify what is happening when an I/O error occurs while writing dirty pages to the database file. (CVS 4811) FossilOrigin-Name: afe49d81f479715e13f18a97170d414a853a6cfe --- diff --git a/manifest b/manifest index a1b6649871..be32d52927 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\san\sassert()\sto\sverify\sthat\sthe\sdirty-page\slist\sin\sthe\spager\sis\nvalid\sbefore\susing\sit.\s(CVS\s4810) -D 2008-02-26T14:46:05 +C Add\scommentary\sto\sclarify\swhat\sis\shappening\swhen\san\sI/O\serror\soccurs\swhile\nwriting\sdirty\spages\sto\sthe\sdatabase\sfile.\s(CVS\s4811) +D 2008-02-26T16:16:45 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7 F Makefile.in 6be8d7c60afa918807e77ec4459f8aff68c996d9 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -127,7 +127,7 @@ F src/os_unix.c e4daef7628f690fa2b188af3632fb18f96525946 F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e F src/os_win.c aa3f4bbee3b8c182d25a33fbc319f486857c12c1 F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b -F src/pager.c 1d5d4167f80bc5d487c026aea5fe08753f9a5c78 +F src/pager.c ee55f9c201d1df44e684aa42b31f47c5a8ec8ff0 F src/pager.h 8174615ffd14ccc2cad2b081b919a398fa95e3f9 F src/parse.y 00f2698c8ae84f315be5e3f10b63c94f531fdd6d F src/pragma.c e3f39f8576234887ecd0c1de43dc51af5855930c @@ -621,7 +621,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P 427e7f8b4a54eb6136174af63a467324d6fb051e -R 24a233a27b1c7d161b4f137b2e844c7b +P 942daf94ef1f8ac678988e175ef968a2d3f801e9 +R 78628a049bcafa60db998c6268ba7168 U drh -Z 2c7770a62aa3333221324adf20aa5a18 +Z 794fa50c5e327e7a323854fb5d8e9a99 diff --git a/manifest.uuid b/manifest.uuid index 7c591167fb..a3349ab46b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -942daf94ef1f8ac678988e175ef968a2d3f801e9 \ No newline at end of file +afe49d81f479715e13f18a97170d414a853a6cfe \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index c7b34abbe5..d8341ff039 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.410 2008/02/26 14:46:05 drh Exp $ +** @(#) $Id: pager.c,v 1.411 2008/02/26 16:16:45 drh Exp $ */ #ifndef SQLITE_OMIT_DISKIO #include "sqliteInt.h" @@ -4578,8 +4578,14 @@ 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 ){ - while( pPg && !pPg->dirty ){ pPg = pPg->pDirty; } - pPager->pDirty = pPg; + assert( rc!=SQLITE_IOERR_BLOCKED ); + /* The error might have left the dirty list all fouled up here, + ** but that does not matter because if the if the dirty list did + ** get corrupted, then the transaction will roll back and + ** discard the dirty list. There is an assert in + ** pager_get_all_dirty_pages() that verifies that no attempt + ** is made to use an invalid dirty list. + */ goto sync_exit; } pPager->pDirty = 0;