X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=sched.h;h=ede5e67ea2ac042c5765a92e6100bc00ab47e103;hb=9055c71be97f1095dcdbd83da305b600f204f763;hp=77dc57488cf2ff103dc59d3b6988b7d1f809bee9;hpb=e3a7e12639c34fd86d48a072beb48add8c498d09;p=paraslash.git diff --git a/sched.h b/sched.h index 77dc5748..ede5e67e 100644 --- a/sched.h +++ b/sched.h @@ -9,24 +9,28 @@ * 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_monitor * function which is called from the scheduler main loop before it calls - * select(). Similarly, each task must define a post_monitor function which is - * called after the select call. + * poll(2). Similarly, each task must define a post_monitor function which is + * called after poll(2) returns. * * \sa select(2), poll(2). */ struct sched { /** Initial value (in milliseconds) before any pre_monitor call. */ int default_timeout; - /** The timeout (also in milliseconds) for the next select call. */ + /** The timeout (also in milliseconds) for the next iteration. */ int timeout; - /** fds that should be watched for readability. */ - fd_set rfds; - /** fds that should be watched for writability. */ - fd_set wfds; - /** 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 *, int timeout); + /** Passed to poll(2). */ + struct pollfd *pfd; + /** Number of elements in the above array, passed to poll(2). */ + unsigned pfd_array_len; + /** Number of fds registered for montitoring so far. */ + unsigned num_pfds; + /** Maps fds to indices of the pfd array. */ + unsigned *pidx; + /** Mumber of elements in the above pidx array. */ + unsigned pidx_array_len; + /** If non-NULL, use this function instead of \ref xpoll(). */ + int (*poll_function)(struct pollfd *fds, nfds_t nfds, int timeout); /** Tasks which have been registered to the scheduler. */ struct list_head task_list; }; @@ -93,13 +97,5 @@ int sched_request_barrier(struct timeval *barrier, struct sched *s); int sched_request_barrier_or_min_delay(struct timeval *barrier, struct sched *s); void sched_monitor_readfd(int fd, struct sched *s); void sched_monitor_writefd(int fd, struct sched *s); - -static inline bool sched_read_ok(int fd, const struct sched *s) -{ - return FD_ISSET(fd, &s->rfds); -} - -static inline bool sched_write_ok(int fd, const struct sched *s) -{ - return FD_ISSET(fd, &s->wfds); -} +bool sched_read_ok(int fd, const struct sched *s); +bool sched_write_ok(int fd, const struct sched *s);