@@ -18,13 +18,13 @@ package co.touchlab.sqliter
1818
1919import co.touchlab.sqliter.concurrency.ConcurrentDatabaseConnection
2020import co.touchlab.sqliter.concurrency.SingleThreadDatabaseConnection
21- import platform.Foundation.NSLock
21+ import co.touchlab.stately.concurrency.Lock
2222import kotlin.native.concurrent.AtomicInt
2323import kotlin.native.concurrent.freeze
2424
2525class NativeDatabaseManager (private val path : String ,
2626 override val configuration : DatabaseConfiguration
27- ):DatabaseManager{
27+ ):DatabaseManager{
2828 override fun createMultiThreadedConnection (): DatabaseConnection {
2929 return ConcurrentDatabaseConnection (createConnection()).freeze()
3030 }
@@ -33,7 +33,7 @@ class NativeDatabaseManager(private val path:String,
3333 return SingleThreadDatabaseConnection (createConnection())
3434 }
3535
36- val lock = NSLock ()
36+ val lock = Lock ()
3737
3838 companion object {
3939 val CREATE_IF_NECESSARY = 0x10000000
@@ -58,13 +58,23 @@ class NativeDatabaseManager(private val path:String,
5858
5959 if (connectionCount.value == 0 ){
6060 conn.updateJournalMode(configuration.journalMode)
61- conn.migrateIfNeeded(configuration.create, configuration.upgrade, configuration.version)
61+
62+ try {
63+ conn.migrateIfNeeded(configuration.create, configuration.upgrade, configuration.version)
64+ } catch (e: Exception ) {
65+
66+ // If this failed, we have to close the connection or we will end up leaking it.
67+ println (" attempted to run migration and failed. closing connection." )
68+ conn.close()
69+ throw e
70+ }
6271 }
6372
73+ connectionCount.increment()
74+
6475 return conn
6576 }
6677 finally {
67- connectionCount.increment()
6878 lock.unlock()
6979 }
7080 }
0 commit comments