Fix a BinderServerTransport crash in the rare shutdown-before-start case #12440
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The following
BinderServerTransport#start()code was completely untested and did not in fact work:The problem is that if the listener does in fact arrive via start() after shutdown, BinderTransport's
shutdownInternal()has already set the state toSHUTDOWN_TERMINATED(which is not a valid transition from itself). It has also already scheduled a call to notifyTerminated() and releaseExecutors(). This causes a duplicate call totransportTerminatedand releasing the same executor twice.This PR changes
start()to leave changing state and releasing executors toshutdownInternal()'s.notifyTerminated()either runs then (if already started) or from withinstart()(if not yet started)Fixes #12439.