Skip to content

Fix #2416 - refresh closed Koin context in Compose - #2467

Open
AvikMakwana wants to merge 2 commits into
InsertKoinIO:mainfrom
AvikMakwana:fix/2416-compose-getkoin-closed-context
Open

Fix #2416 - refresh closed Koin context in Compose#2467
AvikMakwana wants to merge 2 commits into
InsertKoinIO:mainfrom
AvikMakwana:fix/2416-compose-getkoin-closed-context

Conversation

@AvikMakwana

Copy link
Copy Markdown

Problem

getKoin() could return a stale Koin instance after a stopKoin() / startKoin() cycle.

LocalKoinApplicationContext caches the first Koin instance through ComposeContextWrapper. After that instance is closed, getKoin() still returned the cached value because getValue() itself succeeded, so the existing exception recovery path was never reached.

Dependency resolution then failed with:

ClosedScopeException: Scope '_root_' is closed

Fix

getKoin() now checks whether the cached Koin instance's root scope is closed and resets the context when necessary, following the same recovery pattern already used by currentKoinScope().

This keeps locally provided Compose Koin contexts intact rather than replacing them with the global context.

Tests

Added regression coverage for:

  • stopKoin()startKoin() resolving the new Koin instance
  • KoinIsolatedContext
  • KoinApplicationPreview

The restart regression test fails on the previous implementation with ClosedScopeException and passes with this change.

Validation

Passed:

  • ./gradlew :compose:koin-compose:jvmTest --rerun-tasks
  • ./gradlew :compose:koin-compose:apiCheck
  • ./gradlew :compose:koin-compose:compileTestKotlinWasmJs
  • ./gradlew :compose:koin-compose:compileTestKotlinJs
  • ./gradlew :compose:koin-compose:compileTestKotlinIosX64

The root ./gradlew apiCheck completed successfully for the library modules; :core:benchmark:jvmApiBuild has an unrelated failure under JDK 24 due to the binary compatibility validator not supporting bytecode level 68.

Fixes #2416

@AvikMakwana
AvikMakwana marked this pull request as ready for review September 8, 2026 09:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Compose getKoin() uses old closed scope in subsequent test executions

1 participant