-
-
Notifications
You must be signed in to change notification settings - Fork 33.5k
Closed
Description
- Version: 13.13.0
- Platform: Mac
- Subsystem: stream
What steps will reproduce the bug?
pipeline in 13 seems to destroy duplex streams before the get a change to finish their writable flus h (ws.end() -> ws._final) lifecycle.
I managed to boil it down to a pretty straightforward test case below
const stream = require('stream')
// duplex stream similar to a tcp stream etc
const dup = new stream.Duplex({
write (data, enc, cb) {
cb()
},
destroy () {
console.log('ws: am getting destroyed')
},
final (cb) {
console.log('ws: flushing writable...')
setTimeout(function () {
console.log('ws: done flushing writable...')
cb()
}, 1000)
}
})
// just some sink
const sink = new stream.Writable({
write (data, enc, cb) {
cb()
}
})
// pipe readable side
stream.pipeline(dup, sink, function () { })
dup.write('test')
dup.end()
Running this produces:
ws: am getting destroyed
ws: flushing writable...
ws: done flushing writable...
Notice that the dup
stream gets destroyed before it has a chance to finish it's writable flush in the _final lifecycle, due to the pipeline auto destroying it in 13.
Metadata
Metadata
Assignees
Labels
No labels