--- libaitsched/inc/aitsched.h 2012/08/21 11:45:34 1.14.2.2 +++ libaitsched/inc/aitsched.h 2012/08/21 12:50:08 1.14.2.3 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitsched.h,v 1.14.2.2 2012/08/21 11:45:34 misho Exp $ +* $Id: aitsched.h,v 1.14.2.3 2012/08/21 12:50:08 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -269,6 +269,20 @@ int schedEnd(sched_root_task_t ** __restrict root); */ int schedRegisterHooks(sched_root_task_t * __restrict root); /* + * sched_useTask() - Get and init new task + * + * @root = root task + * return: NULL error or !=NULL prepared task + */ +inline sched_task_t *sched_useTask(sched_root_task_t * __restrict root); +/* + * sched_unuseTask() - Unlock and put task to unuse queue + * + * @task = task + * return: always is NULL + */ +inline sched_task_t *sched_unuseTask(sched_task_t * __restrict task); +/* * schedPolling() - Polling timeout period if no timer task is present * * @root = root task @@ -644,9 +658,10 @@ sched_task_t *schedThread(sched_root_task_t * __restri TASK_ROOT(t)->root_hooks.hook_exec.exit((t), \ (void*) (x)); \ TASK_ROOT(t)->root_ret = (void*) (x); \ - if (TASK_TYPE(t) == taskTHREAD) \ + if (TASK_TYPE(t) == taskTHREAD) { \ + sched_unuseTask(t); \ pthread_exit((void*) (x)); \ - else \ + } else \ return ((void*) (x)); \ } while (0)