[mutter/cherry-pick-79e5ec57-5] cally: fix state set leak
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/cherry-pick-79e5ec57-5] cally: fix state set leak
- Date: Thu, 15 Oct 2020 09:37:26 +0000 (UTC)
commit b99490ed3cf39f27299479ed8d026d2ba8f51357
Author: Ray Strode <rstrode redhat com>
Date: Thu Apr 30 14:23:09 2020 +0000
cally: fix state set leak
cally_actor_action_do_action leaks a state set object in the
case where the actor is defunct, insensitive, or hidden.
This commit plugs the leak.
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1225
(cherry picked from commit 79e5ec57d24f1650cdb2f23e68c9f8bf6a494283)
clutter/clutter/cally/cally-actor.c | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
---
diff --git a/clutter/clutter/cally/cally-actor.c b/clutter/clutter/cally/cally-actor.c
index f341d36165..26327ad96b 100644
--- a/clutter/clutter/cally/cally-actor.c
+++ b/clutter/clutter/cally/cally-actor.c
@@ -819,10 +819,11 @@ static gboolean
cally_actor_action_do_action (AtkAction *action,
gint index)
{
- CallyActor *cally_actor = NULL;
- AtkStateSet *set = NULL;
- CallyActorPrivate *priv = NULL;
- CallyActorActionInfo *info = NULL;
+ CallyActor *cally_actor = NULL;
+ AtkStateSet *set = NULL;
+ CallyActorPrivate *priv = NULL;
+ CallyActorActionInfo *info = NULL;
+ gboolean did_action = FALSE;
cally_actor = CALLY_ACTOR (action);
priv = cally_actor->priv;
@@ -830,21 +831,19 @@ cally_actor_action_do_action (AtkAction *action,
set = atk_object_ref_state_set (ATK_OBJECT (cally_actor));
if (atk_state_set_contains_state (set, ATK_STATE_DEFUNCT))
- return FALSE;
+ goto out;
if (!atk_state_set_contains_state (set, ATK_STATE_SENSITIVE) ||
!atk_state_set_contains_state (set, ATK_STATE_SHOWING))
- return FALSE;
-
- g_object_unref (set);
+ goto out;
info = _cally_actor_get_action_info (cally_actor, index);
if (info == NULL)
- return FALSE;
+ goto out;
if (info->do_action_func == NULL)
- return FALSE;
+ goto out;
if (!priv->action_queue)
priv->action_queue = g_queue_new ();
@@ -854,7 +853,12 @@ cally_actor_action_do_action (AtkAction *action,
if (!priv->action_idle_handler)
priv->action_idle_handler = g_idle_add (idle_do_action, cally_actor);
- return TRUE;
+ did_action = TRUE;
+
+out:
+ g_clear_object (&set);
+
+ return did_action;
}
static gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]