diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index bb445fe70d6c155ebf9c6f91e2bb4039fa0bd6ea..b789189e62f6f69054fe149953d8faf5450f6134 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5700,6 +5700,8 @@ qemuDomainRestoreFlags(virConnectPtr conn, VIR_DOMAIN_SAVE_PAUSED, -1); + virNWFilterReadLockFilterUpdates(); + fd = qemuDomainSaveImageOpen(driver, path, &def, &header, &xml, (flags & VIR_DOMAIN_SAVE_BYPASS_CACHE) != 0, &wrapperFd, false, false); @@ -5777,6 +5779,7 @@ qemuDomainRestoreFlags(virConnectPtr conn, virFileWrapperFdFree(wrapperFd); if (vm) virObjectUnlock(vm); + virNWFilterUnlockFilterUpdates(); return ret; } @@ -7210,6 +7213,8 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1); + virNWFilterReadLockFilterUpdates(); + cfg = virQEMUDriverGetConfig(driver); affect = flags & (VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG); @@ -7326,6 +7331,7 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, virObjectUnlock(vm); virObjectUnref(caps); virObjectUnref(cfg); + virNWFilterUnlockFilterUpdates(); return ret; } @@ -7356,6 +7362,8 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, VIR_DOMAIN_AFFECT_CONFIG | VIR_DOMAIN_DEVICE_MODIFY_FORCE, -1); + virNWFilterReadLockFilterUpdates(); + cfg = virQEMUDriverGetConfig(driver); affect = flags & (VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG); @@ -7472,6 +7480,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, virObjectUnlock(vm); virObjectUnref(caps); virObjectUnref(cfg); + virNWFilterUnlockFilterUpdates(); return ret; } @@ -14159,6 +14168,8 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, * and use of FORCE can cause multiple transitions. */ + virNWFilterReadLockFilterUpdates(); + if (!(vm = qemuDomObjFromSnapshot(snapshot))) return -1; @@ -14480,6 +14491,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, virObjectUnlock(vm); virObjectUnref(caps); virObjectUnref(cfg); + virNWFilterUnlockFilterUpdates(); return ret; } diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 9dac1e021eb28c31fd734409e5eac3e362add029..b3c911ee3058d29294bed5b4badfc49970769506 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -57,6 +57,7 @@ #include "virstring.h" #include "virtypedparam.h" #include "virprocess.h" +#include "nwfilter_conf.h" #define VIR_FROM_THIS VIR_FROM_QEMU @@ -2524,6 +2525,8 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, if (virTimeMillisNow(&now) < 0) return -1; + virNWFilterReadLockFilterUpdates(); + if (flags & VIR_MIGRATE_OFFLINE) { if (flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_INC)) { @@ -2833,6 +2836,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, qemuDomainEventQueue(driver, event); qemuMigrationCookieFree(mig); virObjectUnref(caps); + virNWFilterUnlockFilterUpdates(); return ret; stop: diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index d254767beb9f03e6e990c7adf9ffcbbe41a3a181..a1f9c53b1a8df30fd2c9ff84fc8f5cd70ed122ef 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -68,6 +68,7 @@ #include "virhostdev.h" #include "storage/storage_driver.h" #include "configmake.h" +#include "nwfilter_conf.h" #define VIR_FROM_THIS VIR_FROM_QEMU @@ -3389,6 +3390,8 @@ qemuProcessReconnect(void *opaque) VIR_FREE(data); + virNWFilterReadLockFilterUpdates(); + virObjectLock(obj); cfg = virQEMUDriverGetConfig(driver); @@ -3540,6 +3543,7 @@ qemuProcessReconnect(void *opaque) virObjectUnref(conn); virObjectUnref(cfg); + virNWFilterUnlockFilterUpdates(); return; @@ -3575,6 +3579,7 @@ qemuProcessReconnect(void *opaque) } virObjectUnref(conn); virObjectUnref(cfg); + virNWFilterUnlockFilterUpdates(); } static int