X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=sched.c;h=8baed4962d9e5dfbf2cad170b1c38d2d42b123b3;hp=b0e9ce12f221e901d761108899d98190ccf984d6;hb=32d355e7c8bb9ed3497faf0ddd41755196d039b8;hpb=a365b8263a0d7a1673699bdf454677c95b38eb95 diff --git a/sched.c b/sched.c index b0e9ce12..8baed496 100644 --- a/sched.c +++ b/sched.c @@ -7,7 +7,6 @@ /** \file sched.c Paraslash's scheduling functions. */ #include -#include /* readdir() */ #include #include @@ -38,21 +37,20 @@ static void unregister_task(struct task *t) { 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; list_for_each_entry_safe(t, tmp, &pre_select_list, pre_select_node) { - if (t->error >= 0 && t->pre_select) + if (t->pre_select) t->pre_select(s, t); // PARA_INFO_LOG("%s \n", t->status); if (t->error >= 0) @@ -207,10 +205,14 @@ void sched_shutdown(void) 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; } @@ -219,8 +221,7 @@ void sched_shutdown(void) * * \return The task list. * - * Each entry of the list contains an identifier which is simply a hex number - * that may be used in \a kill_task() to terminate the task. + * Each entry of the list contains an identifier which is simply a hex number. * The result is dynamically allocated and must be freed by the caller. */ char *get_task_list(void) @@ -248,41 +249,6 @@ char *get_task_list(void) return msg; } -/** - * Simulate an error for the given task. - * - * \param id The task identifier. - * - * Find the task identified by \a id, set the tasks' error value to - * \p -E_TASK_KILLED and unregister the task. - * - * \return Positive on success, negative on errors (e.g. if \a id does not - * correspond to a registered task). - */ -int kill_task(char *id) -{ - struct task *t, *tmp; - char buf[20]; - - if (!initialized) - return -E_NOT_INITIALIZED; - list_for_each_entry_safe(t, tmp, &pre_select_list, pre_select_node) { - sprintf(buf, "%p", t); - if (strcmp(id, buf)) - continue; - t->error = -E_TASK_KILLED; - return 1; - } - list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node) { - sprintf(buf, "%p", t); - if (strcmp(id, buf)) - continue; - t->error = -E_TASK_KILLED; - return 1; - } - return -E_NO_SUCH_TASK; -} - /** * Set the select timeout to the minimal possible value. *