/** \file sched.c Paraslash's scheduling functions. */
+#include <regex.h>
#include <dirent.h> /* readdir() */
#include <assert.h>
#include <sys/time.h>
if (t->post_select)
list_del(&t->post_select_node);
t->error = -E_TASK_UNREGISTERED;
-};
+}
static void sched_preselect(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;
INIT_LIST_HEAD(&pre_select_list);
INIT_LIST_HEAD(&post_select_list);
initialized = 1;
-};
+}
/**
* Add a task to the scheduler.
list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node)
unregister_task(t);
initialized = 0;
-};
+}
/**
* Get the list of all registered tasks.
}
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);
+}