From e2deeedc6e28208ccd041fb3746aa0d73bb9b49a Mon Sep 17 00:00:00 2001 From: Aviv Keller <38299977+RedYetiDev@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:25:20 -0400 Subject: [PATCH 1/2] Revert "fs: add v8 fast api to closeSync" This reverts commit ed6f45bef86134533550924baa89fd92d5b24f78. PR-URL: https://github.com/nodejs/node/pull/53904 Refs: https://github.com/yarnpkg/berry/issues/6398 Refs: https://github.com/npm/cli/issues/7657 Reviewed-By: Richard Lau Reviewed-By: Yagiz Nizipli Reviewed-By: Luigi Pinca Reviewed-By: Rich Trott --- src/env.cc | 17 +++-------------- src/env.h | 2 +- src/node_external_reference.h | 4 ---- src/node_file.cc | 33 +++------------------------------ 4 files changed, 7 insertions(+), 49 deletions(-) diff --git a/src/env.cc b/src/env.cc index 46549a46a1bab0..799b36aaebdded 100644 --- a/src/env.cc +++ b/src/env.cc @@ -1841,23 +1841,12 @@ void Environment::AddUnmanagedFd(int fd) { } } -void Environment::RemoveUnmanagedFd(int fd, bool schedule_native_immediate) { +void Environment::RemoveUnmanagedFd(int fd) { if (!tracks_unmanaged_fds()) return; size_t removed_count = unmanaged_fds_.erase(fd); if (removed_count == 0) { - if (schedule_native_immediate) { - SetImmediateThreadsafe([&](Environment* env) { - ProcessEmitWarning(this, - "File descriptor %d closed but not opened in " - "unmanaged mode", - fd); - }); - } else { - ProcessEmitWarning( - this, - "File descriptor %d closed but not opened in unmanaged mode", - fd); - } + ProcessEmitWarning( + this, "File descriptor %d closed but not opened in unmanaged mode", fd); } } diff --git a/src/env.h b/src/env.h index 8c8cafe2122098..b2c54e079b57df 100644 --- a/src/env.h +++ b/src/env.h @@ -1027,7 +1027,7 @@ class Environment : public MemoryRetainer { std::unique_ptr release_managed_buffer(const uv_buf_t& buf); void AddUnmanagedFd(int fd); - void RemoveUnmanagedFd(int fd, bool schedule_native_immediate = false); + void RemoveUnmanagedFd(int fd); template void ForEachRealm(T&& iterator) const; diff --git a/src/node_external_reference.h b/src/node_external_reference.h index 3aad28fa17a08e..b80b8727c23fd1 100644 --- a/src/node_external_reference.h +++ b/src/node_external_reference.h @@ -47,9 +47,6 @@ using CFunctionCallbackWithUint8ArrayUint32Int64Bool = uint32_t, int64_t, bool); -using CFunctionWithObjectInt32Fallback = void (*)(v8::Local, - int32_t input, - v8::FastApiCallbackOptions&); using CFunctionWithUint32 = uint32_t (*)(v8::Local, const uint32_t input); using CFunctionWithDoubleReturnDouble = double (*)(v8::Local, @@ -78,7 +75,6 @@ class ExternalReferenceRegistry { V(CFunctionCallbackWithTwoUint8Arrays) \ V(CFunctionCallbackWithTwoUint8ArraysFallback) \ V(CFunctionCallbackWithUint8ArrayUint32Int64Bool) \ - V(CFunctionWithObjectInt32Fallback) \ V(CFunctionWithUint32) \ V(CFunctionWithDoubleReturnDouble) \ V(CFunctionWithInt64Fallback) \ diff --git a/src/node_file.cc b/src/node_file.cc index 81f7e8d2dd5391..c59235b51cca9f 100644 --- a/src/node_file.cc +++ b/src/node_file.cc @@ -54,7 +54,6 @@ namespace fs { using v8::Array; using v8::BigInt; -using v8::CFunction; using v8::Context; using v8::EscapableHandleScope; using v8::FastApiCallbackOptions; @@ -299,7 +298,7 @@ FileHandle::TransferData::~TransferData() { BaseObjectPtr FileHandle::TransferData::Deserialize( Environment* env, - Local context, + v8::Local context, std::unique_ptr self) { BindingData* bd = Realm::GetBindingData(context); if (bd == nullptr) return {}; @@ -961,7 +960,7 @@ void Access(const FunctionCallbackInfo& args) { } } -static void Close(const FunctionCallbackInfo& args) { +void Close(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); const int argc = args.Length(); @@ -987,30 +986,6 @@ static void Close(const FunctionCallbackInfo& args) { } } -static void FastClose(Local recv, - int32_t fd, - // NOLINTNEXTLINE(runtime/references) This is V8 api. - v8::FastApiCallbackOptions& options) { - Environment* env = Environment::GetCurrent(recv->GetCreationContextChecked()); - - uv_fs_t req; - FS_SYNC_TRACE_BEGIN(close); - int err = uv_fs_close(nullptr, &req, fd, nullptr) < 0; - FS_SYNC_TRACE_END(close); - uv_fs_req_cleanup(&req); - - if (err < 0) { - options.fallback = true; - } else { - // Note: Only remove unmanaged fds if the close was successful. - // RemoveUnmanagedFd() can call ProcessEmitWarning() which calls back into - // JS process.emitWarning() and violates the fast API protocol. - env->RemoveUnmanagedFd(fd, true /* schedule native immediate */); - } -} - -CFunction fast_close_ = CFunction::Make(FastClose); - static void ExistsSync(const FunctionCallbackInfo& args) { Environment* env = Environment::GetCurrent(args); Isolate* isolate = env->isolate(); @@ -3330,7 +3305,7 @@ static void CreatePerIsolateProperties(IsolateData* isolate_data, "getFormatOfExtensionlessFile", GetFormatOfExtensionlessFile); SetMethod(isolate, target, "access", Access); - SetFastMethod(isolate, target, "close", Close, &fast_close_); + SetMethod(isolate, target, "close", Close); SetMethod(isolate, target, "existsSync", ExistsSync); SetMethod(isolate, target, "open", Open); SetMethod(isolate, target, "openFileHandle", OpenFileHandle); @@ -3455,8 +3430,6 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) { registry->Register(GetFormatOfExtensionlessFile); registry->Register(Close); - registry->Register(FastClose); - registry->Register(fast_close_.GetTypeInfo()); registry->Register(ExistsSync); registry->Register(Open); registry->Register(OpenFileHandle); From fd9233acbfdbff8f25dc7dec5e83c697e35b6de9 Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Fri, 19 Jul 2024 00:54:47 +0000 Subject: [PATCH 2/2] 2024-07-19, Version 22.5.1 (Current) Notable changes: This release fixes a regression introduced in Node.js 22.5.0. The problem is known to display the following symptoms: - Crash with ``` FATAL ERROR: v8::Object::GetCreationContextChecked No creation context available ``` - npm errors with `npm error Exit handler never called!` - yarn hangs or outputs ``` Usage Error: Couldn't find the node_modules state file - running an install might help (findPackageLocation) ``` PR-URL: https://github.com/nodejs/node/pull/53935 Refs: https://github.com/nodejs/node/issues/53902 Refs: https://github.com/npm/cli/issues/7657 Refs: https://github.com/yarnpkg/berry/issues/6398 --- CHANGELOG.md | 3 ++- doc/changelogs/CHANGELOG_V22.md | 17 +++++++++++++++++ src/node_version.h | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 254c17cb60bcf1..d4a9746ce8927b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,7 +38,8 @@ release. -22.5.0
+22.5.1
+22.5.0
22.4.1
22.4.0
22.3.0
diff --git a/doc/changelogs/CHANGELOG_V22.md b/doc/changelogs/CHANGELOG_V22.md index 770b91daa7c518..6fffc5950d6131 100644 --- a/doc/changelogs/CHANGELOG_V22.md +++ b/doc/changelogs/CHANGELOG_V22.md @@ -8,6 +8,7 @@ +22.5.1
22.5.0
22.4.1
22.4.0
@@ -43,6 +44,22 @@ * [io.js](CHANGELOG_IOJS.md) * [Archive](CHANGELOG_ARCHIVE.md) + + +## 2024-07-19, Version 22.5.1 (Current), @richardlau + +### Notable Changes + +This release fixes a regression introduced in Node.js 22.5.0. The problem is known to display the following symptoms: + +* Crash with `FATAL ERROR: v8::Object::GetCreationContextChecked No creation context available` [#53902](https://github.com/nodejs/node/issues/53902) +* npm errors with `npm error Exit handler never called!` [npm/cli#7657](https://github.com/npm/cli/issues/7657) +* yarn hangs or outputs `Usage Error: Couldn't find the node_modules state file - running an install might help (findPackageLocation)` [yarnpkg/berry#6398](https://github.com/yarnpkg/berry/issues/6398) + +### Commits + +* \[[`e2deeedc6e`](https://github.com/nodejs/node/commit/e2deeedc6e)] - _**Revert**_ "**fs**: add v8 fast api to closeSync" (Aviv Keller) [#53904](https://github.com/nodejs/node/pull/53904) + ## 2024-07-16, Version 22.5.0 (Current), @RafaelGSS prepared by @aduh95 diff --git a/src/node_version.h b/src/node_version.h index 2ae5044a58620a..cdeba086374ad7 100644 --- a/src/node_version.h +++ b/src/node_version.h @@ -29,7 +29,7 @@ #define NODE_VERSION_IS_LTS 0 #define NODE_VERSION_LTS_CODENAME "" -#define NODE_VERSION_IS_RELEASE 0 +#define NODE_VERSION_IS_RELEASE 1 #ifndef NODE_STRINGIFY #define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n)