/*
- * Copyright (C) 2006-2014 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006 Andre Noll <maan@tuebingen.mpg.de>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
struct list_head task_list;
};
-/**
- * Paraslash's task structure.
- *
- * This is considered an internal structure and will eventually be made private.
- *
- * \sa \ref sched.
- */
-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;
-};
+struct task;
/** Information that must be supplied by callers of \ref task_register(). */
struct task_info {
* Its purpose is to add file descriptors to the fd sets of the
* scheduler and to decrease the select timeout if necessary.
*/
- void (*pre_select)(struct sched *s, struct task *t);
+ void (*pre_select)(struct sched *s, void *context);
/**
* The mandatory post select method.
*
* select call. If this function returns a negative value, the
* scheduler unregisters the task.
*/
- int (*post_select)(struct sched *s, struct task *t);
+ int (*post_select)(struct sched *s, void *context);
/**
- * This pointer is saved when the task is register(ed). It may be
- * queried from ->pre_select() and ->post_select() via \ref
- * task_context(). Usually this is a pointer to the struct owned by the
- * caller which contains the task pointer as one member.
+ * This pointer is saved when the task is registered. It is passed to
+ * ->pre_select() and ->post_select(). Usually this is a pointer to the
+ * struct owned by the caller which contains the task pointer.
*/
void *context;
};
* scheduler are allowed to block, this value should be accurate enough so that
* there is no need to call clock_gettime() directly.
*/
-extern struct timeval *now;
+extern const struct timeval *now;
struct task *task_register(struct task_info *info, struct sched *s);
-void *task_context(struct task *t);
int schedule(struct sched *s);
void sched_shutdown(struct sched *s);
char *get_task_list(struct sched *s);