Fix react-native-skia crash when switching to Old Dot#93295
Conversation
|
|
|
🚧 @blimpich has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
Still have the issue 🥲 |
|
@ZhenjaHorbach I think I founc the cause... @blimpich could you trigger the build once again but with the last option enabled? That will force a fresh build and include the patch 🙏
|
|
🚧 @dylanexpensify has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
@dylanexpensify I think the same thing happened in the latest build :/ Are you sure you checked |
|
🚧 @blimpich has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
Hmmmmm |
react-native-skia crash when switching to Old Dot
|
@blimpich @dylanexpensify I think we'll need another adhoc build because I realised the previous fix was leaking memory :/ Could you trigger it for @ZhenjaHorbach to verify? 🙏 |
|
started a new build with full-native build 👍 |
|
🚧 @blimpich has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
Okay |
|
@ZhenjaHorbach Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4ca66921f3
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@ZhenjaHorbach I think that after the last commit we should retest the PR again, so we're sure it didn't break anything |
|
@blimpich |
|
🚧 @blimpich has triggered a test Expensify/App build. You can view the workflow run here. |
This comment has been minimized.
This comment has been minimized.
|
Okay |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppNA Android: mWeb ChromeNA iOS: HybridApp2026-06-17.20.01.25.mp4iOS: mWeb SafariNA MacOS: Chrome / SafariNA |
blimpich
left a comment
There was a problem hiding this comment.
Nice job! This was a tricky one!
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 @blimpich has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/blimpich in version: 9.4.15-0 🚀
|
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.4.15-3 🚀
|


Explanation of Change
Fixes an intermittent native UAF crash (
EXC_BAD_ACCESS/SIGSEGV, SentryAPP-AVB) when switching from NewDot to Expensify Classic on iOS HybridApp.@shopify/react-native-skia'sRuntimeAwareCacheonly tracks secondary runtimes; the HybridApp handoff tears down the RN runtime while Skia host objects are still released on the main queue, so~RuntimeAwareCachedestroys cachedjsi::Functions into freed runtime memory. Fix: extend skia's secondary-runtime handling to the primary runtime — register aRuntimeLifecycleMonitorlistener and clear_primaryCacheinonRuntimeDestroyedwhile the runtime is still valid, guarded by a mutex (no leak). Applied as apatch-packagepatch tocpp/jsi/RuntimeAwareCache.h.Fixed Issues
$ #90135
PROPOSAL:
Tests
Prerequisites
Spend over timechart in theSpendtab)Offline tests
N/A — native teardown crash, unrelated to network state.
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari