aboutsummaryrefslogtreecommitdiffstats
path: root/pingu_iface.c
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2012-03-06 11:58:06 +0100
committerNatanael Copa <ncopa@alpinelinux.org>2012-03-06 11:58:06 +0100
commit87c79f99b6b2ce6895116c3bf9e5a8d28ff5b322 (patch)
tree64dd662fc613acfe2bee021b4f0565aacff78d35 /pingu_iface.c
parentc73cf48ae4ec3589b07e4b6a39ada2a2bb67de08 (diff)
downloadpingu-87c79f99b6b2ce6895116c3bf9e5a8d28ff5b322.tar.bz2
pingu-87c79f99b6b2ce6895116c3bf9e5a8d28ff5b322.tar.xz
pingu: cleanup various structures on shutdown
Diffstat (limited to 'pingu_iface.c')
-rw-r--r--pingu_iface.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/pingu_iface.c b/pingu_iface.c
index fb311a5..161a327 100644
--- a/pingu_iface.c
+++ b/pingu_iface.c
@@ -274,7 +274,7 @@ int pingu_iface_init(struct ev_loop *loop)
void pingu_iface_cleanup(void)
{
- struct pingu_iface *iface;
+ struct pingu_iface *iface, *n;
/* remove loadbalance route */
if (load_balanced > 1) {
int err = kernel_route_multipath(RTM_DELROUTE, &iface_list, RT_TABLE_MAIN);
@@ -286,4 +286,16 @@ void pingu_iface_cleanup(void)
kernel_cleanup_iface_routes(iface);
close(iface->fd);
}
+ list_for_each_entry_safe(iface, n, &iface_list, iface_list_entry) {
+ list_del(&iface->iface_list_entry);
+ if (iface->label != NULL)
+ free(iface->label);
+ if (iface->gw_up_action != NULL)
+ free(iface->gw_up_action);
+ if (iface->gw_down_action != NULL)
+ free(iface->gw_down_action);
+ pingu_ping_cleanup(&iface->ping_list);
+ pingu_route_cleanup(&iface->route_list);
+ free(iface);
+ }
}