fs: correct error message when FileHandle is transferred · nodejs/node@e2fb4ca

2 files changed

lines changed

Original file line numberDiff line numberDiff line change

@@ -112,6 +112,7 @@ const kHandle = Symbol('kHandle');

112112

const kFd = Symbol('kFd');

113113

const kRefs = Symbol('kRefs');

114114

const kClosePromise = Symbol('kClosePromise');

115+

const kCloseReason = Symbol('kCloseReason');

115116

const kCloseResolve = Symbol('kCloseResolve');

116117

const kCloseReject = Symbol('kCloseReject');

117118

const kRef = Symbol('kRef');

@@ -390,6 +391,7 @@ class FileHandle extends EventEmitter {

390391
391392

const handle = this[kHandle];

392393

this[kFd] = -1;

394+

this[kCloseReason] = 'The FileHandle has been transferred';

393395

this[kHandle] = null;

394396

this[kRefs] = 0;

395397

@@ -456,7 +458,7 @@ async function fsCall(fn, handle, ...args) {

456458
457459

if (handle.fd === -1) {

458460

// eslint-disable-next-line no-restricted-syntax

459-

const err = new Error('file closed');

461+

const err = new Error(handle[kCloseReason] ?? 'file closed');

460462

err.code = 'EBADF';

461463

err.syscall = fn.name;

462464

throw err;

Original file line numberDiff line numberDiff line change

@@ -69,6 +69,11 @@ const { once } = require('events');

6969

assert.strictEqual(fh.fd, -1);

7070
7171

port1.postMessage('second message');

72+

await assert.rejects(() => fh.read(), {

73+

code: 'EBADF',

74+

message: 'The FileHandle has been transferred',

75+

syscall: 'read'

76+

});

7277

})().then(common.mustCall());

7378
7479

(async function() {