From 708f431db8dab6779dd090a1117e556340eca9cc Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Sun, 12 Jul 2020 22:46:47 +0200 Subject: Some minor fixes, in particular, don't free scfg too early --- minecproxy/server-proxy.c | 2 +- minecproxy/server.c | 9 ++++++--- shared/config-parser.c | 6 +++++- shared/config-parser.h | 2 ++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/minecproxy/server-proxy.c b/minecproxy/server-proxy.c index d357396..056d0c5 100644 --- a/minecproxy/server-proxy.c +++ b/minecproxy/server-proxy.c @@ -517,7 +517,7 @@ bool local_open(struct server_local *local) socket_set_low_latency(sfd, cfg->socket_keepalive, cfg->socket_iptos, cfg->socket_nodelay); - verbose("%s: attempting to bind to %s", local->server->scfg.name, + verbose("%s: listening to %s", local->server->scfg.name, local->local.addrstr); r = bind(sfd, (struct sockaddr *)&local->local.st, local->local.addrlen); diff --git a/minecproxy/server.c b/minecproxy/server.c index 7e6aa84..258dfa8 100644 --- a/minecproxy/server.c +++ b/minecproxy/server.c @@ -47,6 +47,7 @@ static void server_free(struct uring_task *task) assert_return(task); debug(DBG_SRV, "freeing server (%p)", server); + scfg_delete(&server->scfg); list_del(&server->list); xfree(server); } @@ -74,7 +75,7 @@ void server_delete(struct server *server) uring_task_put(&server->exec_task); uring_task_destroy(&server->task); uring_task_put(&server->ann_task); - scfg_delete(&server->scfg); + scfg_cancel_adns(&server->scfg); } void server_delete_by_filename(const char *filename) @@ -230,13 +231,15 @@ static bool server_check_running(struct server *server) /* FIXME: other methods, rcon? */ if (server->scfg.systemd_service) { - verbose("%s: checking if systemd service is running", - server->scfg.name); if (systemd_service_running(&server->scfg, &error)) { server->state = SERVER_STATE_RUNNING; + verbose("%s: systemd service is running", + server->scfg.name); return true; } else { server->state = SERVER_STATE_STOPPED; + verbose("%s: systemd service is not running", + server->scfg.name); return false; } } diff --git a/shared/config-parser.c b/shared/config-parser.c index 00f9944..c3cccd6 100644 --- a/shared/config-parser.c +++ b/shared/config-parser.c @@ -575,7 +575,6 @@ bool scfg_parse(struct server_config *scfg, char *buf, bool async, void scfg_delete(struct server_config *scfg) { struct saddr *saddr, *tmp; - struct dns_async *dns; xfree(scfg->name); xfree(scfg->filename); @@ -600,6 +599,11 @@ void scfg_delete(struct server_config *scfg) list_del(&saddr->list); xfree(saddr); } +} + +void scfg_cancel_adns(struct server_config *scfg) +{ + struct dns_async *dns; list_for_each_entry(dns, &scfg->dnslookups, list) { if (dns->pending) diff --git a/shared/config-parser.h b/shared/config-parser.h index ad7e4b2..5b44a46 100644 --- a/shared/config-parser.h +++ b/shared/config-parser.h @@ -108,6 +108,8 @@ bool scfg_parse(struct server_config *scfg, char *buf, bool async, void scfg_delete(struct server_config *scfg); +void scfg_cancel_adns(struct server_config *scfg); + bool scfg_init(struct server_config *scfg, const char *filename); bool strtosockaddrs(const char *str, struct cfg_value *rvalue, bool async); -- cgit v1.2.3