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

App not Responding when Realm Configuration is created

      How frequently does the bug occur?

      Sometimes

      Description

      Many of our users are facing a lot of ANRs on app launch. This happens when Koin dependencies are injected on Application onCreate. From the stacktrace it looks like its always stuck in RealmConfiguration build Step.

      I have not been able to reproduce this ANR so far.

      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
      Thread 1 "main" tid=1 Runnable  
      
      
      at kotlin.reflect.jvm.internal.impl.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor$KotlinMetadataArgumentVisitor$2.<init> (ReadKotlinClassHeaderAnnotationVisitor.java:215)
        at kotlin.reflect.jvm.internal.impl.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor$KotlinMetadataArgumentVisitor.stringsArrayVisitor (ReadKotlinClassHeaderAnnotationVisitor.java:215)
        at kotlin.reflect.jvm.internal.impl.load.kotlin.header.ReadKotlinClassHeaderAnnotationVisitor$KotlinMetadataArgumentVisitor.visitArray (ReadKotlinClassHeaderAnnotationVisitor.java:196)
        at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectClassStructure.processAnnotationArgumentValue (ReflectKotlinClass.kt:235)
        at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectClassStructure.processAnnotationArguments (ReflectKotlinClass.kt:184)
        at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectClassStructure.processAnnotation (ReflectKotlinClass.kt:166)
        at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectClassStructure.loadClassAnnotations (ReflectKotlinClass.kt:85)
        at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectKotlinClass$Factory.create (ReflectKotlinClass.kt:56)
        at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectKotlinClassFinder.findKotlinClass (ReflectKotlinClassFinder.kt:34)
        at kotlin.reflect.jvm.internal.impl.descriptors.runtime.components.ReflectKotlinClassFinder.findKotlinClassOrContent (ReflectKotlinClassFinder.kt:38)
        at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope$classes$1.invoke (LazyJavaPackageScope.kt:67)
        at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope$classes$1.invoke (LazyJavaPackageScope.kt:59)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke (LockBasedStorageManager.java:578)
        at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope.findClassifier (LazyJavaPackageScope.kt:146)
        at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.LazyJavaPackageScope.getContributedClassifier (LazyJavaPackageScope.kt:136)
        at kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors.JvmPackageScope.getContributedClassifier (JvmPackageScope.kt:55)
        at kotlin.reflect.jvm.internal.impl.resolve.scopes.ChainedMemberScope.getContributedClassifier (ChainedMemberScope.kt:35)
        at kotlin.reflect.jvm.internal.impl.resolve.scopes.AbstractScopeAdapter.getContributedClassifier (AbstractScopeAdapter.kt:44)
        at kotlin.reflect.jvm.internal.impl.descriptors.FindClassInModuleKt.findClassifierAcrossModuleDependencies (findClassInModule.kt:26)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.computeClassifierDescriptor (TypeDeserializer.kt:268)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.access$computeClassifierDescriptor (TypeDeserializer.kt:28)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer$classifierDescriptors$1.invoke (TypeDeserializer.kt:37)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer$classifierDescriptors$1.invoke (TypeDeserializer.kt:36)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$MapBasedMemoizedFunction.invoke (LockBasedStorageManager.java:578)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.typeConstructor (TypeDeserializer.kt:161)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.simpleType (TypeDeserializer.kt:91)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.type (TypeDeserializer.kt:68)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.typeArgument (TypeDeserializer.kt:300)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.simpleType (TypeDeserializer.kt:106)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.TypeDeserializer.type (TypeDeserializer.kt:68)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassTypeConstructor.computeSupertypes (DeserializedClassDescriptor.kt:237)
        at kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor$supertypes$1.invoke (AbstractTypeConstructor.kt:78)
        at kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor$supertypes$1.invoke (AbstractTypeConstructor.kt:77)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke (LockBasedStorageManager.java:408)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValueWithPostCompute.invoke (LockBasedStorageManager.java:481)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValueWithPostCompute.invoke (LockBasedStorageManager.java:512)
        at kotlin.reflect.jvm.internal.impl.types.AbstractTypeConstructor.getSupertypes (AbstractTypeConstructor.kt:27)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getNonDeclaredVariableNames (DeserializedClassDescriptor.kt:355)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation$variableNames$2.invoke (DeserializedMemberScope.kt:262)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation$variableNames$2.invoke (DeserializedMemberScope.kt:261)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke (LockBasedStorageManager.java:408)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke (LockBasedStorageManager.java:527)
        at kotlin.reflect.jvm.internal.impl.storage.StorageKt.getValue (storage.kt:42)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation.getVariableNames (DeserializedMemberScope.kt:261)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope$OptimizedImplementation.addFunctionsAndPropertiesTo (DeserializedMemberScope.kt:349)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedMemberScope.computeDescriptors (DeserializedMemberScope.kt:115)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope$allDescriptors$1.invoke (DeserializedClassDescriptor.kt:274)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope$allDescriptors$1.invoke (DeserializedClassDescriptor.kt:273)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedLazyValue.invoke (LockBasedStorageManager.java:408)
        at kotlin.reflect.jvm.internal.impl.storage.LockBasedStorageManager$LockBasedNotNullLazyValue.invoke (LockBasedStorageManager.java:527)
        at kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors.DeserializedClassDescriptor$DeserializedClassMemberScope.getContributedDescriptors (DeserializedClassDescriptor.kt:284)
        at kotlin.reflect.jvm.internal.impl.resolve.scopes.InnerClassesScopeWrapper.getContributedDescriptors (InnerClassesScopeWrapper.kt:35)
        at kotlin.reflect.jvm.internal.impl.resolve.scopes.InnerClassesScopeWrapper.getContributedDescriptors (InnerClassesScopeWrapper.kt:27)
        at kotlin.reflect.jvm.internal.impl.resolve.scopes.ResolutionScope$DefaultImpls.getContributedDescriptors$default (ResolutionScope.kt:50)
        at kotlin.reflect.jvm.internal.KClassImpl$Data$nestedClasses$2.invoke (KClassImpl.kt:100)
        at kotlin.reflect.jvm.internal.KClassImpl$Data$nestedClasses$2.invoke (KClassImpl.kt:99)
        at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke (ReflectProperties.java:93)
        at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue (ReflectProperties.java:32)
        at kotlin.reflect.jvm.internal.KClassImpl$Data.getNestedClasses (KClassImpl.kt:99)
        at kotlin.reflect.jvm.internal.KClassImpl.getNestedClasses (KClassImpl.kt:240)
        at kotlin.reflect.full.KClasses.getCompanionObject (KClasses.kt:47)
        at kotlin.reflect.full.KClasses.getCompanionObjectInstance (KClasses.kt:57)
        at io.realm.kotlin.internal.platform.RealmObjectKt.realmObjectCompanionOrNull (RealmObject.kt:27)
        at io.realm.kotlin.Configuration$SharedBuilder.<init> (Configuration.kt:479)
        at io.realm.kotlin.RealmConfiguration$Builder.<init> (RealmConfiguration.kt:52)
        at com.myapp.kmm.cache.di.CacheModuleKt$cacheModule$1$4.invoke (CacheModule.kt:129)
        at com.myapp.kmm.cache.di.CacheModuleKt$cacheModule$1$4.invoke (CacheModule.kt:127)
        at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51)
        at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51)
        at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20)
        at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51)
        at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116)
        at org.koin.core.scope.Scope.resolveValue (Scope.kt:246)
        at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231)
        at org.koin.core.scope.Scope.get (Scope.kt:210)
        at com.myapp.kmm.cache.di.CacheModuleKt$cacheModule$1$5.invoke (CacheModule.kt:163)
        at com.myapp.kmm.cache.di.CacheModuleKt$cacheModule$1$5.invoke (CacheModule.kt:150)
        at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51)
        at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51)
        at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20)
        at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51)
        at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116)
        at org.koin.core.scope.Scope.resolveValue (Scope.kt:246)
        at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231)
        at org.koin.core.scope.Scope.get (Scope.kt:210)
        at com.myapp.kmm.cache.realm.dao.DaoModuleKt$daoModule$1$30.invoke (DaoModule.kt:277)
        at com.myapp.kmm.cache.realm.dao.DaoModuleKt$daoModule$1$30.invoke (DaoModule.kt:176)
        at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51)
        at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51)
        at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20)
        at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51)
        at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116)
        at org.koin.core.scope.Scope.resolveValue (Scope.kt:246)
        at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231)
        at org.koin.core.scope.Scope.get (Scope.kt:210)
        at com.myapp.kmm.data.RepoModuleKt$repoModule$1$1.invoke (RepoModule.kt:242)
        at com.myapp.kmm.data.RepoModuleKt$repoModule$1$1.invoke (RepoModule.kt:82)
        at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51)
        at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51)
        at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20)
        at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51)
        at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116)
        at org.koin.core.scope.Scope.resolveValue (Scope.kt:246)
        at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231)
        at org.koin.core.scope.Scope.get (Scope.kt:210)
        at com.myapp.kmm.core.di.user.UserUseCaseModuleKt$userUseCaseModule$1$5.invoke (UserUseCaseModule.kt:57)
        at com.myapp.kmm.core.di.user.UserUseCaseModuleKt$userUseCaseModule$1$5.invoke (UserUseCaseModule.kt:32)
        at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51)
        at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51)
        at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20)
        at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51)
        at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116)
        at org.koin.core.scope.Scope.resolveValue (Scope.kt:246)
        at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231)
        at org.koin.core.scope.Scope.get (Scope.kt:210)
        at com.myapp.example.phoenix.di.KoinKt$notificationModule$1$1.invoke (Koin.kt:168)
        at com.myapp.example.phoenix.di.KoinKt$notificationModule$1$1.invoke (Koin.kt:147)
        at org.koin.core.instance.InstanceFactory.create (InstanceFactory.kt:51)
        at org.koin.core.instance.SingleInstanceFactory.create (SingleInstanceFactory.kt:46)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:53)
        at org.koin.core.instance.SingleInstanceFactory$get$1.invoke (SingleInstanceFactory.kt:51)
        at org.koin.mp.KoinPlatformTools.synchronized (KoinPlatformTools.kt:20)
        at org.koin.core.instance.SingleInstanceFactory.get (SingleInstanceFactory.kt:51)
        at org.koin.core.registry.InstanceRegistry.resolveInstance$koin_core (InstanceRegistry.kt:116)
        at org.koin.core.scope.Scope.resolveValue (Scope.kt:246)
        at org.koin.core.scope.Scope.resolveInstance (Scope.kt:231)
        at org.koin.core.scope.Scope.get (Scope.kt:210)
        at com.myapp.example.modules.service.AndroidDependencyInjector$special$$inlined$inject$default$6.invoke (KoinComponent.kt:74)
        at kotlin.SynchronizedLazyImpl.getValue (LazyJVM.kt:74)
        at com.myapp.example.modules.service.AndroidDependencyInjector.getAppPushNotificationsManager (AndroidDependencyInjector.kt:22)
        at com.myapp.example.modules.service.AndroidDependencyInjector.injectDependencies (AndroidDependencyInjector.kt:44)
        at com.myapp.example.phoenix.app.MyApplication.injectDependencies (MyApplication.kt:115)
        at com.myapp.example.phoenix.app.MyApplication.onCreate (MyApplication.kt:64)
        at android.app.Instrumentation.callApplicationOnCreate (Instrumentation.java:1213)
        at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6915)
        at android.app.ActivityThread.access$1600 (ActivityThread.java:261)
        at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2154)
        at android.os.Handler.dispatchMessage (Handler.java:111)
        at android.os.Looper.loopOnce (Looper.java:238)
        at android.os.Looper.loop (Looper.java:357)
        at android.app.ActivityThread.main (ActivityThread.java:8098)
        at java.lang.reflect.Method.invoke (Native method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1026)
      
      
      ### Can you reproduce the bug?
      
      No
      
      ### Reproduction Steps
      
      We have about 92 Entities in our Schema. 
      
      Some code snippet
      
      
         val configuration = RealmConfiguration.Builder( // This is the last line executed in our codebase as per ANR log
              schema = get() // koin injection
          )
      
          val dbName: String = KmmServiceLocator.getDbName()
          val encryptionKey: ByteArray? = KmmServiceLocator.getEncryptionKey()
      
          if (encryptionKey?.isNotEmpty() == true) {
              configuration.name(dbName).encryptionKey(encryptionKey)
          } else {
              configuration.name(dbName)
          }
      
          configuration.schemaVersion(schemaVersion)
              .migration(KMMRealmMigrationManager())
              .build()
      

      ```

      Koin is injecting dependency on Application -> onCreate() -> Open realm with above config

      Version

      1.9.1

      What Atlas App Services are you using?

      Local Database only

      Are you using encryption?

      Yes

      Platform OS and version(s)

      OS - Android, Version - Almost all of them

      Build environment

      Android Studio version: Android Studio Giraffe
      Android Build Tools version: 30.0.3
      Gradle version: 8.0.2

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

              Created:
              Updated: