fs: correct error message when FileHandle is transferred

PR-URL: https://github.com/nodejs/node/pull/59156
Fixes: https://github.com/nodejs/node/issues/59155
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: LiviaMedeiros <livia@cirno.name>
This commit is contained in:
Alex Yang 2025-07-29 12:28:35 -07:00 committed by GitHub
parent 698cbd0f8b
commit a93da0a329
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 1 deletions

View File

@ -111,6 +111,7 @@ const kHandle = Symbol('kHandle');
const kFd = Symbol('kFd');
const kRefs = Symbol('kRefs');
const kClosePromise = Symbol('kClosePromise');
const kCloseReason = Symbol('kCloseReason');
const kCloseResolve = Symbol('kCloseResolve');
const kCloseReject = Symbol('kCloseReject');
const kRef = Symbol('kRef');
@ -389,6 +390,7 @@ class FileHandle extends EventEmitter {
const handle = this[kHandle];
this[kFd] = -1;
this[kCloseReason] = 'The FileHandle has been transferred';
this[kHandle] = null;
this[kRefs] = 0;
@ -455,7 +457,7 @@ async function fsCall(fn, handle, ...args) {
if (handle.fd === -1) {
// eslint-disable-next-line no-restricted-syntax
const err = new Error('file closed');
const err = new Error(handle[kCloseReason] ?? 'file closed');
err.code = 'EBADF';
err.syscall = fn.name;
throw err;

View File

@ -69,6 +69,11 @@ const { once } = require('events');
assert.strictEqual(fh.fd, -1);
port1.postMessage('second message');
await assert.rejects(() => fh.read(), {
code: 'EBADF',
message: 'The FileHandle has been transferred',
syscall: 'read'
});
})().then(common.mustCall());
(async function() {