http2: fix session[kSession] undefined issue
`finishSessionDestroy` session cleanup when already done. PR-URL: https://github.com/nodejs/node/pull/24547 Fixes: https://github.com/nodejs/node/issues/24546 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Ouyang Yadong <oyydoibh@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
a57343c727
commit
895fe2f574
@ -1989,6 +1989,7 @@ class Http2Stream extends Duplex {
|
|||||||
// attempt to gracefully close the session.
|
// attempt to gracefully close the session.
|
||||||
const state = this[kState];
|
const state = this[kState];
|
||||||
if (this.headersSent &&
|
if (this.headersSent &&
|
||||||
|
this[kSession] &&
|
||||||
this[kSession][kType] === NGHTTP2_SESSION_SERVER &&
|
this[kSession][kType] === NGHTTP2_SESSION_SERVER &&
|
||||||
!(state.flags & STREAM_FLAGS_HAS_TRAILERS) &&
|
!(state.flags & STREAM_FLAGS_HAS_TRAILERS) &&
|
||||||
!state.didRead &&
|
!state.didRead &&
|
||||||
|
20
test/parallel/test-http2-server-session-destroy.js
Normal file
20
test/parallel/test-http2-server-session-destroy.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
if (!common.hasCrypto)
|
||||||
|
common.skip('missing crypto');
|
||||||
|
const h2 = require('http2');
|
||||||
|
|
||||||
|
const server = h2.createServer();
|
||||||
|
server.listen(0, common.localhostIPv4, common.mustCall(() => {
|
||||||
|
const afterConnect = common.mustCall((session) => {
|
||||||
|
session.request({ ':method': 'POST' }).end(common.mustCall(() => {
|
||||||
|
session.destroy();
|
||||||
|
server.close();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
const port = server.address().port;
|
||||||
|
const host = common.localhostIPv4;
|
||||||
|
h2.connect('http://' + host + ':' + port, afterConnect);
|
||||||
|
}));
|
Loading…
x
Reference in New Issue
Block a user