From 0c8bdd869512a871137631955e7c3435a9c27981 Mon Sep 17 00:00:00 2001 From: w30042960 Date: Sat, 25 Nov 2023 10:38:27 +0800 Subject: [PATCH] Death monitoring Signed-off-by: w30042960 --- .../dcamera_source_controller.h | 7 +++++++ .../dcamera_source_controller.cpp | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameracontrol/dcamera_source_controller.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameracontrol/dcamera_source_controller.h index 47a3be02..2f92603d 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameracontrol/dcamera_source_controller.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameracontrol/dcamera_source_controller.h @@ -24,6 +24,7 @@ #include "dcamera_source_state_machine.h" #include "event_bus.h" #include "icamera_channel.h" +#include "iremote_object.h" #include "v1_0/id_camera_provider.h" @@ -57,6 +58,11 @@ private: void HandleMetaDataResult(std::string& jsonStr); void PostChannelDisconnectedEvent(); int32_t WaitforSessionResult(const std::string& devId); + class DCameraHdiRecipient : public IRemoteObject::DeathRecipient { + public: + void OnRemoteDied(const wptr &remote) override; + }; + sptr cameraHdiRecipient_; private: std::string devId_; @@ -68,6 +74,7 @@ private: std::weak_ptr camDev_; int32_t channelState_; sptr camHdiProvider_; + sptr remote_; bool isInit; const std::string SESSION_FLAG = "control"; diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameracontrol/dcamera_source_controller.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameracontrol/dcamera_source_controller.cpp index 65da4d41..9cb4f199 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameracontrol/dcamera_source_controller.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameracontrol/dcamera_source_controller.cpp @@ -17,6 +17,10 @@ #include #include "json/json.h" +#include +#include "iservice_registry.h" +#include "iservmgr_hdi.h" +#include "iproxy_broker.h" #include "dcamera_capture_info_cmd.h" #include "dcamera_channel_source_impl.h" @@ -44,6 +48,7 @@ DCameraSourceController::DCameraSourceController(std::string devId, std::string DHLOGI("DCameraSourceController create devId: %s dhId: %s", GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str()); isInit = false; + cameraHdiRecipient_ = new DCameraHdiRecipient(); } DCameraSourceController::~DCameraSourceController() @@ -368,6 +373,11 @@ int32_t DCameraSourceController::Init(std::vector& indexs) if (camHdiProvider_ == nullptr) { DHLOGE("camHdiProvider_ is null."); } + remote_ = OHOS::HDI::hdi_objcast(camHdiProvider_); + if (remote_ != nullptr) { + remote_->AddDeathRecipient(cameraHdiRecipient_); + } + indexs_.assign(indexs.begin(), indexs.end()); std::string dhId = indexs_.begin()->dhId_; std::string devId = indexs_.begin()->devId_; @@ -386,6 +396,9 @@ int32_t DCameraSourceController::UnInit() indexs_.clear(); isInit = false; isChannelConnected_.store(false); + if (remote_ != nullptr) { + remote_->RemoveDeathRecipient(cameraHdiRecipient_); + } return DCAMERA_OK; } @@ -526,5 +539,11 @@ int32_t DCameraSourceController::StopDistributedHardware(const std::string &netw { return DCAMERA_OK; } + +void DCameraSourceController::DCameraHdiRecipient::OnRemoteDied(const wptr &remote) +{ + DHLOGE("Exit the current process."); + _Exit(0); +} } // namespace DistributedHardware } // namespace OHOS -- Gitee