version 1.32, 2017/09/04 08:47:43
|
version 1.33, 2017/09/07 14:03:47
|
Line 1300 sched_hook_fetch(void *root, void *arg __unused)
|
Line 1300 sched_hook_fetch(void *root, void *arg __unused)
|
return task; |
return task; |
} |
} |
|
|
|
/* if present member of task, set NOWAIT */ |
|
if (!TAILQ_FIRST(&r->root_task)) { |
|
/* timer tasks */ |
#ifdef TIMER_WITHOUT_SORT |
#ifdef TIMER_WITHOUT_SORT |
clock_gettime(CLOCK_MONOTONIC, &now); | clock_gettime(CLOCK_MONOTONIC, &now); |
|
|
sched_timespecclear(&r->root_wait); | sched_timespecclear(&r->root_wait); |
TAILQ_FOREACH(task, &r->root_timer, task_node) { | TAILQ_FOREACH(task, &r->root_timer, task_node) { |
if (!sched_timespecisset(&r->root_wait)) | if (!sched_timespecisset(&r->root_wait)) |
r->root_wait = TASK_TS(task); | r->root_wait = TASK_TS(task); |
else if (sched_timespeccmp(&TASK_TS(task), &r->root_wait, -) < 0) | else if (sched_timespeccmp(&TASK_TS(task), &r->root_wait, -) < 0) |
r->root_wait = TASK_TS(task); | r->root_wait = TASK_TS(task); |
} | } |
|
|
if (TAILQ_FIRST(&r->root_timer)) { | if (TAILQ_FIRST(&r->root_timer)) { |
m = r->root_wait; | m = r->root_wait; |
sched_timespecsub(&m, &now, &mtmp); | sched_timespecsub(&m, &now, &mtmp); |
r->root_wait = mtmp; | r->root_wait = mtmp; |
} else { | } else { |
/* set wait INFTIM */ | /* set wait INFTIM */ |
sched_timespecinf(&r->root_wait); | sched_timespecinf(&r->root_wait); |
} | } |
#else /* ! TIMER_WITHOUT_SORT */ |
#else /* ! TIMER_WITHOUT_SORT */ |
if (!TAILQ_FIRST(&r->root_task) && (task = TAILQ_FIRST(&r->root_timer))) { | if ((task = TAILQ_FIRST(&r->root_timer))) { |
clock_gettime(CLOCK_MONOTONIC, &now); | clock_gettime(CLOCK_MONOTONIC, &now); |
|
|
m = TASK_TS(task); | m = TASK_TS(task); |
sched_timespecsub(&m, &now, &mtmp); | sched_timespecsub(&m, &now, &mtmp); |
r->root_wait = mtmp; | r->root_wait = mtmp; |
} else { | } else { |
/* set wait INFTIM */ | /* set wait INFTIM */ |
sched_timespecinf(&r->root_wait); | sched_timespecinf(&r->root_wait); |
} | } |
#endif /* TIMER_WITHOUT_SORT */ |
#endif /* TIMER_WITHOUT_SORT */ |
/* if present member of task, set NOWAIT */ | } else /* no waiting for event, because we have ready task */ |
if (TAILQ_FIRST(&r->root_task)) | |
sched_timespecclear(&r->root_wait); |
sched_timespecclear(&r->root_wait); |
|
|
if (r->root_wait.tv_sec != -1 && r->root_wait.tv_nsec != -1) { |
if (r->root_wait.tv_sec != -1 && r->root_wait.tv_nsec != -1) { |