From 76384779a46b37aa03225ce2ab0ff714cbb1a1de Mon Sep 17 00:00:00 2001 From: wangchaole Date: Thu, 28 Apr 2022 12:26:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9fuzz=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=8F=91=E7=8E=B0=E9=97=AE=E9=A2=98=EF=BC=9Asa=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B=E5=8A=A8=E6=80=81=E6=8B=89=E8=B5=B7=E5=92=8C=E9=80=80?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E5=B9=B6=E5=8F=91=E5=9C=BA=E6=99=AF=E4=B8=8B?= =?UTF-8?q?crash=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wangchaole --- .../native_cpp/camera_sink/BUILD.gn | 1 - .../include/dcamera_sink_handler_ipc.h | 2 -- .../src/dcamera_sink_handler_ipc.cpp | 26 ++++------------- .../native_cpp/camera_source/BUILD.gn | 1 - .../include/dcamera_source_handler_ipc.h | 3 -- .../src/dcamera_source_handler_ipc.cpp | 28 +++++-------------- .../dcamera_sink_service_ipc.h | 6 ++-- .../dcamera_sink_service_ipc.cpp | 23 ++++----------- .../dcamera_source_service_ipc.h | 6 ++-- .../dcamera_source_service_ipc.cpp | 20 ++----------- 10 files changed, 27 insertions(+), 89 deletions(-) diff --git a/interfaces/inner_kits/native_cpp/camera_sink/BUILD.gn b/interfaces/inner_kits/native_cpp/camera_sink/BUILD.gn index 33d359b6..4d2e5571 100644 --- a/interfaces/inner_kits/native_cpp/camera_sink/BUILD.gn +++ b/interfaces/inner_kits/native_cpp/camera_sink/BUILD.gn @@ -49,7 +49,6 @@ ohos_shared_library("distributed_camera_sink_sdk") { ] external_deps = [ - "eventhandler:libeventhandler", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "samgr_standard:samgr_proxy", diff --git a/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler_ipc.h b/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler_ipc.h index c443589a..94b660c0 100644 --- a/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler_ipc.h +++ b/interfaces/inner_kits/native_cpp/camera_sink/include/dcamera_sink_handler_ipc.h @@ -16,7 +16,6 @@ #ifndef OHOS_DCAMERA_SINK_HANDLER_IPC_H #define OHOS_DCAMERA_SINK_HANDLER_IPC_H -#include "event_handler.h" #include "idistributed_camera_sink.h" #include "single_instance.h" @@ -46,7 +45,6 @@ private: std::mutex sinkLocalDmsLock_; bool isInit_; - std::shared_ptr serviceHandler_; std::mutex initDmsLock_; }; } // namespace DistributedHardware diff --git a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler_ipc.cpp b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler_ipc.cpp index cc8992ea..c3506b6d 100644 --- a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler_ipc.cpp +++ b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler_ipc.cpp @@ -46,8 +46,6 @@ void DCameraSinkHandlerIpc::Init() DHLOGI("DCameraSinkHandlerIpc has already init"); return; } - auto runner = AppExecFwk::EventRunner::Create("DCameraSinkHandlerIpcHandler"); - serviceHandler_ = std::make_shared(runner); sinkLocalRecipient_ = new SinkLocalRecipient(); isInit_ = true; DHLOGI("DCameraSinkHandlerIpc Init End"); @@ -62,8 +60,6 @@ void DCameraSinkHandlerIpc::UnInit() return; } DeleteSinkLocalDhms(); - DHLOGI("DCameraSinkHandlerIpc Start free serviceHandler"); - serviceHandler_ = nullptr; DHLOGI("DCameraSinkHandlerIpc Start free recipient"); sinkLocalRecipient_ = nullptr; isInit_ = false; @@ -127,28 +123,18 @@ void DCameraSinkHandlerIpc::SinkLocalRecipient::OnRemoteDied(const wptr& remote) { - sptr diedRemoted = remote.promote(); - if (diedRemoted == nullptr) { - DHLOGE("OnSinkLocalDmsDied promote failed!"); - return; - } DHLOGI("OnSinkLocalDmsDied delete diedRemoted"); - auto remoteDmsDiedFunc = [this, diedRemoted]() { - OnSinkLocalDmsDied(diedRemoted); - }; - if (serviceHandler_ != nullptr) { - serviceHandler_->PostTask(remoteDmsDiedFunc); - } -} - -void DCameraSinkHandlerIpc::OnSinkLocalDmsDied(const sptr& remote) -{ std::lock_guard autoLock(sinkLocalDmsLock_); if (localSink_ == nullptr) { DHLOGE("DCameraSinkHandlerIpc::OnSinkLocalDmsDied, localSink is null."); return; } - if (localSink_->AsObject() != remote) { + sptr diedRemoted = remote.promote(); + if (diedRemoted == nullptr) { + DHLOGE("OnSinkLocalDmsDied promote failed!"); + return; + } + if (localSink_->AsObject() != diedRemoted) { DHLOGI("OnSinkLocalDmsDied not found remote object."); return; } diff --git a/interfaces/inner_kits/native_cpp/camera_source/BUILD.gn b/interfaces/inner_kits/native_cpp/camera_source/BUILD.gn index 011442db..fdca314a 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/BUILD.gn +++ b/interfaces/inner_kits/native_cpp/camera_source/BUILD.gn @@ -52,7 +52,6 @@ ohos_shared_library("distributed_camera_source_sdk") { ] external_deps = [ - "eventhandler:libeventhandler", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", "samgr_standard:samgr_proxy", diff --git a/interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler_ipc.h b/interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler_ipc.h index d19635ec..d12def18 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler_ipc.h +++ b/interfaces/inner_kits/native_cpp/camera_source/include/dcamera_source_handler_ipc.h @@ -16,7 +16,6 @@ #ifndef OHOS_DCAMERA_SOURCE_HANDLER_IPC_H #define OHOS_DCAMERA_SOURCE_HANDLER_IPC_H -#include "event_handler.h" #include "idistributed_camera_source.h" #include "single_instance.h" @@ -34,7 +33,6 @@ public: private: DCameraSourceHandlerIpc(); ~DCameraSourceHandlerIpc(); - void OnSourceLocalDmsDied(const sptr& remote); void DeleteSourceLocalDhms(); class SourceLocalRecipient : public IRemoteObject::DeathRecipient { @@ -46,7 +44,6 @@ private: std::mutex sourceLocalDmsLock_; bool isInit_; - std::shared_ptr serviceHandler_; std::mutex initDmsLock_; }; } // namespace DistributedHardware diff --git a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler_ipc.cpp b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler_ipc.cpp index 0964d666..5825f371 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler_ipc.cpp +++ b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler_ipc.cpp @@ -46,8 +46,6 @@ void DCameraSourceHandlerIpc::Init() DHLOGI("DCameraSourceHandlerIpc has already init"); return; } - auto runner = AppExecFwk::EventRunner::Create("DCameraSourceHandlerIpcHandler"); - serviceHandler_ = std::make_shared(runner); sourceLocalRecipient_ = new SourceLocalRecipient(); isInit_ = true; DHLOGI("DCameraSourceHandlerIpc Init End"); @@ -62,8 +60,6 @@ void DCameraSourceHandlerIpc::UnInit() return; } DeleteSourceLocalDhms(); - DHLOGI("DCameraSourceHandlerIpc Start free serviceHandler"); - serviceHandler_ = nullptr; DHLOGI("DCameraSourceHandlerIpc Start free recipient"); sourceLocalRecipient_ = nullptr; isInit_ = false; @@ -127,35 +123,25 @@ void DCameraSourceHandlerIpc::SourceLocalRecipient::OnRemoteDied(const wptr& remote) { - sptr diedRemoted = remote.promote(); - if (diedRemoted == nullptr) { - DHLOGE("OnSourceLocalDmsDied promote failed!"); - return; - } DHLOGI("OnSourceLocalDmsDied delete diedRemoted"); - auto remoteDmsDiedFunc = [this, diedRemoted]() { - OnSourceLocalDmsDied(diedRemoted); - }; - if (serviceHandler_ != nullptr) { - serviceHandler_->PostTask(remoteDmsDiedFunc); - } -} - -void DCameraSourceHandlerIpc::OnSourceLocalDmsDied(const sptr& remote) -{ std::lock_guard autoLock(sourceLocalDmsLock_); if (localSource_ == nullptr) { DHLOGE("DCameraSourceHandlerIpc::OnSourceLocalDmsDied, localSource is null."); return; } - if (localSource_->AsObject() != remote) { + sptr diedRemoted = remote.promote(); + if (diedRemoted == nullptr) { + DHLOGE("OnSourceLocalDmsDied promote failed!"); + return; + } + if (localSource_->AsObject() != diedRemoted) { DHLOGI("OnSourceLocalDmsDied not found remote object."); return; } - DHLOGI("OnSourceLocalDmsDied Clear"); localSource_->AsObject()->RemoveDeathRecipient(sourceLocalRecipient_); localSource_ = nullptr; } + } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sinkservice/include/distributedcameramgr/dcamera_sink_service_ipc.h b/services/cameraservice/sinkservice/include/distributedcameramgr/dcamera_sink_service_ipc.h index bae9d8e2..9e047b20 100644 --- a/services/cameraservice/sinkservice/include/distributedcameramgr/dcamera_sink_service_ipc.h +++ b/services/cameraservice/sinkservice/include/distributedcameramgr/dcamera_sink_service_ipc.h @@ -16,8 +16,10 @@ #ifndef OHOS_DCAMERA_SINK_SERVICE_IPC_H #define OHOS_DCAMERA_SINK_SERVICE_IPC_H -#include "event_handler.h" #include "idistributed_camera_source.h" + +#include + #include "single_instance.h" namespace OHOS { @@ -35,7 +37,6 @@ public: private: DCameraSinkServiceIpc(); ~DCameraSinkServiceIpc(); - void OnSourceRemoteDmsDied(const sptr& remote); void ClearSourceRemoteDhms(); class SourceRemoteRecipient : public IRemoteObject::DeathRecipient { @@ -47,7 +48,6 @@ private: std::mutex sourceRemoteDmsLock_; bool isInit_; - std::shared_ptr serviceHandler_; std::mutex initDmsLock_; }; } // namespace DistributedHardware diff --git a/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_service_ipc.cpp b/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_service_ipc.cpp index dd0b83b9..c98da8aa 100644 --- a/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_service_ipc.cpp +++ b/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_service_ipc.cpp @@ -46,8 +46,6 @@ void DCameraSinkServiceIpc::Init() DHLOGI("DCameraSinkServiceIpc has already init"); return; } - auto runner = AppExecFwk::EventRunner::Create("DCameraSinkServiceIpcHandler"); - serviceHandler_ = std::make_shared(runner); sourceRemoteRecipient_ = new SourceRemoteRecipient(); isInit_ = true; DHLOGI("DCameraSinkServiceIpc Init End"); @@ -62,8 +60,6 @@ void DCameraSinkServiceIpc::UnInit() return; } ClearSourceRemoteDhms(); - DHLOGI("DCameraSinkServiceIpc Start free serviceHandler"); - serviceHandler_ = nullptr; DHLOGI("DCameraSinkServiceIpc Start free recipient"); sourceRemoteRecipient_ = nullptr; isInit_ = false; @@ -155,37 +151,28 @@ void DCameraSinkServiceIpc::SourceRemoteRecipient::OnRemoteDied(const wptr& remote) { + DHLOGI("OnSourceRemoteDmsDied delete diedRemoted"); + std::lock_guard autoLock(sourceRemoteDmsLock_); sptr diedRemoted = remote.promote(); if (diedRemoted == nullptr) { DHLOGE("OnSourceRemoteDmsDied promote failed!"); return; } - DHLOGI("OnSourceRemoteDmsDied delete diedRemoted"); - auto remoteDmsDiedFunc = [this, diedRemoted]() { - OnSourceRemoteDmsDied(diedRemoted); - }; - if (serviceHandler_ != nullptr) { - serviceHandler_->PostTask(remoteDmsDiedFunc); - } -} - -void DCameraSinkServiceIpc::OnSourceRemoteDmsDied(const sptr& remote) -{ - std::lock_guard autoLock(sourceRemoteDmsLock_); auto iter = std::find_if(remoteSources_.begin(), remoteSources_.end(), [&]( const std::pair> &item)->bool { - return item.second->AsObject() == remote; + return item.second->AsObject() == diedRemoted; }); if (iter == remoteSources_.end()) { DHLOGI("OnSourceRemoteDmsDied not found remote object"); return; } - DHLOGI("OnSourceRemoteDmsDied remote.devId: %s", GetAnonyString(iter->first).c_str()); if (iter->second != nullptr) { iter->second->AsObject()->RemoveDeathRecipient(sourceRemoteRecipient_); } remoteSources_.erase(iter); + } + } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamera_source_service_ipc.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamera_source_service_ipc.h index 2fe81f6e..abf6a69d 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamera_source_service_ipc.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamera_source_service_ipc.h @@ -16,8 +16,10 @@ #ifndef OHOS_DCAMERA_SOURCE_SERVICE_IPC_H #define OHOS_DCAMERA_SOURCE_SERVICE_IPC_H -#include "event_handler.h" #include "idistributed_camera_sink.h" + +#include + #include "single_instance.h" namespace OHOS { @@ -35,7 +37,6 @@ public: private: DCameraSourceServiceIpc(); ~DCameraSourceServiceIpc(); - void OnSinkRemoteDmsDied(const sptr& remote); void ClearSinkRemoteDhms(); class SinkRemoteRecipient : public IRemoteObject::DeathRecipient { @@ -47,7 +48,6 @@ private: std::mutex sinkRemoteDmsLock_; bool isInit_; - std::shared_ptr serviceHandler_; std::mutex initDmsLock_; }; } // namespace DistributedHardware diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcamera_source_service_ipc.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcamera_source_service_ipc.cpp index 55bec13d..0b1728e1 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcamera_source_service_ipc.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcamera_source_service_ipc.cpp @@ -46,8 +46,6 @@ void DCameraSourceServiceIpc::Init() DHLOGI("DCameraSourceServiceIpc has already init"); return; } - auto runner = AppExecFwk::EventRunner::Create("DCameraSourceServiceIpcHandler"); - serviceHandler_ = std::make_shared(runner); sinkRemoteRecipient_ = new SinkRemoteRecipient(); isInit_ = true; DHLOGI("DCameraSourceServiceIpc Init End"); @@ -62,8 +60,6 @@ void DCameraSourceServiceIpc::UnInit() return; } ClearSinkRemoteDhms(); - DHLOGI("DCameraSourceServiceIpc UnInit Start free servicehandle"); - serviceHandler_ = nullptr; DHLOGI("DCameraSourceServiceIpc UnInit Start free recipient"); sinkRemoteRecipient_ = nullptr; isInit_ = false; @@ -155,26 +151,16 @@ void DCameraSourceServiceIpc::SinkRemoteRecipient::OnRemoteDied(const wptr& remote) { + DHLOGI("OnSinkRemoteDmsDied delete diedRemoted"); + std::lock_guard autoLock(sinkRemoteDmsLock_); sptr diedRemoted = remote.promote(); if (diedRemoted == nullptr) { DHLOGE("OnSinkRemoteDmsDied promote failed!"); return; } - DHLOGI("OnSinkRemoteDmsDied delete diedRemoted"); - auto remoteDmsDiedFunc = [this, diedRemoted]() { - OnSinkRemoteDmsDied(diedRemoted); - }; - if (serviceHandler_ != nullptr) { - serviceHandler_->PostTask(remoteDmsDiedFunc); - } -} - -void DCameraSourceServiceIpc::OnSinkRemoteDmsDied(const sptr& remote) -{ - std::lock_guard autoLock(sinkRemoteDmsLock_); auto iter = std::find_if(remoteSinks_.begin(), remoteSinks_.end(), [&]( const std::pair> &item)->bool { - return item.second->AsObject() == remote; + return item.second->AsObject() == diedRemoted; }); if (iter == remoteSinks_.end()) { DHLOGI("OnSinkRemoteDmsDied not found remote object"); -- Gitee