Has anyone experienced getting an error like this ...
# multiplatform
c
Has anyone experienced getting an error like this using Room KMP (2.7.0-alpha02 - tried 04 as well)? Getting it on both Android emulator and device. Using the bundled Sqlite driver as suggested in the docs ``````
Copy code
Coroutine error: java.lang.IllegalStateException: Unable to lock file: 'db.lck'. (Ask Gemini)
java.lang.IllegalStateException: Unable to lock file: 'db.lck'.
    at androidx.room.concurrent.FileLock.lock(FileLock.jvmAndroid.kt:49)
    at androidx.room.concurrent.ExclusiveLock.withLock(ExclusiveLock.kt:46)
    at androidx.room.BaseRoomConnectionManager$DriverWrapper.open(RoomConnectionManager.kt:65)
    at androidx.room.coroutines.ConnectionPoolImpl$5.invoke(ConnectionPoolImpl.kt:98)
    at androidx.room.coroutines.ConnectionPoolImpl$5.invoke(ConnectionPoolImpl.kt:98)
    at androidx.room.coroutines.Pool.tryOpenNewConnection(ConnectionPoolImpl.kt:223)
    at androidx.room.coroutines.Pool.acquire(ConnectionPoolImpl.kt:211)
    at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invokeSuspend(ConnectionPoolImpl.kt:174)
    at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invoke(Unknown Source:8)
    at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invoke(Unknown Source:4)
    at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturnIgnoreTimeout(Undispatched.kt:72)
    at kotlinx.coroutines.TimeoutKt.setupTimeout(Timeout.kt:148)
    at kotlinx.coroutines.TimeoutKt.withTimeout(Timeout.kt:43)
    at kotlinx.coroutines.TimeoutKt.withTimeout-KLykuaI(Timeout.kt:71)
    at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:534)
    at androidx.room.RoomConnectionManager.useConnection(RoomConnectionManager.android.kt:116)
    at androidx.room.RoomDatabase.useConnection$room_runtime_release(RoomDatabase.android.kt:623)
    at androidx.room.util.DBUtil__DBUtil_androidKt$performSuspending$$inlined$compatCoroutineExecute$DBUtil__DBUtil_androidKt$1.invokeSuspend(DBUtil.android.kt:256)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
    at java.lang.Thread.run(Thread.java:1012)
Caused by: java.io.FileNotFoundException: db.lck: open failed: EROFS (Read-only file system)
    at libcore.io.IoBridge.open(IoBridge.java:574)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:236)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
    at androidx.room.concurrent.FileLock.lock(FileLock.jvmAndroid.kt:44)
    at androidx.room.concurrent.ExclusiveLock.withLock(ExclusiveLock.kt:46) 
    at androidx.room.BaseRoomConnectionManager$DriverWrapper.open(RoomConnectionManager.kt:65) 
    at androidx.room.coroutines.ConnectionPoolImpl$5.invoke(ConnectionPoolImpl.kt:98) 
    at androidx.room.coroutines.ConnectionPoolImpl$5.invoke(ConnectionPoolImpl.kt:98) 
    at androidx.room.coroutines.Pool.tryOpenNewConnection(ConnectionPoolImpl.kt:223) 
    at androidx.room.coroutines.Pool.acquire(ConnectionPoolImpl.kt:211) 
    at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invokeSuspend(ConnectionPoolImpl.kt:174) 
    at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invoke(Unknown Source:8) 
    at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invoke(Unknown Source:4) 
    at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturnIgnoreTimeout(Undispatched.kt:72) 
    at kotlinx.coroutines.TimeoutKt.setupTimeout(Timeout.kt:148) 
    at kotlinx.coroutines.TimeoutKt.withTimeout(Timeout.kt:43) 
    at kotlinx.coroutines.TimeoutKt.withTimeout-KLykuaI(Timeout.kt:71) 
    at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:534) 
    at androidx.room.RoomConnectionManager.useConnection(RoomConnectionManager.android.kt:116) 
    at androidx.room.RoomDatabase.useConnection$room_runtime_release(RoomDatabase.android.kt:623) 
    at androidx.room.util.DBUtil__DBUtil_androidKt$performSuspending$$inlined$compatCoroutineExecute$DBUtil__DBUtil_androidKt$1.invokeSuspend(DBUtil.android.kt:256) 
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) 
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 
    at java.lang.Thread.run(Thread.java:1012) 
Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
    at libcore.io.Linux.open(Native Method)
    at libcore.io.ForwardingOs.open(ForwardingOs.java:563)
    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:274)
    at libcore.io.ForwardingOs.open(ForwardingOs.java:563)
    at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8478)
    at libcore.io.IoBridge.open(IoBridge.java:560)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:236) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:186) 
    at androidx.room.concurrent.FileLock.lock(FileLock.jvmAndroid.kt:44) 
    at androidx.room.concurrent.ExclusiveLock.withLock(ExclusiveLock.kt:46) 
    at androidx.room.BaseRoomConnectionManager$DriverWrapper.open(RoomConnectionManager.kt:65) 
    at androidx.room.coroutines.ConnectionPoolImpl$5.invoke(ConnectionPoolImpl.kt:98) 
    at androidx.room.coroutines.ConnectionPoolImpl$5.invoke(ConnectionPoolImpl.kt:98) 
    at androidx.room.coroutines.Pool.tryOpenNewConnection(ConnectionPoolImpl.kt:223) 
    at androidx.room.coroutines.Pool.acquire(ConnectionPoolImpl.kt:211) 
    at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invokeSuspend(ConnectionPoolImpl.kt:174) 
    at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invoke(Unknown Source:8) 
    at androidx.room.coroutines.ConnectionPoolImpl$acquireWithTimeout$2.invoke(Unknown Source:4) 
    at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturnIgnoreTimeout(Undispatched.kt:72) 
    at kotlinx.coroutines.TimeoutKt.setupTimeout(Timeout.kt:148) 
    at kotlinx.coroutines.TimeoutKt.withTimeout(Timeout.kt:43) 
    at kotlinx.coroutines.TimeoutKt.withTimeout-KLykuaI(Timeout.kt:71) 
    at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:534) 
    at androidx.room.RoomConnectionManager.useConnection(RoomConnectionManager.android.kt:116) 
    at androidx.room.RoomDatabase.useConnection$room_runtime_release(RoomDatabase.android.kt:623) 
    at androidx.room.util.DBUtil__DBUtil_androidKt$performSuspending$$inlined$compatCoroutineExecute$DBUtil__DBUtil_androidKt$1.invokeSuspend(DBUtil.android.kt:256) 
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) 
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 
    at java.lang.Thread.run(Thread.java:1012)
Ah okay nvm, you need to specify the path using context.getDatabasePath. You can’t just pass in a filename like with regular Room
Copy code
val path = context.getDatabasePath("db.db").absolutePath
Room.databaseBuilder(context, Database::class.java, path)
Usually just do
Copy code
Room.databaseBuilder(context, Database::class.java, "db")
p
You can ask here: #room
c
Thanks!
232 Views