From 24aead5d49d64159d4022e0e596798166b3e0a44 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Mon, 15 Jul 2019 14:10:31 +0200 Subject: [PATCH] http: refactor emit error --- lib/_http_client.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/_http_client.js b/lib/_http_client.js index a1750a1a00a58b..2874cbc8ac9493 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -265,7 +265,7 @@ function ClientRequest(input, options, cb) { return; called = true; if (err) { - process.nextTick(() => this.emit('error', err)); + process.nextTick(emitError, this, err); return; } this.onSocket(socket); @@ -374,7 +374,7 @@ function socketCloseListener() { // receive a response. The error needs to // fire on the request. req.socket._hadError = true; - req.emit('error', connResetException('socket hang up')); + emitError(req, connResetException('socket hang up')); } req.emit('close'); } @@ -391,6 +391,12 @@ function socketCloseListener() { } } +function emitError(req, err) { + if (!req.aborted) { + req.emit('error', err); + } +} + function socketErrorListener(err) { const socket = this; const req = socket._httpMessage; @@ -400,7 +406,7 @@ function socketErrorListener(err) { // For Safety. Some additional errors might fire later on // and we need to make sure we don't double-fire the error event. req.socket._hadError = true; - req.emit('error', err); + emitError(req, err); } // Handle any pending data @@ -434,7 +440,7 @@ function socketOnEnd() { // If we don't have a response then we know that the socket // ended prematurely and we need to emit an error on the request. req.socket._hadError = true; - req.emit('error', connResetException('socket hang up')); + emitError(req, connResetException('socket hang up')); } if (parser) { parser.finish(); @@ -457,7 +463,7 @@ function socketOnData(d) { freeParser(parser, req, socket); socket.destroy(); req.socket._hadError = true; - req.emit('error', ret); + emitError(req, ret); } else if (parser.incoming && parser.incoming.upgrade) { // Upgrade (if status code 101) or CONNECT var bytesParsed = ret;