[libvirt] [PATCH 3/9] virsh-util: Add wrapper for virDomainFree

Peter Krempa pkrempa at redhat.com
Tue Apr 11 15:53:49 UTC 2017


virDomainFree has it's quirks (does not like NULL pointers, resets
libvirt errors). Replace it by a virsh helper which will allow us to
centrally fix issues with it.

The syntax-check rule will prohibit new uses of virDomainFree.
---
 cfg.mk                       |   8 ++
 tools/virsh-domain-monitor.c |  36 ++++----
 tools/virsh-domain.c         | 216 ++++++++++++++++++++-----------------------
 tools/virsh-snapshot.c       |  24 ++---
 tools/virsh-util.c           |  10 ++
 tools/virsh-util.h           |   3 +
 6 files changed, 149 insertions(+), 148 deletions(-)

diff --git a/cfg.mk b/cfg.mk
index cc174a3cc..1ff87f445 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -1014,6 +1014,14 @@ sc_gettext_init:
 	halt='the above files do not call virGettextInitialize'		\
 	  $(_sc_search_regexp)

+#Ensure that virsh uses the wrappers on top of the object freeing APIs
+sc_prohibit_obj_free_apis_in_virsh:
+	@prohibit='\virDomainFree\b' \
+	in_vc_files='\virsh.*\.[ch]$$'                              \
+	exclude='sc_prohibit_obj_free_apis_in_virsh' \
+	halt='avoid using virDomainFree in virsh, use virsh-prefixed wrappers instead' \
+	  $(_sc_search_regexp)
+
 # We don't use this feature of maint.mk.
 prev_version_file = /dev/null

diff --git a/tools/virsh-domain-monitor.c b/tools/virsh-domain-monitor.c
index 5215ac6f9..92995ad7d 100644
--- a/tools/virsh-domain-monitor.c
+++ b/tools/virsh-domain-monitor.c
@@ -381,7 +381,7 @@ cmdDomMemStat(vshControl *ctl, const vshCmd *cmd)

     ret = true;
  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -432,7 +432,7 @@ cmdDomblkinfo(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -554,7 +554,7 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
     xmlXPathFreeContext(ctxt);
     xmlFreeDoc(xmldoc);
     VIR_FREE(xml);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -648,7 +648,7 @@ cmdDomiflist(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(interfaces);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     VIR_FREE(xml);
     xmlFreeDoc(xmldoc);
     xmlXPathFreeContext(ctxt);
@@ -758,7 +758,7 @@ cmdDomIfGetLink(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(xpath);
     xmlXPathFreeContext(ctxt);
     xmlFreeDoc(xml);
-    virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -811,7 +811,7 @@ cmdDomControl(vshControl *ctl, const vshCmd *cmd)
     }

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -997,7 +997,7 @@ cmdDomblkstat(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(params);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }
 #undef DOMBLKSTAT_LEGACY_PRINT
@@ -1071,7 +1071,7 @@ cmdDomIfstat(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -1132,7 +1132,7 @@ cmdDomBlkError(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(disks);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -1241,7 +1241,7 @@ cmdDominfo(vshControl *ctl, const vshCmd *cmd)
     memset(&secmodel, 0, sizeof(secmodel));
     if (virNodeGetSecurityModel(priv->conn, &secmodel) == -1) {
         if (last_error->code != VIR_ERR_NO_SUPPORT) {
-            virDomainFree(dom);
+            virshDomainFree(dom);
             return false;
         } else {
             vshResetLibvirtError();
@@ -1254,12 +1254,12 @@ cmdDominfo(vshControl *ctl, const vshCmd *cmd)

             /* Security labels are only valid for active domains */
             if (VIR_ALLOC(seclabel) < 0) {
-                virDomainFree(dom);
+                virshDomainFree(dom);
                 return false;
             }

             if (virDomainGetSecurityLabel(dom, seclabel) == -1) {
-                virDomainFree(dom);
+                virshDomainFree(dom);
                 VIR_FREE(seclabel);
                 return false;
             } else {
@@ -1271,7 +1271,7 @@ cmdDominfo(vshControl *ctl, const vshCmd *cmd)
             VIR_FREE(seclabel);
         }
     }
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -1323,7 +1323,7 @@ cmdDomstate(vshControl *ctl, const vshCmd *cmd)
     }

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -1427,7 +1427,7 @@ cmdDomTime(vshControl *ctl, const vshCmd *cmd)

     ret = true;
  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -1493,7 +1493,7 @@ virshDomainListFree(virshDomainListPtr domlist)
     if (domlist && domlist->domains) {
         for (i = 0; i < domlist->ndomains; i++) {
             if (domlist->domains[i])
-                virDomainFree(domlist->domains[i]);
+                virshDomainFree(domlist->domains[i]);
         }
         VIR_FREE(domlist->domains);
     }
@@ -1689,7 +1689,7 @@ virshDomainListCollect(vshControl *ctl, unsigned int flags)

  remove_entry:
         /* the domain has to be removed as it failed one of the filters */
-        virDomainFree(list->domains[i]);
+        virshDomainFree(list->domains[i]);
         list->domains[i] = NULL;
         deleted++;
     }
@@ -2294,7 +2294,7 @@ cmdDomIfAddr(vshControl *ctl, const vshCmd *cmd)
     }
     VIR_FREE(ifaces);

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 4e4df5b4f..ba179c89c 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -218,7 +218,7 @@ cmdAttachDevice(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -700,8 +700,7 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(xml);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     virBufferFreeAndReset(&buf);
     return functionReturn;
 }
@@ -1011,8 +1010,7 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(xml);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     virBufferFreeAndReset(&buf);
     return functionReturn;
 }
@@ -1056,7 +1054,7 @@ cmdAutostart(vshControl *ctl, const vshCmd *cmd)
             vshError(ctl, _("Failed to mark domain %s as autostarted"), name);
         else
             vshError(ctl, _("Failed to unmark domain %s as autostarted"), name);
-        virDomainFree(dom);
+        virshDomainFree(dom);
         return false;
     }

