X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=sched.c;h=66a17418027a5e9fa2d92bee412cf682561115b9;hp=ca365f17e911d13a49688196ecfd1bcfab5d0363;hb=a7a72ca4acf7f44abca866d410e2bc80590e7fab;hpb=d49cd9a91015766cb19d7d43bb04048265925fe5 diff --git a/sched.c b/sched.c index ca365f17..66a17418 100644 --- a/sched.c +++ b/sched.c @@ -159,6 +159,9 @@ again: FD_ZERO(&s->wfds); } gettimeofday(now, NULL); + } else { + FD_ZERO(&s->rfds); + FD_ZERO(&s->wfds); } sched_post_select(s); if (list_empty(&pre_select_list) && list_empty(&post_select_list)) @@ -311,17 +314,19 @@ void sched_request_timeout_ms(long unsigned ms, struct sched *s) * \param barrier Absolute time before select() should return. * \param s Pointer to the scheduler struct. * - * If \a barrier is in the past, this function does nothing. + * \return If \a barrier is in the past, this function does nothing and returns + * zero. Otherwise it returns one. * * \sa sched_request_barrier_or_min_delay(). */ -void sched_request_barrier(struct timeval *barrier, struct sched *s) +int sched_request_barrier(struct timeval *barrier, struct sched *s) { struct timeval diff; if (tv_diff(now, barrier, &diff) > 0) - return; + return 0; sched_request_timeout(&diff, s); + return 1; } /** @@ -330,15 +335,19 @@ void sched_request_barrier(struct timeval *barrier, struct sched *s) * \param barrier Absolute time before select() should return. * \param s Pointer to the scheduler struct. * - * If \a barrier is in the past, this function requests a minimal timeout. + * \return If \a barrier is in the past, this function requests a minimal + * timeout and returns zero. Otherwise it returns one. * * \sa sched_min_delay(), sched_request_barrier(). */ -void sched_request_barrier_or_min_delay(struct timeval *barrier, struct sched *s) +int sched_request_barrier_or_min_delay(struct timeval *barrier, struct sched *s) { struct timeval diff; - if (tv_diff(now, barrier, &diff) > 0) - return sched_min_delay(s); + if (tv_diff(now, barrier, &diff) > 0) { + sched_min_delay(s); + return 0; + } sched_request_timeout(&diff, s); + return 1; }