From 87af5aed5ca83f30ea142ab50318939e6a655011 Mon Sep 17 00:00:00 2001 From: zhonglufu Date: Mon, 8 Jul 2024 11:27:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=A8=B3=E5=AE=9A?= =?UTF-8?q?=E6=80=A7=E6=B5=8B=E8=AF=95=E4=B8=AD=E5=87=BA=E7=8E=B0=E7=9A=84?= =?UTF-8?q?=E6=A6=82=E7=8E=87=E6=80=A7SYS=5FFREEZE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhonglufu --- .../dcamerahdf/dcamera_hdf_operate.h | 5 +-- .../dcamerahdf/dcamera_hdf_operate.cpp | 32 +++++++++---------- .../dcamera_hdf_operate_test.cpp | 8 ++--- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.h index 3fedbb72..3fa88200 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.h @@ -16,6 +16,7 @@ #ifndef OHOS_DCAMERA_HDF_OPERATE_H #define OHOS_DCAMERA_HDF_OPERATE_H +#include #include #include @@ -48,8 +49,8 @@ private: int32_t WaitLoadProviderService(); private: - uint16_t cameraServStatus_ = INVALID_VALUE; - uint16_t providerServStatus_ = INVALID_VALUE; + std::atomic cameraServStatus_ = INVALID_VALUE; + std::atomic providerServStatus_ = INVALID_VALUE; std::condition_variable hdfOperateCon_; std::mutex hdfOperateMutex_; }; diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.cpp index ba2d86b7..81245565 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.cpp @@ -35,8 +35,8 @@ void DCameraHdfServStatListener::OnReceive(const ServiceStatus& status) int32_t DCameraHdfOperate::LoadDcameraHDFImpl() { - if (cameraServStatus_ == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START && - providerServStatus_ == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START) { + if (cameraServStatus_.load() == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START && + providerServStatus_.load() == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START) { DHLOGI("service has already start"); return DCAMERA_OK; } @@ -53,10 +53,10 @@ int32_t DCameraHdfOperate::LoadDcameraHDFImpl() status.serviceName.c_str(), status.status); std::unique_lock lock(hdfOperateMutex_); if (status.serviceName == CAMERA_SERVICE_NAME) { - cameraServStatus_ = status.status; + cameraServStatus_.store(status.status); hdfOperateCon_.notify_one(); } else if (status.serviceName == PROVIDER_SERVICE_NAME) { - providerServStatus_ = status.status; + providerServStatus_.store(status.status); hdfOperateCon_.notify_one(); } }))); @@ -66,8 +66,8 @@ int32_t DCameraHdfOperate::LoadDcameraHDFImpl() } DHLOGI("Load camera service."); - if (devmgr->LoadDevice(CAMERA_SERVICE_NAME) != 0) { - DHLOGE("Load camera service failed!"); + int32_t ret = devmgr->LoadDevice(CAMERA_SERVICE_NAME); + if (ret != HDF_SUCCESS && ret != HDF_ERR_DEVICE_BUSY) { return DCAMERA_BAD_OPERATE; } if (WaitLoadCameraService() != DCAMERA_OK) { @@ -75,8 +75,8 @@ int32_t DCameraHdfOperate::LoadDcameraHDFImpl() } DHLOGI("Load provider service."); - if (devmgr->LoadDevice(PROVIDER_SERVICE_NAME) != 0) { - DHLOGE("Load provider service failed!"); + ret = devmgr->LoadDevice(PROVIDER_SERVICE_NAME); + if (ret != HDF_SUCCESS && ret != HDF_ERR_DEVICE_BUSY) { return DCAMERA_BAD_OPERATE; } if (WaitLoadProviderService() != DCAMERA_OK) { @@ -94,11 +94,11 @@ int32_t DCameraHdfOperate::WaitLoadCameraService() DHLOGI("wait Load camera service."); std::unique_lock lock(hdfOperateMutex_); hdfOperateCon_.wait_for(lock, std::chrono::milliseconds(WAIT_TIME), [this] { - return (this->cameraServStatus_ == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START); + return (this->cameraServStatus_.load() == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START); }); - if (cameraServStatus_ != OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START) { - DHLOGE("wait load cameraService failed, status %{public}d", cameraServStatus_); + if (cameraServStatus_.load() != OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START) { + DHLOGE("wait load cameraService failed, status %{public}d", cameraServStatus_.load()); return DCAMERA_BAD_OPERATE; } @@ -110,11 +110,11 @@ int32_t DCameraHdfOperate::WaitLoadProviderService() DHLOGI("wait Load provider service."); std::unique_lock lock(hdfOperateMutex_); hdfOperateCon_.wait_for(lock, std::chrono::milliseconds(WAIT_TIME), [this] { - return (this->providerServStatus_ == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START); + return (this->providerServStatus_.load() == OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START); }); - if (providerServStatus_ != OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START) { - DHLOGE("wait load providerService failed, status %{public}d", providerServStatus_); + if (providerServStatus_.load() != OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START) { + DHLOGE("wait load providerService failed, status %{public}d", providerServStatus_.load()); return DCAMERA_BAD_OPERATE; } @@ -138,8 +138,8 @@ int32_t DCameraHdfOperate::UnLoadDcameraHDFImpl() if (ret != 0) { DHLOGE("Unload provider service failed, ret: %d", ret); } - cameraServStatus_ = INVALID_VALUE; - providerServStatus_ = INVALID_VALUE; + cameraServStatus_.store(INVALID_VALUE); + providerServStatus_.store(INVALID_VALUE); DHLOGI("UnLoadCameraHDFImpl end!"); return DCAMERA_OK; } diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_hdf_operate_test.cpp b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_hdf_operate_test.cpp index 1b6fab42..8d5843ff 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_hdf_operate_test.cpp +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/dcamera_hdf_operate_test.cpp @@ -89,8 +89,8 @@ HWTEST_F(DCameraHdfOperateTest, dcamera_hdf_operate_test_002, TestSize.Level1) HWTEST_F(DCameraHdfOperateTest, dcamera_hdf_operate_test_003, TestSize.Level1) { DHLOGI("DCameraHdfOperateTest::dcamera_hdf_operate_test_003"); - DCameraHdfOperate::GetInstance().cameraServStatus_ = OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START; - DCameraHdfOperate::GetInstance().providerServStatus_ = OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START; + DCameraHdfOperate::GetInstance().cameraServStatus_.store(OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START); + DCameraHdfOperate::GetInstance().providerServStatus_.store(OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_START); int32_t ret = DCameraHdfOperate::GetInstance().LoadDcameraHDFImpl(); EXPECT_EQ(DCAMERA_OK, ret); } @@ -104,7 +104,7 @@ HWTEST_F(DCameraHdfOperateTest, dcamera_hdf_operate_test_003, TestSize.Level1) HWTEST_F(DCameraHdfOperateTest, dcamera_hdf_operate_test_004, TestSize.Level1) { DHLOGI("DCameraHdfOperateTest::dcamera_hdf_operate_test_004"); - DCameraHdfOperate::GetInstance().cameraServStatus_ = OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_STOP; + DCameraHdfOperate::GetInstance().cameraServStatus_.store(OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_STOP); int32_t ret = DCameraHdfOperate::GetInstance().WaitLoadCameraService(); EXPECT_EQ(DCAMERA_BAD_OPERATE, ret); } @@ -118,7 +118,7 @@ HWTEST_F(DCameraHdfOperateTest, dcamera_hdf_operate_test_004, TestSize.Level1) HWTEST_F(DCameraHdfOperateTest, dcamera_hdf_operate_test_005, TestSize.Level1) { DHLOGI("DCameraHdfOperateTest::dcamera_hdf_operate_test_005"); - DCameraHdfOperate::GetInstance().providerServStatus_ = OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_STOP; + DCameraHdfOperate::GetInstance().providerServStatus_.store(OHOS::HDI::ServiceManager::V1_0::SERVIE_STATUS_STOP); int32_t ret = DCameraHdfOperate::GetInstance().WaitLoadProviderService(); EXPECT_EQ(DCAMERA_BAD_OPERATE, ret); } -- Gitee From a20979fa899618081a3dd7b34c5a44906967f9d4 Mon Sep 17 00:00:00 2001 From: zhonglufu Date: Mon, 8 Jul 2024 11:51:59 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E7=A8=B3=E5=AE=9A?= =?UTF-8?q?=E6=80=A7=E6=B5=8B=E8=AF=95=E4=B8=AD=E5=87=BA=E7=8E=B0=E7=9A=84?= =?UTF-8?q?=E6=A6=82=E7=8E=87=E6=80=A7SYS=5FFREEZE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhonglufu --- .../distributedcameramgr/dcamerahdf/dcamera_hdf_operate.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.cpp index 81245565..713942b3 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcamerahdf/dcamera_hdf_operate.cpp @@ -15,6 +15,7 @@ #include "dcamera_hdf_operate.h" +#include #include #include "anonymous_string.h" @@ -74,9 +75,9 @@ int32_t DCameraHdfOperate::LoadDcameraHDFImpl() return DCAMERA_BAD_OPERATE; } - DHLOGI("Load provider service."); ret = devmgr->LoadDevice(PROVIDER_SERVICE_NAME); if (ret != HDF_SUCCESS && ret != HDF_ERR_DEVICE_BUSY) { + DHLOGE("Load provider service failed!"); return DCAMERA_BAD_OPERATE; } if (WaitLoadProviderService() != DCAMERA_OK) { -- Gitee