From: Stefan Berger Date: Thu, 11 Aug 2011 10:56:50 +0000 (-0400) Subject: nwfilter: tolerate disappearing interfaces while instantiating filter X-Git-Tag: v0.9.5-rc1~262 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=762101c7affbd32af18eccc07249c2684cbb84a2;p=thirdparty%2Flibvirt.git nwfilter: tolerate disappearing interfaces while instantiating filter When instantiating a filter, a VM may disappear and remove its tap interfaces. Tolerate this case and don't report an error. --- diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter_gentech_driver.c index 7d9871a146..78919838b4 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -898,11 +898,18 @@ _virNWFilterInstantiateFilter(virConnectPtr conn, int ifindex; int rc; - if (ifaceGetIndex(true, net->ifname, &ifindex) < 0) - return 1; - virNWFilterLockFilterUpdates(); + /* after grabbing the filter update lock check for the interface; if + it's not there anymore its filters will be or are being removed + (while holding the lock) and we don't want to build new ones */ + if (ifaceGetIndex(false, net->ifname, &ifindex) < 0) { + /* interfaces / VMs can disappear during filter instantiation; + don't mark it as an error */ + rc = 0; + goto cleanup; + } + rc = __virNWFilterInstantiateFilter(conn, teardownOld, net->ifname, @@ -917,6 +924,7 @@ _virNWFilterInstantiateFilter(virConnectPtr conn, false, foundNewFilter); +cleanup: virNWFilterUnlockFilterUpdates(); return rc;