X-Git-Url: https://oss.titaniummirror.com/gitweb/?p=tinyos-2.x.git;a=blobdiff_plain;f=tos%2Flib%2Ftosthreads%2Fsystem%2FBlockingResourceP.nc;h=2821185e6c727b6add787ecadf556b5a0b8b0be3;hp=b3e69a7298503168f4a2674857b6a044b64d7958;hb=e9bfab607e051bae6afb47b44892ce37541d1b44;hpb=adf1de6c009d13b7b52e68535c63b28f59c97400 diff --git a/tos/lib/tosthreads/system/BlockingResourceP.nc b/tos/lib/tosthreads/system/BlockingResourceP.nc index b3e69a72..2821185e 100644 --- a/tos/lib/tosthreads/system/BlockingResourceP.nc +++ b/tos/lib/tosthreads/system/BlockingResourceP.nc @@ -41,12 +41,11 @@ generic module BlockingResourceP() { interface SystemCall; interface ThreadScheduler; interface Resource; - interface Timer[uint8_t id]; + interface ThreadSleep; } } implementation { typedef struct params { - uint32_t* milli; error_t error; } params_t; @@ -108,11 +107,6 @@ implementation { } /************************* Timed Release *****************************/ - void timerTask(syscall_t* s) { - params_t* p = s->params; - call Timer.startOneShot[s->thread->id](*(p->milli)); - } - command error_t BlockingResource.timedRelease(uint32_t milli) { syscall_t s; params_t p; @@ -122,15 +116,12 @@ implementation { resource_call = &s; } - if(milli != 0) { - p.milli = &milli; - call SystemCall.start(timerTask, &s, INVALID_ID, &p); - } - else { - call SystemCall.start(releaseTask, &s, INVALID_ID, &p); - if(p.error == SUCCESS) - call SystemCall.start(requestTask, &s, INVALID_ID, &p); - } + if(milli != 0) + call ThreadSleep.sleep(milli); + + call SystemCall.start(releaseTask, &s, INVALID_ID, &p); + if(p.error == SUCCESS) + call SystemCall.start(requestTask, &s, INVALID_ID, &p); atomic { resource_call = NULL; @@ -138,16 +129,6 @@ implementation { } } - event void Timer.fired[uint8_t id]() { - thread_t* t = call ThreadScheduler.threadInfo(id); - syscall_t* s = t->syscall; - params_t* p = t->syscall->params; - call SystemCall.start(releaseTask, s, INVALID_ID, p); - if(p->error == SUCCESS) - call SystemCall.start(requestTask, s, INVALID_ID, p); - else call SystemCall.finish(s); - } - /************************* isOwner pass through *****************************/ command error_t BlockingResource.isOwner() { return call Resource.isOwner();