bug-recutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug-recutils] [PATCH] Fix some memory leaks detected by Valgrind.


From: Michał Masłowski
Subject: [bug-recutils] [PATCH] Fix some memory leaks detected by Valgrind.
Date: Mon, 16 Apr 2012 21:28:15 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

Hello,

This patch fixes memory leaks which occurred when running "recsel
200-records.in" with the file generated for performance tests via
valgrind.

Maybe running tests via valgrind should be supported in the build
system, it would make detecting more such problems easier.  I haven't
tried changing it.


2012-04-16  Michał Masłowski  <address@hidden>

        * src/rec-field.c (rec_field_destroy): Free the value, like the
        other structure members.

        * src/rec-mset.c (rec_mset_destroy): Free type names and the mset
        when destroying it.

        * src/rec-parser.c (rec_parse_field): Free field name and value
        after setting them, since only copies are used later.

        * utils/recutl.c (recutl_parse_db_from_file): Destroy the parser
        after using it.


From c7d056114266245d9e4d90760ebc6a0cc51cce33 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C5=82=20Mas=C5=82owski?= <address@hidden>
Date: Mon, 16 Apr 2012 20:37:45 +0200
Subject: [PATCH] Fix some memory leaks detected by Valgrind.

---
 src/rec-field.c  |    1 +
 src/rec-mset.c   |    6 ++++++
 src/rec-parser.c |    2 ++
 utils/recutl.c   |    3 ++-
 4 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/rec-field.c b/src/rec-field.c
index 57fd5b0..a07af0d 100644
--- a/src/rec-field.c
+++ b/src/rec-field.c
@@ -182,6 +182,7 @@ rec_field_destroy (rec_field_t field)
   if (field)
     {
       free (field->name);
+      free (field->value);
       free (field->source);
       free (field->location_str);
       free (field->char_location_str);
diff --git a/src/rec-mset.c b/src/rec-mset.c
index 707167a..f15c294 100644
--- a/src/rec-mset.c
+++ b/src/rec-mset.c
@@ -146,7 +146,13 @@ rec_mset_destroy (rec_mset_t mset)
 {
   if (mset)
     {
+      int i;
+      for (i = 0; i < mset->ntypes; i++)
+        {
+          free(mset->name[i]);
+        }
       gl_list_free (mset->elem_list);
+      free (mset);
     }
 }
 
diff --git a/src/rec-parser.c b/src/rec-parser.c
index 0019d2d..1d27f68 100644
--- a/src/rec-parser.c
+++ b/src/rec-parser.c
@@ -386,6 +386,8 @@ rec_parse_field (rec_parser_t parser,
         {
           new = rec_field_new (field_name,
                                field_value);
+          free (field_name);
+          free (field_value);
          if (new == NULL)
            return false;
 
diff --git a/utils/recutl.c b/utils/recutl.c
index fb53f89..88228a3 100644
--- a/utils/recutl.c
+++ b/utils/recutl.c
@@ -254,7 +254,8 @@ recutl_parse_db_from_file (FILE *in,
       rec_parser_perror (parser, "%s", file_name);
       res = false;
     }
-  
+  rec_parser_destroy (parser);
+
   return res;
 }
 
-- 
1.7.10

Attachment: pgpldWfHoFoew.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]