- 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
// test locks
for(var i in testLocks) {
/*for(var i in testLocks) {
var lock = testLocks[i];
if (!lock)
continue;
if (lock.addr == addr) {
lock.locked = false;
}
}
}*/
// range locks
//removeNodeRangeLocks(addr);
@ -462,7 +462,7 @@ function loadTest(tname) {
getLock("test", tname);
}
/*
function retrieveLock(struct) {
if (struct.type == "test") {
return testLocks[struct.name];
@ -472,7 +472,7 @@ function retrieveLock(struct) {
error("retrieveLock for range got null");
return l;
}
}
}*/
function getLock(type, name, start, end) {
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) {
root = fnreg;
names = name.split(".");
@ -266,11 +271,12 @@ function execFn(name, args) {
return false; // ERROR, NO FN
}
i=0;
ret = true;
while(root[i]) {
root[i](args);
ret = root[i](args, ret);
i++;
}
return true;
return ret;
}

View File

@ -6,6 +6,7 @@
* NOTES
*/
/* locks -> [ name:[type, locks], ] */
var locks = new Array();
var lockTrys = 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) {
for(ltype in lockTrys) {
for (i in lockTrys[ltype]) {
@ -95,5 +142,14 @@ function removeNodeLocks(addr) {
addMsgHandler("deadNode",
function (resp) {
for(var i in testLocks) {
var lock = testLocks[i];
if (!lock)
continue;
if (lock.addr == addr) {
lock.locked = false;
}
}
removeNodeLocks(resp['addr']);
});