unregister_task(): Set error status to E_TASK_UNREGISTERED
[paraslash.git] / sched.c
diff --git a/sched.c b/sched.c
index 5d4901d..b9d6428 100644 (file)
--- a/sched.c
+++ b/sched.c
@@ -41,8 +41,7 @@ void unregister_task(struct task *t)
                list_del(&t->pre_select_node);
        if (t->post_select)
                list_del(&t->post_select_node);
-       if (t->error >= 0)
-               t->error = -E_TASK_KILLED;
+       t->error = -E_TASK_UNREGISTERED;
 };
 
 
@@ -50,7 +49,8 @@ static void sched_preselect(struct sched *s)
 {
        struct task *t, *tmp;
        list_for_each_entry_safe(t, tmp, &pre_select_list, pre_select_node) {
-               t->pre_select(s, t);
+               if (t->error >= 0)
+                       t->pre_select(s, t);
 //             PARA_INFO_LOG("%s \n", t->status);
                if (t->error >= 0)
                        continue;
@@ -71,7 +71,8 @@ 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) {
-               t->post_select(s, t);
+               if (t->error >= 0)
+                       t->post_select(s, t);
 //             PARA_INFO_LOG("%s: %d\n", t->status, t->ret);
                if (t->error >= 0)
                        continue;
@@ -172,7 +173,6 @@ void sched_shutdown(void)
                return;
        list_for_each_entry_safe(t, tmp, &pre_select_list, pre_select_node)
                unregister_task(t);
-       /* remove tasks which do not have a pre_select hook */
        list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node)
                unregister_task(t);
        initialized = 0;
@@ -235,7 +235,6 @@ int kill_task(char *id)
                if (strcmp(id, buf))
                        continue;
                t->error = -E_TASK_KILLED;
-               unregister_task(t);
                return 1;
        }
        list_for_each_entry_safe(t, tmp, &post_select_list, post_select_node) {
@@ -243,7 +242,6 @@ int kill_task(char *id)
                if (strcmp(id, buf))
                        continue;
                t->error = -E_TASK_KILLED;
-               unregister_task(t);
                return 1;
        }
        return -E_NO_SUCH_TASK;