Uploaded image for project: 'Realm Kotlin'
  1. Realm Kotlin
  2. RKOTLIN-1016

[RLM_ERR_WRONG_TRANSACTION_STATE]: Not a read transaction - Not in our codebase

      How frequently does the bug occur?

      Sometimes

      Description

      We switched in our Android app from Java SDK to Kotlin, because we had issues with thread safety and the frozen architecture works better for us.

      Now after the release, some of our users have a new crash, which doesn't happen in our code. Or at least it's not visible in the stacktrace. Can you give us a hint, how we can prevent or fix this? Or is this a bug, you'll have to fix in the SDK?

      Stacktrace & log output

      Unable to find source-code formatter for language: shell. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
      # Crashlytics - Stack trace
      # Platform: android
      # Version: 8.16.1 (577)
      
      Fatal Exception: java.lang.IllegalStateException: [RLM_ERR_WRONG_TRANSACTION_STATE]: Not a read transaction
             at io.realm.kotlin.internal.interop.CoreErrorConverter.asThrowable(CoreErrorConverter.kt:47)
             at io.realm.kotlin.internal.interop.realmcJNI.realm_begin_write(realmcJNI.java)
             at io.realm.kotlin.internal.interop.realmc.realm_begin_write(realmc.java:462)
             at io.realm.kotlin.internal.interop.RealmInterop.realm_begin_write(RealmInterop.kt:393)
             at io.realm.kotlin.internal.WriteTransactionManager$DefaultImpls.beginTransaction(WriteTransactionManager.kt:28)
             at io.realm.kotlin.internal.SuspendableWriter$WriterRealm.beginTransaction(SuspendableWriter.kt:58)
             at io.realm.kotlin.internal.SuspendableWriter$write$2.invokeSuspend(SuspendableWriter.kt:123)
             at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
             at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:108)
             at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
             at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
             at java.lang.Thread.run(Thread.java:923)
      
      FinalizerDaemon:
             at java.lang.Object.wait(Object.java)
             at java.lang.Object.wait(Object.java:442)
             at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:190)
             at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:211)
             at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:273)
             at java.lang.Daemons$Daemon.run(Daemons.java:139)
             at java.lang.Thread.run(Thread.java:923)
      
      com.mixpanel.android.AnalyticsWorker:
             at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
             at android.os.MessageQueue.next(MessageQueue.java:335)
             at android.os.Looper.loop(Looper.java:206)
             at android.os.HandlerThread.run(HandlerThread.java:67)
      
      TokenRefresher:
             at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
             at android.os.MessageQueue.next(MessageQueue.java:335)
             at android.os.Looper.loop(Looper.java:206)
             at android.os.HandlerThread.run(HandlerThread.java:67)
      
      Okio Watchdog:
             at sun.misc.Unsafe.park(Unsafe.java)
             at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
             at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2197)
             at okio.AsyncTimeout$Companion.awaitTimeout$okio(AsyncTimeout.kt:320)
             at okio.AsyncTimeout$Watchdog.run(AsyncTimeout.kt:186)
      
      WM.task-2:
             at sun.misc.Unsafe.park(Unsafe.java)
             at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
             at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2067)
             at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
             at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
             at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
             at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
             at java.lang.Thread.run(Thread.java:923)
      
      Okio Watchdog:
             at java.lang.Object.wait(Object.java)
             at com.android.okhttp.okio.AsyncTimeout.awaitTimeout(AsyncTimeout.java:325)
             at com.android.okhttp.okio.AsyncTimeout.access$000(AsyncTimeout.java:42)
             at com.android.okhttp.okio.AsyncTimeout$Watchdog.run(AsyncTimeout.java:288)
      

      Can you reproduce the bug?

      No

      Reproduction Steps

      No response

      Version

      1.13.0

      What Atlas App Services are you using?

      Local Database only

      Are you using encryption?

      No

      Platform OS and version(s)

      Android 8, 10, 11, 13

      Build environment

      Android Studio version: Hedgehog | 2023.1.1 Patch 2
      Android Build Tools version: 24.0.8215888
      Gradle version: 8.1.3

            Assignee:
            Unassigned Unassigned
            Reporter:
            unitosyncbot Unito Sync Bot
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: