mirror of https://github.com/omar-polo/gmid.git
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.
This commit is contained in:
parent
e1b4612359
commit
a6e689d745
47
server.c
47
server.c
|
@ -34,12 +34,8 @@ struct server {
|
||||||
struct tls *ctx;
|
struct tls *ctx;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct server_events {
|
struct event e4, e6, sighup, siginfo, sigusr2;
|
||||||
struct event e4;
|
int has_ipv6, has_siginfo;
|
||||||
int has_ipv6;
|
|
||||||
struct event e6;
|
|
||||||
struct event sighup;
|
|
||||||
};
|
|
||||||
|
|
||||||
int connected_clients;
|
int connected_clients;
|
||||||
|
|
||||||
|
@ -1075,15 +1071,16 @@ do_accept(int sock, short et, void *d)
|
||||||
static void
|
static void
|
||||||
handle_sighup(int fd, short ev, void *d)
|
handle_sighup(int fd, short ev, void *d)
|
||||||
{
|
{
|
||||||
struct server_events *events = d;
|
|
||||||
|
|
||||||
(void)fd;
|
(void)fd;
|
||||||
(void)ev;
|
(void)ev;
|
||||||
|
|
||||||
event_del(&events->e4);
|
event_del(&e4);
|
||||||
if (events->has_ipv6)
|
if (has_ipv6)
|
||||||
event_del(&events->e6);
|
event_del(&e6);
|
||||||
signal_del(&events->sighup);
|
if (has_siginfo)
|
||||||
|
signal_del(&siginfo);
|
||||||
|
signal_del(&sigusr2);
|
||||||
|
signal_del(&sighup);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1099,36 +1096,34 @@ handle_siginfo(int fd, short ev, void *d)
|
||||||
void
|
void
|
||||||
loop(struct tls *ctx, int sock4, int sock6)
|
loop(struct tls *ctx, int sock4, int sock6)
|
||||||
{
|
{
|
||||||
struct server_events events;
|
|
||||||
struct server server;
|
struct server server;
|
||||||
struct event info;
|
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
event_init();
|
event_init();
|
||||||
|
|
||||||
memset(&events, 0, sizeof(events));
|
|
||||||
memset(&server, 0, sizeof(server));
|
memset(&server, 0, sizeof(server));
|
||||||
for (i = 0; i < MAX_USERS; ++i)
|
for (i = 0; i < MAX_USERS; ++i)
|
||||||
server.clients[i].fd = -1;
|
server.clients[i].fd = -1;
|
||||||
|
|
||||||
event_set(&events.e4, sock4, EV_READ | EV_PERSIST, &do_accept, &server);
|
event_set(&e4, sock4, EV_READ | EV_PERSIST, &do_accept, &server);
|
||||||
event_add(&events.e4, NULL);
|
event_add(&e4, NULL);
|
||||||
|
|
||||||
if (sock6 != -1) {
|
if (sock6 != -1) {
|
||||||
events.has_ipv6 = 1;
|
has_ipv6 = 1;
|
||||||
event_set(&events.e6, sock6, EV_READ | EV_PERSIST, &do_accept, &server);
|
event_set(&e6, sock6, EV_READ | EV_PERSIST, &do_accept, &server);
|
||||||
event_add(&events.e6, NULL);
|
event_add(&e6, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
signal_set(&events.sighup, SIGHUP, &handle_sighup, &events);
|
signal_set(&sighup, SIGHUP, &handle_sighup, NULL);
|
||||||
signal_add(&events.sighup, NULL);
|
signal_add(&sighup, NULL);
|
||||||
|
|
||||||
#ifdef SIGINFO
|
#ifdef SIGINFO
|
||||||
signal_set(&info, SIGINFO, &handle_siginfo, NULL);
|
has_siginfo = 1;
|
||||||
signal_add(&info, NULL);
|
signal_set(&siginfo, SIGINFO, &handle_siginfo, NULL);
|
||||||
|
signal_add(&siginfo, NULL);
|
||||||
#endif
|
#endif
|
||||||
signal_set(&info, SIGUSR2, &handle_siginfo, NULL);
|
signal_set(&sigusr2, SIGINFO, &handle_siginfo, NULL);
|
||||||
signal_add(&info, NULL);
|
signal_add(&sigusr2, NULL);
|
||||||
|
|
||||||
server.ctx = ctx;
|
server.ctx = ctx;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue