Loading automotive/vehicle/2.0/default/impl/vhal_v2_0/GeneratorHub.cpp +14 −3 Original line number Diff line number Diff line Loading @@ -31,6 +31,14 @@ namespace impl { GeneratorHub::GeneratorHub(const OnHalEvent& onHalEvent) : mOnHalEvent(onHalEvent), mThread(&GeneratorHub::run, this) {} GeneratorHub::~GeneratorHub() { mShuttingDownFlag.store(true); mCond.notify_all(); if (mThread.joinable()) { mThread.join(); } } void GeneratorHub::registerGenerator(int32_t cookie, FakeValueGeneratorPtr generator) { { std::lock_guard<std::mutex> g(mLock); Loading Loading @@ -58,15 +66,18 @@ void GeneratorHub::unregisterGenerator(int32_t cookie) { } void GeneratorHub::run() { while (true) { while (!mShuttingDownFlag.load()) { std::unique_lock<std::mutex> g(mLock); // Pop events whose generator does not exist (may be already unregistered) while (!mEventQueue.empty() && mGenerators.find(mEventQueue.top().cookie) == mGenerators.end()) { mEventQueue.pop(); } // Wait until event queue is not empty mCond.wait(g, [this] { return !mEventQueue.empty(); }); // Wait until event queue is not empty or shutting down flag is set mCond.wait(g, [this] { return !mEventQueue.empty() || mShuttingDownFlag.load(); }); if (mShuttingDownFlag.load()) { break; } const VhalEvent& curEvent = mEventQueue.top(); Loading automotive/vehicle/2.0/default/impl/vhal_v2_0/GeneratorHub.h +2 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ private: public: GeneratorHub(const OnHalEvent& onHalEvent); ~GeneratorHub() = default; ~GeneratorHub(); /** * Register a new generator. The generator will be discarded if it could not produce next event. Loading @@ -84,6 +84,7 @@ private: mutable std::mutex mLock; std::condition_variable mCond; std::thread mThread; std::atomic<bool> mShuttingDownFlag{false}; }; } // namespace impl Loading camera/common/1.0/default/CameraModule.cpp +0 −1 Original line number Diff line number Diff line Loading @@ -549,7 +549,6 @@ void CameraModule::removeCamera(int cameraId) { } } } free_camera_metadata(metadata); } mCameraInfoMap.removeItem(cameraId); Loading drm/1.0/default/Android.bp +2 −1 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ cc_library_static { "-Werror", "-Wextra", "-Wall", "-Wthread-safety", ], shared_libs: [ "liblog", Loading @@ -42,7 +43,7 @@ cc_library_static { export_header_lib_headers: [ "libutils_headers", ], export_include_dirs : ["include"] export_include_dirs: ["include"], } soong_config_module_type { Loading drm/1.0/default/CryptoPlugin.cpp +13 −4 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ namespace implementation { uint32_t bufferId) { sp<IMemory> hidlMemory = mapMemory(base); std::lock_guard<std::mutex> shared_buffer_lock(mSharedBufferLock); // allow mapMemory to return nullptr mSharedBufferMap[bufferId] = hidlMemory; return Void(); Loading @@ -65,7 +67,7 @@ namespace implementation { const SharedBuffer& source, uint64_t offset, const DestinationBuffer& destination, decrypt_cb _hidl_cb) { std::unique_lock<std::mutex> shared_buffer_lock(mSharedBufferLock); if (mSharedBufferMap.find(source.bufferId) == mSharedBufferMap.end()) { _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "source decrypt buffer base not set"); return Void(); Loading @@ -79,7 +81,7 @@ namespace implementation { } } android::CryptoPlugin::Mode legacyMode; android::CryptoPlugin::Mode legacyMode = android::CryptoPlugin::kMode_Unencrypted; switch(mode) { case Mode::UNENCRYPTED: legacyMode = android::CryptoPlugin::kMode_Unencrypted; Loading Loading @@ -146,7 +148,10 @@ namespace implementation { return Void(); } if (destBuffer.offset + destBuffer.size > destBase->getSize()) { size_t totalSize = 0; if (__builtin_add_overflow(destBuffer.offset, destBuffer.size, &totalSize) || totalSize > destBase->getSize()) { android_errorWriteLog(0x534e4554, "176496353"); _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size"); return Void(); } Loading @@ -170,6 +175,10 @@ namespace implementation { _hidl_cb(Status::BAD_VALUE, 0, "invalid destination type"); return Void(); } // release mSharedBufferLock shared_buffer_lock.unlock(); ssize_t result = mLegacyPlugin->decrypt(secure, keyId.data(), iv.data(), legacyMode, legacyPattern, srcPtr, legacySubSamples.get(), subSamples.size(), destPtr, &detailMessage); Loading Loading
automotive/vehicle/2.0/default/impl/vhal_v2_0/GeneratorHub.cpp +14 −3 Original line number Diff line number Diff line Loading @@ -31,6 +31,14 @@ namespace impl { GeneratorHub::GeneratorHub(const OnHalEvent& onHalEvent) : mOnHalEvent(onHalEvent), mThread(&GeneratorHub::run, this) {} GeneratorHub::~GeneratorHub() { mShuttingDownFlag.store(true); mCond.notify_all(); if (mThread.joinable()) { mThread.join(); } } void GeneratorHub::registerGenerator(int32_t cookie, FakeValueGeneratorPtr generator) { { std::lock_guard<std::mutex> g(mLock); Loading Loading @@ -58,15 +66,18 @@ void GeneratorHub::unregisterGenerator(int32_t cookie) { } void GeneratorHub::run() { while (true) { while (!mShuttingDownFlag.load()) { std::unique_lock<std::mutex> g(mLock); // Pop events whose generator does not exist (may be already unregistered) while (!mEventQueue.empty() && mGenerators.find(mEventQueue.top().cookie) == mGenerators.end()) { mEventQueue.pop(); } // Wait until event queue is not empty mCond.wait(g, [this] { return !mEventQueue.empty(); }); // Wait until event queue is not empty or shutting down flag is set mCond.wait(g, [this] { return !mEventQueue.empty() || mShuttingDownFlag.load(); }); if (mShuttingDownFlag.load()) { break; } const VhalEvent& curEvent = mEventQueue.top(); Loading
automotive/vehicle/2.0/default/impl/vhal_v2_0/GeneratorHub.h +2 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ private: public: GeneratorHub(const OnHalEvent& onHalEvent); ~GeneratorHub() = default; ~GeneratorHub(); /** * Register a new generator. The generator will be discarded if it could not produce next event. Loading @@ -84,6 +84,7 @@ private: mutable std::mutex mLock; std::condition_variable mCond; std::thread mThread; std::atomic<bool> mShuttingDownFlag{false}; }; } // namespace impl Loading
camera/common/1.0/default/CameraModule.cpp +0 −1 Original line number Diff line number Diff line Loading @@ -549,7 +549,6 @@ void CameraModule::removeCamera(int cameraId) { } } } free_camera_metadata(metadata); } mCameraInfoMap.removeItem(cameraId); Loading
drm/1.0/default/Android.bp +2 −1 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ cc_library_static { "-Werror", "-Wextra", "-Wall", "-Wthread-safety", ], shared_libs: [ "liblog", Loading @@ -42,7 +43,7 @@ cc_library_static { export_header_lib_headers: [ "libutils_headers", ], export_include_dirs : ["include"] export_include_dirs: ["include"], } soong_config_module_type { Loading
drm/1.0/default/CryptoPlugin.cpp +13 −4 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ namespace implementation { uint32_t bufferId) { sp<IMemory> hidlMemory = mapMemory(base); std::lock_guard<std::mutex> shared_buffer_lock(mSharedBufferLock); // allow mapMemory to return nullptr mSharedBufferMap[bufferId] = hidlMemory; return Void(); Loading @@ -65,7 +67,7 @@ namespace implementation { const SharedBuffer& source, uint64_t offset, const DestinationBuffer& destination, decrypt_cb _hidl_cb) { std::unique_lock<std::mutex> shared_buffer_lock(mSharedBufferLock); if (mSharedBufferMap.find(source.bufferId) == mSharedBufferMap.end()) { _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "source decrypt buffer base not set"); return Void(); Loading @@ -79,7 +81,7 @@ namespace implementation { } } android::CryptoPlugin::Mode legacyMode; android::CryptoPlugin::Mode legacyMode = android::CryptoPlugin::kMode_Unencrypted; switch(mode) { case Mode::UNENCRYPTED: legacyMode = android::CryptoPlugin::kMode_Unencrypted; Loading Loading @@ -146,7 +148,10 @@ namespace implementation { return Void(); } if (destBuffer.offset + destBuffer.size > destBase->getSize()) { size_t totalSize = 0; if (__builtin_add_overflow(destBuffer.offset, destBuffer.size, &totalSize) || totalSize > destBase->getSize()) { android_errorWriteLog(0x534e4554, "176496353"); _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size"); return Void(); } Loading @@ -170,6 +175,10 @@ namespace implementation { _hidl_cb(Status::BAD_VALUE, 0, "invalid destination type"); return Void(); } // release mSharedBufferLock shared_buffer_lock.unlock(); ssize_t result = mLegacyPlugin->decrypt(secure, keyId.data(), iv.data(), legacyMode, legacyPattern, srcPtr, legacySubSamples.get(), subSamples.size(), destPtr, &detailMessage); Loading