implementation {
error_t init(uint8_t id, void* arg) {
+ error_t r1, r2;
thread_t* thread_info = call ThreadInfo.get[id]();
thread_info->start_arg_ptr = arg;
thread_info->mutex_count = 0;
thread_info->next_thread = NULL;
- return call ThreadScheduler.initThread(id);
+ r1 = call ThreadInfo.reset[id]();
+ r2 = call ThreadScheduler.initThread(id);
+ return ecombine(r1, r2);
}
command error_t Thread.start[uint8_t id](void* arg) {
return call ThreadSleep.sleep(milli);
}
+ command error_t Thread.join[uint8_t id]() {
+ return call ThreadScheduler.joinThread(id);
+ }
+
event void ThreadFunction.signalThreadRun[uint8_t id](void *arg) {
signal Thread.run[id](arg);
}
default event void Thread.run[uint8_t id](void* arg) {}
default async command thread_t* ThreadInfo.get[uint8_t id]() {return NULL;}
+ default async command error_t ThreadInfo.reset[uint8_t id]() {return FAIL;}
default async event void ThreadNotification.justCreated[uint8_t id]() {}
default async event void ThreadNotification.aboutToDestroy[uint8_t id]() {}