From e221e712f9225d5c1b6791ce6b314c8bef0e72be Mon Sep 17 00:00:00 2001 From: Shunkai Yao Date: Tue, 10 Jan 2023 00:58:03 +0000 Subject: [PATCH] AIDL effect: add dynamic libraries open check Bug: 258124419 Test: atest VtsHalAudioEffectFactoryTargetTest Change-Id: Id6fbb7b47422eed65635e137d1b97218d6b18a91 --- audio/aidl/default/EffectFactory.cpp | 10 ++++++---- .../default/include/effectFactory-impl/EffectFactory.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/audio/aidl/default/EffectFactory.cpp b/audio/aidl/default/EffectFactory.cpp index 3b40ae039b..5cd87fd879 100644 --- a/audio/aidl/default/EffectFactory.cpp +++ b/audio/aidl/default/EffectFactory.cpp @@ -165,7 +165,7 @@ ndk::ScopedAStatus Factory::destroyEffect(const std::shared_ptr& in_han return status; } -void Factory::openEffectLibrary(const AudioUuid& impl, const std::string& libName) { +bool Factory::openEffectLibrary(const AudioUuid& impl, const std::string& libName) { std::function dlClose = [](void* handle) -> void { if (handle && dlclose(handle)) { LOG(ERROR) << "dlclose failed " << dlerror(); @@ -176,7 +176,7 @@ void Factory::openEffectLibrary(const AudioUuid& impl, const std::string& libNam std::unique_ptr{dlopen(libName.c_str(), RTLD_LAZY), dlClose}; if (!libHandle) { LOG(ERROR) << __func__ << ": dlopen failed, err: " << dlerror(); - return; + return false; } LOG(INFO) << __func__ << " dlopen lib:" << libName << "\nimpl:" << impl.toString() @@ -186,6 +186,7 @@ void Factory::openEffectLibrary(const AudioUuid& impl, const std::string& libNam {impl, std::make_tuple(std::move(libHandle), std::unique_ptr(interface), libName)}); + return true; } void Factory::createIdentityWithConfig(const EffectConfig::LibraryUuid& configLib, @@ -201,8 +202,9 @@ void Factory::createIdentityWithConfig(const EffectConfig::LibraryUuid& configLi LOG(DEBUG) << __func__ << ": typeUuid " << id.type.toString() << "\nimplUuid " << id.uuid.toString() << " proxyUuid " << (proxyUuid.has_value() ? proxyUuid->toString() : "null"); - openEffectLibrary(id.uuid, path->second); - mIdentitySet.insert(std::move(id)); + if (openEffectLibrary(id.uuid, path->second)) { + mIdentitySet.insert(std::move(id)); + } } else { LOG(ERROR) << __func__ << ": library " << libName << " not exist!"; return; diff --git a/audio/aidl/default/include/effectFactory-impl/EffectFactory.h b/audio/aidl/default/include/effectFactory-impl/EffectFactory.h index 04bd1bbe8e..b32ec56f34 100644 --- a/audio/aidl/default/include/effectFactory-impl/EffectFactory.h +++ b/audio/aidl/default/include/effectFactory-impl/EffectFactory.h @@ -101,7 +101,7 @@ class Factory : public BnFactory { ndk::ScopedAStatus destroyEffectImpl(const std::shared_ptr& in_handle); void cleanupEffectMap(); - void openEffectLibrary(const ::aidl::android::media::audio::common::AudioUuid& impl, + bool openEffectLibrary(const ::aidl::android::media::audio::common::AudioUuid& impl, const std::string& libName); void createIdentityWithConfig( const EffectConfig::LibraryUuid& configLib,