@@ -1065,7 +1063,7 @@ cmdAutostart(vshControl *ctl, const vshCmd *cmd)
     else
         vshPrintExtra(ctl, _("Domain %s unmarked as autostarted\n"), name);

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return true;
 }

@@ -1379,8 +1377,7 @@ cmdBlkdeviotune(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     virTypedParamsFree(params, nparams);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;

  save_error:
@@ -1577,7 +1574,7 @@ cmdBlkiotune(vshControl * ctl, const vshCmd * cmd)

  cleanup:
     virTypedParamsFree(params, nparams);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;

  save_error:
@@ -2086,7 +2083,7 @@ cmdBlockCommit(vshControl *ctl, const vshCmd *cmd)

     ret = true;
  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     virshBlockJobWaitFree(bjWait);
     return ret;
 }
@@ -2394,7 +2391,7 @@ cmdBlockCopy(vshControl *ctl, const vshCmd *cmd)
  cleanup:
     VIR_FREE(xmlstr);
     virTypedParamsFree(params, nparams);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     virshBlockJobWaitFree(bjWait);
     return ret;
 }
@@ -2638,8 +2635,7 @@ cmdBlockJob(vshControl *ctl, const vshCmd *cmd)
         ret = virshBlockJobInfo(ctl, dom, path, raw, bytes);

  cleanup:
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -2784,7 +2780,7 @@ cmdBlockPull(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     virshBlockJobWaitFree(bjWait);
     return ret;
 }
@@ -2848,7 +2844,7 @@ cmdBlockResize(vshControl *ctl, const vshCmd *cmd)
         ret = true;
     }

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -2942,7 +2938,7 @@ cmdConsole(vshControl *ctl, const vshCmd *cmd)
     ret = cmdRunConsole(ctl, dom, name, flags);

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }
 #endif /* WIN32 */
@@ -3123,7 +3119,7 @@ cmdDomIfSetLink(vshControl *ctl, const vshCmd *cmd)
     xmlXPathFreeContext(ctxt);
     xmlFreeDoc(xml);
     VIR_FREE(xml_buf);
-    virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -3314,7 +3310,7 @@ cmdDomIftune(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     virTypedParamsFree(params, nparams);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;

  save_error:
@@ -3359,7 +3355,7 @@ cmdSuspend(vshControl *ctl, const vshCmd *cmd)
         ret = false;
     }

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -3438,7 +3434,7 @@ cmdDomPMSuspend(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -3485,7 +3481,7 @@ cmdDomPMWakeup(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -3905,7 +3901,7 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(vol_nodes);
     xmlFreeDoc(doc);
     xmlXPathFreeContext(ctxt);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;

  error:
@@ -4085,7 +4081,7 @@ cmdStart(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     VIR_FREE(fds);
     return ret;
 }
@@ -4183,8 +4179,7 @@ doSave(void *opaque)
  out:
     pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL);
  out_sig:
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     VIR_FREE(xml);
     ignore_value(safewrite(data->writefd, &ret, sizeof(ret)));
 }
