Skip to content

core: fix false-positive orphan warning in ManagedChannelOrphanWrapper#12705

Open
themechbro wants to merge 4 commits intogrpc:masterfrom
themechbro:fix/orphan-wrapper-race-condition-12641
Open

core: fix false-positive orphan warning in ManagedChannelOrphanWrapper#12705
themechbro wants to merge 4 commits intogrpc:masterfrom
themechbro:fix/orphan-wrapper-race-condition-12641

Conversation

@themechbro
Copy link

@themechbro themechbro commented Mar 18, 2026

This PR addresses a race condition where ManagedChannelOrphanWrapper could incorrectly log a "not shutdown properly" warning during garbage collection when using directExecutor().

Changes:

Reference Management: Moved phantom.clearSafely() to execute after the super.shutdown() calls to ensure the orphan tracker isn't detached prematurely.

Reachability Fence: Added a reachability fence in shutdown() and shutdownNow() to ensure the wrapper remains alive until the methods return, preventing the JIT from marking it for early collection.

Regression Test: Added a test case that simulates a reference being held on the stack to verify the fix and prevent future regressions.

Testing:
Verified with ./gradlew :grpc-core:test --tests ManagedChannelOrphanWrapperTest -PskipAndroid=true.

Fixes #12641

Add a reachability fence in shutdown() and shutdownNow() to ensure the
wrapper is not garbage collected while shutdown logic is executing.
This prevents a race condition when using directExecutor() where a
warning could be logged despite a proper shutdown.

Fixes grpc#12641
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.

ManagedChannelOrphanWrapper may incorrectly report "shutdown() not called" warning when using directExecutor() with unavailable server

1 participant