Download raw body.
fix logging during gotweb shutdown
Omar Polo <op@omarpolo.com> wrote:
> During `rcctl stop gotwebd' a few potentially scary messages are logged,
> as reported by xs on the IRC channel
>
> gotwebd[46563]: lost child: pid 79956 exited abnormally
> gotwebd[46563]: lost child: pid 98433 exited abnormally
> gotwebd[46563]: gotwebd terminating
>
> the sockets processes gets a SIGTERM and dies without handling, so the
> parent process thinks it exited abnormally. Instead, catch SIGINT and
> SIGTERM and handle them gracefully.
>
> ok?
ok
> diff /home/op/w/got
> commit - f9a64b14696fdd28e727956bd9c47f595f32f265
> path + /home/op/w/got
> blob - a0576465ae834d0f074a2d8dc1fbbb6ecec3186a
> file + gotwebd/sockets.c
> --- gotwebd/sockets.c
> +++ gotwebd/sockets.c
> @@ -88,7 +88,7 @@ int cgi_inflight = 0;
> void
> sockets(struct gotwebd *env, int fd)
> {
> - struct event sighup, sigusr1, sigchld;
> + struct event sighup, sigint, sigusr1, sigchld, sigterm;
>
> event_init();
>
> @@ -110,10 +110,14 @@ sockets(struct gotwebd *env, int fd)
>
> signal_set(&sighup, SIGHUP, sockets_sighdlr, env);
> signal_add(&sighup, NULL);
> + signal_set(&sigint, SIGINT, sockets_sighdlr, env);
> + signal_add(&sigint, NULL);
> signal_set(&sigusr1, SIGUSR1, sockets_sighdlr, env);
> signal_add(&sigusr1, NULL);
> signal_set(&sigchld, SIGCHLD, sockets_sighdlr, env);
> signal_add(&sigchld, NULL);
> + signal_set(&sigterm, SIGTERM, sockets_sighdlr, env);
> + signal_add(&sigterm, NULL);
>
> #ifndef PROFILE
> if (pledge("stdio rpath inet recvfd proc exec sendfd unveil",
> @@ -386,6 +390,10 @@ sockets_sighdlr(int sig, short event, void *arg)
> break;
> case SIGCHLD:
> break;
> + case SIGINT:
> + case SIGTERM:
> + sockets_shutdown();
> + break;
> default:
> log_info("SIGNAL: %d", sig);
> fatalx("unexpected signal");
> @@ -412,6 +420,8 @@ sockets_shutdown(void)
> free(srv);
>
> free(gotwebd_env);
> +
> + exit(0);
> }
>
> int
--
Mark Jamsek <https://bsdbox.org>
GPG: F2FF 13DE 6A06 C471 CA80 E6E2 2930 DC66 86EE CF68
fix logging during gotweb shutdown