[ostree] core: Squash some memory leaks



commit bab31db7eebc5807d226abb41dd0693d53f072ef
Author: Colin Walters <walters verbum org>
Date:   Tue Nov 1 12:20:33 2011 -0400

    core: Squash some memory leaks

 src/libostree/ostree-core.c |    5 +++--
 src/libostree/ostree-repo.c |   12 ++++++++----
 2 files changed, 11 insertions(+), 6 deletions(-)
---
diff --git a/src/libostree/ostree-core.c b/src/libostree/ostree-core.c
index e36845d..d9027a3 100644
--- a/src/libostree/ostree-core.c
+++ b/src/libostree/ostree-core.c
@@ -354,6 +354,8 @@ ostree_parse_metadata_file (const char                  *path,
                                            FALSE,
                                            (GDestroyNotify) g_mapped_file_unref,
                                            mfile);
+      mfile = NULL;
+      g_variant_ref_sink (container);
       g_variant_get (container, "(uv)",
                      &ret_type, &ret_variant);
       ret_type = GUINT32_FROM_BE (ret_type);
@@ -363,12 +365,11 @@ ostree_parse_metadata_file (const char                  *path,
                        "Corrupted metadata object '%s'; invalid type %d", path, ret_type);
           goto out;
         }
-      mfile = NULL;
     }
 
   ret = TRUE;
   *out_type = ret_type;
-  *out_variant = ret_variant;
+  *out_variant = g_variant_ref_sink (ret_variant);
   ret_variant = NULL;
  out:
   if (ret_variant)
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index d0f83de..9a3528c 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -643,7 +643,6 @@ import_directory_meta (OstreeRepo  *self,
                            GUINT32_TO_BE ((guint32)stbuf.st_gid),
                            GUINT32_TO_BE ((guint32)stbuf.st_mode),
                            xattrs);
-  xattrs = NULL; /* was floating */
   g_variant_ref_sink (dirmeta);
 
   if (!import_gvariant_object (self, OSTREE_SERIALIZED_DIRMETA_VARIANT, 
@@ -791,6 +790,7 @@ link_object_trusted (OstreeRepo   *self,
   g_free (dest_basename);
   g_free (tmp_dest_basename);
   g_free (dest_dirname);
+  g_free (dest_path);
   return ret;
 }
 
@@ -1037,7 +1037,7 @@ parse_tree (OstreeRepo    *self,
       const char *filename;
       const char *checksum;
 
-      g_variant_get_child (files_variant, i, "(ss)", &filename, &checksum);
+      g_variant_get_child (files_variant, i, "(&s&s)", &filename, &checksum);
 
       g_hash_table_insert (ret_pdata->files, g_strdup (filename), g_strdup (checksum));
     }
@@ -1052,7 +1052,7 @@ parse_tree (OstreeRepo    *self,
       GVariant *metadata = NULL;
       ParsedDirectoryData *child_dir = NULL;
 
-      g_variant_get_child (dirs_variant, i, "(sss)",
+      g_variant_get_child (dirs_variant, i, "(&s&s&s)",
                            &dirname, &tree_checksum, &meta_checksum);
       
       if (!parse_tree (self, tree_checksum, &child_tree, error))
@@ -1068,7 +1068,7 @@ parse_tree (OstreeRepo    *self,
       child_dir = g_new0 (ParsedDirectoryData, 1);
       child_dir->tree_data = child_tree;
       child_dir->metadata_sha256 = g_strdup (meta_checksum);
-      child_dir->meta_data = g_variant_ref_sink (metadata);
+      child_dir->meta_data = metadata;
 
       g_hash_table_insert (ret_pdata->directories, g_strdup (dirname), child_dir);
     }
@@ -1189,6 +1189,7 @@ import_parsed_tree (OstreeRepo    *self,
 
       g_variant_builder_add (&dirs_builder, "(sss)",
                              name, g_checksum_get_string (dir_checksum), dir->metadata_sha256);
+      g_checksum_free (dir_checksum);
     }
 
   serialized_tree = g_variant_new ("(u a{sv}@a(ss)@a(sss))",
@@ -1527,6 +1528,8 @@ add_one_path_to_tree_and_import (OstreeRepo     *self,
 
   ret = TRUE;
  out:
+  if (components)
+    g_ptr_array_unref (components);
   g_free (component_abspath);
   g_free (abspath);
   return ret;
@@ -1599,6 +1602,7 @@ commit_parsed_tree (OstreeRepo *self,
                           GUINT64_TO_BE (g_date_time_to_unix (now)),
                           g_checksum_get_string (root_checksum),
                           root->metadata_sha256);
+  g_variant_ref_sink (commit);
   if (!import_gvariant_object (self, OSTREE_SERIALIZED_COMMIT_VARIANT,
                                commit, &ret_commit, error))
     goto out;



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