Fix refcounting issues; from upstream.

This commit is contained in:
ajacoutot 2022-04-24 10:56:57 +00:00
parent 54cba67310
commit 3c9cab9833
3 changed files with 221 additions and 1 deletions

View File

@ -12,7 +12,7 @@ PKGNAME-main = ibus-${GH_TAGNAME}
PKGNAME-gtk2 = ibus-gtk2-${GH_TAGNAME}
PKGNAME-gtk4 = ibus-gtk4-${GH_TAGNAME}
REVISION-main = 0
REVISION-main = 1
SHARED_LIBS += ibus-1.0 4.3 # 5.526

View File

@ -0,0 +1,99 @@
From 17648f0522910480b6c5dd4f5356ca1f6c160bf5 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Tue, 29 Mar 2022 22:48:19 +0200
Subject: [PATCH] src: Fix refcounting issues
Index: src/ibusinputcontext.c
--- src/ibusinputcontext.c.orig
+++ src/ibusinputcontext.c
@@ -549,9 +549,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
g_variant_unref (variant);
g_signal_emit (context, context_signals[COMMIT_TEXT], 0, text);
- if (g_object_is_floating (text))
+ if (g_object_is_floating (text)) {
g_object_ref_sink (text);
- g_object_unref (text);
+ g_object_unref (text);
+ }
return;
}
if (g_strcmp0 (signal_name, "UpdatePreeditText") == 0) {
@@ -569,9 +570,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
cursor_pos,
visible);
- if (g_object_is_floating (text))
+ if (g_object_is_floating (text)) {
g_object_ref_sink (text);
- g_object_unref (text);
+ g_object_unref (text);
+ }
return;
}
if (g_strcmp0 (signal_name, "UpdatePreeditTextWithMode") == 0) {
@@ -592,9 +594,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
visible,
mode);
- if (g_object_is_floating (text))
+ if (g_object_is_floating (text)) {
g_object_ref_sink (text);
- g_object_unref (text);
+ g_object_unref (text);
+ }
return;
}
@@ -621,9 +624,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
0,
text,
visible);
- if (g_object_is_floating (text))
+ if (g_object_is_floating (text)) {
g_object_ref_sink (text);
- g_object_unref (text);
+ g_object_unref (text);
+ }
return;
}
@@ -640,9 +644,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
0,
table,
visible);
- if (g_object_is_floating (table))
+ if (g_object_is_floating (table)) {
g_object_ref_sink (table);
- g_object_unref (table);
+ g_object_unref (table);
+ }
return;
}
@@ -659,9 +664,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
0,
prop_list);
- if (g_object_is_floating (prop_list))
+ if (g_object_is_floating (prop_list)) {
g_object_ref_sink (prop_list);
- g_object_unref (prop_list);
+ g_object_unref (prop_list);
+ }
return;
}
@@ -673,9 +679,10 @@ ibus_input_context_g_signal (GDBusProxy *proxy,
g_signal_emit (context, context_signals[UPDATE_PROPERTY], 0, prop);
- if (g_object_is_floating (prop))
+ if (g_object_is_floating (prop)) {
g_object_ref_sink (prop);
- g_object_unref (prop);
+ g_object_unref (prop);
+ }
return;
}

View File

