/*
- * Copyright (C) 2006-2010 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2011 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
{
if (!initialized)
return;
+ assert(t->error < 0);
PARA_INFO_LOG("unregistering %s (%s)\n", t->status,
- t->error <0? para_strerror(-t->error) : "shutdown");
+ para_strerror(-t->error));
if (t->pre_select)
list_del(&t->pre_select_node);
if (t->post_select)
list_del(&t->post_select_node);
- t->error = -E_TASK_UNREGISTERED;
}
-
static void sched_preselect(struct sched *s)
{
struct task *t, *tmp;
}
}
-#define SCHED_DEBUG 0
+//#define SCHED_DEBUG 1
static inline void call_post_select(struct sched *s, struct task *t)
{
#ifndef SCHED_DEBUG
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) {
if (!initialized)
return;
- list_for_each_entry_safe(t, tmp, &pre_select_list, pre_select_node)
+ list_for_each_entry_safe(t, tmp, &pre_select_list, pre_select_node) {
+ t->error = -E_SCHED_SHUTDOWN;
unregister_task(t);
- list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node)
+ }
+ list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node) {
+ t->error = -E_SCHED_SHUTDOWN;
unregister_task(t);
+ }
initialized = 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;
}
/**