[libvirt] [PATCH v2 03/14] qemu: Move exit monitor calls in failure paths

John Ferlan jferlan at redhat.com
Mon Feb 27 13:13:56 UTC 2017



On 02/27/2017 03:48 AM, Jiri Denemark wrote:
> On Thu, Feb 23, 2017 at 13:42:05 -0500, John Ferlan wrote:
>> Since qemuDomainObjExitMonitor can also generate error messages,
>> let's move it inside any error message saving code on error paths
>> for various hotplug add activities.
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>>  src/qemu/qemu_hotplug.c | 33 ++++++++++++++++-----------------
>>  1 file changed, 16 insertions(+), 17 deletions(-)
>>
>> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
>> index 97fb272..9e2f04b 100644
>> --- a/src/qemu/qemu_hotplug.c
>> +++ b/src/qemu/qemu_hotplug.c
> ...
>> @@ -2276,14 +2275,14 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver,
>>      orig_err = virSaveLastError();
>>      if (objAdded)
>>          ignore_value(qemuMonitorDelObject(priv->mon, objalias));
>> -    if (orig_err) {
>> -        virSetError(orig_err);
>> -        virFreeError(orig_err);
>> -    }
>>      if (qemuDomainObjExitMonitor(driver, vm) < 0) {
>>          mem = NULL;
>>          goto audit;
>>      }
>> +    if (orig_err) {
>> +        virSetError(orig_err);
>> +        virFreeError(orig_err);
>> +    }
>>  
>>   removedef:
>>      if ((id = virDomainMemoryFindByDef(vm->def, mem)) >= 0)
> 
> This hunk adds a memory leak and doesn't prevent
> qemuDomainObjExitMonitor from overwriting the error message.
> 
> Jirka
> 

Always has to be one non-conformist...

I'll merge in the following diff:

diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 9e2f04b..0d629af 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -2275,14 +2275,14 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver,
     orig_err = virSaveLastError();
     if (objAdded)
         ignore_value(qemuMonitorDelObject(priv->mon, objalias));
-    if (qemuDomainObjExitMonitor(driver, vm) < 0) {
+    if (qemuDomainObjExitMonitor(driver, vm) < 0)
         mem = NULL;
-        goto audit;
-    }
     if (orig_err) {
         virSetError(orig_err);
         virFreeError(orig_err);
     }
+    if (!mem)
+        goto audit;

  removedef:
     if ((id = virDomainMemoryFindByDef(vm->def, mem)) >= 0)




More information about the libvir-list mailing list