From: Daniel Lezcano Date: Thu, 5 Jan 2012 21:45:32 +0000 (+0100) Subject: Fix network cleanup on error X-Git-Tag: lxc-0.8.0-rc2~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8f8e35202d9f84ca69cc4c65aeda0febb934e39;p=thirdparty%2Flxc.git Fix network cleanup on error Network cleanup does not cleanup correctly the virtual interfaces in case of an error. Signed-off-by: Daniel Lezcano --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 41039d7a3..5e41d382c 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -1702,13 +1702,19 @@ void lxc_delete_network(struct lxc_list *network) if (netdev->ifindex == 0) continue; - /* Recent kernels already delete the virtual devices */ - if (netdev->type != LXC_NET_PHYS) + if (netdev->type == LXC_NET_PHYS) { + if (lxc_netdev_rename_by_index(netdev->ifindex, netdev->link)) + WARN("failed to rename to the initial name the " \ + "netdev '%s'", netdev->link); continue; + } - if (lxc_netdev_rename_by_index(netdev->ifindex, netdev->link)) - WARN("failed to rename to the initial name the netdev '%s'", - netdev->link); + /* Recent kernel remove the virtual interfaces when the network + * namespace is destroyed but in case we did not moved the + * interface to the network namespace, we have to destroy it + */ + if (lxc_netdev_delete_by_index(netdev->ifindex)) + WARN("failed to remove interface '%s'", netdev->name); } } diff --git a/src/lxc/start.c b/src/lxc/start.c index 334262d7e..18f6878c6 100644 --- a/src/lxc/start.c +++ b/src/lxc/start.c @@ -490,7 +490,6 @@ int lxc_spawn(struct lxc_handler *handler) } } - /* Create a process in a new set of namespaces */ handler->pid = lxc_clone(do_start, handler, clone_flags); if (handler->pid < 0) {