From eb0f6f0dbd8637e4fa56f95a2354a2cbcfe7442e Mon Sep 17 00:00:00 2001 From: zhuhongtao666 Date: Mon, 13 Mar 2023 10:16:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dclose=E5=BC=82=E6=AD=A5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhuhongtao666 --- .../mod_fs/class_stream/stream_n_exporter.cpp | 7 ++++--- .../kits/js/src/mod_fs/properties/close.cpp | 16 ++++++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/interfaces/kits/js/src/mod_fs/class_stream/stream_n_exporter.cpp b/interfaces/kits/js/src/mod_fs/class_stream/stream_n_exporter.cpp index 4ed5f43e1..27ac573db 100644 --- a/interfaces/kits/js/src/mod_fs/class_stream/stream_n_exporter.cpp +++ b/interfaces/kits/js/src/mod_fs/class_stream/stream_n_exporter.cpp @@ -300,18 +300,19 @@ napi_value StreamNExporter::Close(napi_env env, napi_callback_info cbInfo) return nullptr; } - auto cbExec = [streamEntity]() -> NError { + auto fileFp = funcArg.GetThisVar(); + auto cbExec = [env, fileFp, streamEntity]() -> NError { auto filp = streamEntity->fp.release(); if (!fclose(filp)) { HILOGE("Failed to close file with filp"); return NError(ERRNO_NOERR); } else { + (void)NClass::RemoveEntityOfFinal(env, fileFp); return NError(errno); } }; - auto cbCompl = [arg = funcArg.GetThisVar()](napi_env env, NError err) -> NVal { - (void)NClass::RemoveEntityOfFinal(env, arg); + auto cbCompl = [](napi_env env, NError err) -> NVal { if (err) { return { env, err.GetNapiErr(env) }; } else { diff --git a/interfaces/kits/js/src/mod_fs/properties/close.cpp b/interfaces/kits/js/src/mod_fs/properties/close.cpp index 195feb69d..c3fbf575c 100755 --- a/interfaces/kits/js/src/mod_fs/properties/close.cpp +++ b/interfaces/kits/js/src/mod_fs/properties/close.cpp @@ -88,8 +88,8 @@ napi_value Close::Sync(napi_env env, napi_callback_info info) } } else { fileStruct.fileEntity->fd_.reset(); + (void)NClass::RemoveEntityOfFinal(env, funcArg[NARG_POS::FIRST]); } - (void)NClass::RemoveEntityOfFinal(env, funcArg.GetThisVar()); return NVal::CreateUndefined(env).val_; } @@ -109,6 +109,13 @@ napi_value Close::Async(napi_env env, napi_callback_info info) NError(EINVAL).ThrowErr(env); return nullptr; } + if (!fileStruct.isFd) { + auto fp = NClass::RemoveEntityOfFinal(env, funcArg[NARG_POS::FIRST]); + if (!fp) { + NError(EINVAL).ThrowErr(env); + return nullptr; + } + } auto cbExec = [fileStruct = fileStruct]() -> NError { if (fileStruct.isFd) { @@ -123,14 +130,11 @@ napi_value Close::Async(napi_env env, napi_callback_info info) HILOGE("Failed to close file with ret: %{public}d", ret); return NError(errno); } - } else { - fileStruct.fileEntity->fd_.reset(); - } + } return NError(ERRNO_NOERR); }; - auto cbComplete = [arg = funcArg.GetThisVar()](napi_env env, NError err) -> NVal { - (void)NClass::RemoveEntityOfFinal(env, arg); + auto cbComplete = [](napi_env env, NError err) -> NVal { if (err) { return { env, err.GetNapiErr(env) }; } else { -- Gitee