diff --git a/services/distributedhardwarefwkservice/include/task/offline_task.h b/services/distributedhardwarefwkservice/include/task/offline_task.h index 2bba2b056d9ec98776d8b3c127363cb0169fe6e3..0be333edfc6cd591832f4bf1f975788dbc2e8d46 100644 --- a/services/distributedhardwarefwkservice/include/task/offline_task.h +++ b/services/distributedhardwarefwkservice/include/task/offline_task.h @@ -17,6 +17,7 @@ #define OHOS_DISTRIBUTED_HARDWARE_OFFLINE_TASK_H #include +#include #include "task.h" @@ -50,6 +51,7 @@ private: std::condition_variable finishCondVar_; std::mutex unFinishTaskMtx_; std::set unFinishChildrenTasks_; + std::atomic isDeviceOffline_{false}; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/services/distributedhardwarefwkservice/src/task/offline_task.cpp b/services/distributedhardwarefwkservice/src/task/offline_task.cpp index be7b89b4c14111c43932287e278f8d4fc6e29418..04fb7c0966a0f5aa68a3e58628d6d7fdf0df1aa3 100644 --- a/services/distributedhardwarefwkservice/src/task/offline_task.cpp +++ b/services/distributedhardwarefwkservice/src/task/offline_task.cpp @@ -61,6 +61,10 @@ void OffLineTask::DoTask() void OffLineTask::DoTaskInner() { + if (isDeviceOffline_.load()) { + DHLOGW("Started releasing all resource and unloading sa."); + return; + } int32_t ret = pthread_setname_np(pthread_self(), OFFLINE_TASK_INNER); if (ret != DH_FWK_SUCCESS) { DHLOGE("DoTaskInner setname failed."); @@ -98,7 +102,8 @@ void OffLineTask::DoTaskInner() if (DHContext::GetInstance().GetRealTimeOnlineDeviceCount() == 0 && DHContext::GetInstance().GetIsomerismConnectCount() == 0 && TaskBoard::GetInstance().IsAllTaskFinish()) { - DHLOGI("all devices are offline, start to free the resource"); + isDeviceOffline_.store(true); + DHLOGI("all devices are offline, start to free the resource and set the flag to true."); DistributedHardwareManagerFactory::GetInstance().UnInit(); } }