From: Vincent Bernat Date: Fri, 30 Sep 2016 18:00:02 +0000 (+0200) Subject: event: correctly free event base X-Git-Tag: 0.9.5~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f144d837d6abf587341b282e01fb74362ac497c5;p=thirdparty%2Flldpd.git 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. --- 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 *);