diff --git a/services/include/concurrent_task_controller.h b/services/include/concurrent_task_controller.h index ca00b9def97e19e92a103ecdcc4c887d1cbe6d7b..4d6e2e6afdb510bc5f788c5a24686a0e40674110 100644 --- a/services/include/concurrent_task_controller.h +++ b/services/include/concurrent_task_controller.h @@ -95,6 +95,7 @@ private: std::mutex rateInfoLock_; std::mutex executorStartLock_; std::mutex ddlPowerModeLock_; + std::mutex configReaderMutex_; std::list foregroundApp_ = {}; std::list rsThreads_ = {}; std::unordered_map msgType_ = {}; diff --git a/services/src/concurrent_task_controller.cpp b/services/src/concurrent_task_controller.cpp index 6a5082996d306e6138d6536cd667f37d2a622756..27f155207c63b06bdf78e64e1ce20b4f5b62ad76 100644 --- a/services/src/concurrent_task_controller.cpp +++ b/services/src/concurrent_task_controller.cpp @@ -60,8 +60,11 @@ TaskController& TaskController::GetInstance() void TaskController::RequestAuth(const Json::Value& payload) { - if (!configEnable_ && !ConfigReaderInit()) { - return; + { + std::lock_guard autolock(configReaderMutex_); + if (!configEnable_ && !ConfigReaderInit()) { + return; + } } pid_t uid = IPCSkeleton::GetInstance().GetCallingUid(); auto bundleName = GetProcessNameByToken(); @@ -328,7 +331,11 @@ void TaskController::Init() TypeMapInit(); qosPolicy_.Init(); TryCreateRsGroup(); - ConfigReaderInit(); + + std::lock_guard autolock(configReaderMutex_); + if (!configEnable_) { + ConfigReaderInit(); + } } bool TaskController::ConfigReaderInit() @@ -364,6 +371,8 @@ void TaskController::Release() renderServiceRenderGrpId_ = -1; } ddlSceneSchedSwitch_ = false; + + std::lock_guard autolock(configReaderMutex_); configReader_ = nullptr; }