]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - sched.c
sched: Make struct task private to sched.c.
[paraslash.git] / sched.c
diff --git a/sched.c b/sched.c
index 1b83b704fb48599d7c44ba540bc90b90e040be9b..cad298b839b83a3f28e70912b1c85201ed589bd5 100644 (file)
--- a/sched.c
+++ b/sched.c
 #include "time.h"
 #include "error.h"
 
+struct task {
+       /** Copied from the task_info struct during task_register(). */
+       void (*pre_select)(struct sched *s, struct task *t);
+       /** Copied from the task_info struct during task_register(). */
+       int (*post_select)(struct sched *s, struct task *t);
+       /** Whether this task is active (>=0) or in error state (<0). */
+       int error;
+       /** Position of the task in the task list of the scheduler. */
+       struct list_head node;
+       /** The task name supplied when the task was registered(). */
+       char status[255];
+       /** If less than zero, the task was notified by another task. */
+       int notification;
+       /** True if task is in error state and exit status has been queried. */
+       bool dead;
+       /** Usually a pointer to the struct containing this task. */
+       void *context;
+};
+
 static struct timeval now_struct;
 struct timeval *now = &now_struct;
 
@@ -315,6 +334,25 @@ int task_get_notification(const struct task *t)
        return t->notification;
 }
 
+/**
+ * Return the status value of a task.
+ *
+ * \param t The task to get the status value from.
+ *
+ * \return Zero if task does not exist, one if task is running, negative error
+ * code if task has terminated.
+ */
+int task_status(const struct task *t)
+{
+       if (!t)
+               return 0;
+       if (t->dead)
+               return 0;
+       if (t->error >= 0)
+               return 1;
+       return t->error;
+}
+
 /**
  * Set the notification value of all tasks of a scheduler instance.
  *