commit 40538e52bf546dc48be253772ea579110e483b37 from: Stefan Sperling date: Wed Apr 16 16:21:32 2025 UTC fix all remaining gotwebd leaks the regress memleak checker was flagging commit - cab13f2dcc894c20d7f67f0905bf9396acb6fec9 commit + 40538e52bf546dc48be253772ea579110e483b37 blob - 806994beb389a3a5c37e7c67175b8ea7bace5ee5 blob + a1aa062175156f6d078a385bc3fa3185e178b2bb --- gotwebd/gotweb.c +++ gotwebd/gotweb.c @@ -1395,6 +1395,17 @@ gotweb_shutdown(void) imsgbuf_clear(&gotwebd_env->iev_server->ibuf); free(gotwebd_env->iev_server); } + + sockets_purge(gotwebd_env); + + while (!TAILQ_EMPTY(&gotwebd_env->servers)) { + struct server *srv; + + srv = TAILQ_FIRST(&gotwebd_env->servers); + TAILQ_REMOVE(&gotwebd_env->servers, srv, entry); + free(srv); + } + free(gotwebd_env); exit(0); blob - f66b9f38c71db3ea73f08f317e7446e2d3929e59 blob + f998ee471383cb9f2e81359a8bf4012acd12e644 --- gotwebd/gotwebd.c +++ gotwebd/gotwebd.c @@ -51,7 +51,7 @@ int main(int, char **); int gotwebd_configure(struct gotwebd *, uid_t, gid_t); void gotwebd_configure_done(struct gotwebd *); void gotwebd_sighdlr(int sig, short event, void *arg); -void gotwebd_shutdown(void); +void gotwebd_shutdown(int); void gotwebd_dispatch_server(int, short, void *); void gotwebd_dispatch_gotweb(int, short, void *); @@ -271,7 +271,7 @@ gotwebd_sighdlr(int sig, short event, void *arg) break; case SIGTERM: case SIGINT: - gotwebd_shutdown(); + gotwebd_shutdown(0); break; default: log_warn("unexpected signal %d", sig); @@ -419,11 +419,11 @@ main(int argc, char **argv) if (proc_type == GOTWEBD_PROC_PARENT) { if (parse_config(env->gotwebd_conffile, env) == -1) - exit(1); + gotwebd_shutdown(1); if (no_action) { fprintf(stderr, "configuration OK\n"); - exit(0); + gotwebd_shutdown(0); } if (env->user) @@ -549,6 +549,7 @@ main(int argc, char **argv) log_debug("%s gotwebd exiting", getprogname()); + gotwebd_shutdown(0); return (0); } @@ -637,7 +638,7 @@ gotwebd_configure_done(struct gotwebd *env) } void -gotwebd_shutdown(void) +gotwebd_shutdown(int exit_code) { struct gotwebd *env = gotwebd_env; pid_t pid; @@ -690,5 +691,5 @@ gotwebd_shutdown(void) free(gotwebd_env); log_warnx("gotwebd terminating"); - exit(0); + exit(exit_code); }