diff --git a/common/src/utils/dcamera_sa_process_state.cpp b/common/src/utils/dcamera_sa_process_state.cpp index cfdd908f79464689e2d84b10fdee4b3412d5cca7..a63f158b349c95ed790a4e379db57b98128632f6 100644 --- a/common/src/utils/dcamera_sa_process_state.cpp +++ b/common/src/utils/dcamera_sa_process_state.cpp @@ -41,7 +41,7 @@ void SetSinkProcessExit() return; } DHLOGI("exit sa process success."); - exit(0); + _Exit(0); } void SetSourceProcessExit() @@ -54,7 +54,7 @@ void SetSourceProcessExit() return; } DHLOGI("exit sa process success."); - exit(0); + _Exit(0); } } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler.cpp b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler.cpp index 704a454b812321b8abf2840f947af41b4771d14e..9bbfa7a4ad8cc1b46cb0f45c5eb97388ef48faa5 100644 --- a/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler.cpp +++ b/interfaces/inner_kits/native_cpp/camera_sink/src/dcamera_sink_handler.cpp @@ -44,6 +44,13 @@ DCameraSinkHandler::~DCameraSinkHandler() int32_t DCameraSinkHandler::InitSink(const std::string& params) { DHLOGI("DCameraSinkHandler::InitSink"); + { + std::lock_guard autoLock(producerMutex_); + if (state_ == DCAMERA_SA_STATE_START) { + return DCAMERA_OK; + } + } + sptr sm = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (sm == nullptr) { DHLOGE("GetSourceLocalCamSrv GetSystemAbilityManager failed"); @@ -53,17 +60,19 @@ int32_t DCameraSinkHandler::InitSink(const std::string& params) sptr loadCallback = new DCameraSinkLoadCallback(params); int32_t ret = sm->LoadSystemAbility(DISTRIBUTED_HARDWARE_CAMERA_SINK_SA_ID, loadCallback); if (ret != DCAMERA_OK) { - DHLOGE("systemAbilityId: %d load filed,result code: %d.", DISTRIBUTED_HARDWARE_CAMERA_SINK_SA_ID, ret); + DHLOGE("systemAbilityId: %d load filed, result code: %d.", DISTRIBUTED_HARDWARE_CAMERA_SINK_SA_ID, ret); return DCAMERA_INIT_ERR; } uint32_t interval = 1; - std::unique_lock lock(producerMutex_); - producerCon_.wait_for(lock, std::chrono::minutes(interval), [this] { - return (this->state_ == DCAMERA_SA_STATE_START); - }); - if (state_ == DCAMERA_SA_STATE_STOP) { - DHLOGE("SinkSA Start failed!"); - return DCAMERA_INIT_ERR; + { + std::unique_lock lock(producerMutex_); + producerCon_.wait_for(lock, std::chrono::minutes(interval), [this] { + return (this->state_ == DCAMERA_SA_STATE_START); + }); + if (state_ == DCAMERA_SA_STATE_STOP) { + DHLOGE("SinkSA Start failed!"); + return DCAMERA_INIT_ERR; + } } DHLOGI("DCameraSinkHandler InitSink end, result: %d", ret); return DCAMERA_OK; diff --git a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp index d2ab0dfd11838d4c6bbc78a6530c01e34ba16f31..d14242d8bdcd5c353805cf78e58a3274d4ddf64c 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp +++ b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp @@ -44,6 +44,12 @@ DCameraSourceHandler::~DCameraSourceHandler() int32_t DCameraSourceHandler::InitSource(const std::string& params) { DHLOGI("DCameraSourceHandler InitSource Start"); + { + std::lock_guard autoLock(producerMutex_); + if (state_ == DCAMERA_SA_STATE_START) { + return DCAMERA_OK; + } + } sptr sm = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (sm == nullptr) { DHLOGE("GetSourceLocalCamSrv GetSystemAbilityManager failed"); @@ -53,17 +59,19 @@ int32_t DCameraSourceHandler::InitSource(const std::string& params) sptr loadCallback = new DCameraSourceLoadCallback(params); int32_t ret = sm->LoadSystemAbility(DISTRIBUTED_HARDWARE_CAMERA_SOURCE_SA_ID, loadCallback); if (ret != ERR_OK) { - DHLOGE("systemAbilityId: %d load failed,result code: %d.", DISTRIBUTED_HARDWARE_CAMERA_SINK_SA_ID, ret); + DHLOGE("systemAbilityId: %d load failed, result code: %d.", DISTRIBUTED_HARDWARE_CAMERA_SOURCE_SA_ID, ret); return DCAMERA_INIT_ERR; } uint32_t interval = 1; - std::unique_lock lock(producerMutex_); - producerCon_.wait_for(lock, std::chrono::minutes(interval), [this] { - return (this->state_ == DCAMERA_SA_STATE_START); - }); - if (state_ == DCAMERA_SA_STATE_STOP) { - DHLOGE("SourceSA Start failed!"); - return DCAMERA_INIT_ERR; + { + std::unique_lock lock(producerMutex_); + producerCon_.wait_for(lock, std::chrono::minutes(interval), [this] { + return (this->state_ == DCAMERA_SA_STATE_START); + }); + if (state_ == DCAMERA_SA_STATE_STOP) { + DHLOGE("SourceSA Start failed!"); + return DCAMERA_INIT_ERR; + } } DHLOGI("DCameraSourceHandler InitSource end, result: %d", ret); return DCAMERA_OK;