diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c index 3f69c1d9a7..40516c7619 100644 --- a/src/conf/nwfilter_conf.c +++ b/src/conf/nwfilter_conf.c @@ -2394,15 +2394,13 @@ virNWFilterTestUnassignDef(virConnectPtr conn, { int rc = 0; - virNWFilterLockFilterUpdates(); - nwfilter->wantRemoved = 1; /* trigger the update on VMs referencing the filter */ if (virNWFilterTriggerVMFilterRebuild(conn)) rc = 1; nwfilter->wantRemoved = 0; - virNWFilterUnlockFilterUpdates(); + return rc; } @@ -2434,8 +2432,9 @@ virNWFilterObjAssignDef(virConnectPtr conn, return NULL; } + virNWFilterLockFilterUpdates(); + if ((nwfilter = virNWFilterObjFindByName(nwfilters, def->name))) { - virNWFilterLockFilterUpdates(); nwfilter->newDef = def; /* trigger the update on VMs referencing the filter */ if (virNWFilterTriggerVMFilterRebuild(conn)) { @@ -2452,6 +2451,8 @@ virNWFilterObjAssignDef(virConnectPtr conn, return nwfilter; } + virNWFilterUnlockFilterUpdates(); + if (VIR_ALLOC(nwfilter) < 0) { virReportOOMError(); return NULL; diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index d9ac17e86d..44327ae1a2 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -372,6 +372,8 @@ nwfilterUndefine(virNWFilterPtr obj) { nwfilterDriverLock(driver); virNWFilterCallbackDriversLock(); + virNWFilterLockFilterUpdates(); + nwfilter = virNWFilterObjFindByUUID(&driver->nwfilters, obj->uuid); if (!nwfilter) { virNWFilterReportError(VIR_ERR_NO_NWFILTER, @@ -399,6 +401,8 @@ cleanup: if (nwfilter) virNWFilterObjUnlock(nwfilter); + virNWFilterUnlockFilterUpdates(); + virNWFilterCallbackDriversUnlock(); nwfilterDriverUnlock(driver); return ret;