From c185b2bed6b5673b9098caba7d93fd58d30227ba Mon Sep 17 00:00:00 2001 From: Slava Kim Date: Mon, 15 Jul 2013 18:04:48 -0700 Subject: [PATCH] Fix ssh-tunnel reconnect problem by keeping reference to Fiber we want to yield to. For more info look here: https://github.com/laverdet/node-fibers/issues/131 --- tools/deploy-galaxy.js | 9 +++------ tools/fiber-helpers.js | 8 ++++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/tools/deploy-galaxy.js b/tools/deploy-galaxy.js index 4b2b4f4b16..f6bf054c59 100644 --- a/tools/deploy-galaxy.js +++ b/tools/deploy-galaxy.js @@ -3,6 +3,7 @@ var files = require('./files.js'); var path = require('path'); var fs = require('fs'); var unipackage = require('./unipackage.js'); +var fiberHelpers = require('./fiber-helpers.js'); var Fiber = require('fibers'); var request = require('request'); @@ -232,11 +233,7 @@ exports.logs = function (options) { galaxy.close(); } - // XXX: should not be global, quick hack to force logs continuation work after - // reconnect. Since ssh-tunnel reconnect forces this method to rerun we need - // to preserve some global state. - if (typeof lastLogId === "undefined") - lastLogId = null; + var lastLogId = null; var logReader = getMeteor(options.context).connect(logReaderURL); var Log = unipackage.load({ library: options.context.library, @@ -278,7 +275,7 @@ exports.logs = function (options) { // (otherwise Node will continue running). logReader.close(); } else { - Fiber.yield(); + fiberHelpers.yieldForever(); } }; diff --git a/tools/fiber-helpers.js b/tools/fiber-helpers.js index 9232b16e3e..f7df4dcc3e 100644 --- a/tools/fiber-helpers.js +++ b/tools/fiber-helpers.js @@ -37,3 +37,11 @@ exports.parallelEach = function (collection, callback, context) { // Throw if any threw. _.each(futures, function (f) { f.get(); }); }; + +// https://github.com/laverdet/node-fibers/issues/131 +var fibersYieldForever = []; +exports.yieldForever = function () { + fibersYieldForever.push(Fiber.current); + Fiber.yield(); +}; +