fix: Crash on UI Scheduling with invalidated WorkletsModuleProxy #6893
+19
−0
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.
Summary
When React Native is destroyed on reload, it runs the destructors for Native Modules on the JavaScript thread. Therefore, even though React Native instance is being destroyed, UI thread can still perform operations on the UI runtime. This leads to a crash where
scheduleOnUI
is called from the UI thread whenWorkletsModuleProxy
destructor has already releaseduiWorkletRuntime
.To fix this, I'm adding a simple shared mutex.
WorkletsModuleProxy
can be cleaned up only when no scheduling takes place and scheduling cannot be performed afterWorkletsModuleProxy
was invalidated.Test plan
Try reloading Android now and see that it doesn't crash on
scheduleOnUI
anymore.