mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
stream: add signal support to pipeline generators
Generators in pipeline must be able to be aborted or pipeline can deadlock. PR-URL: https://github.com/nodejs/node/pull/39067 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
@@ -5,20 +5,12 @@ const {
|
||||
Promise,
|
||||
} = primordials;
|
||||
|
||||
const {
|
||||
addAbortSignalNoValidate,
|
||||
} = require('internal/streams/add-abort-signal');
|
||||
|
||||
const {
|
||||
validateAbortSignal,
|
||||
} = require('internal/validators');
|
||||
|
||||
const {
|
||||
isIterable,
|
||||
isNodeStream,
|
||||
} = require('internal/streams/utils');
|
||||
|
||||
const pl = require('internal/streams/pipeline');
|
||||
const { pipelineImpl: pl } = require('internal/streams/pipeline');
|
||||
const eos = require('internal/streams/end-of-stream');
|
||||
|
||||
function pipeline(...streams) {
|
||||
@@ -29,19 +21,15 @@ function pipeline(...streams) {
|
||||
!isNodeStream(lastArg) && !isIterable(lastArg)) {
|
||||
const options = ArrayPrototypePop(streams);
|
||||
signal = options.signal;
|
||||
validateAbortSignal(signal, 'options.signal');
|
||||
}
|
||||
|
||||
const pipe = pl(...streams, (err, value) => {
|
||||
pl(streams, (err, value) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(value);
|
||||
}
|
||||
});
|
||||
if (signal) {
|
||||
addAbortSignalNoValidate(signal, pipe);
|
||||
}
|
||||
}, { signal });
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user