X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=sched.c;h=e58483e9385e5092c094ac0f2b30b06c905e6627;hb=6793399f34237840fbf48220971966bc9a3d5a18;hp=44e66c9b62664eb3add50d9924db6b311ea7e273;hpb=badcf6125a8e0b2845348aca46d288f141e4f509;p=paraslash.git diff --git a/sched.c b/sched.c index 44e66c9b..e58483e9 100644 --- a/sched.c +++ b/sched.c @@ -108,12 +108,12 @@ int schedule(struct sched *s) return -E_NOT_INITIALIZED; if (!s->select_function) s->select_function = para_select; - gettimeofday(now, NULL); again: FD_ZERO(&s->rfds); FD_ZERO(&s->wfds); s->timeout = s->default_timeout; s->max_fileno = -1; + gettimeofday(now, NULL); sched_preselect(s); if (list_empty(&pre_select_list) && list_empty(&post_select_list)) return 0; @@ -250,3 +250,33 @@ int kill_task(char *id) } return -E_NO_SUCH_TASK; } + +void sched_min_delay(struct sched *s) +{ + s->timeout.tv_sec = 0; + s->timeout.tv_usec = 1; +} + +void sched_request_timeout(struct timeval *timeout, struct sched *s) +{ + if (tv_diff(&s->timeout, timeout, NULL) > 0) + s->timeout = *timeout; +} + +void sched_request_timeout_ms(long unsigned ms, struct sched *s) +{ + struct timeval tv; + ms2tv(ms, &tv); + sched_request_timeout(&tv, s); +} + +void sched_request_barrier(struct timeval *barrier, struct sched *s) +{ + struct timeval diff; + + if (tv_diff(now, barrier, &diff) > 0) + return; + sched_request_timeout(&diff, s); +} + +