libibus: Fix some reference issues.
authorPeng Huang <shawn.p.huang@gmail.com>
Tue, 24 Jan 2012 17:15:13 +0000 (12:15 -0500)
committerPeng Huang <shawn.p.huang@gmail.com>
Tue, 21 Feb 2012 16:52:27 +0000 (11:52 -0500)
src/ibusattrlist.c
src/ibusbus.c
src/ibusproplist.c

index 03741c6..b90077c 100644 (file)
@@ -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);
 
index 6137441..ceed16a 100644 (file)
@@ -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);
index f1c6b27..88245fb 100644 (file)
@@ -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);