]> oss.titaniummirror.com Git - tinyos-2.x.git/blobdiff - tos/system/SharedArbiterP.nc
Race condition clearing bit vectors that are already clear in Init.init.
[tinyos-2.x.git] / tos / system / SharedArbiterP.nc
index 1228c2a19c4f314441e4d77039eb13da49e4d60f..40afb970ed91b670578ba4091ac385d323eb3115 100644 (file)
  * switched subsystem.  For example, a communications bus that can handle IO
  * for multiple clients simultaneously, but is powered down when not in use.
  *
- * p_dfltOwnerId = uniqueCount() use by the resource.  see SharedArbiterC
- *
  * @author R. Steve McKown <rsmckown@gmail.com>
  */
 
-generic module SharedArbiterP(uint8_t p_dfltOwnerId) {
+generic module SharedArbiterP() {
   provides {
-    interface Init;
     interface Resource[uint8_t id];
     interface ResourceDefaultOwner;
     interface ArbiterInfo;
@@ -119,13 +116,6 @@ implementation {
     }
   }
 
-  command error_t Init.init()
-  {
-    call GrantedVector.clearAll();
-    call RequestingVector.clearAll();
-    return SUCCESS;
-  }
-
   async command error_t Resource.request[uint8_t id]()
   {
     /* The Resource docs do not say what happens when a user calls
@@ -175,14 +165,11 @@ implementation {
 
   async command error_t ResourceDefaultOwner.release()
   {
-    atomic {
-      if (m_requesting > 0) {
-       call State.forceState(S_GRANTED);
-       post grantedTask();
-       return SUCCESS;
-      } else
-       return FAIL;
-    }
+    if (call State.requestState(S_GRANTED) == SUCCESS) {
+      post grantedTask();
+      return SUCCESS;
+    } else
+      return FAIL;
   }
 
   async command bool ArbiterInfo.inUse()