Ivan Socolsky
10 years ago
5 changed files with 61 additions and 54 deletions
@ -0,0 +1,34 @@ |
|||||
|
var _ = require('lodash'); |
||||
|
var $ = require('preconditions').singleton(); |
||||
|
|
||||
|
var locks = {}; |
||||
|
|
||||
|
var Lock = function() { |
||||
|
this.taken = false; |
||||
|
this.queue = []; |
||||
|
}; |
||||
|
|
||||
|
Lock.prototype.free = function() { |
||||
|
if (this.queue.length > 0) { |
||||
|
var f = this.queue.shift(); |
||||
|
f(this); |
||||
|
} else { |
||||
|
this.taken = false; |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
Lock.get = function(key, callback) { |
||||
|
if (_.isUndefined(locks[key])) { |
||||
|
locks[key] = new Lock(); |
||||
|
} |
||||
|
var lock = locks[key]; |
||||
|
|
||||
|
if (lock.taken) { |
||||
|
lock.queue.push(callback); |
||||
|
} else { |
||||
|
lock.taken = true; |
||||
|
callback(lock); |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
module.exports = Lock; |
@ -1,34 +1,20 @@ |
|||||
var _ = require('lodash'); |
|
||||
var $ = require('preconditions').singleton(); |
var $ = require('preconditions').singleton(); |
||||
|
var _ = require('lodash'); |
||||
|
var LocalLock = require('./locallock'); |
||||
|
var RemoteLock = require('locker'); |
||||
|
|
||||
var locks = {}; |
function Lock(opts) {}; |
||||
|
|
||||
var Lock = function() { |
|
||||
this.taken = false; |
|
||||
this.queue = []; |
|
||||
}; |
|
||||
|
|
||||
Lock.prototype.free = function() { |
|
||||
if (this.queue.length > 0) { |
|
||||
var f = this.queue.shift(); |
|
||||
f(this); |
|
||||
} else { |
|
||||
this.taken = false; |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
Lock.get = function(key, callback) { |
Lock.prototype.runLocked = function(token, cb, task) { |
||||
if (_.isUndefined(locks[key])) { |
$.shouldBeDefined(token); |
||||
locks[key] = new Lock(); |
|
||||
} |
|
||||
var lock = locks[key]; |
|
||||
|
|
||||
if (lock.taken) { |
LocalLock.get(token, function(lock) { |
||||
lock.queue.push(callback); |
var _cb = function() { |
||||
} else { |
cb.apply(null, arguments); |
||||
lock.taken = true; |
lock.free(); |
||||
callback(lock); |
}; |
||||
} |
task(_cb); |
||||
|
}); |
||||
}; |
}; |
||||
|
|
||||
module.exports = Lock; |
module.exports = Lock; |
||||
|
Loading…
Reference in new issue