@ -0,0 +1,121 @@
From 17648f0522910480b6c5dd4f5356ca1f6c160bf5 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Tue, 29 Mar 2022 22:48:19 +0200
Subject: [PATCH] src: Fix refcounting issues
Index: src/ibusproperty.c
--- src/ibusproperty.c.orig
+++ src/ibusproperty.c
@@ -336,20 +336,17 @@ ibus_property_destroy (IBusProperty *prop)
prop->priv->icon = NULL;
if (prop->priv->label) {
- if (!ibus_text_get_is_static (prop->priv->label))
- g_object_unref (prop->priv->label);
+ g_object_unref (prop->priv->label);
prop->priv->label = NULL;
}
if (prop->priv->symbol) {
- if (!ibus_text_get_is_static (prop->priv->symbol))
- g_object_unref (prop->priv->symbol);
+ g_object_unref (prop->priv->symbol);
prop->priv->symbol = NULL;
}
if (prop->priv->tooltip) {
- if (!ibus_text_get_is_static (prop->priv->tooltip))
- g_object_unref (prop->priv->tooltip);
+ g_object_unref (prop->priv->tooltip);
prop->priv->tooltip = NULL;
}
@@ -404,7 +401,7 @@ ibus_property_deserialize (IBusProperty *prop,
g_variant_get_child (variant, retval++, "u", &prop->priv->type);
GVariant *subvar = g_variant_get_child_value (variant, retval++);
- if (prop->priv->label && !ibus_text_get_is_static (prop->priv->label)) {
+ if (prop->priv->label) {
g_object_unref (prop->priv->label);
}
prop->priv->label = IBUS_TEXT (ibus_serializable_deserialize (subvar));
@@ -414,7 +411,7 @@ ibus_property_deserialize (IBusProperty *prop,
ibus_g_variant_get_child_string (variant, retval++, &prop->priv->icon);
subvar = g_variant_get_child_value (variant, retval++);
- if (prop->priv->tooltip && !ibus_text_get_is_static (prop->priv->tooltip)) {
+ if (prop->priv->tooltip) {
g_object_unref (prop->priv->tooltip);
}
prop->priv->tooltip = IBUS_TEXT (ibus_serializable_deserialize (subvar));
@@ -435,7 +432,7 @@ ibus_property_deserialize (IBusProperty *prop,
/* Keep the serialized order for the compatibility when add new members. */
subvar = g_variant_get_child_value (variant, retval++);
- if (prop->priv->symbol && !ibus_text_get_is_static (prop->priv->symbol)) {
+ if (prop->priv->symbol) {
g_object_unref (prop->priv->symbol);
}
prop->priv->symbol = IBUS_TEXT (ibus_serializable_deserialize (subvar));
@@ -567,7 +564,7 @@ ibus_property_set_label (IBusProperty *prop,
g_assert (IBUS_IS_PROPERTY (prop));
g_return_if_fail (label == NULL || IBUS_IS_TEXT (label));
- if (prop->priv->label && !ibus_text_get_is_static (prop->priv->label)) {
+ if (prop->priv->label) {
g_object_unref (prop->priv->label);
}
@@ -575,8 +572,10 @@ ibus_property_set_label (IBusProperty *prop,
prop->priv->label = ibus_text_new_from_static_string ("");
}
else {
- prop->priv->label = g_object_ref_sink (label);
+ prop->priv->label = label;
}
+
+ g_object_ref_sink (prop->priv->label);
}
void
@@ -586,7 +585,7 @@ ibus_property_set_symbol (IBusProperty *prop,
g_assert (IBUS_IS_PROPERTY (prop));
g_return_if_fail (symbol == NULL || IBUS_IS_TEXT (symbol));
- if (prop->priv->symbol && !ibus_text_get_is_static (prop->priv->symbol)) {
+ if (prop->priv->symbol) {
g_object_unref (prop->priv->symbol);
}
@@ -594,8 +593,10 @@ ibus_property_set_symbol (IBusProperty *prop,
prop->priv->symbol = ibus_text_new_from_static_string ("");
}
else {
- prop->priv->symbol = g_object_ref_sink (symbol);
+ prop->priv->symbol = symbol;
}
+
+ g_object_ref_sink (prop->priv->symbol);
}
void
@@ -615,7 +616,7 @@ ibus_property_set_tooltip (IBusProperty *prop,
g_assert (IBUS_IS_PROPERTY (prop));
g_assert (tooltip == NULL || IBUS_IS_TEXT (tooltip));
- if (prop->priv->tooltip && !ibus_text_get_is_static (prop->priv->tooltip)) {
+ if (prop->priv->tooltip) {
g_object_unref (prop->priv->tooltip);
}
@@ -624,8 +625,9 @@ ibus_property_set_tooltip (IBusProperty *prop,
}
else {
prop->priv->tooltip = tooltip;
- g_object_ref_sink (prop->priv->tooltip);
}
+
+ g_object_ref_sink (prop->priv->tooltip);
}
void