aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2007-03-15 12:17:42 +0000
committerdrh <drh@noemail.net>2007-03-15 12:17:42 +0000
commitd5eb79eb40e9ab3fd6a44f3c4a2bf901aa91d13c (patch)
tree037c8a0ca8cecd8b0130eaf0d084289622b2b700 /src
parentb69d96d22c51bb16d9fbdd68c271e54956c5cb6c (diff)
downloadsqlite-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.h7
-rw-r--r--src/test2.c5
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",