--- libaitsched/src/hooks.c 2017/09/04 08:47:43 1.32 +++ libaitsched/src/hooks.c 2017/09/07 14:03:47 1.33 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: hooks.c,v 1.32 2017/09/04 08:47:43 misho Exp $ +* $Id: hooks.c,v 1.33 2017/09/07 14:03:47 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -1300,39 +1300,41 @@ sched_hook_fetch(void *root, void *arg __unused) return task; } + /* if present member of task, set NOWAIT */ + if (!TAILQ_FIRST(&r->root_task)) { + /* timer tasks */ #ifdef TIMER_WITHOUT_SORT - clock_gettime(CLOCK_MONOTONIC, &now); + clock_gettime(CLOCK_MONOTONIC, &now); - sched_timespecclear(&r->root_wait); - TAILQ_FOREACH(task, &r->root_timer, task_node) { - if (!sched_timespecisset(&r->root_wait)) - r->root_wait = TASK_TS(task); - else if (sched_timespeccmp(&TASK_TS(task), &r->root_wait, -) < 0) - r->root_wait = TASK_TS(task); - } + sched_timespecclear(&r->root_wait); + TAILQ_FOREACH(task, &r->root_timer, task_node) { + if (!sched_timespecisset(&r->root_wait)) + r->root_wait = TASK_TS(task); + else if (sched_timespeccmp(&TASK_TS(task), &r->root_wait, -) < 0) + r->root_wait = TASK_TS(task); + } - if (TAILQ_FIRST(&r->root_timer)) { - m = r->root_wait; - sched_timespecsub(&m, &now, &mtmp); - r->root_wait = mtmp; - } else { - /* set wait INFTIM */ - sched_timespecinf(&r->root_wait); - } + if (TAILQ_FIRST(&r->root_timer)) { + m = r->root_wait; + sched_timespecsub(&m, &now, &mtmp); + r->root_wait = mtmp; + } else { + /* set wait INFTIM */ + sched_timespecinf(&r->root_wait); + } #else /* ! TIMER_WITHOUT_SORT */ - if (!TAILQ_FIRST(&r->root_task) && (task = TAILQ_FIRST(&r->root_timer))) { - clock_gettime(CLOCK_MONOTONIC, &now); + if ((task = TAILQ_FIRST(&r->root_timer))) { + clock_gettime(CLOCK_MONOTONIC, &now); - m = TASK_TS(task); - sched_timespecsub(&m, &now, &mtmp); - r->root_wait = mtmp; - } else { - /* set wait INFTIM */ - sched_timespecinf(&r->root_wait); - } + m = TASK_TS(task); + sched_timespecsub(&m, &now, &mtmp); + r->root_wait = mtmp; + } else { + /* set wait INFTIM */ + sched_timespecinf(&r->root_wait); + } #endif /* TIMER_WITHOUT_SORT */ - /* if present member of task, set NOWAIT */ - if (TAILQ_FIRST(&r->root_task)) + } else /* no waiting for event, because we have ready task */ sched_timespecclear(&r->root_wait); if (r->root_wait.tv_sec != -1 && r->root_wait.tv_nsec != -1) {