02-应用冻屏
本文件汇总该版本中归类为应用冻屏的历史修复,重点包括死锁、锁重入、跨线程阻塞和可能导致应用无响应的等待链路问题。
1. FontRegistry 锁顺序不一致导致死锁
- 修改日期:2026-01-07
- 版本:0.82.3
- 问题描述:JS 线程执行
addFontData()先拿m_fontFileContentByFontFamilyMtx再等m_fontCollectionMtx,UI 线程执行getFontCollection()的顺序相反,双方互相等待造成死锁。 - 影响模块:FontRegistry
- 提交 / PR:c2815a9a7 / !1987
- 详细修复内容:改用
std::scoped_lock原子获取两把锁,统一锁获取顺序,消除字体注册与查询之间的交叉等待。
日志
00 pc 00000000001cc068 /system/lib/ld-musl-aarch64.so.1(__timedwait_cp+156)
#01 pc 00000000001d206c /system/lib/ld-musl-aarch64.so.1(__pthread_mutex_timedlock_inner+536)
#02 pc 00000000000c6220 /data/storage/el1/bundle/libs/arm64/libc++_shared.so(std::__n1::mutex::lock()+8)
#03 pc 00000000000c86f4 /data/storage/el1/bundle/libs/arm64/librnoh_core.so(rnoh::FontRegistry::addFontData(std::__n1::basic_string<char, std::__n1::char_traits<char>, std::__n1::allocator<char>> const&, std::__n1::vector<unsigned char, std::__n1::allocator<unsigned char>>)+64)
#04 pc 00000000000c8620 /data/storage/el1/bundle/libs/arm64/librnoh_core.so(rnoh::FontRegistry::registerFont(std::__n1::basic_string<char, std::__n1::char_traits<char>, std::__n1::allocator<char>> const&, std::__n1::basic_string<char, std::__n1::char_traits<char>, std::__n1::allocator<char>> const&)+400)
#05 pc 00000000000e3b3c /data/storage/el1/bundle/libs/arm64/librnoh_core.so(rnoh::RNInstanceInternal::registerFont(std::__n1::basic_string<char, std::__n1::char_traits<char>, std::__n1::allocator<char>> const&, std::__n1::basic_string<char, std::__n1::char_traits<char>, std::__n1::allocator<char>> const&)+24)
#06 pc 00000000001200c8 /data/storage/el1/bundle/libs/arm64/librnoh_app.so
#07 pc 000000000011dd3c /data/storage/el1/bundle/libs/arm64/librnoh_app.so(invoke(napi_env__*, std::__n1::function<napi_value__*)
2. reportMount 触发 ShadowTreeRegistry 锁重入
- 修改日期:2026-03-04
- 版本:0.82.17
- 问题描述:
reportMount直接在当前调用链中遍历 surface 并调用scheduler->reportMount,容易在已有调度锁持有期间触发 ShadowTreeRegistry 锁重入,造成死锁或调度异常。 - 影响模块:SchedulerDelegate / ShadowTreeRegistry
- 提交 / PR:ab0d11db7 / !2310
- 详细修复内容:把
reportMount切换到主线程任务队列异步执行,先脱离当前持锁上下文,再回调 scheduler 上报 mount,避免与 Fabric 当前事务路径互相重入。
日志
#00 pc 00000000001ccfa8 /system/lib/ld-musl-aarch64.so.1(6dfe4ecea22714b3e8fc8be36e2d9484)
#01 pc 00000000001cf078 /system/lib/ld-musl-aarch64.so.1(pthread_cond_timedwait+172)(6dfe4ecea22714b3e8fc8be36e2d9484)
#02 pc 0000000000158600 /data/storage/el1/bundle/libs/arm64/libreactnative.so(facebook::react::ShadowTreeRegistry::visit(int, std::__n1::function<void (facebook::react::ShadowTree const&)> const&) const+28)(268f7d8385eca4958cb003116fde69623ea3c6df)
#03 pc 0000000000273ab8 /data/storage/el1/bundle/libs/arm64/libreactnative.so(facebook::react::UIManager::reportMount(int) const+112)(268f7d8385eca4958cb003116fde69623ea3c6df)
#04 pc 00000000000e9294 /data/storage/el1/bundle/libs/arm64/librnoh_core.so(rnoh::SchedulerDelegate::reportMount(std::__n1::vector<facebook::react::ShadowViewMutation, std::__n1::allocator<facebook::react::ShadowViewMutation>> const&)+1428)(c9ec50b9185b6c184607e55ba1863d169bd6cb65)
#05 pc 00000000000eb09c /data/storage/el1/bundle/libs/arm64/librnoh_core.so(c9ec50b9185b6c184607e55ba1863d169bd6cb65)
#06 pc 0000000000253e3c /data/storage/el1/bundle/libs/arm64/libreactnative.so(268f7d8385eca4958cb003116fde69623ea3c6df)
#07 pc 0000000000096468 /data/storage/el1/bundle/libs/arm64/librnoh_core.so(rnoh::SchedulerDelegate::performTransaction(std::__n1::shared_ptr<facebook::react::MountingCoordinator const> const&)+152)(c9ec50b9185b6c184607e55ba1863d169bd6cb65)
#08 pc 0000000000096384 /data/storage/el1/bundle/libs/arm64/librnoh_core.so(rnoh::SchedulerDelegate::schedulerShouldRenderTransactions(std::__n1::shared_ptr<facebook::react::MountingCoordinator const> const&)+64)(c9ec50b9185b6c184607e55ba1863d169bd6cb65)
#09 pc 000000000013d050 /data/storage/el1/bundle/libs/arm64/libreactnative.so(facebook::react::Scheduler::uiManagerDidFinishTransaction(std::__n1::shared_ptr<facebook::react::MountingCoordinator const>, bool)+252)(268f7d8385eca4958cb003116fde69623ea3c6df)
#10 pc 000000000013c914 /data/storage/el1/bundle/libs/arm64/libreactnative.so(facebook::react::UIManager::shadowTreeDidFinishTransaction(std::__n1::shared_ptr<facebook::react::MountingCoordinator const>, bool) const+96)(268f7d8385eca4958cb003116fde69623ea3c6df)
#11 pc 0000000000250f68 /data/storage/el1/bundle/libs/arm64/libreactnative.so(facebook::react::ShadowTree::notifyDelegatesOfUpdates() const+84)(268f7d8385eca4958cb003116fde69623ea3c6df)
#12 pc 0000000000174d40 /data/storage/el1/bundle/libs/arm64/libreactnative.so(facebook::react::ShadowTreeRegistry::enumerate(std::__n1::function<void (facebook::react::ShadowTree const&, bool&)> const&) const+88)(268f7d8385eca4958cb003116fde69623ea3c6df)
#13 pc 0000000000273ee8 /data/storage/el1/bundle/libs/arm64/libreactnative.so(facebook::react::UIManager::animationTick() const+88)(268f7d8385eca4958cb003116fde69623ea3c6df)
#14 pc 00000000000e5578 /data/storage/el1/bundle/libs/arm64/librnoh_core.so(rnoh::RNInstanceInternal::onUITick(std::__n1::chrono::time_point<std::__n1::chrono::steady_clock, std::__n1::chrono::duration<long long, std::__n1::ratio<1l, 1000000000l>>>)+36)(c9ec50b9185b6c184607e55ba1863d169bd6cb65)
#15 pc 00000000000e7314 /data/storage/el1/bundle/libs/arm64/librnoh_core.so(c9ec50b9185b6c184607e55ba1863d169bd6cb65)
#16 pc 0000000000085d1c /data/storage/el1/bundle/libs/arm64/librnoh_core.so(rnoh::EventLoopTaskRunner::executeTask()+176)(c9ec50b9185b6c184607e55ba1863d169bd6cb65)
#17 pc 00000000000a9838 /data/storage/el1/bundle/libs/arm64/librnoh_core.so(rnoh::NapiTaskRunner::executeTask()+164)(c9ec50b9185b6c184607e55ba1863d169bd6cb65)
#18 pc 000000000001a628 /system/lib64/platformsdk/libuv.so(4434249df54b21daa1e9913212d791f5)
#19 pc 000000000002e718 /system/lib64/platformsdk/libuv.so(4434249df54b21daa1e9913212d791f5)
#20 pc 000000000001ae44 /system/lib64/platformsdk/libuv.so(uv_run+548)(4434249df54b21daa1e9913212d791f5)
#21 pc 00000000000a1d54 /system/lib64/platformsdk/libruntime.z.so(OHOS::AbilityRuntime::OHOSLoopHandler::OnTriggered()+232)(43ff7e52edab25fdcd33a6603a965d40)
#22 pc 00000000000a1c1c /system/lib64/platformsdk/libruntime.z.so(OHOS::AbilityRuntime::OHOSLoopHandler::OnReadable(int)+212)(43ff7e52edab25fdcd33a6603a965d40)
#23 pc 0000000000032374 /system/lib64/chipset-sdk-sp/libeventhandler.z.so(6715b33ca4843cf9aee5903eb88326a5)
#24 pc 000000000001fea8 /system/lib64/chipset-sdk-sp/libeventhandler.z.so(6715b33ca4843cf9aee5903eb88326a5)
#25 pc 000000000001ed90 /system/lib64/chipset-sdk-sp/libeventhandler.z.so(6715b33ca4843cf9aee5903eb88326a5)
#26 pc 000000000003cee4 /system/lib64/chipset-sdk-sp/libeventhandler.z.so(OHOS::AppExecFwk::EventRunner::Run()+396)(6715b33ca4843cf9aee5903eb88326a5)
#27 pc 00000000000d4974 /system/lib64/platformsdk/libappkit_native.z.so(OHOS::AppExecFwk::MainThread::Start()+416)(2578e681cf5af64ea74dfc93eaf591f0)
#28 pc 0000000000005adc /system/lib64/appspawn/appspawn/libappspawn_ace.z.so(cfc8c0542014038c67fd6e8022c89b35)
#29 pc 000000000000bf08 /system/bin/appspawn(d2a86de64bd8aa5709c415afe0910d27)
#30 pc 00000000000177b4 /system/bin/appspawn(d2a86de64bd8aa5709c415afe0910d27)
#31 pc 0000000000014cdc /system/bin/appspawn(d2a86de64bd8aa5709c415afe0910d27)
#32 pc 0000000000017b8c /system/lib64/chipset-sdk-sp/libbegetutil.z.so(30e02f55a9a92b62b855af2e9b254a8c)
#33 pc 00000000000174a4 /system/lib64/chipset-sdk-sp/libbegetutil.z.so(30e02f55a9a92b62b855af2e9b254a8c)
#34 pc 0000000000014794 /system/lib64/chipset-sdk-sp/libbegetutil.z.so(30e02f55a9a92b62b855af2e9b254a8c)
#35 pc 0000000000014224 /system/lib64/chipset-sdk-sp/libbegetutil.z.so(30e02f55a9a92b62b855af2e9b254a8c)
#36 pc 00000000000118f8 /system/bin/appspawn(d2a86de64bd8aa5709c415afe0910d27)
#37 pc 000000000000f6ac /system/bin/appspawn(d2a86de64bd8aa5709c415afe0910d27)
#38 pc 00000000000a98f0 /system/lib/ld-musl-aarch64.so.1(6dfe4ecea22714b3e8fc8be36e2d9484)
#39 pc 000000000000bc4c /system/bin/appspawn(d2a86de64bd8aa5709c415afe0910d27)