From 320f600cd980230b2b2e34c7256c9564af6afae9 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Wed, 10 Jun 2020 19:01:39 +0200 Subject: Add some basic memory tracking infrastructure while hacking --- server.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'server.c') diff --git a/server.c b/server.c index 6443c7a..1750e58 100644 --- a/server.c +++ b/server.c @@ -34,7 +34,7 @@ set_property(struct cfg *cfg, struct server *scfg, char **property, const char * if (!cfg || !scfg || empty_str(value) || *property) return false; - *property = strdup(value); + *property = xstrdup(value); if (!*property) { perror("strdup"); return false; @@ -65,13 +65,14 @@ server_free(struct uring_task *task) fprintf(stderr, "Freeing scfg %s\n", scfg->name); list_del(&scfg->list); - free(scfg->pretty_name); - free(scfg->start_exec); - free(scfg->stop_exec); - free(scfg->systemd_service); - free(scfg->systemd_obj); - free(scfg->name); - free(scfg); + xfree(scfg->pretty_name); + xfree(scfg->start_exec); + xfree(scfg->stop_exec); + xfree(scfg->systemd_service); + xfree(scfg->systemd_obj); + xfree(scfg->rcon_password); + xfree(scfg->name); + xfree(scfg); } void @@ -79,6 +80,7 @@ server_delete(struct cfg *cfg, struct server *scfg) { struct server_local *local, *ltmp; struct sockaddr_in46 *remote, *rtmp; + struct sockaddr_in46 *rcon, *rctmp; fprintf(stderr, "Removing server cfg: %s\n", scfg->name); @@ -87,7 +89,12 @@ server_delete(struct cfg *cfg, struct server *scfg) list_for_each_entry_safe(remote, rtmp, &scfg->remotes, list) { list_del(&remote->list); - free(remote); + xfree(remote); + } + + list_for_each_entry_safe(rcon, rctmp, &scfg->rcons, list) { + list_del(&rcon->list); + xfree(rcon); } list_for_each_entry_safe(local, ltmp, &scfg->locals, list) { @@ -120,6 +127,7 @@ server_dump(struct server *scfg) { struct server_local *local; struct sockaddr_in46 *remote; + struct sockaddr_in46 *rcon; char abuf[ADDRSTRLEN]; fprintf(stderr, "\nDumping server %s\n", scfg->name); @@ -143,8 +151,8 @@ server_dump(struct server *scfg) list_for_each_entry(remote, &scfg->remotes, list) fprintf(stderr, " * %s\n", sockaddr_to_str(remote, abuf, sizeof(abuf))); fprintf(stderr, " * RCon:\n"); - list_for_each_entry(remote, &scfg->rcons, list) - fprintf(stderr, " * %s\n", sockaddr_to_str(remote, abuf, sizeof(abuf))); + list_for_each_entry(rcon, &scfg->rcons, list) + fprintf(stderr, " * %s\n", sockaddr_to_str(rcon, abuf, sizeof(abuf))); fprintf(stderr, "\n"); } @@ -156,7 +164,7 @@ server_local_free(struct uring_task *task) fprintf(stderr, "%s called: task 0x%p\n", __func__, task); list_del(&local->list); - free(local); + xfree(local); } static void @@ -540,7 +548,7 @@ server_add_local(struct cfg *cfg, struct server *scfg, struct sockaddr_in46 *add sockaddr_to_str(&local->addr, local->addrstr, sizeof(local->addrstr)); fprintf(stderr, "Adding local: %s\n", local->addrstr); list_add(&local->list, &scfg->locals); - free(addr); + xfree(addr); return true; } @@ -574,11 +582,11 @@ server_set_systemd_service(struct cfg *cfg, struct server *scfg, suffix = strrchr(service, '.'); if (!suffix || strcmp(suffix, ".service")) { - tmp = malloc(strlen(service) + strlen(".service") + 1); + tmp = zmalloc(strlen(service) + strlen(".service") + 1); if (tmp) sprintf(tmp, "%s.service", service); } else - tmp = strdup(service); + tmp = xstrdup(service); if (!tmp) { perror("malloc/strdup"); @@ -691,7 +699,7 @@ server_new(struct cfg *cfg, const char *name) } scfg->type = SERVER_TYPE_UNDEFINED; - scfg->name = strdup(name); + scfg->name = xstrdup(name); scfg->running = false; scfg->stop_method = SERVER_STOP_METHOD_UNDEFINED; scfg->start_method = SERVER_START_METHOD_UNDEFINED; -- cgit v1.2.3