From 7ff087268774d4bb7838a8575d2d9471ab52a27d Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 1 Aug 2010 19:56:10 +0200 Subject: [PATCH] sched: Use built-in instead of open-coded timeout helpers. In many places, sched_min_delay() or sched_request_timeout() are open-coded. Use the corresponding helpers from sched.c instead and rename the "timeout" parameter of sched_request_timeout() to avoid warnings on old gcc versions. --- alsa_write.c | 3 +-- grab_client.c | 7 ++----- recv_common.c | 6 ++---- sched.c | 19 ++++++++++--------- sched.h | 6 +++--- vss.c | 6 +++--- wav_filter.c | 3 +-- 7 files changed, 22 insertions(+), 28 deletions(-) diff --git a/alsa_write.c b/alsa_write.c index d115a52d..bcabe53c 100644 --- a/alsa_write.c +++ b/alsa_write.c @@ -183,8 +183,7 @@ static void alsa_write_pre_select(struct sched *s, struct task *t) underrun = 50; underrun -= 50; ms2tv(underrun, &tv); - if (tv_diff(&s->timeout, &tv, NULL) > 0) - s->timeout = tv; + sched_request_timeout(&tv, s); } static void alsa_close(struct writer_node *wn) diff --git a/grab_client.c b/grab_client.c index 5971f115..b61981f2 100644 --- a/grab_client.c +++ b/grab_client.c @@ -101,11 +101,8 @@ static void gc_pre_select(struct sched *s, struct task *t) if (ret == 0) return; - if (ret < 0) { - s->timeout.tv_sec = 0; - s->timeout.tv_usec = 0; - return; - } + if (ret < 0) + sched_min_delay(s); para_fd_set(gc->fd, &s->wfds, &s->max_fileno); } diff --git a/recv_common.c b/recv_common.c index 6f3fc575..6517948d 100644 --- a/recv_common.c +++ b/recv_common.c @@ -129,9 +129,7 @@ int generic_recv_pre_select(struct sched *s, struct task *t) int ret = btr_node_status(rn->btrn, 0, BTR_NT_ROOT); t->error = 0; - if (ret < 0) { - s->timeout.tv_sec = 0; - s->timeout.tv_usec = 1; - } + if (ret < 0) + sched_min_delay(s); return ret; } diff --git a/sched.c b/sched.c index cdc5b658..6da5fa23 100644 --- a/sched.c +++ b/sched.c @@ -132,13 +132,14 @@ int schedule(struct sched *s) again: FD_ZERO(&s->rfds); FD_ZERO(&s->wfds); - s->timeout = s->default_timeout; + s->select_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; - ret = s->select_function(s->max_fileno + 1, &s->rfds, &s->wfds, &s->timeout); + ret = s->select_function(s->max_fileno + 1, &s->rfds, &s->wfds, + &s->select_timeout); if (ret < 0) return ret; if (ret == 0) { @@ -291,26 +292,26 @@ int kill_task(char *id) */ void sched_min_delay(struct sched *s) { - s->timeout.tv_sec = 0; - s->timeout.tv_usec = 1; + s->select_timeout.tv_sec = 0; + s->select_timeout.tv_usec = 1; } /** * Impose an upper bound for the timeout of the next select() call. * - * \param timeout Maximal allowed timeout. + * \param to Maximal allowed timeout. * \param s Pointer to the scheduler struct. * - * If the current scheduler timeout is already smaller than \a timeout, this + * If the current scheduler timeout is already smaller than \a to, this * function does nothing. Otherwise the timeout for the next select() call is * set to the given value. * * \sa sched_request_timeout_ms(). */ -void sched_request_timeout(struct timeval *timeout, struct sched *s) +void sched_request_timeout(struct timeval *to, struct sched *s) { - if (tv_diff(&s->timeout, timeout, NULL) > 0) - s->timeout = *timeout; + if (tv_diff(&s->select_timeout, to, NULL) > 0) + s->select_timeout = *to; } /** diff --git a/sched.h b/sched.h index 7681567b..1da5a220 100644 --- a/sched.h +++ b/sched.h @@ -20,14 +20,14 @@ struct sched { /** Initial value before any pre_select call. */ struct timeval default_timeout; /** The current timeout for the upcoming select call. */ - struct timeval timeout; + struct timeval select_timeout; /** fds that should be watched for readability. */ fd_set rfds; /** fds that should be watched for writability. */ fd_set wfds; /** Highest numbered file descriptor in any of the above fd sets. */ int max_fileno; - /** In non-NULL, use this function instead of para_select. */ + /** If non-NULL, use this function instead of para_select. */ int (*select_function)(int, fd_set *, fd_set *, struct timeval *); }; @@ -80,7 +80,7 @@ char *get_task_list(void); int kill_task(char *id); void sched_shutdown(void); void sched_min_delay(struct sched *s); -void sched_request_timeout(struct timeval *timeout, struct sched *s); +void sched_request_timeout(struct timeval *to, struct sched *s); void sched_request_timeout_ms(long unsigned ms, struct sched *s); void sched_request_barrier(struct timeval *barrier, struct sched *s); void sched_request_barrier_or_min_delay(struct timeval *barrier, struct sched *s); diff --git a/vss.c b/vss.c index e26e8c83..b4706588 100644 --- a/vss.c +++ b/vss.c @@ -678,7 +678,7 @@ static void set_mmd_offset(void) static void vss_pre_select(struct sched *s, struct task *t) { int i; - struct timeval *tv, diff; + struct timeval *tv; struct vss_task *vsst = container_of(t, struct vss_task, task); if (!vsst->map || vss_next() || vss_paused() || vss_repos()) { @@ -719,8 +719,8 @@ static void vss_pre_select(struct sched *s, struct task *t) senders[i].pre_select(&s->max_fileno, &s->rfds, &s->wfds); } tv = vss_compute_timeout(vsst); - if (tv && tv_diff(tv, &s->timeout, &diff) < 0) - s->timeout = *tv; + if (tv) + sched_request_timeout(tv, s); } static int recv_afs_msg(int afs_socket, int *fd, uint32_t *code, uint32_t *data) diff --git a/wav_filter.c b/wav_filter.c index 63c7b7eb..b28b1d3c 100644 --- a/wav_filter.c +++ b/wav_filter.c @@ -72,8 +72,7 @@ static void wav_pre_select(struct sched *s, struct task *t) t->error = 0; if (iqs == 0) return; - s->timeout.tv_sec = 0; - s->timeout.tv_usec = 1; + sched_min_delay(s); } static void wav_post_select(__a_unused struct sched *s, struct task *t) -- 2.39.2