From: Vincent Bernat Date: Sat, 24 Sep 2016 14:03:03 +0000 (+0200) Subject: event: remove some one-time memory leaks X-Git-Tag: 0.9.5~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=762419b647fb55fe9ea6d0665ef821f59ff54c93;p=thirdparty%2Flldpd.git event: remove some one-time memory leaks Also provide a suppression file for valgrind for memory leaks that are too difficult to remove. --- diff --git a/src/daemon/event.c b/src/daemon/event.c index 05c25680..67e2c878 100644 --- a/src/daemon/event.c +++ b/src/daemon/event.c @@ -241,6 +241,18 @@ levent_ctl_free_client(struct lldpd_one_client *client) } } +static void +levent_ctl_close_clients() +{ + struct lldpd_one_client *client, *client_next; + for (client = TAILQ_FIRST(&lldpd_clients); + client; + client = client_next) { + client_next = TAILQ_NEXT(client, next); + levent_ctl_free_client(client); + } +} + static ssize_t levent_ctl_send(struct lldpd_one_client *client, int type, void *data, size_t len) { @@ -585,6 +597,11 @@ levent_loop(struct lldpd *cfg) agent_shutdown(); #endif /* USE_SNMP */ + levent_ctl_close_clients(); + if (cfg->g_iface_event) + event_free(cfg->g_iface_event); + if (cfg->g_cleanup_timer) + event_free(cfg->g_cleanup_timer); } static void diff --git a/src/daemon/lldpd.supp b/src/daemon/lldpd.supp new file mode 100644 index 00000000..2c97b9a7 --- /dev/null +++ b/src/daemon/lldpd.supp @@ -0,0 +1,18 @@ +# Memory leak when initializing the event loop. Should only happens once. +{ + one-time-memory-in-levent-init + Memcheck:Leak + fun:malloc + ... + fun:levent_init + ... +} + +# Static variable in priv.c +{ + static-storage-gethostname + Memcheck:Leak + fun:realloc + fun:priv_gethostname + ... +}