]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh: Don't fetch status for all domains in cmdList
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 20 Jan 2016 14:44:45 +0000 (15:44 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 21 Jan 2016 07:13:34 +0000 (08:13 +0100)
We are getting the list of domains and after that we iterate over
the list and try to get status for each domain hoping it will
skip over domains that disappeared meanwhile. However, this
solution to race is bogus - domain may disappear right after we
have checked its state and before we exec another API over it
(e.g. virDomainHasManagedSaveImage()). Also, when printing just
names or uuids (list --name / --uuid) we issue APIs to obtain the
values, however these require no RPC call as all requested info
is in virDomain object that client already has.
Therefore move the status obtaining only to the place that really
needs it.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
tools/virsh-domain-monitor.c

index 7eb387d17e8b530b8578da12870dccfb936a84f8..7dcbc5cc4eb04ba59f355ea125f80d91dda93227 100644 (file)
@@ -1876,17 +1876,17 @@ cmdList(vshControl *ctl, const vshCmd *cmd)
         else
             ignore_value(virStrcpyStatic(id_buf, "-"));
 
-        state = virshDomainState(ctl, dom, NULL);
+        if (optTable) {
+            state = virshDomainState(ctl, dom, NULL);
 
-        /* Domain could've been removed in the meantime */
-        if (state < 0)
-            continue;
+            /* Domain could've been removed in the meantime */
+            if (state < 0)
+                continue;
 
-        if (optTable && managed && state == VIR_DOMAIN_SHUTOFF &&
-            virDomainHasManagedSaveImage(dom, 0) > 0)
-            state = -2;
+            if (managed && state == VIR_DOMAIN_SHUTOFF &&
+                virDomainHasManagedSaveImage(dom, 0) > 0)
+                state = -2;
 
-        if (optTable) {
             if (optTitle) {
                 if (!(title = virshGetDomainDescription(ctl, dom, true, 0)))
                     goto cleanup;