From f144d837d6abf587341b282e01fb74362ac497c5 Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Fri, 30 Sep 2016 20:00:02 +0200 Subject: [PATCH] event: correctly free event base This removes a bunch a false positive in valgrind memcheck where some allocations where done on the base and not freed when only the associated events where freed. Related to #192. --- src/daemon/event.c | 7 +++++++ src/daemon/lldpd.c | 1 + src/daemon/lldpd.h | 1 + 3 files changed, 9 insertions(+) diff --git a/src/daemon/event.c b/src/daemon/event.c index 67e2c878..abcdaf33 100644 --- a/src/daemon/event.c +++ b/src/daemon/event.c @@ -598,10 +598,17 @@ levent_loop(struct lldpd *cfg) #endif /* USE_SNMP */ levent_ctl_close_clients(); +} + +/* Release libevent resources */ +void +levent_shutdown(struct lldpd *cfg) +{ if (cfg->g_iface_event) event_free(cfg->g_iface_event); if (cfg->g_cleanup_timer) event_free(cfg->g_cleanup_timer); + event_base_free(cfg->g_base); } static void diff --git a/src/daemon/lldpd.c b/src/daemon/lldpd.c index 45935876..b66ca744 100644 --- a/src/daemon/lldpd.c +++ b/src/daemon/lldpd.c @@ -1232,6 +1232,7 @@ lldpd_exit(struct lldpd *cfg) lldpd_all_chassis_cleanup(cfg); free(cfg->g_default_local_port); free(cfg->g_config.c_platform); + levent_shutdown(cfg); } /** diff --git a/src/daemon/lldpd.h b/src/daemon/lldpd.h index 455ba8b2..b9e9d7b2 100644 --- a/src/daemon/lldpd.h +++ b/src/daemon/lldpd.h @@ -132,6 +132,7 @@ u_int16_t frame_checksum(const u_int8_t *, int, int); /* event.c */ void levent_loop(struct lldpd *); +void levent_shutdown(struct lldpd *); void levent_hardware_init(struct lldpd_hardware *); void levent_hardware_add_fd(struct lldpd_hardware *, int); void levent_hardware_release(struct lldpd_hardware *); -- 2.39.5