X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=sched.c;h=4e989d34109a0d1f904b01928c3285e773d9aa8f;hp=b0e9ce12f221e901d761108899d98190ccf984d6;hb=64a9cf5877ab9ecf6410596d657914f26830d3f7;hpb=a365b8263a0d7a1673699bdf454677c95b38eb95 diff --git a/sched.c b/sched.c index b0e9ce12..4e989d34 100644 --- a/sched.c +++ b/sched.c @@ -38,21 +38,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) @@ -94,8 +93,7 @@ static void sched_post_select(struct sched *s) struct task *t, *tmp; list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node) { - if (t->error >= 0) - call_post_select(s, t); + call_post_select(s, t); // PARA_INFO_LOG("%s: %d\n", t->status, t->ret); if (t->error >= 0) continue; @@ -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. *