Fix some memory leaks.
authorMichael Poole <mdpoole@troilus.org>
Fri, 14 Dec 2007 03:01:04 +0000 (22:01 -0500)
committerMichael Poole <mdpoole@troilus.org>
Fri, 14 Dec 2007 03:01:04 +0000 (22:01 -0500)
recdb.c (parse_database): Close recdb.f on all exit paths.
sar.c (sar_cleanup): Free the string lists allocated inside config struct.
saxdb.c (saxdb_read_db): Free the previous mondo_db (if any) at first read.

src/recdb.c
src/sar.c
src/saxdb.c

index cba98139082c0d1e03a6fb7c431d52d471f8642b..262de7fb39ba37777a8ba6183a0a75bf333b0027 100644 (file)
@@ -613,10 +613,12 @@ parse_database(const char *filename)
 
     if (fstat(fileno(recdb.f), &statinfo)) {
         log_module(MAIN_LOG, LOG_ERROR, "Unable to fstat database file '%s': %s", filename, strerror(errno));
+        fclose(recdb.f);
         return NULL;
     }
     recdb.length = (size_t)statinfo.st_size;
     if (recdb.length == 0) {
+        fclose(recdb.f);
         return alloc_database();
     }
 
index 16d89a292ade471525fdcb06d7196a659bcff008..b5637501d44fb9341d20a7f07b4bf8cd0392c19f 100644 (file)
--- a/src/sar.c
+++ b/src/sar.c
@@ -2010,6 +2010,8 @@ sar_cleanup(void)
     dict_delete(services_byport);
     dict_delete(sar_nameservers);
     dict_delete(sar_requests);
+    free_string_list(conf.sar_search);
+    free_string_list(conf.sar_nslist);
 }
 
 static void
index 8de664999f4116a6907c263fffc959ba7ffded51..c2337757f1b23ee817559a8e8e509b6c2fdc3305 100644 (file)
@@ -58,6 +58,7 @@ saxdb_read_db(struct saxdb *db) {
     if (!data)
         return;
     if (db->writer == saxdb_mondo_writer) {
+        free_database(mondo_db);
         mondo_db = data;
     } else {
         db->reader(data);