streams2: NextTick the emit('readable') in resume()
authorisaacs <i@izs.me>
Wed, 5 Dec 2012 02:19:07 +0000 (18:19 -0800)
committerisaacs <i@izs.me>
Fri, 14 Dec 2012 18:52:28 +0000 (10:52 -0800)
Otherwise resume() will cause data to be emitted before it can be handled.

lib/_stream_readable.js

index 6c4d95e..54ceaa1 100644 (file)
@@ -545,6 +545,7 @@ function emitDataEvents(stream, startPaused) {
 
   stream.on('readable', function() {
     readable = true;
+
     var c;
     while (!paused && (null !== (c = stream.read())))
       stream.emit('data', c);
@@ -562,7 +563,9 @@ function emitDataEvents(stream, startPaused) {
   stream.resume = function() {
     paused = false;
     if (readable)
-      stream.emit('readable');
+      process.nextTick(function() {
+        stream.emit('readable');
+      });
   };
 
   // now make it start, just in case it hadn't already.