diff options
author | isaacs <i@izs.me> | 2012-12-16 12:47:01 -0800 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-12-17 15:08:57 -0800 |
commit | 82c7c84e2550e79b816f87cd1dff3fe4cafb6bbb (patch) | |
tree | 488fec79cf0380d536d39347ffe4a6de1476da1f /lib/net.js | |
parent | 6c5356bfe26abcac24276681805744ea2d2d3af3 (diff) | |
download | android-node-v8-82c7c84e2550e79b816f87cd1dff3fe4cafb6bbb.tar.gz android-node-v8-82c7c84e2550e79b816f87cd1dff3fe4cafb6bbb.tar.bz2 android-node-v8-82c7c84e2550e79b816f87cd1dff3fe4cafb6bbb.zip |
net: Handle sync writable streams synchronously
This fixes the case where stderr doesn't flush before the process exits.
Diffstat (limited to 'lib/net.js')
-rw-r--r-- | lib/net.js | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/net.js b/lib/net.js index d0a2c5a627..175e0f527f 100644 --- a/lib/net.js +++ b/lib/net.js @@ -595,9 +595,14 @@ Socket.prototype._write = function(dataEncoding, cb) { return this._destroy(errnoException(errno, 'write'), cb); writeReq.oncomplete = afterWrite; - writeReq.cb = cb; - this._bytesDispatched += writeReq.bytes; + + // If it was entirely flushed, we can write some more right now. + // However, if more is left in the queue, then wait until that clears. + if (this._handle.writeQueueSize === 0) + cb(); + else + writeReq.cb = cb; }; @@ -640,7 +645,8 @@ function afterWrite(status, handle, req) { if (self !== process.stderr && self !== process.stdout) debug('afterWrite call cb'); - req.cb.call(self); + if (req.cb) + req.cb.call(self); } |