--- libaitsched/src/aitsched.c 2012/04/26 08:03:27 1.6.2.2 +++ libaitsched/src/aitsched.c 2012/04/26 08:15:22 1.6.2.3 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitsched.c,v 1.6.2.2 2012/04/26 08:03:27 misho Exp $ +* $Id: aitsched.c,v 1.6.2.3 2012/04/26 08:15:22 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -471,7 +471,7 @@ schedCancelby(sched_root_task_t * __restrict root, sch * return: -1 error or 0 ok */ int -schedRun(sched_root_task_t * __restrict root, volatile intptr_t * __restrict killState) +schedRun(sched_root_task_t *root, volatile intptr_t * __restrict killState) { sched_task_t *task; @@ -481,23 +481,27 @@ schedRun(sched_root_task_t * __restrict root, volatile if (root->root_hooks.hook_exec.run) if (root->root_hooks.hook_exec.run(root, NULL)) return -1; - if (root->root_hooks.hook_exec.fetch) { - if (killState) { - if (root->root_hooks.hook_exec.condition) - while (root && root->root_hooks.hook_exec.condition(root, (void*) killState)) { - if ((task = root->root_hooks.hook_exec.fetch(root, NULL))) - schedCall(task); - } - else - while (!*killState && root) { - if ((task = root->root_hooks.hook_exec.fetch(root, NULL))) - schedCall(task); - } - } else - while (root) + + if (killState) { + if (root->root_hooks.hook_exec.condition) + /* condition scheduler loop */ + while (root && root->root_hooks.hook_exec.fetch && + root->root_hooks.hook_exec.condition && + root->root_hooks.hook_exec.condition(root, (void*) killState)) { if ((task = root->root_hooks.hook_exec.fetch(root, NULL))) schedCall(task); - } + } + else + /* trigger scheduler loop */ + while (!*killState && root && root->root_hooks.hook_exec.fetch) { + if ((task = root->root_hooks.hook_exec.fetch(root, NULL))) + schedCall(task); + } + } else + /* infinite scheduler loop */ + while (root && root->root_hooks.hook_exec.fetch) + if ((task = root->root_hooks.hook_exec.fetch(root, NULL))) + schedCall(task); return 0; }