]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
event: correctly free event base
authorVincent Bernat <vincent@bernat.im>
Fri, 30 Sep 2016 18:00:02 +0000 (20:00 +0200)
committerVincent Bernat <vincent@bernat.im>
Fri, 30 Sep 2016 18:00:55 +0000 (20:00 +0200)
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
src/daemon/lldpd.c
src/daemon/lldpd.h

index 67e2c878a06307c12708b0d93828a1c61589844b..abcdaf33626ce4649996f8d4b27fec395ce616f7 100644 (file)
@@ -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
index 459358764d68712431162a8fe8b9581940e843eb..b66ca744120bb9081bf6e642797a968c07a2ddbd 100644 (file)
@@ -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);
 }
 
 /**
index 455ba8b2dfc64e0eb746e8d42c051d92ada7486c..b9e9d7b28c3315bcece79970aa3954ccc4f899d9 100644 (file)
@@ -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 *);