GeezerVison is showing github.com — fs: correct error message when FileHandle is transferred · nodejs/node@ad2089e
File tree
Expand file treeCollapse file tree
Open diff view settings
Expand file treeCollapse file tree
Open diff view settings
Collapse file
Copy file name to clipboardExpand all lines: lib/internal/fs/promises.js +3-1Lines changed: 3 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
@@ -111,6 +111,7 @@ const kHandle = Symbol('kHandle'); |
111 | 111 | const kFd = Symbol('kFd'); |
112 | 112 | const kRefs = Symbol('kRefs'); |
113 | 113 | const kClosePromise = Symbol('kClosePromise'); |
| 114 | +const kCloseReason = Symbol('kCloseReason'); |
114 | 115 | const kCloseResolve = Symbol('kCloseResolve'); |
115 | 116 | const kCloseReject = Symbol('kCloseReject'); |
116 | 117 | const kRef = Symbol('kRef'); |
@@ -389,6 +390,7 @@ class FileHandle extends EventEmitter { |
389 | 390 |
|
390 | 391 | const handle = this[kHandle]; |
391 | 392 | this[kFd] = -1; |
| 393 | + this[kCloseReason] = 'The FileHandle has been transferred'; |
392 | 394 | this[kHandle] = null; |
393 | 395 | this[kRefs] = 0; |
394 | 396 |
|
@@ -455,7 +457,7 @@ async function fsCall(fn, handle, ...args) { |
455 | 457 |
|
456 | 458 | if (handle.fd === -1) { |
457 | 459 | // eslint-disable-next-line no-restricted-syntax |
458 | | - const err = new Error('file closed'); |
| 460 | + const err = new Error(handle[kCloseReason] ?? 'file closed'); |
459 | 461 | err.code = 'EBADF'; |
460 | 462 | err.syscall = fn.name; |
461 | 463 | throw err; |
|
Collapse file
Copy file name to clipboardExpand all lines: test/parallel/test-worker-message-port-transfer-filehandle.js +5Lines changed: 5 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -69,6 +69,11 @@ const { once } = require('events'); |
69 | 69 | assert.strictEqual(fh.fd, -1); |
70 | 70 |
|
71 | 71 | port1.postMessage('second message'); |
| 72 | + await assert.rejects(() => fh.read(), { |
| 73 | + code: 'EBADF', |
| 74 | + message: 'The FileHandle has been transferred', |
| 75 | + syscall: 'read' |
| 76 | + }); |
72 | 77 | })().then(common.mustCall()); |
73 | 78 |
|
74 | 79 | (async function() { |
|