diff options
author | Jeremy Kerr <jk@ozlabs.org> | 2013-04-10 12:19:13 +1000 |
---|---|---|
committer | Geoff Levand <geoff@infradead.org> | 2013-04-10 10:49:20 -0700 |
commit | 37428306a270088bfcb1f94362a0fe5b7a5a888e (patch) | |
tree | 5d1aeca3eca44b68a8f8939e3bea44709a953aa9 /discover | |
parent | ee86a0bd989511319adf3467b41b5b2e1f486aa6 (diff) | |
download | talos-petitboot-37428306a270088bfcb1f94362a0fe5b7a5a888e.tar.gz talos-petitboot-37428306a270088bfcb1f94362a0fe5b7a5a888e.zip |
waiter: Don't rely on global variables to keep waiter state
Rather than defining the set of waiters (and pollfds) in waiter.c, add a
struct waitset to contain these. A waitset is created with
waitset_create, which is passed to the waiter_* functions.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Geoff Levand <geoff@infradead.org>
Diffstat (limited to 'discover')
-rw-r--r-- | discover/discover-server.c | 8 | ||||
-rw-r--r-- | discover/discover-server.h | 4 | ||||
-rw-r--r-- | discover/pb-discover.c | 12 | ||||
-rw-r--r-- | discover/udev.c | 4 | ||||
-rw-r--r-- | discover/udev.h | 3 | ||||
-rw-r--r-- | discover/user-event.c | 5 | ||||
-rw-r--r-- | discover/user-event.h | 4 |
7 files changed, 26 insertions, 14 deletions
diff --git a/discover/discover-server.c b/discover/discover-server.c index f4e96c0..21e15da 100644 --- a/discover/discover-server.c +++ b/discover/discover-server.c @@ -22,6 +22,7 @@ struct discover_server { int socket; + struct waitset *waitset; struct waiter *waiter; struct list clients; struct device_handler *device_handler; @@ -184,7 +185,7 @@ void discover_server_set_device_source(struct discover_server *server, server->device_handler = handler; } -struct discover_server *discover_server_init(void) +struct discover_server *discover_server_init(struct waitset *waitset) { struct discover_server *server; struct sockaddr_un addr; @@ -194,6 +195,7 @@ struct discover_server *discover_server_init(void) return NULL; server->waiter = NULL; + server->waitset = waitset; list_init(&server->clients); unlink(PB_SOCKET_PATH); @@ -219,8 +221,8 @@ struct discover_server *discover_server_init(void) goto out_err; } - server->waiter = waiter_register(server->socket, WAIT_IN, - discover_server_process, server); + server->waiter = waiter_register(server->waitset, server->socket, + WAIT_IN, discover_server_process, server); return server; diff --git a/discover/discover-server.h b/discover/discover-server.h index 7c89938..6650bba 100644 --- a/discover/discover-server.h +++ b/discover/discover-server.h @@ -1,11 +1,13 @@ #ifndef _DISCOVER_SERVER_H #define _DISCOVER_SERVER_H +#include <waiter/waiter.h> + struct discover_server; struct device_handler; struct device; -struct discover_server *discover_server_init(void); +struct discover_server *discover_server_init(struct waitset *waitset); void discover_server_destroy(struct discover_server *server); diff --git a/discover/pb-discover.c b/discover/pb-discover.c index aac50df..536f6e6 100644 --- a/discover/pb-discover.c +++ b/discover/pb-discover.c @@ -101,6 +101,7 @@ int main(int argc, char *argv[]) { struct device_handler *handler; struct discover_server *server; + struct waitset *waitset; struct opts opts; struct udev *udev; struct user_event *uev; @@ -138,7 +139,9 @@ int main(int argc, char *argv[]) signal(SIGINT, sigint_handler); - server = discover_server_init(); + waitset = waitset_create(NULL); + + server = discover_server_init(waitset); if (!server) return EXIT_FAILURE; @@ -148,11 +151,11 @@ int main(int argc, char *argv[]) discover_server_set_device_source(server, handler); - udev = udev_init(handler); + udev = udev_init(waitset, handler); if (!udev) return EXIT_FAILURE; - uev = user_event_init(handler); + uev = user_event_init(waitset, handler); if (!uev) return EXIT_FAILURE; @@ -160,11 +163,12 @@ int main(int argc, char *argv[]) user_event_trigger(uev); for (running = 1; running;) { - if (waiter_poll()) + if (waiter_poll(waitset)) break; } device_handler_destroy(handler); + waitset_destroy(waitset); pb_log("--- end ---\n"); diff --git a/discover/udev.c b/discover/udev.c index 28357c7..40b9f63 100644 --- a/discover/udev.c +++ b/discover/udev.c @@ -116,7 +116,7 @@ static int udev_destructor(void *p) return 0; } -struct udev *udev_init(struct device_handler *handler) +struct udev *udev_init(struct waitset *waitset, struct device_handler *handler) { struct sockaddr_un addr; struct udev *udev; @@ -144,7 +144,7 @@ struct udev *udev_init(struct device_handler *handler) goto out_err; } - waiter_register(udev->socket, WAIT_IN, udev_process, udev); + waiter_register(waitset, udev->socket, WAIT_IN, udev_process, udev); pb_log("%s: waiting on %s\n", __func__, PBOOT_DEVICE_SOCKET); diff --git a/discover/udev.h b/discover/udev.h index db17c45..590eed1 100644 --- a/discover/udev.h +++ b/discover/udev.h @@ -3,8 +3,9 @@ struct udev; struct device_handler; +struct waitset; -struct udev *udev_init(struct device_handler *handler); +struct udev *udev_init(struct waitset *waitset, struct device_handler *handler); int udev_trigger(struct udev *udev); void udev_destroy(struct udev *udev); diff --git a/discover/user-event.c b/discover/user-event.c index afc4c43..db12bd1 100644 --- a/discover/user-event.c +++ b/discover/user-event.c @@ -118,7 +118,8 @@ static int user_event_destructor(void *arg) return 0; } -struct user_event *user_event_init(struct device_handler *handler) +struct user_event *user_event_init(struct waitset *waitset, + struct device_handler *handler) { struct sockaddr_un addr; struct user_event *uev; @@ -147,7 +148,7 @@ struct user_event *user_event_init(struct device_handler *handler) strerror(errno)); } - waiter_register(uev->socket, WAIT_IN, user_event_process, uev); + waiter_register(waitset, uev->socket, WAIT_IN, user_event_process, uev); pb_log("%s: waiting on %s\n", __func__, PBOOT_USER_EVENT_SOCKET); diff --git a/discover/user-event.h b/discover/user-event.h index e134d0c..383bdd0 100644 --- a/discover/user-event.h +++ b/discover/user-event.h @@ -25,8 +25,10 @@ #define PBOOT_USER_EVENT_SIZE (1 * 1024) struct user_event; +struct waitset; -struct user_event *user_event_init(struct device_handler *handler); +struct user_event *user_event_init(struct waitset *waitset, + struct device_handler *handler); void user_event_trigger(struct user_event *uev); void user_event_destroy(struct user_event *uev); |