[PATCH v2 RESEND] qemu: fix memory leak about virDomainEventTunableNew

luzhipeng posted 1 patch 1 year, 7 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20220926115553.1220-1-luzhipeng@cestc.cn
src/conf/domain_event.c    | 14 +++++++-------
src/conf/domain_event.h    |  4 ++--
src/qemu/qemu_driver.c     | 22 ++++++++++------------
src/remote/remote_driver.c |  2 +-
4 files changed, 20 insertions(+), 22 deletions(-)
[PATCH v2 RESEND] qemu: fix memory leak about virDomainEventTunableNew
Posted by luzhipeng 1 year, 7 months ago
From: lu zhipeng <luzhipeng@cestc.cn>

For prevent memory leak and easier to use, So change
virDomainEventTunableNew to get virTypedParameterPtr *params
and set it = NULL.

Signed-off-by: lu zhipeng <luzhipeng@cestc.cn>
---
 src/conf/domain_event.c    | 14 +++++++-------
 src/conf/domain_event.h    |  4 ++--
 src/qemu/qemu_driver.c     | 22 ++++++++++------------
 src/remote/remote_driver.c |  2 +-
 4 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c
index ff8ea2c389..ff39975104 100644
--- a/src/conf/domain_event.c
+++ b/src/conf/domain_event.c
@@ -1495,8 +1495,8 @@ static virObjectEvent *
 virDomainEventTunableNew(int id,
                          const char *name,
                          unsigned char *uuid,
-                         virTypedParameterPtr params,
-                         int nparams)
+                         virTypedParameterPtr *params,
+			 int nparams)
 {
     virDomainEventTunable *ev;
 
@@ -1508,19 +1508,19 @@ virDomainEventTunableNew(int id,
                                  id, name, uuid)))
         goto error;
 
-    ev->params = params;
+    ev->params = *params;
     ev->nparams = nparams;
-
+    *params = NULL;
     return (virObjectEvent *)ev;
 
  error:
-    virTypedParamsFree(params, nparams);
+    virTypedParamsFree(*params, nparams);
     return NULL;
 }
 
 virObjectEvent *
 virDomainEventTunableNewFromObj(virDomainObj *obj,
-                                virTypedParameterPtr params,
+                                virTypedParameterPtr *params,
                                 int nparams)
 {
     return virDomainEventTunableNew(obj->def->id,
@@ -1532,7 +1532,7 @@ virDomainEventTunableNewFromObj(virDomainObj *obj,
 
 virObjectEvent *
 virDomainEventTunableNewFromDom(virDomainPtr dom,
-                                virTypedParameterPtr params,
+                                virTypedParameterPtr *params,
                                 int nparams)
 {
     return virDomainEventTunableNew(dom->id,
diff --git a/src/conf/domain_event.h b/src/conf/domain_event.h
index 4a9f6b988b..f4016dc1e9 100644
--- a/src/conf/domain_event.h
+++ b/src/conf/domain_event.h
@@ -195,11 +195,11 @@ virDomainEventDeviceRemovalFailedNewFromDom(virDomainPtr dom,
 
 virObjectEvent *
 virDomainEventTunableNewFromObj(virDomainObj *obj,
-                                virTypedParameterPtr params,
+                                virTypedParameterPtr *params,
                                 int nparams);
 virObjectEvent *
 virDomainEventTunableNewFromDom(virDomainPtr dom,
-                                virTypedParameterPtr params,
+                                virTypedParameterPtr *params,
                                 int nparams);
 
 virObjectEvent *
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 94b70872d4..3db4592945 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4472,12 +4472,12 @@ qemuDomainPinVcpuLive(virDomainObj *vm,
                                 &eventMaxparams, paramField, str) < 0)
         goto cleanup;
 
-    event = virDomainEventTunableNewFromObj(vm, eventParams, eventNparams);
-
+    event = virDomainEventTunableNewFromObj(vm, &eventParams, eventNparams);
     ret = 0;
 
  cleanup:
     virObjectEventStateQueue(driver->domainEventState, event);
+    virTypedParamsFree(eventParams, eventNparams);
     return ret;
 }
 
@@ -4681,7 +4681,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
                                     str) < 0)
             goto endjob;
 
-        event = virDomainEventTunableNewFromDom(dom, eventParams, eventNparams);
+        event = virDomainEventTunableNewFromDom(dom, &eventParams, eventNparams);
     }
 
     if (persistentDef) {
@@ -4700,6 +4700,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
  cleanup:
     virObjectEventStateQueue(driver->domainEventState, event);
     virDomainObjEndAPI(&vm);
+    virTypedParamsFree(eventParams, eventNparams);
     return ret;
 }
 
@@ -5078,7 +5079,7 @@ qemuDomainPinIOThread(virDomainPtr dom,
                                     &eventMaxparams, paramField, str) < 0)
             goto endjob;
 
