Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion lib/internal/fs/promises.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down
5 changes: 5 additions & 0 deletions test/parallel/test-worker-message-port-transfer-filehandle.js
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Loading