[libvirt] [PATCHv4] network: Avoid memory leaks on networkBuildDnsmasqArgv

Eric Blake eblake at redhat.com
Wed Feb 1 23:17:11 UTC 2012


On 02/01/2012 02:22 AM, ajia at redhat.com wrote:
> From: Alex Jia <ajia at redhat.com>
> 
> Detected by valgrind. Leaks introduced in commit 973af236.
> 
> * src/network/bridge_driver.c: fix memory leaks on failure and successful path.
> 
> * How to reproduce?
> % make -C tests check TESTS=networkxml2argvtest
> % cd tests && valgrind -v --leak-check=full ./networkxml2argvtest
> 

> 
> Signed-off-by: Alex Jia <ajia at redhat.com>
> ---
>  src/network/bridge_driver.c |   17 +++++++++++------
>  1 files changed, 11 insertions(+), 6 deletions(-)
> 

> @@ -516,7 +520,6 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
>          int i;
>  
>          for (i = 0; i < dns->ntxtrecords; i++) {
> -            char *record = NULL;
>              if (virAsprintf(&record, "%s,%s",
>                              dns->txtrecords[i].name,
>                              dns->txtrecords[i].value) < 0) {

Hmm, we can simplify this loop even further, by using the right function
in the first place.

ACK to what you had, and I'm squashing this in then pushing:

diff --git i/src/network/bridge_driver.c w/src/network/bridge_driver.c
index fb06b64..220f99e 100644
--- i/src/network/bridge_driver.c
+++ w/src/network/bridge_driver.c
@@ -520,15 +520,10 @@ networkBuildDnsmasqArgv(virNetworkObjPtr network,
         int i;

         for (i = 0; i < dns->ntxtrecords; i++) {
-            if (virAsprintf(&record, "%s,%s",
-                            dns->txtrecords[i].name,
-                            dns->txtrecords[i].value) < 0) {
-                virReportOOMError();
-                goto cleanup;
-            }
-
-            virCommandAddArgPair(cmd, "--txt-record", record);
-            VIR_FREE(record);
+            virCommandAddArg(cmd, "--txt-record");
+            virCommandAddArgFormat(cmd, "%s,%s",
+                                   dns->txtrecords[i].name,
+                                   dns->txtrecords[i].value);
         }

         for (i = 0; i < dns->nsrvrecords; i++) {


-- 
Eric Blake   eblake at 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: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120201/147852d8/attachment-0001.sig>


More information about the libvir-list mailing list