summaryrefslogtreecommitdiff
path: root/atk-adaptor/accessible-cache.c
diff options
context:
space:
mode:
authorMike Gorse <mgorse@novell.com>2011-12-12 11:25:44 -0600
committerMike Gorse <mgorse@novell.com>2011-12-12 11:25:44 -0600
commit03c98c4848ecc1af3f3ffd68383660a8b8191a58 (patch)
treed179ea23a09cda854e30a414d1548738c8f593ac /atk-adaptor/accessible-cache.c
parent770fcb6cf42143eebe5ebd9660a1c8737edaca6b (diff)
downloadat-spi2-core-03c98c4848ecc1af3f3ffd68383660a8b8191a58.tar.gz
Don't leak ref when processing a child-added signal with no object value
Diffstat (limited to 'atk-adaptor/accessible-cache.c')
-rw-r--r--atk-adaptor/accessible-cache.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/atk-adaptor/accessible-cache.c b/atk-adaptor/accessible-cache.c
index 4d5cdb35..fa6b561e 100644
--- a/atk-adaptor/accessible-cache.c
+++ b/atk-adaptor/accessible-cache.c
@@ -318,7 +318,7 @@ child_added_listener (GSignalInvocationHint * signal_hint,
const GValue * param_values, gpointer data)
{
SpiCache *cache = spi_global_cache;
-
+ gboolean child_needs_ref = TRUE;
AtkObject *accessible;
AtkObject *child;
@@ -351,10 +351,12 @@ child_added_listener (GSignalInvocationHint * signal_hint,
child = g_value_get_pointer (param_values + 2);
if (!ATK_IS_OBJECT (child))
- {
- child = atk_object_ref_accessible_child (accessible, index);
- }
- g_object_ref (child);
+ {
+ child = atk_object_ref_accessible_child (accessible, index);
+ child_needs_ref = FALSE;
+ }
+ if (child_needs_ref)
+ g_object_ref (child);
g_queue_push_tail (cache->add_traversal, child);
if (cache->add_pending_idle == 0)