X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=tos%2Fsystem%2FArbiterP.nc;h=b07f975dc4e5b2b2e762a90c020aff7772ec43cf;hb=e9bfab607e051bae6afb47b44892ce37541d1b44;hp=fd278ce3d8ecdb5dfea3cdb7d9c4f74b72ad8272;hpb=1341c02a1a54cd12ec6258f339441180f01b58c7;p=tinyos-2.x.git diff --git a/tos/system/ArbiterP.nc b/tos/system/ArbiterP.nc index fd278ce3..b07f975d 100644 --- a/tos/system/ArbiterP.nc +++ b/tos/system/ArbiterP.nc @@ -49,7 +49,7 @@ * @author Philip Levis */ -generic module ArbiterP(uint8_t default_owner_id) { +generic module ArbiterP(uint8_t default_owner_id) @safe() { provides { interface Resource[uint8_t id]; interface ResourceRequested[uint8_t id]; @@ -110,15 +110,18 @@ implementation { if(state == RES_BUSY && resId == id) { if(call Queue.isEmpty() == FALSE) { reqResId = call Queue.dequeue(); + resId = NO_RES; state = RES_GRANTING; post grantedTask(); + call ResourceConfigure.unconfigure[id](); } else { resId = default_owner_id; state = RES_CONTROLLED; + call ResourceConfigure.unconfigure[id](); signal ResourceDefaultOwner.granted(); } - call ResourceConfigure.unconfigure[id](); + return SUCCESS; } } return FAIL;