[libvirt] [PATCH v3 04/18] blockjob: split out block info monitor handling

Eric Blake eblake at redhat.com
Fri Sep 5 16:36:57 UTC 2014


On 08/30/2014 10:02 PM, Eric Blake wrote:
> Another layer of overly-multiplexed code that deserves to be
> split into obviously separate paths for query vs. modify.
> This continues the cleanup started in the previous patch.
> 
> In the process, make some tweaks to simplify the logic when
> parsing the JSON reply.  There should be no user-visible
> semantic changes.
> 

In addition to the ATTRIBUTE_NONNULL addition, I found a bug that needs
fixing:

> +int
> +qemuMonitorJSONBlockJobInfo(qemuMonitorPtr mon,
> +                            const char *device,
> +                            virDomainBlockJobInfoPtr info)
>  {
> +    virJSONValuePtr cmd = NULL;
> +    virJSONValuePtr reply = NULL;
>      virJSONValuePtr data;
>      int nr_results;
>      size_t i;
> +    int ret;
> 
> -    if (!info)
> +    cmd = qemuMonitorJSONMakeCommand("query-block-jobs", NULL);
> +    if (!cmd)
>          return -1;
> +    ret = qemuMonitorJSONCommand(mon, cmd, &reply);
> +    if (ret < 0)
> +        goto cleanup;

If we haven't errored out yet, then ret is now 0...

> 
>      if ((data = virJSONValueObjectGet(reply, "return")) == NULL) {
>          virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>                         _("reply was missing return data"));
> -        return -1;
> +        goto cleanup;

...and we have changed the return code from -1 to 0 here.  Oops.  I'm
squashing this in, before pushing:

diff --git i/src/qemu/qemu_monitor_json.c w/src/qemu/qemu_monitor_json.c
index 68ba084..2b58c78 100644
--- i/src/qemu/qemu_monitor_json.c
+++ w/src/qemu/qemu_monitor_json.c
@@ -3753,13 +3753,12 @@ qemuMonitorJSONBlockJobInfo(qemuMonitorPtr mon,
     virJSONValuePtr data;
     int nr_results;
     size_t i;
-    int ret;
+    int ret = -1;

     cmd = qemuMonitorJSONMakeCommand("query-block-jobs", NULL);
     if (!cmd)
         return -1;
-    ret = qemuMonitorJSONCommand(mon, cmd, &reply);
-    if (ret < 0)
+    if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
         goto cleanup;

     if ((data = virJSONValueObjectGet(reply, "return")) == NULL) {
@@ -3780,7 +3779,7 @@ qemuMonitorJSONBlockJobInfo(qemuMonitorPtr mon,
         goto cleanup;
     }

-    for (i = 0, ret = 0; i < nr_results && ret == 0; i++) {
+    for (i = ret = 0; i < nr_results && ret == 0; i++) {
         virJSONValuePtr entry = virJSONValueArrayGet(data, i);
         if (!entry) {
             virReportError(VIR_ERR_INTERNAL_ERROR, "%s",


-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 539 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140905/57a76acb/attachment-0001.sig>


More information about the libvir-list mailing list