commit 19d20c12ec99892dbf57f969d478e4108851679e from: Stefan Sperling via: Thomas Adam date: Thu Apr 17 19:06:29 2025 UTC fix all remaining gotwebd leaks the regress memleak checker was flagging commit - 99c8e404c0aa688453b2438227d88b8781b9a21f commit + 19d20c12ec99892dbf57f969d478e4108851679e blob - d9dca464a473c11fc3bad9cac8d40909794c4d98 blob + af1e66d4707e36023c88149e74504cf6212a2afd --- 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 - ff1fed836b983907bed2d75f26d0d48b47d78a6b blob + 4695b254224421da1c01284653f9c8469a11dce4 --- 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: fatalx("unexpected signal"); @@ -418,11 +418,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) @@ -548,6 +548,7 @@ main(int argc, char **argv) log_debug("%s gotwebd exiting", getprogname()); + gotwebd_shutdown(0); return (0); } @@ -636,7 +637,7 @@ gotwebd_configure_done(struct gotwebd *env) } void -gotwebd_shutdown(void) +gotwebd_shutdown(int exit_code) { struct gotwebd *env = gotwebd_env; pid_t pid; @@ -689,5 +690,5 @@ gotwebd_shutdown(void) free(gotwebd_env); log_warnx("gotwebd terminating"); - exit(0); + exit(exit_code); }