From: Luca Bruno Date: Sun, 15 Jun 2014 09:36:56 +0000 (+0200) Subject: gvariant module: Fix memory leak when deserializing hashtables with gvariant X-Git-Tag: 0.25.1~40 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0edb05ca26693d9a0b0fa1b4e547b58990ea0db4;p=thirdparty%2Fvala.git gvariant module: Fix memory leak when deserializing hashtables with gvariant Fixes bug 698260 --- diff --git a/codegen/valagvariantmodule.vala b/codegen/valagvariantmodule.vala index 8b0873179..409940eff 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")); }