1.日志内容

Process name:av_session
Process life time:15s
Reason:Signal:SIGABRT(SI_TKILL)@0x0000098c from:2444:6700
LastFatalMessage:terminating due to uncaught exception of type std::__h::bad_function_call
Fault thread info:
Tid:2444, Name:av_session
#00 pc 000d3510 /system/lib/ld-musl-arm.so.1(raise+176)(7c5b14b66bbb496ff81aca57fc683464)
#01 pc 00085c98 /system/lib/ld-musl-arm.so.1(abort+16)(7c5b14b66bbb496ff81aca57fc683464)
#02 pc 00087b4c /system/lib/libc++.so(abort_message+144)(9e8a51ad62938ec50e942eb8ed8eb31120a22f36)
#03 pc 0006e484 /system/lib/libc++.so(demangling_terminate_handler()+296)(9e8a51ad62938ec50e942eb8ed8eb31120a22f36)
#04 pc 00086de0 /system/lib/libc++.so(std::__terminate(void ()())+8)(9e8a51ad62938ec50e942eb8ed8eb31120a22f36)
#05 pc 00089b94 /system/lib/libc++.so(__cxxabiv1::failed_throw(__cxxabiv1::__cxa_exception
)+24)(9e8a51ad62938ec50e942eb8ed8eb31120a22f36)
#06 pc 00089b08 /system/lib/libc++.so(__cxa_throw+120)(9e8a51ad62938ec50e942eb8ed8eb31120a22f36)
#07 pc 00041b13 /system/lib/libavsession_service.z.so(std::__h::__throw_bad_function_callabi:v15004+26)(3a21aff9675d5a7f4fedeea222c59db3)
#08 pc 00041af3 /system/lib/libavsession_service.z.so(std::__h::__function::__value_func<int (OHOS::MessageParcel&, OHOS::MessageParcel&)>::operator()[abi:v15004](OHOS::MessageParcel&, OHOS::MessageParcel&) const+18)(3a21aff9675d5a7f4fedeea222c59db3)
#09 pc 0004cf35 /system/lib/libavsession_service.z.so(OHOS::AVSession::AppManagerAdapter::HandleAppStateChanged(OHOS::AppExecFwk::AppProcessData const&)+76)(3a21aff9675d5a7f4fedeea222c59db3)
#10 pc 000a5859 /system/lib/platformsdk/libapp_manager.z.so(OHOS::AppExecFwk::AppStateCallbackHost::HandleOnAppStateChanged(OHOS::MessageParcel&, OHOS::MessageParcel&)+120)(56bc3569d39286ec92535dc233bfafa5)
#11 pc 000a569b /system/lib/platformsdk/libapp_manager.z.so(OHOS::AppExecFwk::AppStateCallbackHost::OnRemoteRequest(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, OHOS::MessageOption&)+250)(56bc3569d39286ec92535dc233bfafa5)
#12 pc 0002a6f7 /system/lib/chipset-pub-sdk/libipc_single.z.so(OHOS::IPCObjectStub::SendRequestInner(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, OHOS::MessageOption&)+118)(7a28c5f6ece92612fe86d541e85bbedf)
#13 pc 0003e683 /system/lib/chipset-pub-sdk/libipc_single.z.so(OHOS::BinderInvoker::GeneralServiceSendRequest(binder_transaction_data const&, OHOS::MessageParcel&, OHOS::MessageParcel&, OHOS::MessageOption&)+174)(7a28c5f6ece92612fe86d541e85bbedf)
#14 pc 0003e9d3 /system/lib/chipset-pub-sdk/libipc_single.z.so(OHOS::BinderInvoker::Transaction(binder_transaction_data_secctx&)+582)(7a28c5f6ece92612fe86d541e85bbedf)
#15 pc 0003eff3 /system/lib/chipset-pub-sdk/libipc_single.z.so(OHOS::BinderInvoker::HandleCommandsInner(unsigned int)+378)(7a28c5f6ece92612fe86d541e85bbedf)
#16 pc 0003db57 /system/lib/chipset-pub-sdk/libipc_single.z.so(OHOS::BinderInvoker::HandleCommands(unsigned int)+38)(7a28c5f6ece92612fe86d541e85bbedf)
#17 pc 0003d9ad /system/lib/chipset-pub-sdk/libipc_single.z.so(OHOS::BinderInvoker::StartWorkLoop()+124)(7a28c5f6ece92612fe86d541e85bbedf)
#18 pc 0003f063 /system/lib/chipset-pub-sdk/libipc_single.z.so(OHOS::BinderInvoker::JoinThread(bool)+70)(7a28c5f6ece92612fe86d541e85bbedf)
#19 pc 00011c51 /system/lib/platformsdk/libsystem_ability_fwk.z.so(OHOS::LocalAbilityManager::DoStartSAProcess(std::__h::basic_string<char, std::__h::char_traits, std::__h::allocator> const&, int)+472)(4e077c1fdf33c06d8f6982e1adb11e4f)
#20 pc 00003ac9 /system/bin/sa_main(main.cfi+2256)(cefa3371fe0b08d7d5ed87eed15493c8)
#21 pc 0006f278 /system/lib/ld-musl-arm.so.1(libc_start_main_stage2+72)(7c5b14b66bbb496ff81aca57fc683464)
#22 pc 00003078 /system/bin/sa_main(_start_c+84)(cefa3371fe0b08d7d5ed87eed15493c8)
#23 pc 0000301c /system/bin/sa_main(cefa3371fe0b08d7d5ed87eed15493c8)

 

2 分析过程

定位到libapp_manager.z.so

 

3 解决方法

foundation/multimedia/av_session# git diff
diff --git a/services/session/adapter/app_manager_adapter.cpp b/services/session/adapter/app_manager_adapter.cpp
index b1fe42d8..0581e1db 100644
--- a/services/session/adapter/app_manager_adapter.cpp
+++ b/services/session/adapter/app_manager_adapter.cpp
@@ -114,13 +114,18 @@ void AppManagerAdapter::HandleAppStateChanged(const AppProcessData& appProcessDa
         if (appProcessData.appState == ApplicationState::APP_STATE_FOREGROUND ||
             appProcessData.appState == ApplicationState::APP_STATE_BACKGROUND) {
             for (const auto& appData : appProcessData.appDatas) {
-                serviceCallbackForAppStateChange_(appData.uid, static_cast<int>(appProcessData.appState));
+                if (serviceCallbackForAppStateChange_) { //先判断 再使用
+                  serviceCallbackForAppStateChange_(appData.uid, static_cast<int>(appProcessData.appState));
+                }else{
+                    SLOGE("serviceCallbackForAppStateChange_ is null, skip call");
+                }
             }
         }
     }
     if (appProcessData.appState == ApplicationState::APP_STATE_TERMINATED) {
         for (const auto& appData : appProcessData.appDatas) {
             SLOGI("HandleAppStateChanged remove for uid=%{public}d", static_cast<int>(appData.uid));
+            std::lock_guard lockGuard(uidLock_);// 并发使用时加锁
             RemoveObservedApp(appData.uid);
         }
     }
@@ -144,12 +149,16 @@ void AppManagerAdapter::HandleAppStateChanged(const AppProcessData& appProcessDa
             for (const auto& pair : appNeedHandleMap) {
                 appStateChangeObserver_(pair.first, pair.second, true);
             }
-        }
+        }else{
+              SLOGE("appStateChangeObserver_ is null, skip background state handling");
+              }
     } else {
         if (appStateChangeObserver_) {
             for (const auto& pair : appNeedHandleMap) {
                 appStateChangeObserver_(pair.first, pair.second, false);
             }
+        }else{
+              SLOGE("appStateChangeObserver_ is null, skip background state handling");
         }
     }
 }

4验证结果 

压测12小时未复现

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