Compare commits
3 Commits
037b8e87a2
...
718e94e090
Author | SHA1 | Date | |
---|---|---|---|
718e94e090 | |||
0259fcadd2 | |||
dffa0933b1 |
@ -9,7 +9,7 @@ ALTERNATIVE:${PN}:remove = "resolv-conf"
|
|||||||
GROUPADD_PARAM:${PN} += "-r wheel; -r kvm; -r render"
|
GROUPADD_PARAM:${PN} += "-r wheel; -r kvm; -r render"
|
||||||
PACKAGECONFIG = "\
|
PACKAGECONFIG = "\
|
||||||
efi acl ldconfig pam usrmerge rfkill backlight binfmt hostnamed localed logind machined myhostname \
|
efi acl ldconfig pam usrmerge rfkill backlight binfmt hostnamed localed logind machined myhostname \
|
||||||
nss polkit randomseed seccomp timedated utmp timesyncd kmod sysusers gshadow cryptsetup \
|
nss polkit randomseed seccomp timedated utmp timesyncd kmod sysusers gshadow cryptsetup cgroupv2 \
|
||||||
"
|
"
|
||||||
|
|
||||||
do_install:append() {
|
do_install:append() {
|
||||||
|
@ -8,7 +8,7 @@ inherit cargo systemd gsettings pkgconfig
|
|||||||
#
|
#
|
||||||
# Update this when changes are pushed to github
|
# Update this when changes are pushed to github
|
||||||
#
|
#
|
||||||
SRCREV = "c79ff22a987ea5c9621db88df5ec638439011b3e"
|
SRCREV = "421b0e27d777c418a26016bd8065715823504637"
|
||||||
|
|
||||||
GIT_URI = "git://git.subgraph.com/brl/citadel-tools.git;protocol=https;branch=master"
|
GIT_URI = "git://git.subgraph.com/brl/citadel-tools.git;protocol=https;branch=master"
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ inherit kernel
|
|||||||
|
|
||||||
SRC_URI = "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${PV}.tar.xz\
|
SRC_URI = "https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-${PV}.tar.xz\
|
||||||
file://defconfig \
|
file://defconfig \
|
||||||
|
file://bootconfig \
|
||||||
"
|
"
|
||||||
|
|
||||||
SRC_URI[sha256sum] = "01b414ba98fd189ecd544435caf3860ae2a790e3ec48f5aa70fdf42dc4c5c04a"
|
SRC_URI[sha256sum] = "01b414ba98fd189ecd544435caf3860ae2a790e3ec48f5aa70fdf42dc4c5c04a"
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
kernel {
|
||||||
|
cgroup_no_v1 = all
|
||||||
|
}
|
@ -2,7 +2,7 @@
|
|||||||
# Automatically generated file; DO NOT EDIT.
|
# Automatically generated file; DO NOT EDIT.
|
||||||
# Linux/x86 6.9.1 Kernel Configuration
|
# Linux/x86 6.9.1 Kernel Configuration
|
||||||
#
|
#
|
||||||
CONFIG_CC_VERSION_TEXT="gcc (Debian 13.2.0-24) 13.2.0"
|
CONFIG_CC_VERSION_TEXT="gcc (Debian 13.2.0-25) 13.2.0"
|
||||||
CONFIG_CC_IS_GCC=y
|
CONFIG_CC_IS_GCC=y
|
||||||
CONFIG_GCC_VERSION=130200
|
CONFIG_GCC_VERSION=130200
|
||||||
CONFIG_CLANG_VERSION=0
|
CONFIG_CLANG_VERSION=0
|
||||||
@ -208,7 +208,7 @@ CONFIG_CGROUP_WRITEBACK=y
|
|||||||
CONFIG_CGROUP_SCHED=y
|
CONFIG_CGROUP_SCHED=y
|
||||||
CONFIG_FAIR_GROUP_SCHED=y
|
CONFIG_FAIR_GROUP_SCHED=y
|
||||||
CONFIG_CFS_BANDWIDTH=y
|
CONFIG_CFS_BANDWIDTH=y
|
||||||
CONFIG_RT_GROUP_SCHED=y
|
# CONFIG_RT_GROUP_SCHED is not set
|
||||||
CONFIG_SCHED_MM_CID=y
|
CONFIG_SCHED_MM_CID=y
|
||||||
CONFIG_CGROUP_PIDS=y
|
CONFIG_CGROUP_PIDS=y
|
||||||
# CONFIG_CGROUP_RDMA is not set
|
# CONFIG_CGROUP_RDMA is not set
|
||||||
@ -242,7 +242,10 @@ CONFIG_INITRAMFS_SOURCE=""
|
|||||||
# CONFIG_RD_LZO is not set
|
# CONFIG_RD_LZO is not set
|
||||||
CONFIG_RD_LZ4=y
|
CONFIG_RD_LZ4=y
|
||||||
# CONFIG_RD_ZSTD is not set
|
# CONFIG_RD_ZSTD is not set
|
||||||
# CONFIG_BOOT_CONFIG is not set
|
CONFIG_BOOT_CONFIG=y
|
||||||
|
CONFIG_BOOT_CONFIG_FORCE=y
|
||||||
|
CONFIG_BOOT_CONFIG_EMBED=y
|
||||||
|
CONFIG_BOOT_CONFIG_EMBED_FILE="../bootconfig"
|
||||||
CONFIG_INITRAMFS_PRESERVE_MTIME=y
|
CONFIG_INITRAMFS_PRESERVE_MTIME=y
|
||||||
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
|
CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
|
||||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||||
|
@ -13,6 +13,7 @@ SRC_URI = " \
|
|||||||
git://github.com/ibus/ibus.git;branch=main;protocol=https \
|
git://github.com/ibus/ibus.git;branch=main;protocol=https \
|
||||||
file://0001-Do-not-try-to-start-dbus-we-do-not-have-dbus-lauch.patch \
|
file://0001-Do-not-try-to-start-dbus-we-do-not-have-dbus-lauch.patch \
|
||||||
file://0001-makefile-don-t-gzip-the-man-pages.patch \
|
file://0001-makefile-don-t-gzip-the-man-pages.patch \
|
||||||
|
file://0001-Fix-refcounting-issues.patch \
|
||||||
"
|
"
|
||||||
SRCREV = "6a70ab0338206bd1c7d01a4e1874ea0ee5b3a9d3"
|
SRCREV = "6a70ab0338206bd1c7d01a4e1874ea0ee5b3a9d3"
|
||||||
S = "${WORKDIR}/git"
|
S = "${WORKDIR}/git"
|
||||||
|
@ -0,0 +1,267 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
Commit 5a455b1ead attempted to fix both GLib warnings around
|
||||||
|
floating references and other presumed refcounting issues. However
|
||||||
|
it missed 2 kinds of bugs:
|
||||||
|
|
||||||
|
- The places that take an IBusText created from a static string
|
||||||
|
were made to avoid freeing it afterwards, but the staticness refers
|
||||||
|
to the string content, not the object itself.
|
||||||
|
- The places that are documented to emit signals on floating object
|
||||||
|
references used to do the following after signal emission:
|
||||||
|
|
||||||
|
if (g_object_is_floating (object))
|
||||||
|
g_object_unref (object)
|
||||||
|
|
||||||
|
And did possibly trigger GLib warnings were changed to:
|
||||||
|
|
||||||
|
if (g_object_is_floating (object))
|
||||||
|
g_object_sink_ref (object);
|
||||||
|
g_object_unref (object);
|
||||||
|
|
||||||
|
Which fixes the GLib warning for floating references, but do
|
||||||
|
unintendedly steal one reference away for non floating references.
|
||||||
|
|
||||||
|
This commit is essentially a revert of commit 5a455b1ead, but
|
||||||
|
addressing both things differently:
|
||||||
|
|
||||||
|
- All label/tooltip/symbol IBusText properties in IBusProperty do
|
||||||
|
now always sink the reference of the stored object.
|
||||||
|
|
||||||
|
- All places documented as maybe using objects with a floating reference
|
||||||
|
on signals changed to doing:
|
||||||
|
|
||||||
|
if (g_object_is_floating (object)) {
|
||||||
|
g_object_ref_sink (object);
|
||||||
|
g_object_unref (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
So the floating reference is owned and unreferenced without warnings,
|
||||||
|
but already owned references are left unchanged.
|
||||||
|
|
||||||
|
This addresses the possible GLib warnings, fixes the possible double
|
||||||
|
unrefs happening on IBusText used in signals, and fixes the missing
|
||||||
|
unrefs on IBusText objects created from static strings.
|
||||||
|
|
||||||
|
BUG=https://github.com/ibus/ibus/issues/2393
|
||||||
|
BUG=https://github.com/ibus/ibus/issues/2387
|
||||||
|
---
|
||||||
|
src/ibusinputcontext.c | 35 +++++++++++++++++++++--------------
|
||||||
|
src/ibusproperty.c | 32 +++++++++++++++++---------------
|
||||||
|
2 files changed, 38 insertions(+), 29 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/ibusinputcontext.c b/src/ibusinputcontext.c
|
||||||
|
index 4b27551bd..7981de381 100644
|
||||||
|
--- a/src/ibusinputcontext.c
|
||||||
|
+++ b/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;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/ibusproperty.c b/src/ibusproperty.c
|
||||||
|
index 6d4ed088e..cd8a0e2a6 100644
|
||||||
|
--- a/src/ibusproperty.c
|
||||||
|
+++ b/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
|
Loading…
Reference in New Issue
Block a user