
When instantiating a filter, a VM may disappear and remove its tap interfaces. Tolerate this case and don't report an error. Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com> --- src/nwfilter/nwfilter_gentech_driver.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) Index: libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c =================================================================== --- libvirt-acl.orig/src/nwfilter/nwfilter_gentech_driver.c +++ libvirt-acl/src/nwfilter/nwfilter_gentech_driver.c @@ -898,11 +898,18 @@ _virNWFilterInstantiateFilter(virConnect 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 exit; + } + rc = __virNWFilterInstantiateFilter(conn, teardownOld, net->ifname, @@ -917,6 +924,7 @@ _virNWFilterInstantiateFilter(virConnect false, foundNewFilter); +exit: virNWFilterUnlockFilterUpdates(); return rc;