diff --git a/interfaces/kits/js/src/common/ani_helper/ani_helper.h b/interfaces/kits/js/src/common/ani_helper/ani_helper.h index 3002ac16c58b6e6a2a03b86d8303fdc76cb854d4..99e64b3ff6df3ea1190ba510b9d651990fd030d9 100644 --- a/interfaces/kits/js/src/common/ani_helper/ani_helper.h +++ b/interfaces/kits/js/src/common/ani_helper/ani_helper.h @@ -33,8 +33,6 @@ namespace OHOS::FileManagement::ModuleFileIO::ANI { using namespace std; using namespace OHOS::FileManagement::ModuleFileIO::ANI::AniSignature; -static thread_local shared_ptr mainHandler; - class AniHelper { public: template @@ -183,17 +181,10 @@ public: return false; } - if (mainHandler == nullptr) { - shared_ptr runner = OHOS::AppExecFwk::EventRunner::GetMainEventRunner(); - if (!runner) { - HILOGE("get main event runner failed!"); - return false; - } - mainHandler = CreateSharedPtr(runner); - if (mainHandler == nullptr) { - HILOGE("Failed to request heap memory."); - return false; - } + auto &mainHandler = GetMainHandler(); + if (!mainHandler) { + HILOGE("mainHandler is not initialized!"); + return false; } bool succ = mainHandler->PostTask(func, "", 0, OHOS::AppExecFwk::EventQueue::Priority::HIGH, {}); if (!succ) { @@ -202,6 +193,23 @@ public: } return true; } + +private: + static std::shared_ptr &GetMainHandler() + { + static std::shared_ptr mainHandler = + []() -> std::shared_ptr { + auto runner = OHOS::AppExecFwk::EventRunner::GetMainEventRunner(); + if (runner) { + return CreateSharedPtr(runner); + } else { + HILOGE("Get main event runner failed when initializing mainHandler!"); + return nullptr; + } + }(); + + return mainHandler; + } }; } // namespace OHOS::FileManagement::ModuleFileIO::ANI