◐ Shell
clean mode source ↗

stream: do not defer construction by one microtick · nodejs/node@270b519

Original file line numberDiff line numberDiff line change

@@ -267,7 +267,7 @@ function constructNT(stream) {

267267

} else if (err) {

268268

errorOrDestroy(stream, err, true);

269269

} else {

270-

process.nextTick(emitConstructNT, stream);

270+

stream.emit(kConstruct);

271271

}

272272

}

273273

@@ -280,10 +280,6 @@ function constructNT(stream) {

280280

}

281281

}

282282
283-

function emitConstructNT(stream) {

284-

stream.emit(kConstruct);

285-

}

286-
287283

function isRequest(stream) {

288284

return stream?.setHeader && typeof stream.abort === 'function';

289285

}

Original file line numberDiff line numberDiff line change

@@ -0,0 +1,28 @@

1+

'use strict';

2+
3+

const common = require('../common');

4+

const tmpdir = require('../common/tmpdir');

5+

const { strictEqual } = require('assert');

6+

const fs = require('fs');

7+
8+

// Regression test for https://github.com/nodejs/node/issues/51993

9+
10+

tmpdir.refresh();

11+
12+

const file = tmpdir.resolve('test-fs-writestream-open-write.txt');

13+
14+

const w = fs.createWriteStream(file);

15+
16+

w.on('open', common.mustCall(() => {

17+

w.write('hello');

18+
19+

process.nextTick(() => {

20+

w.write('world');

21+

w.end();

22+

});

23+

}));

24+
25+

w.on('close', common.mustCall(() => {

26+

strictEqual(fs.readFileSync(file, 'utf8'), 'helloworld');

27+

fs.unlinkSync(file);

28+

}));