Skip to content

When calling the DatabaseManager.getDatabase function, the iOS app crashes. #63

@iVanPan

Description

@iVanPan
Image
var openDatabases = [String: Database]()

public func getDatabase(_ name: String) -> Database? {
     objc_sync_enter(openDatabases)
     defer {
         objc_sync_exit(openDatabases)
      }
   return openDatabases[name]
}

public func open(_ databaseName: String, databaseConfig: [AnyHashable: Any]?) throws {
        do {
            if self.openDatabases[databaseName] != nil {
                self.openDatabases.removeValue(forKey: databaseName)
            }
            let config = self.buildDatabaseConfig(databaseConfig)
            let database = try Database(name: databaseName, config: config)
            self.openDatabases[databaseName] = database
        } catch {
            throw DatabaseError.unableToOpenDatabase(databaseName: databaseName)
        }
    }

    public func delete(_ databaseName: String) throws {
        guard let database = self.getDatabase(databaseName) else {
            throw DatabaseError.invalidDatabaseName(databaseName: databaseName)
        }
        do {
            try database.delete()
            openDatabases.removeValue(forKey: databaseName)
        } catch {
            if let nsError = error as NSError?, nsError.code == 19 {
                // SQLite error code 19 (SQLITE_CONSTRAINT) indicates that the database is locked.
                throw DatabaseError.databaseLocked(databaseName: databaseName)
            } else {
                throw DatabaseError.unableToDeleteDatabase(message: "Error deleting database: \(error.localizedDescription)", databaseName: databaseName)
            }
        }
    }

Is there a data race issue with openDatabases?

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions