aboutsummaryrefslogtreecommitdiff
path: root/src/fault.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2008-05-13 13:27:33 +0000
committerdrh <drh@noemail.net>2008-05-13 13:27:33 +0000
commit4873d5f61475c24118a6ac616c0fb87f13778cce (patch)
tree50e48613855644548e1332943dd1e2b05b56a800 /src/fault.c
parentd138c0168f64a84f57d11f3247a3a93388c8f364 (diff)
downloadsqlite-4873d5f61475c24118a6ac616c0fb87f13778cce.tar.gz
sqlite-4873d5f61475c24118a6ac616c0fb87f13778cce.zip
Make the benign-fault setting recursive. Make all malloc failures
during a rollback benign since there is nothing we can do about them. (CVS 5128) FossilOrigin-Name: a9d1d931358637a6f039723a053098f65530de4b
Diffstat (limited to 'src/fault.c')
-rw-r--r--src/fault.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/fault.c b/src/fault.c
index d31dd4387..cded2351d 100644
--- a/src/fault.c
+++ b/src/fault.c
@@ -42,7 +42,7 @@ static struct FaultInjector {
int nBenign; /* Number of benign failures seen since last config */
int nFail; /* Number of failures seen since last config */
u8 enable; /* True if enabled */
- u8 benign; /* True if next failure will be benign */
+ i16 benign; /* Positive if next failure will be benign */
} aFault[SQLITE_FAULTINJECTOR_COUNT];
/*
@@ -104,14 +104,26 @@ int sqlite3FaultPending(int id){
** will continue to function normally. So a malloc failure during
** a hash table resize is a benign fault.
*/
-void sqlite3FaultBenign(int id, int enable){
+void sqlite3FaultBeginBenign(int id){
if( id<0 ){
for(id=0; id<SQLITE_FAULTINJECTOR_COUNT; id++){
- aFault[id].benign = enable;
+ aFault[id].benign++;
}
}else{
assert( id>=0 && id<SQLITE_FAULTINJECTOR_COUNT );
- aFault[id].benign = enable;
+ aFault[id].benign++;
+ }
+}
+void sqlite3FaultEndBenign(int id){
+ if( id<0 ){
+ for(id=0; id<SQLITE_FAULTINJECTOR_COUNT; id++){
+ assert( aFault[id].benign>0 );
+ aFault[id].benign--;
+ }
+ }else{
+ assert( id>=0 && id<SQLITE_FAULTINJECTOR_COUNT );
+ assert( aFault[id].benign>0 );
+ aFault[id].benign--;
}
}
@@ -140,7 +152,7 @@ int sqlite3FaultStep(int id){
}
sqlite3Fault();
aFault[id].nFail++;
- if( aFault[id].benign ){
+ if( aFault[id].benign>0 ){
aFault[id].nBenign++;
}
aFault[id].nRepeat--;