X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=sched.c;h=14346ec0e1c411ab08da2ddbdc85073d6945615b;hp=6f3f1faf8dc29ab8934cd01dd340cc96bb806089;hb=6cfcbbc058624e76e2cbd503513c60aa2c8607dc;hpb=ce6b826b855d3760324a46d0687ddb4a110aa890 diff --git a/sched.c b/sched.c index 6f3f1faf..14346ec0 100644 --- a/sched.c +++ b/sched.c @@ -6,6 +6,7 @@ /** \file sched.c Paraslash's scheduling functions. */ +#include #include /* readdir() */ #include #include @@ -107,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; @@ -249,3 +250,22 @@ 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); +}