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:
leeight 2018-11-21 16:53:15 +08:00 committed by Rich Trott
parent a57343c727
commit 895fe2f574
2 changed files with 21 additions and 0 deletions

View File

@ -1989,6 +1989,7 @@ class Http2Stream extends Duplex {
// attempt to gracefully close the session.
const state = this[kState];
if (this.headersSent &&
this[kSession] &&
this[kSession][kType] === NGHTTP2_SESSION_SERVER &&
!(state.flags & STREAM_FLAGS_HAS_TRAILERS) &&
!state.didRead &&

View 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);
}));