From a634b835c2940c201e65537d5dbb980bb53ccb3f Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Fri, 8 Sep 2017 14:08:18 +0200 Subject: [PATCH 1/2] http: emit 'aborted' event for ClientRequest Fixes #15259 --- lib/_http_client.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/_http_client.js b/lib/_http_client.js index e972a3d5b9e9fd..1eebc70a9311a3 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -360,9 +360,10 @@ function socketCloseListener() { // NOTE: It's important to get parser here, because it could be freed by // the `socketOnData`. var parser = socket.parser; - req.emit('close'); + if (req.res && req.res.readable) { // Socket closed before we emitted 'end' below. + req.emit('aborted'); req.res.emit('aborted'); var res = req.res; res.on('end', function() { @@ -374,9 +375,12 @@ function socketCloseListener() { // receive a response. The error needs to // fire on the request. req.socket._hadError = true; + req.emit('aborted'); req.emit('error', createHangUpError()); } + req.emit('close'); + // Too bad. That output wasn't getting written. // This is pretty terrible that it doesn't raise an error. // Fixed better in v0.10 From 102c6216ffd29f7d6ec73ca92caafe41fa9f2643 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Mon, 11 Sep 2017 11:07:31 +0200 Subject: [PATCH 2/2] http: don't emit aborted on request if has response. --- lib/_http_client.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/_http_client.js b/lib/_http_client.js index 1eebc70a9311a3..e0374ce493b86a 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -363,7 +363,6 @@ function socketCloseListener() { if (req.res && req.res.readable) { // Socket closed before we emitted 'end' below. - req.emit('aborted'); req.res.emit('aborted'); var res = req.res; res.on('end', function() { @@ -375,8 +374,8 @@ function socketCloseListener() { // receive a response. The error needs to // fire on the request. req.socket._hadError = true; - req.emit('aborted'); req.emit('error', createHangUpError()); + req.emit('aborted'); } req.emit('close');