summaryrefslogtreecommitdiff
path: root/lib/_http_incoming.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/_http_incoming.js')
-rw-r--r--lib/_http_incoming.js24
1 files changed, 18 insertions, 6 deletions
diff --git a/lib/_http_incoming.js b/lib/_http_incoming.js
index ace18a83d4..d0c7ce9ba2 100644
--- a/lib/_http_incoming.js
+++ b/lib/_http_incoming.js
@@ -27,7 +27,7 @@ const {
Symbol
} = primordials;
-const Stream = require('stream');
+const { Readable, finished } = require('stream');
const kHeaders = Symbol('kHeaders');
const kHeadersCount = Symbol('kHeadersCount');
@@ -54,7 +54,7 @@ function IncomingMessage(socket) {
};
}
- Stream.Readable.call(this, streamOptions);
+ Readable.call(this, streamOptions);
this._readableState.readingMore = true;
@@ -89,8 +89,8 @@ function IncomingMessage(socket) {
// read by the user, so there's no point continuing to handle it.
this._dumped = false;
}
-ObjectSetPrototypeOf(IncomingMessage.prototype, Stream.Readable.prototype);
-ObjectSetPrototypeOf(IncomingMessage, Stream.Readable);
+ObjectSetPrototypeOf(IncomingMessage.prototype, Readable.prototype);
+ObjectSetPrototypeOf(IncomingMessage, Readable);
ObjectDefineProperty(IncomingMessage.prototype, 'connection', {
get: function() {
@@ -168,10 +168,18 @@ IncomingMessage.prototype._destroy = function _destroy(err, cb) {
this.aborted = true;
this.emit('aborted');
}
- if (this.socket && !this.readableEnded) {
+
+ // If aborted and the underlying socket not already destroyed,
+ // destroy it.
+ if (this.socket && !this.socket.destroyed && this.aborted) {
this.socket.destroy(err);
+ const cleanup = finished(this.socket, (e) => {
+ cleanup();
+ onError(this, cb, e || err);
+ });
+ } else {
+ onError(this, cb, err);
}
- this.listenerCount('error') > 0 ? cb(err) : cb();
};
IncomingMessage.prototype._addHeaderLines = _addHeaderLines;
@@ -350,6 +358,10 @@ IncomingMessage.prototype._dump = function _dump() {
}
};
+function onError(instance, cb, error) {
+ instance.listenerCount('error') > 0 ? cb(error) : cb();
+}
+
module.exports = {
IncomingMessage,
readStart,