mirror of
https://github.com/nodejs/node.git
synced 2025-04-28 21:46:48 +00:00

Don’t start reading more input data if we’re still busy writing output.
This was overlooked in 8a4a1931b8
.
Fixes: https://github.com/nodejs/node/issues/29353
Fixes: https://github.com/nodejs/node/issues/29393
PR-URL: https://github.com/nodejs/node/pull/29399
Reviewed-By: David Carlier <devnexen@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
'use strict';
|
||
const common = require('../common');
|
||
if (!common.hasCrypto)
|
||
common.skip('missing crypto');
|
||
const fixtures = require('../common/fixtures');
|
||
const http2 = require('http2');
|
||
|
||
// Regression test for https://github.com/nodejs/node/issues/29353.
|
||
// Test that it’s okay for an HTTP2 + TLS server to destroy a stream instance
|
||
// while reading it.
|
||
|
||
const server = http2.createSecureServer({
|
||
key: fixtures.readKey('agent2-key.pem'),
|
||
cert: fixtures.readKey('agent2-cert.pem')
|
||
});
|
||
|
||
const filenames = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
|
||
|
||
server.on('stream', common.mustCall((stream) => {
|
||
function write() {
|
||
stream.write('a'.repeat(10240));
|
||
stream.once('drain', write);
|
||
}
|
||
write();
|
||
}, filenames.length));
|
||
|
||
server.listen(0, common.mustCall(() => {
|
||
const client = http2.connect(`https://localhost:${server.address().port}`, {
|
||
ca: fixtures.readKey('agent2-cert.pem'),
|
||
servername: 'agent2'
|
||
});
|
||
|
||
let destroyed = 0;
|
||
for (const entry of filenames) {
|
||
const stream = client.request({
|
||
':path': `/${entry}`
|
||
});
|
||
stream.once('data', common.mustCall(() => {
|
||
stream.destroy();
|
||
|
||
if (++destroyed === filenames.length) {
|
||
client.destroy();
|
||
server.close();
|
||
}
|
||
}));
|
||
}
|
||
}));
|