diff options
author | drh <drh@noemail.net> | 2007-03-15 12:17:42 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2007-03-15 12:17:42 +0000 |
commit | d5eb79eb40e9ab3fd6a44f3c4a2bf901aa91d13c (patch) | |
tree | 037c8a0ca8cecd8b0130eaf0d084289622b2b700 /src | |
parent | b69d96d22c51bb16d9fbdd68c271e54956c5cb6c (diff) | |
download | sqlite-d5eb79eb40e9ab3fd6a44f3c4a2bf901aa91d13c.tar.gz sqlite-d5eb79eb40e9ab3fd6a44f3c4a2bf901aa91d13c.zip |
Infrastructure to make simulated I/O errors persistent instead of
transient. (CVS 3689)
FossilOrigin-Name: 1a53f531ecd51938fab37a59b7088d89d8f8569d
Diffstat (limited to 'src')
-rw-r--r-- | src/os_common.h | 7 | ||||
-rw-r--r-- | src/test2.c | 5 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/os_common.h b/src/os_common.h index 863e3cde2..3d379e070 100644 --- a/src/os_common.h +++ b/src/os_common.h @@ -90,13 +90,16 @@ static unsigned int elapse; #ifdef SQLITE_TEST int sqlite3_io_error_hit = 0; int sqlite3_io_error_pending = 0; +int sqlite3_io_error_persist = 0; int sqlite3_diskfull_pending = 0; int sqlite3_diskfull = 0; #define SimulateIOError(CODE) \ if( sqlite3_io_error_pending ) \ - if( sqlite3_io_error_pending-- == 1 ){ local_ioerr(); CODE; } + if( sqlite3_io_error_pending-- == 1 \ + || (sqlite3_io_error_persist && sqlite3_io_error_hit) ) \ + { local_ioerr(); CODE; } static void local_ioerr(){ - sqlite3_io_error_hit = 1; /* Really just a place to set a breakpoint */ + sqlite3_io_error_hit = 1; } #define SimulateDiskfullError(CODE) \ if( sqlite3_diskfull_pending ){ \ diff --git a/src/test2.c b/src/test2.c index bb0cc1843..d9acb2b79 100644 --- a/src/test2.c +++ b/src/test2.c @@ -13,7 +13,7 @@ ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** -** $Id: test2.c,v 1.39 2006/01/06 14:32:20 drh Exp $ +** $Id: test2.c,v 1.40 2007/03/15 12:17:43 drh Exp $ */ #include "sqliteInt.h" #include "os.h" @@ -558,6 +558,7 @@ static int fake_big_file( ** Register commands with the TCL interpreter. */ int Sqlitetest2_Init(Tcl_Interp *interp){ + extern int sqlite3_io_error_persist; extern int sqlite3_io_error_pending; extern int sqlite3_io_error_hit; extern int sqlite3_diskfull_pending; @@ -592,6 +593,8 @@ int Sqlitetest2_Init(Tcl_Interp *interp){ } Tcl_LinkVar(interp, "sqlite_io_error_pending", (char*)&sqlite3_io_error_pending, TCL_LINK_INT); + Tcl_LinkVar(interp, "sqlite_io_error_persist", + (char*)&sqlite3_io_error_persist, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_io_error_hit", (char*)&sqlite3_io_error_hit, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_diskfull_pending", |