From 7af433b68e97471a94e665ffde63633d73849ce2 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Mon, 1 Jun 2026 23:49:34 +0200 Subject: [PATCH 1/3] benchmark: remove old alias usage in ffi benchmarks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up to df09b2a48c2d7ec8. Refs: https://github.com/nodejs/node/pull/63482 Signed-off-by: Anna Henningsen PR-URL: https://github.com/nodejs/node/pull/63666 Reviewed-By: Vinícius Lourenço Claro Cardoso Reviewed-By: Stephen Belanger Reviewed-By: Luigi Pinca --- benchmark/ffi/add-f64.js | 2 +- benchmark/ffi/add-i32.js | 2 +- benchmark/ffi/getpid.js | 2 +- benchmark/ffi/many-args.js | 2 +- benchmark/ffi/pointer-bigint.js | 2 +- benchmark/ffi/sum-buffer.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/benchmark/ffi/add-f64.js b/benchmark/ffi/add-f64.js index fab6457e33a09d..f4e1dbac4ac3d4 100644 --- a/benchmark/ffi/add-f64.js +++ b/benchmark/ffi/add-f64.js @@ -13,7 +13,7 @@ const bench = common.createBenchmark(main, { ensureFixtureLibrary(); const { lib, functions } = ffi.dlopen(libraryPath, { - add_f64: { result: 'f64', parameters: ['f64', 'f64'] }, + add_f64: { return: 'f64', arguments: ['f64', 'f64'] }, }); const add = functions.add_f64; diff --git a/benchmark/ffi/add-i32.js b/benchmark/ffi/add-i32.js index bc8e2c4138080e..9a77a6f998f79d 100644 --- a/benchmark/ffi/add-i32.js +++ b/benchmark/ffi/add-i32.js @@ -13,7 +13,7 @@ const bench = common.createBenchmark(main, { ensureFixtureLibrary(); const { lib, functions } = ffi.dlopen(libraryPath, { - add_i32: { result: 'i32', parameters: ['i32', 'i32'] }, + add_i32: { return: 'i32', arguments: ['i32', 'i32'] }, }); const add = functions.add_i32; diff --git a/benchmark/ffi/getpid.js b/benchmark/ffi/getpid.js index c2e7d4ed89c34e..8008f407305e49 100644 --- a/benchmark/ffi/getpid.js +++ b/benchmark/ffi/getpid.js @@ -10,7 +10,7 @@ const bench = common.createBenchmark(main, { }); const { lib, functions } = ffi.dlopen(null, { - uv_os_getpid: { result: 'i32', parameters: [] }, + uv_os_getpid: { return: 'i32', arguments: [] }, }); const getpid = functions.uv_os_getpid; diff --git a/benchmark/ffi/many-args.js b/benchmark/ffi/many-args.js index bacd873df52d1b..bc269ace0c3e26 100644 --- a/benchmark/ffi/many-args.js +++ b/benchmark/ffi/many-args.js @@ -13,7 +13,7 @@ const bench = common.createBenchmark(main, { ensureFixtureLibrary(); const { lib, functions } = ffi.dlopen(libraryPath, { - sum_6_i32: { result: 'i32', parameters: ['i32', 'i32', 'i32', 'i32', 'i32', 'i32'] }, + sum_6_i32: { return: 'i32', arguments: ['i32', 'i32', 'i32', 'i32', 'i32', 'i32'] }, }); const fn = functions.sum_6_i32; diff --git a/benchmark/ffi/pointer-bigint.js b/benchmark/ffi/pointer-bigint.js index c44ef7f1656a0c..9ea01d28490e00 100644 --- a/benchmark/ffi/pointer-bigint.js +++ b/benchmark/ffi/pointer-bigint.js @@ -13,7 +13,7 @@ const bench = common.createBenchmark(main, { ensureFixtureLibrary(); const { lib, functions } = ffi.dlopen(libraryPath, { - pointer_to_usize: { result: 'u64', parameters: ['pointer'] }, + pointer_to_usize: { return: 'u64', arguments: ['pointer'] }, }); const fn = functions.pointer_to_usize; diff --git a/benchmark/ffi/sum-buffer.js b/benchmark/ffi/sum-buffer.js index 3117f61aaedabf..60e25a85418565 100644 --- a/benchmark/ffi/sum-buffer.js +++ b/benchmark/ffi/sum-buffer.js @@ -14,7 +14,7 @@ const bench = common.createBenchmark(main, { ensureFixtureLibrary(); const { lib, functions } = ffi.dlopen(libraryPath, { - sum_buffer: { result: 'u64', parameters: ['pointer', 'u64'] }, + sum_buffer: { return: 'u64', arguments: ['pointer', 'u64'] }, }); function main({ n, size }) { From 37779fdf1cbe9c1d95828acb1ec6d6e30d4e38fe Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Mon, 1 Jun 2026 16:18:12 -0700 Subject: [PATCH 2/3] stream: handle falsy push writer fail reasons Reject reads based on writer state so explicit falsy fail reasons do not leave reads pending. Fixes: https://github.com/nodejs/node/issues/63568 Signed-off-by: Kamat, Trivikram <16024985+trivikr@users.noreply.github.com> Assisted-by: openai:gpt-5.5 PR-URL: https://github.com/nodejs/node/pull/63569 Fixes: https://github.com/nodejs/node/issues/63568 Reviewed-By: Matteo Collina --- lib/internal/streams/iter/push.js | 15 +++++--- test/parallel/test-stream-iter-push-writer.js | 35 +++++++++++++++++++ 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/lib/internal/streams/iter/push.js b/lib/internal/streams/iter/push.js index f00ad396e1f2ca..0326cbdd6c3cfb 100644 --- a/lib/internal/streams/iter/push.js +++ b/lib/internal/streams/iter/push.js @@ -12,6 +12,7 @@ const { PromiseReject, PromiseResolve, PromiseWithResolvers, + Symbol, SymbolAsyncDispose, SymbolAsyncIterator, SymbolDispose, @@ -55,6 +56,8 @@ const { RingBuffer, } = require('internal/streams/iter/ringbuffer'); +const kNoFailReason = Symbol('kNoFailReason'); + // ============================================================================= // PushQueue - Internal Queue with Chunk-Based Backpressure // ============================================================================= @@ -317,14 +320,16 @@ class PushQueue { * No-op if errored or closed (fully drained). * If closing (draining), short-circuits the drain. */ - fail(reason) { + fail(reason = kNoFailReason) { if (this.#writerState === 'errored' || this.#writerState === 'closed') { return; } const wasClosing = this.#writerState === 'closing'; this.#writerState = 'errored'; - this.#error = reason ?? new ERR_INVALID_STATE('Failed'); + this.#error = reason === kNoFailReason ? + new ERR_INVALID_STATE('Failed') : + reason; this.#cleanup(); this.#rejectPendingReads(this.#error); this.#rejectPendingDrains(this.#error); @@ -413,7 +418,7 @@ class PushQueue { return { __proto__: null, done: true, value: undefined }; } - if (this.#writerState === 'errored' && this.#error) { + if (this.#writerState === 'errored') { throw this.#error; } @@ -488,7 +493,7 @@ class PushQueue { } else if (this.#writerState === 'closed') { const pending = this.#pendingReads.shift(); pending.resolve({ __proto__: null, done: true, value: undefined }); - } else if (this.#writerState === 'errored' && this.#error) { + } else if (this.#writerState === 'errored') { const pending = this.#pendingReads.shift(); pending.reject(this.#error); } else if (this.#consumerState === 'returned') { @@ -668,7 +673,7 @@ class PushWriter { } fail(reason) { - this.#queue.fail(reason); + this.#queue.fail(arguments.length === 0 ? kNoFailReason : reason); } [SymbolAsyncDispose]() { diff --git a/test/parallel/test-stream-iter-push-writer.js b/test/parallel/test-stream-iter-push-writer.js index f07ccb575ec570..e617a8a5309dae 100644 --- a/test/parallel/test-stream-iter-push-writer.js +++ b/test/parallel/test-stream-iter-push-writer.js @@ -451,6 +451,39 @@ async function testEndRejectsWhenErrored() { } } +async function testFailRejectsFutureReadWithFalsyReason() { + for (const reason of [0, null]) { + const { writer, readable } = push(); + + writer.fail(reason); + + const iter = readable[Symbol.asyncIterator](); + await iter.next().then( + common.mustNotCall(), + common.mustCall((rejection) => { + assert.strictEqual(rejection, reason); + }), + ); + } +} + +async function testFailRejectsPendingReadWithFalsyReason() { + const { writer, readable } = push(); + + const iter = readable[Symbol.asyncIterator](); + const readPromise = iter.next(); + + await new Promise(setImmediate); + + writer.fail(false); + await readPromise.then( + common.mustNotCall(), + common.mustCall((reason) => { + assert.strictEqual(reason, false); + }), + ); +} + Promise.all([ testOndrain(), testOndrainNonDrainable(), @@ -473,6 +506,8 @@ Promise.all([ testConsumerThrowRejectsWrites(), testEndResolvesPendingRead(), testFailRejectsPendingRead(), + testFailRejectsFutureReadWithFalsyReason(), + testFailRejectsPendingReadWithFalsyReason(), testConsumerReturnResolvesPendingRead(), testConsumerThrowRejectsPendingRead(), testEndRejectsPendingWrites(), From 330f44f29c69f17cad69687d25c433bbdb9fb1dd Mon Sep 17 00:00:00 2001 From: "Node.js GitHub Bot" Date: Mon, 1 Jun 2026 21:32:11 -0400 Subject: [PATCH 3/3] tools: update nixpkgs-unstable to e9a7635a57597d9754eccebdfc7045e6c86 PR-URL: https://github.com/nodejs/node/pull/63671 Reviewed-By: Yagiz Nizipli Reviewed-By: Antoine du Hamel --- tools/nix/pkgs.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/nix/pkgs.nix b/tools/nix/pkgs.nix index 512a184420a267..cc199923a01150 100644 --- a/tools/nix/pkgs.nix +++ b/tools/nix/pkgs.nix @@ -1,10 +1,10 @@ arg: let repo = "https://github.com/NixOS/nixpkgs"; - rev = "3d8f0f3f72a6cd4d93d0ad13203f2ea1cb7e1456"; + rev = "e9a7635a57597d9754eccebdfc7045e6c8600e6b"; nixpkgs = import (builtins.fetchTarball { url = "${repo}/archive/${rev}.tar.gz"; - sha256 = "1vq4c8nfn16zcz9sa3rjy4bhabdmnwy4pq3pdj20gzmgd3iwbrxb"; + sha256 = "1515byrd40ylb3z258g4f9mmhn1v608dvmxi8acci8vz4zzr99dv"; }) arg; in nixpkgs