aboutsummaryrefslogtreecommitdiff
path: root/lib/net.js
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2012-12-16 12:47:01 -0800
committerisaacs <i@izs.me>2012-12-17 15:08:57 -0800
commit82c7c84e2550e79b816f87cd1dff3fe4cafb6bbb (patch)
tree488fec79cf0380d536d39347ffe4a6de1476da1f /lib/net.js
parent6c5356bfe26abcac24276681805744ea2d2d3af3 (diff)
downloadandroid-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.js12
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);
}