[vala] gvariant module: Fix memory leak when deserializing hashtables with gvariant



commit 0edb05ca26693d9a0b0fa1b4e547b58990ea0db4
Author: Luca Bruno <lucabru src gnome org>
Date:   Sun Jun 15 11:36:56 2014 +0200

    gvariant module: Fix memory leak when deserializing hashtables with gvariant
    
    Fixes bug 698260

 codegen/valagvariantmodule.vala |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)
---
diff --git a/codegen/valagvariantmodule.vala b/codegen/valagvariantmodule.vala
index 8b08731..409940e 100644
--- a/codegen/valagvariantmodule.vala
+++ b/codegen/valagvariantmodule.vala
@@ -394,17 +394,26 @@ public class Vala.GVariantModule : GAsyncModule {
                if (key_type.data_type == string_type.data_type) {
                        hash_table_new.add_argument (new CCodeIdentifier ("g_str_hash"));
                        hash_table_new.add_argument (new CCodeIdentifier ("g_str_equal"));
+               } else if (key_type.data_type == gvariant_type) {
+                       hash_table_new.add_argument (new CCodeIdentifier ("g_variant_hash"));
+                       hash_table_new.add_argument (new CCodeIdentifier ("g_variant_equal"));
                } else {
                        hash_table_new.add_argument (new CCodeIdentifier ("g_direct_hash"));
                        hash_table_new.add_argument (new CCodeIdentifier ("g_direct_equal"));
                }
+               
                if (key_type.data_type == string_type.data_type) {
                        hash_table_new.add_argument (new CCodeIdentifier ("g_free"));
+               } else if (key_type.data_type == gvariant_type) {
+                       hash_table_new.add_argument (new CCodeCastExpression (new CCodeIdentifier 
("g_variant_unref"), "GDestroyNotify"));
                } else {
                        hash_table_new.add_argument (new CCodeIdentifier ("NULL"));
                }
+               
                if (value_type.data_type == string_type.data_type) {
                        hash_table_new.add_argument (new CCodeIdentifier ("g_free"));
+               } else if (value_type.data_type == gvariant_type) {
+                       hash_table_new.add_argument (new CCodeCastExpression (new CCodeIdentifier 
("g_variant_unref"), "GDestroyNotify"));
                } else {
                        hash_table_new.add_argument (new CCodeIdentifier ("NULL"));
                }


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