From 07f48ddfccaddad79dfd48b382b3e04f2705c09c Mon Sep 17 00:00:00 2001 From: Peng Huang Date: Tue, 24 Jan 2012 12:15:13 -0500 Subject: [PATCH] libibus: Fix some reference issues. --- src/ibusattrlist.c | 3 ++- src/ibusbus.c | 9 +++++++-- src/ibusproplist.c | 4 +++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ibusattrlist.c b/src/ibusattrlist.c index 03741c6..b90077c 100644 --- a/src/ibusattrlist.c +++ b/src/ibusattrlist.c @@ -110,7 +110,8 @@ ibus_attr_list_deserialize (IBusAttrList *attr_list, g_variant_get_child (variant, retval++, "av", &iter); GVariant *var; while (g_variant_iter_loop (iter, "v", &var)) { - ibus_attr_list_append (attr_list, IBUS_ATTRIBUTE (ibus_serializable_deserialize (var))); + IBusAttribute *attr = IBUS_ATTRIBUTE (ibus_serializable_deserialize (var)); + ibus_attr_list_append (attr_list, attr); } g_variant_iter_free (iter); diff --git a/src/ibusbus.c b/src/ibusbus.c index 6137441..ceed16a 100644 --- a/src/ibusbus.c +++ b/src/ibusbus.c @@ -1381,7 +1381,9 @@ ibus_bus_do_list_engines (IBusBus *bus, gboolean active_engines_only) g_variant_get (result, "(av)", &iter); GVariant *var; while (g_variant_iter_loop (iter, "v", &var)) { - retval = g_list_append (retval, ibus_serializable_deserialize (var)); + IBusSerializable *serializable = ibus_serializable_deserialize (var); + g_object_ref_sink (serializable); + retval = g_list_append (retval, serializable); } g_variant_iter_free (iter); g_variant_unref (result); @@ -1435,7 +1437,9 @@ ibus_bus_list_engines_async_finish (IBusBus *bus, g_variant_get (variant, "(av)", &iter); GVariant *var; while (g_variant_iter_loop (iter, "v", &var)) { - retval = g_list_append (retval, ibus_serializable_deserialize (var)); + IBusSerializable *serializable = ibus_serializable_deserialize (var); + g_object_ref_sink (serializable); + retval = g_list_append (retval, serializable); } g_variant_iter_free (iter); return retval; @@ -1501,6 +1505,7 @@ ibus_bus_get_engines_by_names (IBusBus *bus, GVariant *var; while (g_variant_iter_loop (iter, "v", &var)) { IBusEngineDesc *desc = (IBusEngineDesc *) ibus_serializable_deserialize (var); + g_object_ref_sink (desc); g_array_append_val (array, desc); } g_variant_iter_free (iter); diff --git a/src/ibusproplist.c b/src/ibusproplist.c index f1c6b27..88245fb 100644 --- a/src/ibusproplist.c +++ b/src/ibusproplist.c @@ -107,7 +107,9 @@ ibus_prop_list_deserialize (IBusPropList *prop_list, g_return_val_if_fail (iter != NULL, retval); GVariant *var; while (g_variant_iter_loop (iter, "v", &var)) { - ibus_prop_list_append (prop_list, IBUS_PROPERTY (ibus_serializable_deserialize (var))); + IBusProperty *prop = IBUS_PROPERTY (ibus_serializable_deserialize (var)); + g_object_ref_sink (prop); + ibus_prop_list_append (prop_list, prop); } g_variant_iter_free (iter); -- 2.7.4