return(ret_val);
}
+
+int sched_task_resume(task_t *t)
+{
+ int ret_val;
+
+ /*
+ * Make sure the task is currently in the TASK_STATE_WAITING state.
+ * If it is, change its state to TASK_STATE_READY.
+ */
+ task_lock(t);
+
+ if(t->t_state == TASK_STATE_WAITING) {
+ t->t_state = TASK_STATE_READY;
+ ret_val = 0;
+ } else {
+ ret_val = -EBUSY;
+ }
+
+ task_unlock(t);
+
+ /* if the task was waiting, remove it from the waitq and add it to the readyq */
+ if(!ret_val) {
+ ret_val = _unq(&_waitq, t);
+
+ if(ret_val >= 0) {
+ _nq(&_readyq, t);
+ }
+ }
+
+ return(ret_val);
+}
int sched_dequeue(task_t*);
int sched_signal(pid_t);
int sched_task_suspend(task_t*);
+int sched_task_resume(task_t*);
#endif /* __CORE_SCHED_H */