https://bugzilla.redhat.com/show_bug.cgi?id=1755303 With the recent work in daemon split and socket activation daemons can come and go. They can and will be started many times during a session which results in objects being autostarted multiple times. This is not optimal. Use virDriverShouldAutostart() to determine if autostart should be done or not. Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- src/bhyve/bhyve_driver.c | 8 +++++++- src/libxl/libxl_driver.c | 12 +++++++++--- src/lxc/lxc_driver.c | 7 ++++++- src/network/bridge_driver.c | 12 +++++++++--- src/qemu/qemu_driver.c | 7 ++++++- src/storage/storage_driver.c | 7 ++++++- 6 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index c52def7607..fb0996bd2a 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1218,6 +1218,8 @@ bhyveStateInitialize(bool privileged, virStateInhibitCallback callback ATTRIBUTE_UNUSED, void *opaque ATTRIBUTE_UNUSED) { + bool autostart = true; + if (!privileged) { VIR_INFO("Not running privileged, disabling driver"); return VIR_DRV_STATE_INIT_SKIPPED; @@ -1301,7 +1303,11 @@ bhyveStateInitialize(bool privileged, virBhyveProcessReconnectAll(bhyve_driver); - bhyveAutostartDomains(bhyve_driver); + if (virDriverShouldAutostart(BHYVE_STATE_DIR, &autostart) < 0) + goto cleanup; + + if (autostart) + bhyveAutostartDomains(bhyve_driver); return VIR_DRV_STATE_INIT_COMPLETE; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 45de6b24c6..ea643b8a3f 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -655,6 +655,7 @@ libxlStateInitialize(bool privileged, libxlDriverConfigPtr cfg; char *driverConf = NULL; char ebuf[1024]; + bool autostart = true; if (!libxlDriverShouldLoad(privileged)) return VIR_DRV_STATE_INIT_SKIPPED; @@ -800,9 +801,14 @@ libxlStateInitialize(bool privileged, NULL, NULL) < 0) goto error; - virDomainObjListForEach(libxl_driver->domains, false, - libxlAutostartDomain, - libxl_driver); + if (virDriverShouldAutostart(cfg->stateDir, &autostart) < 0) + goto error; + + if (autostart) { + virDomainObjListForEach(libxl_driver->domains, false, + libxlAutostartDomain, + libxl_driver); + } virDomainObjListForEach(libxl_driver->domains, false, libxlDomainManagedSaveLoad, diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index cf1dd1428e..a69589e50c 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -1541,6 +1541,7 @@ static int lxcStateInitialize(bool privileged, { virCapsPtr caps = NULL; virLXCDriverConfigPtr cfg = NULL; + bool autostart = true; /* Check that the user is root, silently disable if not */ if (!privileged) { @@ -1630,7 +1631,11 @@ static int lxcStateInitialize(bool privileged, NULL, NULL) < 0) goto cleanup; - virLXCProcessAutostartAll(lxc_driver); + if (virDriverShouldAutostart(cfg->stateDir, &autostart) < 0) + goto cleanup; + + if (autostart) + virLXCProcessAutostartAll(lxc_driver); virObjectUnref(caps); return VIR_DRV_STATE_INIT_COMPLETE; diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index ae2e4f09f8..c05157c3ca 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -715,6 +715,7 @@ networkStateInitialize(bool privileged, int ret = VIR_DRV_STATE_INIT_ERROR; char *configdir = NULL; char *rundir = NULL; + bool autostart = true; #ifdef WITH_FIREWALLD DBusConnection *sysbus = NULL; #endif @@ -815,9 +816,14 @@ networkStateInitialize(bool privileged, networkReloadFirewallRules(network_driver, true); networkRefreshDaemons(network_driver); - virNetworkObjListForEach(network_driver->networks, - networkAutostartConfig, - network_driver); + if (virDriverShouldAutostart(network_driver->stateDir, &autostart) < 0) + goto error; + + if (autostart) { + virNetworkObjListForEach(network_driver->networks, + networkAutostartConfig, + network_driver); + } network_driver->networkEventState = virObjectEventStateNew(); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 99db99e23a..bc0ede2fb0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -673,6 +673,7 @@ qemuStateInitialize(bool privileged, gid_t run_gid = -1; char *hugepagePath = NULL; char *memoryBackingPath = NULL; + bool autostart = true; size_t i; if (VIR_ALLOC(qemu_driver) < 0) @@ -1035,7 +1036,11 @@ qemuStateInitialize(bool privileged, qemuProcessReconnectAll(qemu_driver); - qemuAutostartDomains(qemu_driver); + if (virDriverShouldAutostart(cfg->stateDir, &autostart) < 0) + goto error; + + if (autostart) + qemuAutostartDomains(qemu_driver); return VIR_DRV_STATE_INIT_COMPLETE; diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index d160ff34fe..c536535c6c 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -258,6 +258,7 @@ storageStateInitialize(bool privileged, { VIR_AUTOFREE(char *) configdir = NULL; VIR_AUTOFREE(char *) rundir = NULL; + bool autostart = true; if (VIR_ALLOC(driver) < 0) return VIR_DRV_STATE_INIT_ERROR; @@ -319,7 +320,11 @@ storageStateInitialize(bool privileged, storagePoolUpdateAllState(); - storageDriverAutostart(); + if (virDriverShouldAutostart(driver->stateDir, &autostart) < 0) + goto error; + + if (autostart) + storageDriverAutostart(); driver->storageEventState = virObjectEventStateNew(); -- 2.21.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list