Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ConcurrentModificationException iOS crash on koin 3.5.6 #1863

Open
elkhoudiry opened this issue Apr 30, 2024 · 2 comments
Open

ConcurrentModificationException iOS crash on koin 3.5.6 #1863

elkhoudiry opened this issue Apr 30, 2024 · 2 comments
Labels
status:checking currently in analysis - discussion or need more detailed specs type:issue

Comments

@elkhoudiry
Copy link

Describe the bug
I'm having a scope linked to another scope and the application crashes in dev and production on iOS due to kotlin.ConcurrentModificationException.
It's so annoying because it happens randomly some times

    at 0    <module>                    0x1065ea423        kfun:kotlin.Exception#<init>(kotlin.String?;kotlin.Throwable?){} + 143 
    at 1    <module>                    0x1065ea737        kfun:kotlin.RuntimeException#<init>(kotlin.String?;kotlin.Throwable?){} + 143 
    at 2    <module>                    0x1065eb56f        kfun:kotlin.ConcurrentModificationException#<init>(kotlin.String?;kotlin.Throwable?){} + 143 
    at 3    <module>                    0x1065eb5e3        kfun:kotlin.ConcurrentModificationException#<init>(){} + 95 
    at 4    <module>                    0x10663c597        kfun:kotlin.collections.ArrayList.Itr.checkForComodification#internal + 243 
    at 5    <module>                    0x10663bd3b        kfun:kotlin.collections.ArrayList.Itr.next#internal + 199 
    at 6    <module>                    0x106c2c747        kfun:kotlin.collections.MutableIterator#next(){}1:0-trampoline + 99 
    at 7    <module>                    0x10689fa4b        kfun:org.koin.core.scope.Scope.findInOtherScope#internal + 359  // I think this is the issue root
    at 8    <module>                    0x10689f743        kfun:org.koin.core.scope.Scope.resolveValue#internal + 2615 
    at 9    <module>                    0x10689ec2b        kfun:org.koin.core.scope.Scope.resolveInstance#internal + 1519 
    at 10   <module>                    0x10689e5e7        kfun:org.koin.core.scope.Scope#get(kotlin.reflect.KClass<*>;org.koin.core.qualifier.Qualifier?;kotlin.Function0<org.koin.core.parameter.ParametersHolder>?){0§<kotlin.Any?>}0:0 + 2179 
    at 11   <module>                    0x106a47ec7        kfun:com.app.InjectionHelper$lambda$6$lambda$2#internal + 435 
    at 12   <module>                    0x106a49dd3        kfun:com.app.InjectionHelper$lambda$6$lambda$2$FUNCTION_REFERENCE$3.invoke#internal + 135 
    at 13   <module>                    0x106c2d7a3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 
    at 14   <module>                    0x10688f673        kfun:org.koin.core.instance.InstanceFactory#create(org.koin.core.instance.InstanceContext){}1:0 + 943 
    at 15   <module>                    0x10689066f        kfun:org.koin.core.instance.ScopedInstanceFactory#create(org.koin.core.instance.InstanceContext){}1:0 + 495 

To Reproduce
Steps to reproduce the behavior:
In my case it happens randomly but the general code is like this

private fun scope(): Scope {
        val scope = getKoin().getHandledScope<Scope#1>(Scope#1.getScopeName().value)
        val another = getKoin().getHandledScope<Scope#2>(Scope#2.getScopeName().value)

        scope.linkTo(another)
        return scope
}

fun getScreenState(): Flow<ScreenState> {
     return scope().get<Repository>().screenStateStream // the crash happens here
}

Koin module and version:
koin:3.5.6

@arnaudgiuliani
Copy link
Member

anyway to reproduce it in a stable way?

@arnaudgiuliani arnaudgiuliani added type:issue status:checking currently in analysis - discussion or need more detailed specs labels May 16, 2024
@elkhoudiry
Copy link
Author

Well it's concurrency issue with race conditions i can't reproduce in a stable way, but for me it happens frequently if i try to enter a screen in the application in which i'm creating the koin scope on init of that screen and leave that screen and enter it again quickly, repeating that multiple time produces this issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status:checking currently in analysis - discussion or need more detailed specs type:issue
Projects
None yet
Development

No branches or pull requests

2 participants