-        event = virDomainEventTunableNewFromDom(dom, eventParams, eventNparams);
+        event = virDomainEventTunableNewFromDom(dom, &eventParams, eventNparams);
     }
 
     if (persistentDef) {
@@ -5106,6 +5107,7 @@ qemuDomainPinIOThread(virDomainPtr dom,
  cleanup:
     virObjectEventStateQueue(driver->domainEventState, event);
     virDomainObjEndAPI(&vm);
+    virTypedParamsFree(eventParams, eventNparams);
     return ret;
 }
 
@@ -9633,8 +9635,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
     qemuDomainSaveStatus(vm);
 
     if (eventNparams) {
-        event = virDomainEventTunableNewFromDom(dom, eventParams, eventNparams);
-        eventNparams = 0;
+        event = virDomainEventTunableNewFromDom(dom, &eventParams, eventNparams);
         virObjectEventStateQueue(driver->domainEventState, event);
     }
 
@@ -9654,8 +9655,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
 
  cleanup:
     virDomainObjEndAPI(&vm);
-    if (eventNparams)
-        virTypedParamsFree(eventParams, eventNparams);
+    virTypedParamsFree(eventParams, eventNparams);
     return ret;
 }
 #undef SCHED_RANGE_CHECK
@@ -16159,8 +16159,7 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
         qemuDomainSaveStatus(vm);
 
         if (eventNparams) {
-            event = virDomainEventTunableNewFromDom(dom, eventParams, eventNparams);
-            eventNparams = 0;
+            event = virDomainEventTunableNewFromDom(dom, &eventParams, eventNparams);
             virObjectEventStateQueue(driver->domainEventState, event);
         }
     }
@@ -16202,8 +16201,7 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
     VIR_FREE(info.group_name);
     VIR_FREE(conf_info.group_name);
     virDomainObjEndAPI(&vm);
-    if (eventNparams)
-        virTypedParamsFree(eventParams, eventNparams);
+    virTypedParamsFree(eventParams, eventNparams);
     return ret;
 }
 
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index a4efe101a3..b0dba9057b 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -5078,7 +5078,7 @@ remoteDomainBuildEventCallbackTunable(virNetClientProgram *prog G_GNUC_UNUSED,
         return;
     }
 
-    event = virDomainEventTunableNewFromDom(dom, params, nparams);
+    event = virDomainEventTunableNewFromDom(dom, &params, nparams);
 
     virObjectUnref(dom);
 
-- 
2.31.1
Re: [PATCH v2 RESEND] qemu: fix memory leak about virDomainEventTunableNew
Posted by Jiri Denemark 1 year, 7 months ago
On Mon, Sep 26, 2022 at 19:55:52 +0800, luzhipeng wrote:
> From: lu zhipeng <luzhipeng@cestc.cn>
> 
> For prevent memory leak and easier to use, So change
> virDomainEventTunableNew to get virTypedParameterPtr *params
> and set it = NULL.
> 
> Signed-off-by: lu zhipeng <luzhipeng@cestc.cn>
> ---
>  src/conf/domain_event.c    | 14 +++++++-------
>  src/conf/domain_event.h    |  4 ++--
>  src/qemu/qemu_driver.c     | 22 ++++++++++------------
>  src/remote/remote_driver.c |  2 +-
>  4 files changed, 20 insertions(+), 22 deletions(-)
> 
> diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c
> index ff8ea2c389..ff39975104 100644
> --- a/src/conf/domain_event.c
> +++ b/src/conf/domain_event.c
> @@ -1495,8 +1495,8 @@ static virObjectEvent *
>  virDomainEventTunableNew(int id,
>                           const char *name,
>                           unsigned char *uuid,
> -                         virTypedParameterPtr params,
> -                         int nparams)
> +                         virTypedParameterPtr *params,
> +			 int nparams)

I replaced the tabs in the indentation here and pushed the result. Next
time, please make sure you run "meson test" in addition to "meson
compile".

Thanks.

Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Re: [PATCH v2 RESEND] qemu: fix memory leak about virDomainEventTunableNew
Posted by luzhipeng 1 year, 7 months ago

在 2022/9/27 16:11, Jiri Denemark 写道:
> On Mon, Sep 26, 2022 at 19:55:52 +0800, luzhipeng wrote:
>> From: lu zhipeng <luzhipeng@cestc.cn>
>>
>> For prevent memory leak and easier to use, So change
>> virDomainEventTunableNew to get virTypedParameterPtr *params
>> and set it = NULL.
>>
>> Signed-off-by: lu zhipeng <luzhipeng@cestc.cn>
>> ---
>>   src/conf/domain_event.c    | 14 +++++++-------
>>   src/conf/domain_event.h    |  4 ++--
>>   src/qemu/qemu_driver.c     | 22 ++++++++++------------
>>   src/remote/remote_driver.c |  2 +-
>>   4 files changed, 20 insertions(+), 22 deletions(-)
>>
>> diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c
>> index ff8ea2c389..ff39975104 100644
>> --- a/src/conf/domain_event.c
>> +++ b/src/conf/domain_event.c
>> @@ -1495,8 +1495,8 @@ static virObjectEvent *
>>   virDomainEventTunableNew(int id,
>>                            const char *name,
>>                            unsigned char *uuid,
>> -                         virTypedParameterPtr params,
>> -                         int nparams)
>> +                         virTypedParameterPtr *params,
>> +			 int nparams)
> 
> I replaced the tabs in the indentation here and pushed the result. Next
> time, please make sure you run "meson test" in addition to "meson
> compile".
> 
> Thanks.
> 
> Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
> 
> 
Thanks,i got it