diff --git a/lib/_http_outgoing.js b/lib/_http_outgoing.js index 07cf84866fd831..25e3597bcb2024 100644 --- a/lib/_http_outgoing.js +++ b/lib/_http_outgoing.js @@ -38,6 +38,8 @@ const errors = require('internal/errors'); const { CRLF, debug } = common; const { utcDate } = internalHttp; +const kIsCorked = Symbol('isCorked'); + var RE_FIELDS = /^(?:Connection|Transfer-Encoding|Content-Length|Date|Expect|Trailer|Upgrade)$/i; var RE_CONN_VALUES = /(?:^|\W)close|upgrade(?:$|\W)/ig; @@ -99,6 +101,7 @@ function OutgoingMessage() { this.finished = false; this._headerSent = false; + this[kIsCorked] = false; this.socket = null; this.connection = null; @@ -658,9 +661,10 @@ function write_(msg, chunk, encoding, callback, fromEnd) { // signal the user to keep writing. if (chunk.length === 0) return true; - if (!fromEnd && msg.connection && !msg.connection.corked) { + if (!fromEnd && msg.connection && !msg[kIsCorked]) { msg.connection.cork(); - process.nextTick(connectionCorkNT, msg.connection); + msg[kIsCorked] = true; + process.nextTick(connectionCorkNT, msg, msg.connection); } var len, ret; @@ -689,7 +693,8 @@ function writeAfterEndNT(err, callback) { } -function connectionCorkNT(conn) { +function connectionCorkNT(msg, conn) { + msg[kIsCorked] = false; conn.uncork(); }