Skip to content

Commit 882a781

Browse files
authored
Revert "fs: fix close listener leak in FileHandle streams"
This reverts commit 8488e13. It was advised that the fix in question is broken since it will unref the handle multiple times. Signed-off-by: Mike McCready <66998419+MikeMcC399@users.noreply.github.com> PR-URL: #65387 Refs: #64227 Refs: #64214 Reviewed-By: Claudio Wunder <cwunder@gnome.org> Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
1 parent c79868f commit 882a781

2 files changed

Lines changed: 1 addition & 52 deletions

File tree

lib/internal/fs/streams.js

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -158,19 +158,7 @@ function importFd(stream, options) {
158158
stream[kHandle] = options.fd;
159159
stream[kFs] = FileHandleOperations(stream[kHandle]);
160160
stream[kHandle][kRef]();
161-
162-
const onclose = FunctionPrototypeBind(stream.close, stream);
163-
options.fd.on('close', onclose);
164-
if (options.autoClose === false) {
165-
function cleanup() {
166-
options.fd.removeListener('close', onclose);
167-
options.fd[kUnref]();
168-
}
169-
stream.once('end', cleanup);
170-
stream.once('finish', cleanup);
171-
stream.once('error', cleanup);
172-
}
173-
161+
options.fd.on('close', FunctionPrototypeBind(stream.close, stream));
174162
return options.fd.fd;
175163
}
176164

test/parallel/test-fs-promises-file-handle-stream.js

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -42,46 +42,7 @@ async function validateRead() {
4242
);
4343
}
4444

45-
async function validateReusedCreateReadStream() {
46-
const filePath = path.resolve(tmpDir, 'tmp-reused-stream.txt');
47-
fs.writeFileSync(filePath, Buffer.from('ab', 'utf8'));
48-
49-
const fileHandle = await open(filePath, 'r');
50-
try {
51-
await buffer(fileHandle.createReadStream({
52-
start: 0,
53-
end: 0,
54-
autoClose: false,
55-
}));
56-
assert.strictEqual(fileHandle.listenerCount('close'), 0);
57-
58-
await buffer(fileHandle.createReadStream({
59-
start: 1,
60-
end: 1,
61-
autoClose: false,
62-
}));
63-
assert.strictEqual(fileHandle.listenerCount('close'), 0);
64-
} finally {
65-
await fileHandle.close();
66-
}
67-
}
68-
69-
async function validateReusedCreateWriteStream() {
70-
const filePath = path.resolve(tmpDir, 'tmp-reused-write-stream.txt');
71-
const fileHandle = await open(filePath, 'w');
72-
try {
73-
const stream = fileHandle.createWriteStream({ autoClose: false });
74-
stream.end('a');
75-
await finished(stream);
76-
assert.strictEqual(fileHandle.listenerCount('close'), 0);
77-
} finally {
78-
await fileHandle.close();
79-
}
80-
}
81-
8245
Promise.all([
8346
validateWrite(),
8447
validateRead(),
85-
validateReusedCreateReadStream(),
86-
validateReusedCreateWriteStream(),
8748
]).then(common.mustCall());

0 commit comments

Comments
 (0)