http: reduce duplicated code for cleaning parser

PR-URL: https://github.com/nodejs/node/pull/23351
Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
Weijia Wang 2018-10-09 16:38:34 +08:00 committed by Anna Henningsen
parent 846cc7e498
commit d7f17b2a61
No known key found for this signature in database
GPG Key ID: 9C63F3A6CD2AD8F9

View File

@ -151,22 +151,13 @@ function parserOnMessageComplete() {
const parsers = new FreeList('parsers', 1000, function parsersCb() { const parsers = new FreeList('parsers', 1000, function parsersCb() {
const parser = new HTTPParser(HTTPParser.REQUEST); const parser = new HTTPParser(HTTPParser.REQUEST);
parser._headers = []; cleanParser(parser);
parser._url = '';
parser._consumed = false;
parser.socket = null;
parser.incoming = null;
parser.outgoing = null;
parser.maxHeaderPairs = MAX_HEADER_PAIRS;
parser.onIncoming = null; parser.onIncoming = null;
parser[kOnHeaders] = parserOnHeaders; parser[kOnHeaders] = parserOnHeaders;
parser[kOnHeadersComplete] = parserOnHeadersComplete; parser[kOnHeadersComplete] = parserOnHeadersComplete;
parser[kOnBody] = parserOnBody; parser[kOnBody] = parserOnBody;
parser[kOnMessageComplete] = parserOnMessageComplete; parser[kOnMessageComplete] = parserOnMessageComplete;
parser[kOnExecute] = null;
return parser; return parser;
}); });
@ -182,17 +173,9 @@ function closeParserInstance(parser) { parser.close(); }
// should be all that is needed. // should be all that is needed.
function freeParser(parser, req, socket) { function freeParser(parser, req, socket) {
if (parser) { if (parser) {
parser._headers = [];
parser._url = '';
parser.maxHeaderPairs = MAX_HEADER_PAIRS;
parser.onIncoming = null;
if (parser._consumed) if (parser._consumed)
parser.unconsume(); parser.unconsume();
parser._consumed = false; cleanParser(parser);
parser.socket = null;
parser.incoming = null;
parser.outgoing = null;
parser[kOnExecute] = null;
if (parsers.free(parser) === false) { if (parsers.free(parser) === false) {
// Make sure the parser's stack has unwound before deleting the // Make sure the parser's stack has unwound before deleting the
// corresponding C++ object through .close(). // corresponding C++ object through .close().
@ -238,6 +221,17 @@ function checkInvalidHeaderChar(val) {
return headerCharRegex.test(val); return headerCharRegex.test(val);
} }
function cleanParser(parser) {
parser._headers = [];
parser._url = '';
parser.socket = null;
parser.incoming = null;
parser.outgoing = null;
parser.maxHeaderPairs = MAX_HEADER_PAIRS;
parser[kOnExecute] = null;
parser._consumed = false;
}
module.exports = { module.exports = {
_checkInvalidHeaderChar: checkInvalidHeaderChar, _checkInvalidHeaderChar: checkInvalidHeaderChar,
_checkIsHttpToken: checkIsHttpToken, _checkIsHttpToken: checkIsHttpToken,