Adding rudimentary locking to ITSQLite3Database to kill errors.
authorJoseph Spiros <joseph.spiros@ithinksw.com>
Fri, 19 Sep 2008 22:39:26 +0000 (22:39 +0000)
committerJoseph Spiros <joseph.spiros@ithinksw.com>
Fri, 19 Sep 2008 22:39:26 +0000 (22:39 +0000)
ITSQLite3Database.h
ITSQLite3Database.m

index a8b93b0..803c49d 100644 (file)
@@ -18,6 +18,7 @@ extern id sqlite3_column_objc_object(sqlite3_stmt *statement, int columnIndex);
 @interface ITSQLite3Database : NSObject {
        NSString *dbPath;
        sqlite3 *db;
+       NSRecursiveLock *dbLock;
 }
 
 - (id)initWithPath:(NSString *)path;
index 1984e6d..9de25de 100644 (file)
@@ -65,11 +65,13 @@ id sqlite3_column_objc_object(sqlite3_stmt *statement, int columnIndex) {
                        [self release];
                        return nil;
                }
+               dbLock = [[NSRecursiveLock alloc] init];
        }
        return self;
 }
 
 - (void)dealloc {
+       [dbLock release];
        if (sqlite3_close(db) != SQLITE_OK) {
                ITDebugLog(@"%@ sqlite3_close(0x%x): %@", ITDebugErrorPrefixForObject(self), db, [NSString stringWithUTF8String:sqlite3_errmsg(db)]);
        }
@@ -136,7 +138,9 @@ id sqlite3_column_objc_object(sqlite3_stmt *statement, int columnIndex) {
        va_list args;
        va_start(args, query);
        
+       [dbLock lock];
        BOOL result = [self executeQuery:query va_args:args];
+       [dbLock unlock];
        
        va_end(args);
        return result;
@@ -154,7 +158,9 @@ id sqlite3_column_objc_object(sqlite3_stmt *statement, int columnIndex) {
        va_list args;
        va_start(args, query);
        
+       [dbLock lock];
        id result = [self fetchRow:query va_args:args];
+       [dbLock unlock];
        
        va_end(args);
        return result;
@@ -206,7 +212,9 @@ id sqlite3_column_objc_object(sqlite3_stmt *statement, int columnIndex) {
        va_list args;
        va_start(args, query);
        
+       [dbLock lock];
        id result = [self fetchTable:query va_args:args];
+       [dbLock unlock];
        
        va_end(args);
        return result;