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)
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);
}
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;
}
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) {
*/
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;
}
/**
/** 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 *);
};
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);
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()) {
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)
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)