[tor-commits] [torbutton/master] Bug 26100: Use inputStream.asyncWait instead of nsIInputStreamPump

gk at torproject.org gk at torproject.org
Fri May 25 06:13:17 UTC 2018


commit 2764f9a0019b1eb8704e6748bfa46b9f58aaf74a
Author: Arthur Edelstein <arthuredelstein at gmail.com>
Date:   Thu May 17 22:35:51 2018 -0700

    Bug 26100: Use inputStream.asyncWait instead of nsIInputStreamPump
---
 src/modules/tor-control-port.js | 39 +++++++++++++++------------------------
 1 file changed, 15 insertions(+), 24 deletions(-)

diff --git a/src/modules/tor-control-port.js b/src/modules/tor-control-port.js
index 3491efc..2b75e22 100644
--- a/src/modules/tor-control-port.js
+++ b/src/modules/tor-control-port.js
@@ -68,35 +68,26 @@ io.asyncSocketStreams = function (ipcFile, host, port) {
 };
 
 // __io.pumpInputStream(scriptableInputStream, onInputData, onError)__.
-// Run an "input stream pump" that takes an input stream and
-// asynchronously pumps incoming data to the onInputData callback.
+// Take an input stream and asynchronously pass data to the onInputData callback.
 io.pumpInputStream = function (inputStream, onInputData, onError) {
   // Wrap raw inputStream with a "ScriptableInputStream" so we can read incoming data.
   let ScriptableInputStream = Components.Constructor(
     "@mozilla.org/scriptableinputstream;1", "nsIScriptableInputStream", "init"),
       scriptableInputStream = new ScriptableInputStream(inputStream),
-      // A private method to read all data available on the input stream.
-      readAll = function() {
-        return scriptableInputStream.read(scriptableInputStream.available());
-      },
-      pump = Cc["@mozilla.org/network/input-stream-pump;1"]
-               .createInstance(Components.interfaces.nsIInputStreamPump);
-  // Start the pump.
-  pump.init(inputStream, -1, -1, 0, 0, true);
-  // Tell the pump to read all data whenever it is available, and pass the data
-  // to the onInputData callback. The first argument to asyncRead implements
-  // nsIStreamListener.
-  pump.asyncRead({ onStartRequest: function (request, context) { },
-                   onStopRequest: function (request, context, code) { },
-                   onDataAvailable : function (request, context, stream, offset, count) {
-                     try {
-                       onInputData(readAll());
-                     } catch (error) {
-                       // readAll() or onInputData(...) has thrown an error.
-                       // Notify calling code through onError.
-                       onError(error);
-                     }
-                   } }, null);
+      awaitNextChunk = function () {
+        inputStream.asyncWait({
+          onInputStreamReady: (stream) => {
+            try {
+              let chunk = scriptableInputStream.read(scriptableInputStream.available());
+              onInputData(chunk);
+              awaitNextChunk();
+            } catch (err) {
+              onError(err);
+            }
+          }
+        }, 0, 0, Services.tm.currentThread);
+      };
+  awaitNextChunk();
 };
 
 // __io.asyncSocket(ipcFile, host, port, onInputData, onError)__.





More information about the tor-commits mailing list