@@ -4344,7 +4339,7 @@ cmdSave(vshControl *ctl, const vshCmd *cmd)
         vshPrintExtra(ctl, _("\nDomain %s saved to %s\n"), name, to);

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -4607,8 +4602,7 @@ doManagedsave(void *opaque)
  out:
     pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL);
  out_sig:
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     ignore_value(safewrite(data->writefd, &ret, sizeof(ret)));
 }

@@ -4651,7 +4645,7 @@ cmdManagedSave(vshControl *ctl, const vshCmd *cmd)
         vshPrintExtra(ctl, _("\nDomain %s state saved by libvirt\n"), name);

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     VIR_FORCE_CLOSE(p[0]);
     VIR_FORCE_CLOSE(p[1]);
     return ret;
@@ -4708,7 +4702,7 @@ cmdManagedSaveRemove(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -4943,7 +4937,7 @@ cmdSchedinfo(vshControl *ctl, const vshCmd *cmd)
  cleanup:
     virTypedParamsFree(params, nparams);
     virTypedParamsFree(updates, nupdates);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret_val;
 }

@@ -5145,7 +5139,7 @@ doDump(void *opaque)
     pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL);
  out_sig:
     if (dom)
-        virDomainFree(dom);
+        virshDomainFree(dom);
     ignore_value(safewrite(data->writefd, &ret, sizeof(ret)));
 }

@@ -5191,7 +5185,7 @@ cmdDump(vshControl *ctl, const vshCmd *cmd)
         vshPrintExtra(ctl, _("\nDomain %s dumped to %s\n"), name, to);

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     VIR_FORCE_CLOSE(p[0]);
     VIR_FORCE_CLOSE(p[1]);
     return ret;
@@ -5330,7 +5324,7 @@ cmdScreenshot(vshControl *ctl, const vshCmd *cmd)
         unlink(file);
     if (generated)
         VIR_FREE(file);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     if (st)
         virStreamFree(st);
     VIR_FORCE_CLOSE(fd);
