From 390dafea01381d375be21f0bd126ddc7fd0a0582 Mon Sep 17 00:00:00 2001 From: David Glasser Date: Mon, 27 Jan 2014 21:18:24 -0800 Subject: [PATCH] Move _SynchronousQueue into another file This commit does not build but exists so that the next commit shows diffs better. --- packages/meteor/fiber_stubs_client.js | 68 --------------------------- packages/meteor/unyielding_queue.js | 67 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 68 deletions(-) create mode 100644 packages/meteor/unyielding_queue.js diff --git a/packages/meteor/fiber_stubs_client.js b/packages/meteor/fiber_stubs_client.js index 3babd0e08f..46163a26e1 100644 --- a/packages/meteor/fiber_stubs_client.js +++ b/packages/meteor/fiber_stubs_client.js @@ -6,71 +6,3 @@ Meteor._noYieldsAllowed = function (f) { return f(); }; - -// An even simpler queue of tasks than the fiber-enabled one. This one just -// runs all the tasks when you call runTask or flush, synchronously. -// -Meteor._SynchronousQueue = function () { - var self = this; - self._tasks = []; - self._running = false; -}; - -_.extend(Meteor._SynchronousQueue.prototype, { - runTask: function (task) { - var self = this; - if (!self.safeToRunTask()) - throw new Error("Could not synchronously run a task from a running task"); - self._tasks.push(task); - var tasks = self._tasks; - self._tasks = []; - self._running = true; - try { - while (!_.isEmpty(tasks)) { - var t = tasks.shift(); - try { - t(); - } catch (e) { - if (_.isEmpty(tasks)) { - // this was the last task, that is, the one we're calling runTask - // for. - throw e; - } else { - Meteor._debug("Exception in queued task: " + e.stack); - } - } - } - } finally { - self._running = false; - } - }, - - queueTask: function (task) { - var self = this; - var wasEmpty = _.isEmpty(self._tasks); - self._tasks.push(task); - // Intentionally not using Meteor.setTimeout, because it doesn't like runing - // in stubs for now. - if (wasEmpty) - setTimeout(_.bind(self.flush, self), 0); - }, - - flush: function () { - var self = this; - self.runTask(function () {}); - }, - - drain: function () { - var self = this; - if (!self.safeToRunTask()) - return; - while (!_.isEmpty(self._tasks)) { - self.flush(); - } - }, - - safeToRunTask: function () { - var self = this; - return !self._running; - } -}); diff --git a/packages/meteor/unyielding_queue.js b/packages/meteor/unyielding_queue.js new file mode 100644 index 0000000000..71819b460b --- /dev/null +++ b/packages/meteor/unyielding_queue.js @@ -0,0 +1,67 @@ +// An even simpler queue of tasks than the fiber-enabled one. This one just +// runs all the tasks when you call runTask or flush, synchronously. +// +Meteor._SynchronousQueue = function () { + var self = this; + self._tasks = []; + self._running = false; +}; + +_.extend(Meteor._SynchronousQueue.prototype, { + runTask: function (task) { + var self = this; + if (!self.safeToRunTask()) + throw new Error("Could not synchronously run a task from a running task"); + self._tasks.push(task); + var tasks = self._tasks; + self._tasks = []; + self._running = true; + try { + while (!_.isEmpty(tasks)) { + var t = tasks.shift(); + try { + t(); + } catch (e) { + if (_.isEmpty(tasks)) { + // this was the last task, that is, the one we're calling runTask + // for. + throw e; + } else { + Meteor._debug("Exception in queued task: " + e.stack); + } + } + } + } finally { + self._running = false; + } + }, + + queueTask: function (task) { + var self = this; + var wasEmpty = _.isEmpty(self._tasks); + self._tasks.push(task); + // Intentionally not using Meteor.setTimeout, because it doesn't like runing + // in stubs for now. + if (wasEmpty) + setTimeout(_.bind(self.flush, self), 0); + }, + + flush: function () { + var self = this; + self.runTask(function () {}); + }, + + drain: function () { + var self = this; + if (!self.safeToRunTask()) + return; + while (!_.isEmpty(self._tasks)) { + self.flush(); + } + }, + + safeToRunTask: function () { + var self = this; + return !self._running; + } +});