From c881b32215b929f047a27b8169cae7f973a0ee01 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Sun, 19 Apr 2009 15:21:54 +0000 Subject: [PATCH] Fix 2 domain ID handling bugs in remote driver --- ChangeLog | 7 +++++++ src/remote_internal.c | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/ChangeLog b/ChangeLog index a63ef56569..9ab61b545e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sun Apr 19 16:19:22 BST 2009 Daniel P. Berrange + + 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 * src/domain_conf.c: Switch over todo domain lookup based diff --git a/src/remote_internal.c b/src/remote_internal.c index cc658c29d0..575bf5d3b9 100644 --- a/src/remote_internal.c +++ b/src/remote_internal.c @@ -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: