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 4ed5f43e12c222245466778d6839339076044f7d..27ac573db21106489b1dcb25ff769ed4a492622c 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 195feb69da5d8f3bb4bdd4b46a19997a36e9a7c0..c3fbf575c330a877a8d206db2860621015a08493 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 {