var Mutex = function() { this.queues = []; this.locked = false;};Mutex.prototype = { push: function(callback) { var self = this; this.queues.push(callback); if (!this.locked) { this.locked = true; var f = this.queues.pop(); try { f(function() { self.locked = false; }); } catch(ex) { self.locked = false; } } }};