[libvirt] [PATCH 4/5] qemu: implement the new virDomainQemuReconnect method

Martin Kletzander mkletzan at redhat.com
Tue Jan 9 13:44:47 UTC 2018


On Wed, Dec 20, 2017 at 04:47:49PM +0000, Daniel P. Berrange wrote:
>Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
>---
> src/qemu/qemu_driver.c  | 57 +++++++++++++++++++++++++++++++++++++++++++++++++
> src/qemu/qemu_process.c | 31 ++++++++++++++++++---------
> src/qemu/qemu_process.h |  1 +
> 3 files changed, 79 insertions(+), 10 deletions(-)
>
>diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>index 97b194b057..fea1f24250 100644
>--- a/src/qemu/qemu_driver.c
>+++ b/src/qemu/qemu_driver.c
>@@ -16300,6 +16300,62 @@ static virDomainPtr qemuDomainQemuAttach(virConnectPtr conn,
> }
>
>
>+static virDomainPtr qemuDomainQemuReconnect(virConnectPtr conn,
>+                                            const char *name,
>+                                            unsigned int flags)
>+{
>+    virQEMUDriverPtr driver = conn->privateData;
>+    virDomainObjPtr vm = NULL;
>+    virDomainPtr dom = NULL;
>+    virCapsPtr caps = NULL;
>+    virQEMUDriverConfigPtr cfg;
>+
>+    virCheckFlags(0, NULL);
>+
>+    cfg = virQEMUDriverGetConfig(driver);
>+
>+    if (strchr(name, '/')) {
>+        virReportError(VIR_ERR_XML_ERROR,
>+                       _("name %s cannot contain '/'"), name);
>+        goto cleanup;
>+    }
>+
>+    vm = virDomainObjListFindByName(driver->domains, name);
>+    if (vm) {
>+        virReportError(VIR_ERR_OPERATION_INVALID,
>+                       _("Domain '%s' already exists"), name);
>+        goto cleanup;
>+    }
>+

It should be possible to start existing inactive domain.

>+    if (!(caps = virQEMUDriverGetCapabilities(driver, false)))
>+        goto cleanup;
>+

You are leaking vm here.  And we should start a job on it.

>+    if (!(vm = virDomainObjListLoadStatus(driver->domains,
>+                                          cfg->stateDir,
>+                                          name,
>+                                          caps,
>+                                          driver->xmlopt,
>+                                          NULL, NULL))) {
>+        goto cleanup;
>+    }
>+
>+    if (virDomainQemuReconnectEnsureACL(conn, vm->def) < 0) {
>+        qemuDomainRemoveInactive(driver, vm);

Of course adjust according to above.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180109/888758c7/attachment-0001.sig>


More information about the libvir-list mailing list