aboutsummaryrefslogtreecommitdiff
path: root/seatd/server.c
diff options
context:
space:
mode:
authorKenny Levinsen <kl@kl.wtf>2020-09-18 15:06:29 +0200
committerKenny Levinsen <kl@kl.wtf>2020-09-22 01:01:46 +0200
commit6747c5f3f8d677bd553699710c1b99f5ae98f309 (patch)
tree2ee6bc79688a508455591614a8ee3dae7414dd48 /seatd/server.c
parentfb5743971c731794758acd44bb08975b3ef15f2e (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.c5
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);