X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;ds=sidebyside;f=sched.h;h=c706b5093fba47f3173cc183daa07f0b77120a48;hb=00cedf20a69178ac3ec3e43035a2d54868f1bc6d;hp=f15e4efb666738d5f12da542e3ae10c3d774132e;hpb=f76ab46a9216133332cb7e17d38d392caeca22cb;p=paraslash.git diff --git a/sched.h b/sched.h index f15e4efb..c706b509 100644 --- a/sched.h +++ b/sched.h @@ -10,11 +10,11 @@ /** * Paraslash's scheduler. * - * Designed with KISS in mind. It manages two lists of tasks. The pre_select - * list contains pointers to functions that are called before calling select() - * from the main loop. Similarly, \a post_select_list is a list of function - * pointers each of which is called after the select call. Tasks add hooks to - * these lists by registering themselves to the scheduler. + * Designed with KISS in mind. It maintains a list of task structures which is + * extended when a new task is registered. Each task may define a pre_select + * function which is called from the scheduler main loop before it calls + * select(). Similarly, each task must define a post_select function which is + * called after the select call. */ struct sched { /** Initial value before any pre_select call. */ @@ -29,10 +29,8 @@ struct sched { int max_fileno; /** If non-NULL, use this function instead of para_select. */ int (*select_function)(int, fd_set *, fd_set *, struct timeval *); - /** Currently active pre_select functions. */ - struct list_head pre_select_list; - /** Currently active post_select functions. */ - struct list_head post_select_list; + /** Tasks which have been registered to the scheduler. */ + struct list_head task_list; }; /** @@ -45,26 +43,24 @@ struct sched { */ struct task { /** - * The pre select hook of \a t. + * The optional pre select hook of \a t. * * 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); /** - * The post select hook of \a t. + * The mandatory post select hook of \a t. * * Its purpose is to evaluate and act upon the results of the previous * select call. If this function returns a negative value, the * scheduler unregisters the task. */ int (*post_select)(struct sched *s, struct task *t); - /** Whether this task is in error state. */ + /** Whether this task is active (>=0) or in error state (<0). */ int error; - /** Position of the task in the pre_select list of the scheduler. */ - struct list_head pre_select_node; - /** Position of the task in the post_select list of the scheduler. */ - struct list_head post_select_node; + /** Position of the task in the task list of the scheduler. */ + struct list_head node; /** Descriptive text and current status of the task. */ char status[255]; /** If less than zero, the task was notified by another task. */