From b1a8f57a06151a83321da8194ab6b910a885a3e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E5=B0=8F=E6=9E=97?= Date: Tue, 9 Sep 2025 16:30:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DWatchEventListener=E6=82=AC?= =?UTF-8?q?=E7=A9=BA=E6=8C=87=E9=92=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I3a348a4bcfc006344ad5d21aef3074f22d7ab4a8 Signed-off-by: 姜小林 --- .../ani/watch_event_listener.cpp | 39 ++++++++++--------- .../class_watcher/ani/watch_event_listener.h | 2 - 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/interfaces/kits/js/src/mod_fs/class_watcher/ani/watch_event_listener.cpp b/interfaces/kits/js/src/mod_fs/class_watcher/ani/watch_event_listener.cpp index d51d6a44a..4b239bc2e 100644 --- a/interfaces/kits/js/src/mod_fs/class_watcher/ani/watch_event_listener.cpp +++ b/interfaces/kits/js/src/mod_fs/class_watcher/ani/watch_event_listener.cpp @@ -52,24 +52,9 @@ bool WatchEventListener::IsStrictEquals(const shared_ptr &othe return isSame; } -void WatchEventListener::InvokeCallback(const string &fileName, uint32_t event, uint32_t cookie) const -{ - auto watchEvent = CreateSharedPtr(); - if (watchEvent == nullptr) { - HILOGE("Failed to request heap memory."); - return; - } - - watchEvent->fileName = fileName; - watchEvent->event = event; - watchEvent->cookie = cookie; - auto task = [this, watchEvent]() { SendWatchEvent(*watchEvent); }; - AniHelper::SendEventToMainThread(task); -} - inline static const int32_t ANI_SCOPE_SIZE = 16; -void WatchEventListener::SendWatchEvent(const WatchEvent &watchEvent) const +static void SendWatchEvent(ani_vm *vm, ani_fn_object callback, const WatchEvent &watchEvent) { if (vm == nullptr) { HILOGE("Cannot send WatchEvent because the vm is null."); @@ -101,8 +86,7 @@ void WatchEventListener::SendWatchEvent(const WatchEvent &watchEvent) const vector args = { static_cast(evtObj) }; auto argc = args.size(); ani_ref result; - auto cbObj = static_cast(callback); - status = env->FunctionalObject_Call(cbObj, argc, args.data(), &result); + status = env->FunctionalObject_Call(callback, argc, args.data(), &result); if (status != ANI_OK) { HILOGE("Failed to call FunctionalObject_Call, status: %{public}d", static_cast(status)); } @@ -113,4 +97,23 @@ void WatchEventListener::SendWatchEvent(const WatchEvent &watchEvent) const } } +void WatchEventListener::InvokeCallback(const string &fileName, uint32_t event, uint32_t cookie) const +{ + auto watchEvent = CreateSharedPtr(); + if (watchEvent == nullptr) { + HILOGE("Failed to request heap memory."); + return; + } + + watchEvent->fileName = fileName; + watchEvent->event = event; + watchEvent->cookie = cookie; + auto localVm = vm; + auto localCallback = static_cast(callback); + auto task = [localVm, localCallback, watchEvent]() { + SendWatchEvent(localVm, localCallback, *watchEvent); + }; + AniHelper::SendEventToMainThread(task); +} + } // namespace OHOS::FileManagement::ModuleFileIO::ANI diff --git a/interfaces/kits/js/src/mod_fs/class_watcher/ani/watch_event_listener.h b/interfaces/kits/js/src/mod_fs/class_watcher/ani/watch_event_listener.h index 919739228..3e7e849c4 100644 --- a/interfaces/kits/js/src/mod_fs/class_watcher/ani/watch_event_listener.h +++ b/interfaces/kits/js/src/mod_fs/class_watcher/ani/watch_event_listener.h @@ -38,8 +38,6 @@ public: private: inline static const std::string className_ = "WatchEventListener"; - void SendWatchEvent(const WatchEvent &watchEvent) const; - ani_vm *vm; ani_ref callback; }; -- Gitee