aboutsummaryrefslogtreecommitdiff
path: root/server.c
diff options
context:
space:
mode:
authorOmar Polo <op@omarpolo.com>2021-02-12 08:50:25 +0000
committerOmar Polo <op@omarpolo.com>2021-02-12 08:50:25 +0000
commita6e689d7450c532baa306b293314e42c0b64a300 (patch)
tree9c5afea3d30d55f3ca6ad0e58f9a8ae9646f687b /server.c
parente1b46123590fc7a28efbf439bc9bdb3bf95d5eba (diff)
fix config reload
the old server processes would stick around waiting on the signals events. While there, also drop the `struct server_events' and define events as globals.
Diffstat (limited to 'server.c')
-rw-r--r--server.c47
1 files changed, 21 insertions, 26 deletions
diff --git a/server.c b/server.c
index 8520739..892b0db 100644
--- a/server.c
+++ b/server.c
@@ -34,12 +34,8 @@ struct server {
struct tls *ctx;
};
-struct server_events {
- struct event e4;
- int has_ipv6;
- struct event e6;
- struct event sighup;
-};
+struct event e4, e6, sighup, siginfo, sigusr2;
+int has_ipv6, has_siginfo;
int connected_clients;
@@ -1075,15 +1071,16 @@ do_accept(int sock, short et, void *d)
static void
handle_sighup(int fd, short ev, void *d)
{
- struct server_events *events = d;
-
(void)fd;
(void)ev;
- event_del(&events->e4);
- if (events->has_ipv6)
- event_del(&events->e6);
- signal_del(&events->sighup);
+ event_del(&e4);
+ if (has_ipv6)
+ event_del(&e6);
+ if (has_siginfo)
+ signal_del(&siginfo);
+ signal_del(&sigusr2);
+ signal_del(&sighup);
}
static void
@@ -1099,36 +1096,34 @@ handle_siginfo(int fd, short ev, void *d)
void
loop(struct tls *ctx, int sock4, int sock6)
{
- struct server_events events;
struct server server;
- struct event info;
size_t i;
event_init();
- memset(&events, 0, sizeof(events));
memset(&server, 0, sizeof(server));
for (i = 0; i < MAX_USERS; ++i)
server.clients[i].fd = -1;
- event_set(&events.e4, sock4, EV_READ | EV_PERSIST, &do_accept, &server);
- event_add(&events.e4, NULL);
+ event_set(&e4, sock4, EV_READ | EV_PERSIST, &do_accept, &server);
+ event_add(&e4, NULL);
if (sock6 != -1) {
- events.has_ipv6 = 1;
- event_set(&events.e6, sock6, EV_READ | EV_PERSIST, &do_accept, &server);
- event_add(&events.e6, NULL);
+ has_ipv6 = 1;
+ event_set(&e6, sock6, EV_READ | EV_PERSIST, &do_accept, &server);
+ event_add(&e6, NULL);
}
- signal_set(&events.sighup, SIGHUP, &handle_sighup, &events);
- signal_add(&events.sighup, NULL);
+ signal_set(&sighup, SIGHUP, &handle_sighup, NULL);
+ signal_add(&sighup, NULL);
#ifdef SIGINFO
- signal_set(&info, SIGINFO, &handle_siginfo, NULL);
- signal_add(&info, NULL);
+ has_siginfo = 1;
+ signal_set(&siginfo, SIGINFO, &handle_siginfo, NULL);
+ signal_add(&siginfo, NULL);
#endif
- signal_set(&info, SIGUSR2, &handle_siginfo, NULL);
- signal_add(&info, NULL);
+ signal_set(&sigusr2, SIGINFO, &handle_siginfo, NULL);
+ signal_add(&sigusr2, NULL);
server.ctx = ctx;