diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-06 11:58:06 +0100 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2012-03-06 11:58:06 +0100 |
commit | 87c79f99b6b2ce6895116c3bf9e5a8d28ff5b322 (patch) | |
tree | 64dd662fc613acfe2bee021b4f0565aacff78d35 /pingu_iface.c | |
parent | c73cf48ae4ec3589b07e4b6a39ada2a2bb67de08 (diff) | |
download | pingu-87c79f99b6b2ce6895116c3bf9e5a8d28ff5b322.tar.bz2 pingu-87c79f99b6b2ce6895116c3bf9e5a8d28ff5b322.tar.xz |
pingu: cleanup various structures on shutdown
Diffstat (limited to 'pingu_iface.c')
-rw-r--r-- | pingu_iface.c | 14 |
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); + } } |