Skip to content

stream: regression in v14, this.push(null) in Transform doesn't emit end #35926

Closed
@rlidwka

Description

@rlidwka
  • Version: v14.5.0
  • Platform: Ubuntu/Linux
  • Subsystem: stream
let stream = require('stream');

let src = new stream.Readable({
  read() {
    console.log('push')
    this.push(Buffer.alloc(20000));
  }
});

let dst = new stream.Transform({
  transform(chunk, output, fn) {
    this.push(null);
    fn();
  }
});

src.pipe(dst);

function parser_end(error) {
  console.log('parser ended', error);
  dst.removeAllListeners();
}

dst.once('data', data => console.log(data));
dst.once('end', () => parser_end());
dst.on('error', error => parser_end(error));
  • Expected behavior (tested on node v10, 12): end event is emitted by dst, transform stops, source pauses.
  • Actual behavior (tested on node v14): end event does not get emitted by dst, transform runs indefinitely.

Metadata

Metadata

Assignees

No one assigned

    Labels

    confirmed-bugIssues with confirmed bugs.streamIssues and PRs related to the stream subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions