Skip to content

Commit 4b04bf8

Browse files
ronagMylesBorins
authored andcommitted
stream: re-use legacy destroyer
Backport-PR-URL: #32174 PR-URL: #31316 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Minwoo Jung <[email protected]>
1 parent 7ce1cc9 commit 4b04bf8

File tree

3 files changed

+19
-21
lines changed

3 files changed

+19
-21
lines changed

lib/internal/streams/async_iterator.js

+3-11
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const {
1111
} = primordials;
1212

1313
const finished = require('internal/streams/end-of-stream');
14+
const destroyImpl = require('internal/streams/destroy');
1415

1516
const kLastResolve = Symbol('lastResolve');
1617
const kLastReject = Symbol('lastReject');
@@ -22,15 +23,6 @@ const kStream = Symbol('stream');
2223

2324
let Readable;
2425

25-
function destroy(stream, err) {
26-
// request.destroy just do .end - .abort is what we want
27-
if (typeof stream.abort === 'function') return stream.abort();
28-
if (stream.req &&
29-
typeof stream.req.abort === 'function') return stream.req.abort();
30-
if (typeof stream.destroy === 'function') return stream.destroy(err);
31-
if (typeof stream.close === 'function') return stream.close();
32-
}
33-
3426
function createIterResult(value, done) {
3527
return { value, done };
3628
}
@@ -92,7 +84,7 @@ function finish(self, err) {
9284
resolve(createIterResult(undefined, true));
9385
}
9486
});
95-
destroy(stream, err);
87+
destroyImpl.destroyer(stream, err);
9688
});
9789
}
9890

@@ -172,7 +164,7 @@ const createReadableStreamAsyncIterator = (stream) => {
172164

173165
const src = stream;
174166
stream = new Readable({ objectMode: true }).wrap(src);
175-
finished(stream, (err) => destroy(src, err));
167+
finished(stream, (err) => destroyImpl.destroyer(src, err));
176168
}
177169

178170
const iterator = ObjectCreate(ReadableStreamAsyncIteratorPrototype, {

lib/internal/streams/destroy.js

+13
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,21 @@ function errorOrDestroy(stream, err) {
128128
stream.emit('error', err);
129129
}
130130

131+
function isRequest(stream) {
132+
return stream && stream.setHeader && typeof stream.abort === 'function';
133+
}
134+
135+
// Normalize destroy for legacy.
136+
function destroyer(stream, err) {
137+
// request.destroy just do .end - .abort is what we want
138+
if (isRequest(stream)) return stream.abort();
139+
if (isRequest(stream.req)) return stream.req.abort();
140+
if (typeof stream.destroy === 'function') return stream.destroy(err);
141+
if (typeof stream.close === 'function') return stream.close();
142+
}
131143

132144
module.exports = {
145+
destroyer,
133146
destroy,
134147
undestroy,
135148
errorOrDestroy

lib/internal/streams/pipeline.js

+3-10
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const {
1212
let eos;
1313

1414
const { once } = require('internal/util');
15+
const destroyImpl = require('internal/streams/destroy');
1516
const {
1617
ERR_INVALID_ARG_TYPE,
1718
ERR_INVALID_RETURN_VALUE,
@@ -28,14 +29,6 @@ function isRequest(stream) {
2829
return stream && stream.setHeader && typeof stream.abort === 'function';
2930
}
3031

31-
function destroyStream(stream, err) {
32-
// request.destroy just do .end - .abort is what we want
33-
if (isRequest(stream)) return stream.abort();
34-
if (isRequest(stream.req)) return stream.req.abort();
35-
if (typeof stream.destroy === 'function') return stream.destroy(err);
36-
if (typeof stream.close === 'function') return stream.close();
37-
}
38-
3932
function destroyer(stream, reading, writing, final, callback) {
4033
callback = once(callback);
4134
let destroyed = false;
@@ -46,15 +39,15 @@ function destroyer(stream, reading, writing, final, callback) {
4639
destroyed = true;
4740
const readable = stream.readable || isRequest(stream);
4841
if (err || !final || !readable) {
49-
destroyStream(stream, err);
42+
destroyImpl.destroyer(stream, err);
5043
}
5144
callback(err);
5245
});
5346

5447
return (err) => {
5548
if (destroyed) return;
5649
destroyed = true;
57-
destroyStream(stream, err);
50+
destroyImpl.destroyer(stream, err);
5851
callback(err || new ERR_STREAM_DESTROYED('pipe'));
5952
};
6053
}

0 commit comments

Comments
 (0)