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
This commit is contained in:
Slava Kim
2013-07-15 18:04:48 -07:00
parent 690da6a535
commit c185b2bed6
2 changed files with 11 additions and 6 deletions

View File

@@ -3,6 +3,7 @@ var files = require('./files.js');
var path = require('path'); var path = require('path');
var fs = require('fs'); var fs = require('fs');
var unipackage = require('./unipackage.js'); var unipackage = require('./unipackage.js');
var fiberHelpers = require('./fiber-helpers.js');
var Fiber = require('fibers'); var Fiber = require('fibers');
var request = require('request'); var request = require('request');
@@ -232,11 +233,7 @@ exports.logs = function (options) {
galaxy.close(); galaxy.close();
} }
// XXX: should not be global, quick hack to force logs continuation work after var lastLogId = null;
// reconnect. Since ssh-tunnel reconnect forces this method to rerun we need
// to preserve some global state.
if (typeof lastLogId === "undefined")
lastLogId = null;
var logReader = getMeteor(options.context).connect(logReaderURL); var logReader = getMeteor(options.context).connect(logReaderURL);
var Log = unipackage.load({ var Log = unipackage.load({
library: options.context.library, library: options.context.library,
@@ -278,7 +275,7 @@ exports.logs = function (options) {
// (otherwise Node will continue running). // (otherwise Node will continue running).
logReader.close(); logReader.close();
} else { } else {
Fiber.yield(); fiberHelpers.yieldForever();
} }
}; };

View File

@@ -37,3 +37,11 @@ exports.parallelEach = function (collection, callback, context) {
// Throw if any threw. // Throw if any threw.
_.each(futures, function (f) { f.get(); }); _.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();
};