--- libaitsched/src/aitsched.c 2011/09/09 14:14:33 1.1.1.1.2.5 +++ libaitsched/src/aitsched.c 2011/09/09 14:46:25 1.1.1.1.2.6 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitsched.c,v 1.1.1.1.2.5 2011/09/09 14:14:33 misho Exp $ +* $Id: aitsched.c,v 1.1.1.1.2.6 2011/09/09 14:46:25 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -362,10 +362,11 @@ schedCancelby(sched_root_task_t * __restrict root, sch /* * schedRun() - Scheduler *run loop* * @root = root task + * @killState = kill condition variable, if !=0 stop scheduler loop * return: -1 error or 0 ok */ int -schedRun(sched_root_task_t * __restrict root) +schedRun(sched_root_task_t * __restrict root, volatile intptr_t * __restrict killState) { sched_task_t *task; @@ -375,9 +376,14 @@ schedRun(sched_root_task_t * __restrict root) 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) - while ((task = root->root_hooks.hook_exec.fetch(root, NULL))) - schedCall(task); + if (root->root_hooks.hook_exec.fetch) { + if (killState) + while (!*killState && (task = root->root_hooks.hook_exec.fetch(root, NULL))) + schedCall(task); + else + while ((task = root->root_hooks.hook_exec.fetch(root, NULL))) + schedCall(task); + } return 0; }