]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - sched.c
sched: Replace sched_shutdown() by task_notify_all().
[paraslash.git] / sched.c
diff --git a/sched.c b/sched.c
index e67579b32339c17101bbe2e3cedc45c9410cc7bc..ae82b23338284d9278c1fffd90c93460b65bd6da 100644 (file)
--- a/sched.c
+++ b/sched.c
@@ -98,14 +98,6 @@ static void sched_post_select(struct sched *s)
                t->notification = 0;
                if (t->error >= 0)
                        continue;
-               /*
-                * We have to check whether the list is empty because the call
-                * to ->post_select() might have called sched_shutdown(). In
-                * this case t has been unregistered already, so we must not
-                * unregister it again.
-                */
-               if (list_empty(&s->post_select_list))
-                       return;
                unregister_task(t);
        }
 }
@@ -195,29 +187,6 @@ void register_task(struct sched *s, struct task *t)
        }
 }
 
-/**
- * Unregister all tasks.
- *
- * \param s The scheduler instance to shut down.
- *
- * This will cause \a schedule() to return immediately because both the
- * \a pre_select_list and the \a post_select_list are empty. This function
- * must be called from the post_select (rather than the pre_select) method.
- */
-void sched_shutdown(struct sched *s)
-{
-       struct task *t, *tmp;
-
-       list_for_each_entry_safe(t, tmp, &s->pre_select_list, pre_select_node) {
-               t->error = -E_SCHED_SHUTDOWN;
-               unregister_task(t);
-       }
-       list_for_each_entry_safe(t, tmp, &s->post_select_list, post_select_node) {
-               t->error = -E_SCHED_SHUTDOWN;
-               unregister_task(t);
-       }
-}
-
 /**
  * Get the list of all registered tasks.
  *
@@ -295,6 +264,25 @@ int task_get_notification(struct task *t)
        return t->notification;
 }
 
+/**
+ * Set the notification value of all tasks of a scheduler instance.
+ *
+ * \param s The scheduler instance whose tasks should be notified.
+ * \param err A positive error code.
+ *
+ * This simply iterates over all existing tasks of \a s and sets each
+ * task's notification value to \p -err.
+ */
+void task_notify_all(struct sched *s, int err)
+{
+       struct task *t;
+
+       list_for_each_entry(t, &s->pre_select_list, pre_select_node)
+               task_notify(t, err);
+       list_for_each_entry(t, &s->post_select_list, post_select_node)
+               task_notify(t, err);
+}
+
 /**
  * Set the select timeout to the minimal possible value.
  *