[gvdb/mcatanzaro/fb-free] Don't free FileBuilder in serialize function



commit 0d03b2c6dc062b7682163ef7f279dfb0b010264d
Author: Michael Catanzaro <mcatanzaro igalia com>
Date:   Sat Jun 22 13:23:09 2019 -0500

    Don't free FileBuilder in serialize function
    
    It's confused both myself and Jan-Michael, when reviewing my changes to
    this code. It's weird for the serialize function to take ownership of
    the passed FileBuilder. Don't do that.
    
    We can also add a convenience free function.

 gvdb-builder.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
---
diff --git a/gvdb-builder.c b/gvdb-builder.c
index 70c0ac1..cf94691 100644
--- a/gvdb-builder.c
+++ b/gvdb-builder.c
@@ -450,6 +450,13 @@ file_builder_new (gboolean byteswap)
   return builder;
 }
 
+static void
+file_builder_free (FileBuilder *fb)
+{
+  g_queue_free (fb->chunks);
+  g_slice_free (FileBuilder, fb);
+}
+
 static GString *
 file_builder_serialise (FileBuilder          *fb,
                         struct gvdb_pointer   root)
@@ -494,9 +501,6 @@ file_builder_serialise (FileBuilder          *fb,
       g_slice_free (FileChunk, chunk);
     }
 
-  g_queue_free (fb->chunks);
-  g_slice_free (FileBuilder, fb);
-
   return result;
 }
 
@@ -518,6 +522,7 @@ gvdb_table_write_contents (GHashTable   *table,
   fb = file_builder_new (byteswap);
   file_builder_add_hash (fb, table, &root);
   str = file_builder_serialise (fb, root);
+  file_builder_free (fb);
 
   status = g_file_set_contents (filename, str->str, str->len, error);
   g_string_free (str, TRUE);
@@ -594,6 +599,7 @@ gvdb_table_write_contents_async (GHashTable          *table,
   file_builder_add_hash (fb, table, &root);
   str = file_builder_serialise (fb, root);
   bytes = g_string_free_to_bytes (str);
+  file_builder_free (fb);
 
   file = g_file_new_for_path (filename);
   data = write_contents_data_new (bytes, file);


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