- execFn now returns values

- more structure in cortexLocks.js
This commit is contained in:
Dan Ballard 2011-01-25 23:49:52 -08:00
parent 9153c0896b
commit a5b83691e6
3 changed files with 70 additions and 8 deletions

View File

@ -233,14 +233,14 @@ function disconnect(addr) {
}*/ }*/
// remove locks // remove locks
// test locks // test locks
for(var i in testLocks) { /*for(var i in testLocks) {
var lock = testLocks[i]; var lock = testLocks[i];
if (!lock) if (!lock)
continue; continue;
if (lock.addr == addr) { if (lock.addr == addr) {
lock.locked = false; lock.locked = false;
} }
} }*/
// range locks // range locks
//removeNodeRangeLocks(addr); //removeNodeRangeLocks(addr);
@ -462,7 +462,7 @@ function loadTest(tname) {
getLock("test", tname); getLock("test", tname);
} }
/*
function retrieveLock(struct) { function retrieveLock(struct) {
if (struct.type == "test") { if (struct.type == "test") {
return testLocks[struct.name]; return testLocks[struct.name];
@ -472,7 +472,7 @@ function retrieveLock(struct) {
error("retrieveLock for range got null"); error("retrieveLock for range got null");
return l; return l;
} }
} }*/
function getLock(type, name, start, end) { function getLock(type, name, start, end) {
var locks = getLockType(type); var locks = getLockType(type);

View File

@ -256,7 +256,12 @@ function registerFn(fnname, fn, preplace) {
} }
} }
/* Finds the chain of functions,
* calls the nth
* stores its return
* calls the nth+1 with the return of the nth as well
* returns the results of the mth
*/
function execFn(name, args) { function execFn(name, args) {
root = fnreg; root = fnreg;
names = name.split("."); names = name.split(".");
@ -266,11 +271,12 @@ function execFn(name, args) {
return false; // ERROR, NO FN return false; // ERROR, NO FN
} }
i=0; i=0;
ret = true;
while(root[i]) { while(root[i]) {
root[i](args); ret = root[i](args, ret);
i++; i++;
} }
return true; return ret;
} }

View File

@ -6,6 +6,7 @@
* NOTES * NOTES
*/ */
/* locks -> [ name:[type, locks], ] */
var locks = new Array(); var locks = new Array();
var lockTrys = new Array(); var lockTrys = new Array();
var myLocks = new Array(); var myLocks = new Array();
@ -17,6 +18,52 @@ function copyobj(arr) {
} }
} }
function registerLockFn(ltype, fnName, fn) {
registerFn("locks." +ltype+"."+fnName, fn);
}
function execLockFn(family, fnName, args) {
ltype = locks[family].type;
args["locks"] = locks[family].locks;
return execFn("locks."+ltype+"."+fnName, args);
}
/**** Lock Functions
* retriveLock(details) # get lock data strict (lookup?)
* removeLocks(owner)
* isLocked(details)
* getLock(details) # aquire lock (aquire?)
* equals(a, b)
* lock
* release
* make?
*/
registerLockFn("basic", "lookup",
function (args) {
return args["locks"][args["name"]];
});
registerLockFn("range", "lookup",
function (args) {
/******* vvvvvvvvvv *********/
var l = getRangeLock(struct.name, struct.start, struct.end);
if (l == null)
error("retrieveLock for range got null");
return l;
});
/**** Logical Lock using functions
* grant(resp, lock
* deny(resp, lock
* handleLockReq
* handleLockResp
* lockGranted
* checkLocks
* ...
*/
function sendReqs(addr) { function sendReqs(addr) {
for(ltype in lockTrys) { for(ltype in lockTrys) {
for (i in lockTrys[ltype]) { for (i in lockTrys[ltype]) {
@ -95,5 +142,14 @@ function removeNodeLocks(addr) {
addMsgHandler("deadNode", addMsgHandler("deadNode",
function (resp) { function (resp) {
for(var i in testLocks) {
var lock = testLocks[i];
if (!lock)
continue;
if (lock.addr == addr) {
lock.locked = false;
}
}
removeNodeLocks(resp['addr']); removeNodeLocks(resp['addr']);
}); });