#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;
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.
*