diff --git a/interfaces/kits/js/src/mod_fs/class_tasksignal/task_signal_entity.cpp b/interfaces/kits/js/src/mod_fs/class_tasksignal/task_signal_entity.cpp index c11015496b17886afd8c00523a777cc4b723745d..99fee553d41278f26b031ceadba8172869f6e23e 100644 --- a/interfaces/kits/js/src/mod_fs/class_tasksignal/task_signal_entity.cpp +++ b/interfaces/kits/js/src/mod_fs/class_tasksignal/task_signal_entity.cpp @@ -21,52 +21,37 @@ TaskSignalEntity::~TaskSignalEntity() {} void TaskSignalEntity::OnCancel() { - uv_loop_s *loop = nullptr; - if (!callbackContext_) { - return; - } auto env = callbackContext_->env_; callbackContext_->filePath_ = taskSignal_->filePath_; - napi_get_uv_event_loop(env, &loop); - if (loop == nullptr) { - return; - } - uv_work_t *work = new (std::nothrow) uv_work_t; - if (work == nullptr) { - return; - } - work->data = reinterpret_cast(callbackContext_.get()); - int ret = uv_queue_work_with_qos(loop, work, [](uv_work_t *work) {}, - [](uv_work_t *work, int status) { - JSCallbackContext *callbackContext = reinterpret_cast(work->data); - if (callbackContext == nullptr) { - return; - } - if (!callbackContext->ref_) { - return; - } - napi_handle_scope scope = nullptr; - napi_status ret = napi_open_handle_scope(callbackContext->env_, &scope); - if (ret != napi_ok) { - return; - } - napi_env env = callbackContext->env_; - napi_value jsCallback = callbackContext->ref_.Deref(env).val_; - napi_value filePath = LibN::NVal::CreateUTF8String(env, callbackContext->filePath_).val_; - napi_value retVal = nullptr; - ret = napi_call_function(env, nullptr, jsCallback, 1, &filePath, &retVal); - if (ret != napi_ok) { - HILOGE("Failed to call napi_call_function, ret: %{public}d", ret); - } - ret = napi_close_handle_scope(callbackContext->env_, scope); - if (ret != napi_ok) { - HILOGE("Failed to close handle scope, ret: %{public}d", ret); - } - delete work; - }, uv_qos_user_initiated); + JSCallbackContext *callbackContext = callbackContext_.get(); + auto task = [callbackContext] () { + if (callbackContext == nullptr) { + return; + } + if (!callbackContext->ref_) { + return; + } + napi_handle_scope scope = nullptr; + napi_status ret = napi_open_handle_scope(callbackContext->env_, &scope); + if (ret != napi_ok) { + return; + } + napi_env env = callbackContext->env_; + napi_value jsCallback = callbackContext->ref_.Deref(env).val_; + napi_value filePath = LibN::NVal::CreateUTF8String(env, callbackContext->filePath_).val_; + napi_value retVal = nullptr; + ret = napi_call_function(env, nullptr, jsCallback, 1, &filePath, &retVal); + if (ret != napi_ok) { + HILOGE("Failed to call napi_call_function, ret: %{public}d", ret); + } + ret = napi_close_handle_scope(callbackContext->env_, scope); + if (ret != napi_ok) { + HILOGE("Failed to close handle scope, ret: %{public}d", ret); + } + }; + auto ret = napi_send_event(env, task, napi_eprio_immediate); if (ret != 0) { HILOGE("Failed to uv_queue_work_with_qos, ret: %{public}d", ret); - delete work; } } } // namespace OHOS::FileManagement::ModuleFileIO \ No newline at end of file diff --git a/interfaces/kits/js/src/mod_fs/class_watcher/watcher_n_exporter.cpp b/interfaces/kits/js/src/mod_fs/class_watcher/watcher_n_exporter.cpp index c42aa35ab7c7de3398f585f77c31c39b504b287b..8637f5f2090c1353c31f2b8c3136d92044870ff6 100644 --- a/interfaces/kits/js/src/mod_fs/class_watcher/watcher_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fs/class_watcher/watcher_n_exporter.cpp @@ -118,7 +118,7 @@ napi_value WatcherNExporter::Start(napi_env env, napi_callback_info info) return NAsyncWorkPromise(env, thisVar).Schedule(procedureName, cbExec, cbCompl).val_; } -static void WatcherCallbackComplete(uv_work_t *work, int stat) +static void WatcherCallbackComplete(uv_work_t *work) { if (work == nullptr) { HILOGE("Failed to get uv_queue_work pointer"); @@ -165,12 +165,6 @@ static void WatcherCallbackComplete(uv_work_t *work, int stat) void WatcherNExporter::WatcherCallback(napi_env env, NRef &callback, const std::string &fileName, const uint32_t &event, const uint32_t &cookie) { - uv_loop_s *loop = nullptr; - napi_get_uv_event_loop(env, &loop); - if (loop == nullptr) { - HILOGE("Failed to get uv event loop"); - return; - } if (!callback) { HILOGE("Failed to parse watcher callback"); return; @@ -191,8 +185,10 @@ void WatcherNExporter::WatcherCallback(napi_env env, NRef &callback, const std:: callbackContext->event_ = event; callbackContext->cookie_ = cookie; work->data = reinterpret_cast(callbackContext); - int ret = uv_queue_work( - loop, work, [](uv_work_t *work) {}, reinterpret_cast(WatcherCallbackComplete)); + auto task = [work] () { + WatcherCallbackComplete(work); + }; + auto ret = napi_send_event(env, task, napi_eprio_immediate); if (ret != 0) { HILOGE("Failed to execute libuv work queue, ret: %{public}d", ret); delete callbackContext; diff --git a/interfaces/kits/js/src/mod_fs/properties/connectdfs.cpp b/interfaces/kits/js/src/mod_fs/properties/connectdfs.cpp index 324ee94a7c183408784e31d92d97d3bed0f33e49..f59567a592e5843ab4792e215561341eedab8dae 100644 --- a/interfaces/kits/js/src/mod_fs/properties/connectdfs.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/connectdfs.cpp @@ -249,7 +249,7 @@ napi_value WrapString(napi_env &env, const std::string ¶m, const std::string return jsValue; } -void UvWorkAfterOnStaus(uv_work_t *work, int status) +void UvWorkAfterOnStaus(uv_work_t *work) { HILOGI("UvWorkAfterOnStaus called"); napi_handle_scope scope = nullptr; @@ -296,13 +296,6 @@ void UvWorkAfterOnStaus(uv_work_t *work, int status) void NAPIDfsListener::OnStatus(const std::string &networkId, int32_t status) { HILOGI("NAPIDfsListener::OnStatus called"); - uv_loop_s *loop = nullptr; - - napi_get_uv_event_loop(env_, &loop); - if (loop == nullptr) { - HILOGE("NAPIDfsListener::OnStatus, loop == nullptr"); - return; - } uv_work_t *work = new (std::nothrow) uv_work_t; if (work == nullptr) { @@ -326,9 +319,11 @@ void NAPIDfsListener::OnStatus(const std::string &networkId, int32_t status) connectDfsCB->status = status; work->data = static_cast(connectDfsCB); - int rev = uv_queue_work( - loop, work, [](uv_work_t *work) {}, UvWorkAfterOnStaus); - if (rev != ERRNO_NOERR) { + auto task = [work] () { + UvWorkAfterOnStaus(work); + }; + auto ret = napi_send_event(env_, task, napi_eprio_immediate); + if (ret != ERRNO_NOERR) { delete connectDfsCB; connectDfsCB = nullptr; delete work; diff --git a/interfaces/kits/js/src/mod_fs/properties/copy.cpp b/interfaces/kits/js/src/mod_fs/properties/copy.cpp index a905646a57309bfa5054c86ec71dd6be9498a33b..76a9718470a90f8e2a0717a8b2403aeafc69c102 100644 --- a/interfaces/kits/js/src/mod_fs/properties/copy.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/copy.cpp @@ -540,7 +540,7 @@ void Copy::UnregisterListener(std::shared_ptr infos) jsCbMap_.erase(*infos); } -void Copy::ReceiveComplete(uv_work_t *work, int stat) +void Copy::ReceiveComplete(uv_work_t *work) { if (work == nullptr) { HILOGE("uv_work_t pointer is nullptr."); @@ -622,10 +622,10 @@ void Copy::OnFileReceive(std::shared_ptr infos) HILOGE("failed to get uv work"); return; } - uv_loop_s *loop = nullptr; - napi_get_uv_event_loop(infos->env, &loop); - auto ret = uv_queue_work( - loop, work, [](uv_work_t *work) {}, reinterpret_cast(ReceiveComplete)); + auto task = [work] () { + ReceiveComplete(work); + }; + auto ret = napi_send_event(infos->env, task, napi_eprio_immediate); if (ret != 0) { HILOGE("failed to uv_queue_work"); delete (reinterpret_cast(work->data)); diff --git a/interfaces/kits/js/src/mod_fs/properties/copy.h b/interfaces/kits/js/src/mod_fs/properties/copy.h index e0c30ca70323ab494983dccbacc7be312416cd5b..5c3a475d3cc3a075ab9e7b1a87e3e3bf96304554 100644 --- a/interfaces/kits/js/src/mod_fs/properties/copy.h +++ b/interfaces/kits/js/src/mod_fs/properties/copy.h @@ -151,7 +151,7 @@ private: static void GetNotifyEvent(std::shared_ptr infos); static void StartNotify(std::shared_ptr infos, std::shared_ptr callback); static uv_work_t *GetUVwork(std::shared_ptr infos); - static void ReceiveComplete(uv_work_t *work, int stat); + static void ReceiveComplete(uv_work_t *work); static std::shared_ptr GetRegisteredListener(std::shared_ptr infos); static void CloseNotifyFd(std::shared_ptr infos, std::shared_ptr callback); static void CloseNotifyFdLocked(std::shared_ptr infos, std::shared_ptr callback); diff --git a/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener.cpp b/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener.cpp index f6de256a69f8ac209778d735f49b07d78cad7d92..8da5084974857df817f53df1490c156074589b2d 100644 --- a/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/copy_listener/trans_listener.cpp @@ -299,34 +299,47 @@ int32_t TransListener::OnFileReceive(uint64_t totalBytes, uint64_t processedByte return ENOMEM; } - uv_loop_s *loop = nullptr; - napi_get_uv_event_loop(callback_->env, &loop); - if (loop == nullptr) { - HILOGE("Failed to get uv event loop"); - return ENOMEM; - } - - uv_work_t *work = new (std::nothrow) uv_work_t; - if (work == nullptr) { - HILOGE("Failed to create uv_work_t pointer"); - return ENOMEM; - } - UvEntry *entry = new (std::nothrow) UvEntry(callback_); if (entry == nullptr) { HILOGE("entry ptr is nullptr"); - delete work; return ENOMEM; } entry->progressSize = processedBytes; entry->totalSize = totalBytes; - work->data = entry; - int retVal = uv_queue_work( - loop, work, [](uv_work_t *work) {}, reinterpret_cast(CallbackComplete)); + auto env = entry->callback->env; + auto task = [entry] () { + if (entry == nullptr) { + HILOGE("entry pointer is nullptr."); + return; + } + napi_handle_scope scope = nullptr; + napi_env env = entry->callback->env; + napi_status status = napi_open_handle_scope(env, &scope); + if (status != napi_ok) { + HILOGE("Failed to open handle scope, status: %{public}d.", status); + return; + } + NVal obj = NVal::CreateObject(env); + if (entry->progressSize <= MAX_VALUE && entry->totalSize <= MAX_VALUE) { + obj.AddProp("processedSize", NVal::CreateInt64(env, entry->progressSize).val_); + obj.AddProp("totalSize", NVal::CreateInt64(env, entry->totalSize).val_); + } + + napi_value result = nullptr; + napi_value jsCallback = entry->callback->nRef.Deref(env).val_; + status = napi_call_function(env, nullptr, jsCallback, 1, &(obj.val_), &result); + if (status != napi_ok) { + HILOGE("Failed to get result, status: %{public}d.", status); + } + status = napi_close_handle_scope(env, scope); + if (status != napi_ok) { + HILOGE("Failed to close scope, status: %{public}d.", status); + } + }; + auto retVal = napi_send_event(env, task, napi_eprio_immediate); if (retVal != 0) { HILOGE("failed to get uv_queue_work"); - delete (reinterpret_cast(work->data)); - delete work; + delete entry; return ENOMEM; } return ERRNO_NOERR; diff --git a/utils/filemgmt_libn/src/n_async/n_async_work_callback.cpp b/utils/filemgmt_libn/src/n_async/n_async_work_callback.cpp index 4d0a1c98a0243d1eb6768d0e45228e435322d5ab..9cad32c850d274ac7fcb7dfee9a9bcfa2141d77c 100644 --- a/utils/filemgmt_libn/src/n_async/n_async_work_callback.cpp +++ b/utils/filemgmt_libn/src/n_async/n_async_work_callback.cpp @@ -65,15 +65,11 @@ NAsyncWorkCallback::~NAsyncWorkCallback() HILOGE("Failed to new uv_work_t"); return; } - work->data = static_cast(ctx_); - - int ret = uv_queue_work( - loop, work.get(), [](uv_work_t *work) {}, - [](uv_work_t *work, int status) { - NAsyncContextCallback *ctx = static_cast(work->data); - delete ctx; - delete work; - }); + NAsyncContextCallback *ctx = ctx_; + auto task = [ctx] () { + delete ctx; + }; + auto ret = napi_send_event(env_, task, napi_eprio_immediate); if (ret) { HILOGE("Failed to call uv_queue_work %{public}d", status); return; @@ -208,19 +204,6 @@ void NAsyncWorkCallback::ThreadSafeSchedule(NContextCBComplete cbComplete) ctx_->cbExec_ = nullptr; ctx_->cbComplete_ = nullptr; - uv_loop_s *loop = nullptr; - napi_status status = napi_get_uv_event_loop(env_, &loop); - if (status != napi_ok) { - HILOGE("Failed to get uv event loop"); - return; - } - - auto work = CreateUniquePtr(); - if (!work) { - HILOGE("Failed to new uv_work_t"); - return; - } - struct WorkArgs { NAsyncWorkCallback *ptr = nullptr; NContextCBComplete cb; @@ -228,28 +211,18 @@ void NAsyncWorkCallback::ThreadSafeSchedule(NContextCBComplete cbComplete) auto workArgs = make_unique(); workArgs->ptr = this; workArgs->cb = cbComplete; - - work->data = static_cast(workArgs.get()); - - int ret = uv_queue_work( - loop, work.get(), [](uv_work_t *work) { - HILOGI("Enter, %{public}zu", (size_t)work); - }, - [](uv_work_t *work, int status) { - HILOGI("AsyncWork Enter, %{public}zu", (size_t)work); - auto workArgs = static_cast(work->data); - AfterWorkCallback(workArgs->ptr->env_, napi_ok, workArgs->ptr->ctx_, workArgs->cb); - delete workArgs; - delete work; - }); + auto workArgsRaw = workArgs.get(); + auto task = [workArgsRaw] () { + AfterWorkCallback(workArgsRaw->ptr->env_, napi_ok, workArgsRaw->ptr->ctx_, workArgsRaw->cb); + delete workArgsRaw; + }; + auto ret = napi_send_event(env_, task, napi_eprio_immediate); if (ret) { - HILOGE("Failed to call uv_queue_work %{public}d", status); + HILOGE("Failed to call napi_send_event"); workArgs.reset(); - work.reset(); return; } workArgs.release(); - work.release(); } } // namespace LibN } // namespace FileManagement