]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix 2 domain ID handling bugs in remote driver
authorDaniel P. Berrange <berrange@redhat.com>
Sun, 19 Apr 2009 15:21:54 +0000 (15:21 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Sun, 19 Apr 2009 15:21:54 +0000 (15:21 +0000)
ChangeLog
src/remote_internal.c

index a63ef565690a05a3df8b306600f57f9085128b01..9ab61b545e00cc8a1a0e6589304d19a2d84564ab 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sun Apr 19 16:19:22 BST 2009 Daniel P. Berrange <berrange@redhat.com>
+
+       Fix 2 domain ID handling bugs in remote driver
+       * src/remote_internal.c: Add virDomainCreate(), do a lookup
+       to find the ID of newly created domain. Reset ID to -1 after
+       doing a destroy operation on a domain
+
 Sun Apr 19 16:14:22 BST 2009 Daniel P. Berrange <berrange@redhat.com>
 
        * src/domain_conf.c: Switch over todo domain lookup based
index cc658c29d071952c7408af8dc8a482827f6338cd..575bf5d3b9244c2c8d4f925968333f925ff0a63e 100644 (file)
@@ -1939,6 +1939,7 @@ remoteDomainDestroy (virDomainPtr domain)
         goto done;
 
     rv = 0;
+    domain->id = -1;
 
 done:
     remoteDriverUnlock(priv);
@@ -2673,6 +2674,8 @@ remoteDomainCreate (virDomainPtr domain)
 {
     int rv = -1;
     remote_domain_create_args args;
+    remote_domain_lookup_by_uuid_args args2;
+    remote_domain_lookup_by_uuid_ret ret2;
     struct private_data *priv = domain->conn->privateData;
 
     remoteDriverLock(priv);
@@ -2684,6 +2687,20 @@ remoteDomainCreate (virDomainPtr domain)
               (xdrproc_t) xdr_void, (char *) NULL) == -1)
         goto done;
 
+    /* Need to do a lookup figure out ID of newly started guest, because
+     * bug in design of REMOTE_PROC_DOMAIN_CREATE means we aren't getting
+     * it returned.
+     */
+    memcpy (args2.uuid, domain->uuid, VIR_UUID_BUFLEN);
+    memset (&ret2, 0, sizeof ret2);
+    if (call (domain->conn, priv, 0, REMOTE_PROC_DOMAIN_LOOKUP_BY_UUID,
+              (xdrproc_t) xdr_remote_domain_lookup_by_uuid_args, (char *) &args2,
+              (xdrproc_t) xdr_remote_domain_lookup_by_uuid_ret, (char *) &ret2) == -1)
+        goto done;
+
+    domain->id = ret2.dom.id;
+    xdr_free ((xdrproc_t) &xdr_remote_domain_lookup_by_uuid_ret, (char *) &ret2);
+
     rv = 0;
 
 done: