[libvirt] [PATCH] qemu: Fix qemuMonitorCreateObjectProps

John Ferlan posted 1 patch 5 years, 10 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20180618115635.9960-1-jferlan@redhat.com
Test syntax-check passed
src/qemu/qemu_monitor.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[libvirt] [PATCH] qemu: Fix qemuMonitorCreateObjectProps
Posted by John Ferlan 5 years, 10 months ago
Commit id f0a23c0c3 introduced qemuMonitorCreateObjectProps
to manage wrapping the object name and alias; however, calling
virJSONValueObjectCreateVArgs and checking a unary ! return
status meant when the CreateVAArgs function returned zero, then
rather than generating a @propsret, the jump to cleanup would
result in an unexpected failure and cause virsh to issue the
"error: An error occurred, but the cause is unknown" error
message for something like "virsh iothreadadd $DOM 10" (assuming
that IOThread 10 didn't already exist).

Signed-off-by: John Ferlan <jferlan@redhat.com>
---
 src/qemu/qemu_monitor.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index b29672d4f1..d6771c1d52 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -3051,7 +3051,7 @@ qemuMonitorCreateObjectProps(virJSONValuePtr *propsret,
 
     va_start(args, alias);
 
-    if (!(virJSONValueObjectCreateVArgs(&props, args)))
+    if (virJSONValueObjectCreateVArgs(&props, args) < 0)
         goto cleanup;
 
     if (!(*propsret = qemuMonitorCreateObjectPropsWrap(type, alias, &props)))
-- 
2.14.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] qemu: Fix qemuMonitorCreateObjectProps
Posted by Ján Tomko 5 years, 10 months ago
The commit message is one long sentence and a bit hard to read.

On Mon, Jun 18, 2018 at 07:56:35AM -0400, John Ferlan wrote:
>Commit id f0a23c0c3 introduced qemuMonitorCreateObjectProps
>to manage wrapping the object name and alias; however, calling

Listing the commit that broke it can be in a separate paragraph.

>virJSONValueObjectCreateVArgs and checking a unary ! return
>status meant when the CreateVAArgs function returned zero, then
>rather than generating a @propsret, the jump to cleanup would

Rather than explaing the semantics of C operators, it would be helpful
to mention that virJSONValueObjectCreateVArgs returns -1 on failure
and 0 when we did not need to add any arguments.


>result in an unexpected failure and cause virsh to issue the
>"error: An error occurred, but the cause is unknown" error
>message for something like "virsh iothreadadd $DOM 10" (assuming
>that IOThread 10 didn't already exist).

Putting the example error message and virsh commands on separate lines
would make the commit message easier to read.

>
>Signed-off-by: John Ferlan <jferlan@redhat.com>
>---
> src/qemu/qemu_monitor.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
>index b29672d4f1..d6771c1d52 100644
>--- a/src/qemu/qemu_monitor.c
>+++ b/src/qemu/qemu_monitor.c
>@@ -3051,7 +3051,7 @@ qemuMonitorCreateObjectProps(virJSONValuePtr *propsret,
>
>     va_start(args, alias);
>
>-    if (!(virJSONValueObjectCreateVArgs(&props, args)))
>+    if (virJSONValueObjectCreateVArgs(&props, args) < 0)

Looks like qemuDomainHotplugAddIOThread is the only user of qemuMonitorCreateObjectProps
passing NULL for args. Can it be tested by our test suite?

With more newlines in the commit message:

Reviewed-by: Ján Tomko <jtomko@redhat.com>

Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] qemu: Fix qemuMonitorCreateObjectProps
Posted by John Ferlan 5 years, 10 months ago

On 06/18/2018 08:35 AM, Ján Tomko wrote:
> The commit message is one long sentence and a bit hard to read.
> 

True, haha so it is... Still better than nothing and assuming the reader
can figure it out ;-)

> On Mon, Jun 18, 2018 at 07:56:35AM -0400, John Ferlan wrote:
>> Commit id f0a23c0c3 introduced qemuMonitorCreateObjectProps
>> to manage wrapping the object name and alias; however, calling
> 
> Listing the commit that broke it can be in a separate paragraph.
> 
>> virJSONValueObjectCreateVArgs and checking a unary ! return
>> status meant when the CreateVAArgs function returned zero, then
>> rather than generating a @propsret, the jump to cleanup would
> 
> Rather than explaing the semantics of C operators, it would be helpful
> to mention that virJSONValueObjectCreateVArgs returns -1 on failure
> and 0 when we did not need to add any arguments.
> 

6 of one... < 0 is just a C semantic check too of a different style. The
unary check for an integer which can be == 0 is just one of those things
that I see a lot in code and I usually point out much to the dismay of a
few people.

> 
>> result in an unexpected failure and cause virsh to issue the
>> "error: An error occurred, but the cause is unknown" error
>> message for something like "virsh iothreadadd $DOM 10" (assuming
>> that IOThread 10 didn't already exist).
> 
> Putting the example error message and virsh commands on separate lines
> would make the commit message easier to read.
> 

I'll alter to:

Fix the return value status comparison checking for call to
virJSONValueObjectCreateVArgs introduced by commit id f0a23c0c3.

If a NULL arglist is passed, then a 0 is returned which is a valid
status and we only should fail when the return is < 0.

This resolves an issue seen for "virsh iothreadadd $dom $iothread" where
a "error: An error occurred, but the cause is unknown" error was
generated when trying to hotplug an IOThread to a domain since
qemuDomainHotplugAddIOThread passes a NULL arglist.



>>
>> Signed-off-by: John Ferlan <jferlan@redhat.com>
>> ---
>> src/qemu/qemu_monitor.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
>> index b29672d4f1..d6771c1d52 100644
>> --- a/src/qemu/qemu_monitor.c
>> +++ b/src/qemu/qemu_monitor.c
>> @@ -3051,7 +3051,7 @@ qemuMonitorCreateObjectProps(virJSONValuePtr
>> *propsret,
>>
>>     va_start(args, alias);
>>
>> -    if (!(virJSONValueObjectCreateVArgs(&props, args)))
>> +    if (virJSONValueObjectCreateVArgs(&props, args) < 0)
> 
> Looks like qemuDomainHotplugAddIOThread is the only user of
> qemuMonitorCreateObjectProps
> passing NULL for args. Can it be tested by our test suite?

Perhaps by anyone that wants to write those tests... maybe the original
author should have done that ;-)!

Thanks for the quick review.

John

> 
> With more newlines in the commit message:
> 
> Reviewed-by: Ján Tomko <jtomko@redhat.com>
> 
> Jano

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list