diff options
author | Kenny Levinsen <kl@kl.wtf> | 2020-09-18 15:06:29 +0200 |
---|---|---|
committer | Kenny Levinsen <kl@kl.wtf> | 2020-09-22 01:01:46 +0200 |
commit | 6747c5f3f8d677bd553699710c1b99f5ae98f309 (patch) | |
tree | 2ee6bc79688a508455591614a8ee3dae7414dd48 /seatd/server.c | |
parent | fb5743971c731794758acd44bb08975b3ef15f2e (diff) |
poller: Raise signals through self-pipe
Signal handling relied on poll(2) being interrupted by signals, followed
by a check for signal handlers flagging a signal as received. This only
allowed signals that were received during poll(2) to be handled
correctly.
Implement the usual self-pipe implementation, where signal handlers
write an arbitrary byte to a polled file descriptor to ensure proper
level-triggered signal handling.
Diffstat (limited to 'seatd/server.c')
-rw-r--r-- | seatd/server.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/seatd/server.c b/seatd/server.c index c31fbba..5abe389 100644 --- a/seatd/server.c +++ b/seatd/server.c @@ -23,7 +23,10 @@ static int server_handle_vt_rel(int signal, void *data); static int server_handle_kill(int signal, void *data); int server_init(struct server *server) { - poller_init(&server->poller); + if (poller_init(&server->poller) == -1) { + log_errorf("could not initialize poller: %s", strerror(errno)); + return -1; + } linked_list_init(&server->seats); linked_list_init(&server->idle_clients); |