From 8d61053cdfac79f1befc2bfc5e11e31b6aa68a6c Mon Sep 17 00:00:00 2001 From: liuyuxiu Date: Wed, 10 Jul 2024 11:02:09 +0800 Subject: [PATCH 1/2] configReader double free Bugfix Signed-off-by: liuyuxiu --- services/src/concurrent_task_controller.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/services/src/concurrent_task_controller.cpp b/services/src/concurrent_task_controller.cpp index 6a50829..61572c5 100644 --- a/services/src/concurrent_task_controller.cpp +++ b/services/src/concurrent_task_controller.cpp @@ -33,6 +33,7 @@ using namespace OHOS::Security::AccessToken; namespace OHOS { namespace ConcurrentTask { namespace { + static std::mutex configReaderMutex_; const std::string INTERVAL_DDL = "persist.ffrt.interval.renderthread"; const std::string INTERVAL_APP_RATE = "persist.ffrt.interval.appRate"; const std::string INTERVAL_RS_RATE = "persist.ffrt.interval.rsRate"; @@ -60,8 +61,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,6 +332,7 @@ void TaskController::Init() TypeMapInit(); qosPolicy_.Init(); TryCreateRsGroup(); + std::lock_guard autolock(configReaderMutex_); ConfigReaderInit(); } @@ -364,6 +369,7 @@ void TaskController::Release() renderServiceRenderGrpId_ = -1; } ddlSceneSchedSwitch_ = false; + std::lock_guard autolock(configReaderMutex_); configReader_ = nullptr; } -- Gitee From 5ae7f083e798a63204f3953f00dc07e52052748b Mon Sep 17 00:00:00 2001 From: liuyuxiu Date: Wed, 10 Jul 2024 15:59:54 +0800 Subject: [PATCH 2/2] configreader double free Bugfix Signed-off-by: liuyuxiu --- services/include/concurrent_task_controller.h | 1 + services/src/concurrent_task_controller.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/services/include/concurrent_task_controller.h b/services/include/concurrent_task_controller.h index ca00b9d..4d6e2e6 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 61572c5..27f1552 100644 --- a/services/src/concurrent_task_controller.cpp +++ b/services/src/concurrent_task_controller.cpp @@ -33,7 +33,6 @@ using namespace OHOS::Security::AccessToken; namespace OHOS { namespace ConcurrentTask { namespace { - static std::mutex configReaderMutex_; const std::string INTERVAL_DDL = "persist.ffrt.interval.renderthread"; const std::string INTERVAL_APP_RATE = "persist.ffrt.interval.appRate"; const std::string INTERVAL_RS_RATE = "persist.ffrt.interval.rsRate"; @@ -332,8 +331,11 @@ void TaskController::Init() TypeMapInit(); qosPolicy_.Init(); TryCreateRsGroup(); + std::lock_guard autolock(configReaderMutex_); - ConfigReaderInit(); + if (!configEnable_) { + ConfigReaderInit(); + } } bool TaskController::ConfigReaderInit() @@ -369,6 +371,7 @@ void TaskController::Release() renderServiceRenderGrpId_ = -1; } ddlSceneSchedSwitch_ = false; + std::lock_guard autolock(configReaderMutex_); configReader_ = nullptr; } -- Gitee