-/*
- * Copyright (C) 2006-2014 Andre Noll <maan@systemlinux.org>
- *
- * Licensed under the GPL v2. For licencing details see COPYING.
- */
+/* Copyright (C) 2006 Andre Noll <maan@tuebingen.mpg.de>, see file COPYING. */
/** \file sched.h Sched and task structures and exported symbols from sched.c. */
* 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. */
/** 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;
};
* 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);
void sched_request_timeout_ms(long unsigned ms, struct sched *s);
int sched_request_barrier(struct timeval *barrier, struct sched *s);
int sched_request_barrier_or_min_delay(struct timeval *barrier, 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);
+}