X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=sched.h;h=4695da05040d1934e0c23a12db9bb14c7e9f799c;hb=5f04eea3b1c9a41417ed63e5348b2aabca5542fa;hp=db6ee7dc3a21a6a87037a3bad331d4ae081e271a;hpb=5254df7e470dc49a29f91fa8185b98c40246f5ea;p=paraslash.git diff --git a/sched.h b/sched.h index db6ee7dc..4695da05 100644 --- a/sched.h +++ b/sched.h @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2006-2014 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2006 Andre Noll , see file COPYING. */ /** \file sched.h Sched and task structures and exported symbols from sched.c. */ @@ -17,10 +13,10 @@ * called after the select call. */ struct sched { - /** Initial value before any pre_select call. */ - struct timeval default_timeout; - /** The current timeout for the upcoming select call. */ - struct timeval select_timeout; + /** Initial value (in milliseconds) before any pre_select call. */ + int default_timeout; + /** The timeout (also in milliseconds) for the next select call. */ + int timeout; /** fds that should be watched for readability. */ fd_set rfds; /** fds that should be watched for writability. */ @@ -28,36 +24,12 @@ struct sched { /** Highest numbered file descriptor in any of the above fd sets. */ int max_fileno; /** If non-NULL, use this function instead of para_select. */ - int (*select_function)(int, fd_set *, fd_set *, struct timeval *); + int (*select_function)(int, fd_set *, fd_set *, int timeout); /** Tasks which have been registered to the scheduler. */ 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 { @@ -69,7 +41,7 @@ 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. * @@ -77,12 +49,11 @@ struct task_info { * 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; }; @@ -93,16 +64,16 @@ struct task_info { * 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); void task_notify(struct task *t, int err); void task_notify_all(struct sched *s, int err); int task_get_notification(const struct task *t); +int task_status(const struct task *t); int task_reap(struct task **tptr); void sched_min_delay(struct sched *s); void sched_request_timeout(struct timeval *to, struct sched *s);