stream: another missing end event
- Version: master https://github.com/nodejs/node/commit/312414662b678d95bee2904348e053728993b97a
- Platform: all
- Subsystem: stream
https://github.com/nodejs/node/commit/1e0f3315c77033ef0e01bb37c3d41c8e1d65e686 introduced another issue where end
isn't emitted. Note that this is a different issue than https://github.com/nodejs/node/issues/18294 although they seem related.
Here is a test case. After some poking around it seems to be back pressure related.
var stream = require('stream')
var ended = false
var missing = 50
var rs = new stream.Readable({
objectMode: true,
read: () => {
if (missing--) rs.push({})
else rs.push(null)
}
})
var a = rs.pipe(new stream.PassThrough({objectMode: true}))
.pipe(new stream.PassThrough({objectMode: true}))
a.on('end', function () {
wrap.push(null)
})
var wrap = new stream.Readable({
objectMode: true,
read: () => {
process.nextTick(function () {
var data = a.read()
if (data === null) {
a.once('readable', function () {
data = a.read()
if (data !== null) wrap.push(data)
})
} else {
wrap.push(data)
}
})
}
})
wrap.resume()
wrap.on('end', function () {
ended = true
})
process.on('exit', function () {
if (!ended) throw new Error('stream should end')
})