@@ -5399,7 +5393,7 @@ cmdSetUserPassword(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }
 /*
@@ -5437,7 +5431,7 @@ cmdResume(vshControl *ctl, const vshCmd *cmd)
         ret = false;
     }

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -5520,8 +5514,7 @@ cmdShutdown(vshControl *ctl, const vshCmd *cmd)

     ret = true;
  cleanup:
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     virStringListFree(modes);
     return ret;
 }
@@ -5600,8 +5593,7 @@ cmdReboot(vshControl *ctl, const vshCmd *cmd)

     ret = true;
  cleanup:
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     virStringListFree(modes);
     return ret;
 }
@@ -5641,7 +5633,7 @@ cmdReset(vshControl *ctl, const vshCmd *cmd)
         ret = false;
     }

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -5943,7 +5935,7 @@ cmdDomjobinfo(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     virTypedParamsFree(params, nparams);
     return ret;

@@ -5982,7 +5974,7 @@ cmdDomjobabort(vshControl *ctl, const vshCmd *cmd)
     if (virDomainAbortJob(dom) < 0)
         ret = false;

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -6183,7 +6175,7 @@ cmdVcpucount(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -6437,7 +6429,7 @@ cmdVcpuinfo(vshControl *ctl, const vshCmd *cmd)
  cleanup:
     VIR_FREE(cpumaps);
     VIR_FREE(cpuinfo);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -6653,7 +6645,7 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(cpumap);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -6714,13 +6706,13 @@ cmdEmulatorPin(vshControl *ctl, const vshCmd *cmd)
         return false;

     if (vshCommandOptStringReq(ctl, cmd, "cpulist", &cpulist) < 0) {
-        virDomainFree(dom);
+        virshDomainFree(dom);
         return false;
     }
     query = !cpulist;

     if ((maxcpu = virshNodeGetCPUCount(priv->conn)) < 0) {
-        virDomainFree(dom);
+        virshDomainFree(dom);
         return false;
     }

@@ -6757,7 +6749,7 @@ cmdEmulatorPin(vshControl *ctl, const vshCmd *cmd)
     ret = true;
  cleanup:
     VIR_FREE(cpumap);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -6853,7 +6845,7 @@ cmdSetvcpus(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -6939,7 +6931,7 @@ cmdGuestvcpus(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     virTypedParamsFree(params, nparams);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -7021,7 +7013,7 @@ cmdSetvcpu(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -7079,7 +7071,7 @@ cmdDomblkthreshold(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -7155,7 +7147,7 @@ cmdIOThreadInfo(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(info);

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return niothreads >= 0;
 }

@@ -7237,7 +7229,7 @@ cmdIOThreadPin(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(cpumap);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -7302,7 +7294,7 @@ cmdIOThreadAdd(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -7367,7 +7359,7 @@ cmdIOThreadDel(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -7758,7 +7750,7 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     virTypedParamsFree(params, nparams);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;

  failed_stats:
@@ -7854,7 +7846,7 @@ cmdCreate(vshControl *ctl, const vshCmd *cmd)
     if (console)
         cmdRunConsole(ctl, dom, NULL, 0);
 #endif
-    virDomainFree(dom);
+    virshDomainFree(dom);
     ret = true;

  cleanup:
@@ -7913,7 +7905,7 @@ cmdDefine(vshControl *ctl, const vshCmd *cmd)
     if (dom != NULL) {
         vshPrintExtra(ctl, _("Domain %s defined from %s\n"),
                       virDomainGetName(dom), from);
-        virDomainFree(dom);
+        virshDomainFree(dom);
     } else {
         vshError(ctl, _("Failed to define domain from %s"), from);
         ret = false;
@@ -7970,7 +7962,7 @@ cmdDestroy(vshControl *ctl, const vshCmd *cmd)
         ret = false;
     }

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -8137,8 +8129,7 @@ cmdDesc(vshControl *ctl, const vshCmd *cmd)
         unlink(tmp);
         VIR_FREE(tmp);
     }
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -8281,7 +8272,7 @@ cmdMetadata(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -8316,7 +8307,7 @@ cmdInjectNMI(vshControl *ctl, const vshCmd *cmd)
     if (virDomainInjectNMI(dom, 0) < 0)
             ret = false;

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -8412,7 +8403,7 @@ cmdSendKey(vshControl *ctl, const vshCmd *cmd)
         ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -8517,7 +8508,7 @@ cmdSendProcessSignal(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -8585,7 +8576,7 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd)
     else
         max = ULONG_MAX;
     if (vshCommandOptScaledInt(ctl, cmd, "size", &bytes, 1024, max) < 0) {
-        virDomainFree(dom);
+        virshDomainFree(dom);
         return false;
     }
     kibibytes = VIR_DIV_UP(bytes, 1024);
@@ -8598,7 +8589,7 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd)
             ret = false;
     }

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -8666,7 +8657,7 @@ cmdSetmaxmem(vshControl *ctl, const vshCmd *cmd)
     else
         max = ULONG_MAX;
     if (vshCommandOptScaledInt(ctl, cmd, "size", &bytes, 1024, max) < 0) {
-        virDomainFree(dom);
+        virshDomainFree(dom);
         return false;
     }
     kibibytes = VIR_DIV_UP(bytes, 1024);
@@ -8683,7 +8674,7 @@ cmdSetmaxmem(vshControl *ctl, const vshCmd *cmd)
         }
     }

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -8854,7 +8845,7 @@ cmdMemtune(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     virTypedParamsFree(params, nparams);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;

  save_error:
@@ -8993,7 +8984,7 @@ cmdPerf(vshControl *ctl, const vshCmd *cmd)
     ret = true;
  cleanup:
     virTypedParamsFree(params, nparams);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -9126,7 +9117,7 @@ cmdNumatune(vshControl * ctl, const vshCmd * cmd)

  cleanup:
     virTypedParamsFree(params, nparams);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;

  save_error:
@@ -9220,7 +9211,7 @@ cmdQemuMonitorCommand(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(result);
     VIR_FREE(monitor_cmd);
     virJSONValueFree(pretty);
-    virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -9384,8 +9375,7 @@ cmdQemuMonitorEvent(vshControl *ctl, const vshCmd *cmd)
     if (eventId >= 0 &&
         virConnectDomainQemuMonitorEventDeregister(priv->conn, eventId) < 0)
         ret = false;
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -9431,7 +9421,7 @@ cmdQemuAttach(vshControl *ctl, const vshCmd *cmd)

     vshPrintExtra(ctl, _("Domain %s attached to pid %u\n"),
                   virDomainGetName(dom), pid_value);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     ret = true;

  cleanup:
@@ -9555,8 +9545,7 @@ cmdQemuAgentCommand(vshControl *ctl, const vshCmd *cmd)
  cleanup:
     VIR_FREE(result);
     VIR_FREE(guest_agent_cmd);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -9697,8 +9686,7 @@ cmdLxcEnterNamespace(vshControl *ctl, const vshCmd *cmd)
  cleanup:
     VIR_FREE(seclabel);
     VIR_FREE(secmodel);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     VIR_FREE(cmdargv);
     return ret;
 }
@@ -9769,7 +9757,7 @@ cmdDumpXML(vshControl *ctl, const vshCmd *cmd)
         ret = false;
     }

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -9915,7 +9903,7 @@ cmdDomname(vshControl *ctl, const vshCmd *cmd)
         return false;

     vshPrint(ctl, "%s\n", virDomainGetName(dom));
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return true;
 }

@@ -9962,7 +9950,7 @@ cmdDomrename(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -9999,7 +9987,7 @@ cmdDomid(vshControl *ctl, const vshCmd *cmd)
         vshPrint(ctl, "%s\n", "-");
     else
         vshPrint(ctl, "%d\n", id);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return true;
 }

@@ -10036,7 +10024,7 @@ cmdDomuuid(vshControl *ctl, const vshCmd *cmd)
     else
         vshError(ctl, "%s", _("failed to get domain UUID"));

-    virDomainFree(dom);
+    virshDomainFree(dom);
     return true;
 }

@@ -10466,7 +10454,7 @@ doMigrate(void *opaque)
         virDomainPtr ddom = NULL;

         if ((ddom = virDomainMigrate3(dom, dconn, params, nparams, flags))) {
-            virDomainFree(ddom);
+            virshDomainFree(ddom);
             ret = '0';
         }
     }
@@ -10475,8 +10463,7 @@ doMigrate(void *opaque)
     pthread_sigmask(SIG_SETMASK, &oldsigmask, NULL);
  out_sig:
     virTypedParamsFree(params, nparams);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     ignore_value(safewrite(data->writefd, &ret, sizeof(ret)));
     return;

@@ -10632,7 +10619,7 @@ cmdMigrate(vshControl *ctl, const vshCmd *cmd)
         virConnectClose(data.dconn);
     if (iterEvent != -1)
         virConnectDomainEventDeregisterAny(priv->conn, iterEvent);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     VIR_FORCE_CLOSE(p[0]);
     VIR_FORCE_CLOSE(p[1]);
     return functionReturn;
@@ -10684,7 +10671,7 @@ cmdMigrateSetMaxDowntime(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  done:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -10741,7 +10728,7 @@ cmdMigrateCompCache(vshControl *ctl, const vshCmd *cmd)

     ret = true;
  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -10788,7 +10775,7 @@ cmdMigrateSetMaxSpeed(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  done:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -10828,7 +10815,7 @@ cmdMigrateGetMaxSpeed(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  done:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -10870,7 +10857,7 @@ cmdMigratePostCopy(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -11127,7 +11114,7 @@ cmdDomDisplay(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(output);
     xmlXPathFreeContext(ctxt);
     xmlFreeDoc(xml);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -11208,7 +11195,7 @@ cmdVNCDisplay(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(listen_addr);
     xmlXPathFreeContext(ctxt);
     xmlFreeDoc(xml);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -11264,7 +11251,7 @@ cmdTTYConsole(vshControl *ctl, const vshCmd *cmd)
     xmlXPathFreeObject(obj);
     xmlXPathFreeContext(ctxt);
     xmlFreeDoc(xml);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -11307,7 +11294,7 @@ cmdDomHostname(vshControl *ctl, const vshCmd *cmd)

  error:
     VIR_FREE(hostname);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -11504,7 +11491,7 @@ cmdDetachDevice(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(buffer);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return funcRet;
 }

@@ -11586,7 +11573,7 @@ cmdUpdateDevice(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(buffer);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -11772,7 +11759,7 @@ cmdDetachInterface(vshControl *ctl, const vshCmd *cmd)
     }
     VIR_FREE(doc_live);
     VIR_FREE(doc_config);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -12129,7 +12116,7 @@ cmdDetachDisk(vshControl *ctl, const vshCmd *cmd)
     xmlFreeNode(disk_node);
     VIR_FREE(disk_xml);
     VIR_FREE(doc);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return functionReturn;
 }

@@ -12196,10 +12183,8 @@ cmdEdit(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    if (dom)
-        virDomainFree(dom);
-    if (dom_edited)
-        virDomainFree(dom_edited);
+    virshDomainFree(dom);
+    virshDomainFree(dom_edited);

     return ret;
 }
@@ -13087,8 +13072,7 @@ cmdEvent(vshControl *ctl, const vshCmd *cmd)
         }
         VIR_FREE(data);
     }
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -13253,7 +13237,7 @@ cmdChangeMedia(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(doc);
     xmlFreeNode(disk_node);
     VIR_FREE(disk_xml);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -13306,7 +13290,7 @@ cmdDomFSTrim(vshControl *ctl, const vshCmd *cmd)
     ret = true;

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -13359,7 +13343,7 @@ cmdDomFSFreeze(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(mountpoints);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret >= 0;
 }

@@ -13412,7 +13396,7 @@ cmdDomFSThaw(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(mountpoints);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret >= 0;
 }

@@ -13472,7 +13456,7 @@ cmdDomFSInfo(vshControl *ctl, const vshCmd *cmd)
     }

  cleanup:
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret >= 0;
 }

diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c
index 46e2cbb24..5af9a7d7a 100644
--- a/tools/virsh-snapshot.c
+++ b/tools/virsh-snapshot.c
@@ -210,8 +210,7 @@ cmdSnapshotCreate(vshControl *ctl, const vshCmd *cmd)

  cleanup:
     VIR_FREE(buffer);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -454,7 +453,7 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd)
  cleanup:
     virBufferFreeAndReset(&buf);
     VIR_FREE(buffer);
-    virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -606,7 +605,7 @@ cmdSnapshotEdit(vshControl *ctl, const vshCmd *cmd)
         virDomainSnapshotFree(edited);
     if (snapshot)
         virDomainSnapshotFree(snapshot);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -720,7 +719,7 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(xml);
     if (snapshot)
         virDomainSnapshotFree(snapshot);
-    virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -1008,7 +1007,7 @@ cmdSnapshotInfo(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(parent);
     if (snapshot)
         virDomainSnapshotFree(snapshot);
-    virDomainFree(dom);
+    virshDomainFree(dom);
     return ret;
 }

@@ -1647,7 +1646,7 @@ cmdSnapshotList(vshControl *ctl, const vshCmd *cmd)
     xmlXPathFreeContext(ctxt);
     xmlFreeDoc(xml);
     VIR_FREE(doc);
-    virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -1711,7 +1710,7 @@ cmdSnapshotDumpXML(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(xml);
     if (snapshot)
         virDomainSnapshotFree(snapshot);
-    virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -1771,8 +1770,7 @@ cmdSnapshotParent(vshControl *ctl, const vshCmd *cmd)
     VIR_FREE(parent);
     if (snapshot)
         virDomainSnapshotFree(snapshot);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -1857,8 +1855,7 @@ cmdDomainSnapshotRevert(vshControl *ctl, const vshCmd *cmd)
  cleanup:
     if (snapshot)
         virDomainSnapshotFree(snapshot);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
@@ -1940,8 +1937,7 @@ cmdSnapshotDelete(vshControl *ctl, const vshCmd *cmd)
  cleanup:
     if (snapshot)
         virDomainSnapshotFree(snapshot);
-    if (dom)
-        virDomainFree(dom);
+    virshDomainFree(dom);

     return ret;
 }
diff --git a/tools/virsh-util.c b/tools/virsh-util.c
index 5c99655fb..5fdb40855 100644
--- a/tools/virsh-util.c
+++ b/tools/virsh-util.c
@@ -150,3 +150,13 @@ virshStreamSink(virStreamPtr st ATTRIBUTE_UNUSED,

     return safewrite(*fd, bytes, nbytes);
 }
+
+
+void
+virshDomainFree(virDomainPtr dom)
+{
+    if (!dom)
+        return;
+
+    virDomainFree(dom); /* sc_prohibit_obj_free_apis_in_virsh */
+}
diff --git a/tools/virsh-util.h b/tools/virsh-util.h
index 132bf0b4b..78f7a0ea9 100644
--- a/tools/virsh-util.h
+++ b/tools/virsh-util.h
@@ -38,6 +38,9 @@ virshCommandOptDomain(vshControl *ctl,
                       const vshCmd *cmd,
                       const char **name);

+void
+virshDomainFree(virDomainPtr dom);
+
 int
 virshDomainState(vshControl *ctl,
                  virDomainPtr dom,
-- 
2.12.2




More information about the libvir-list mailing list