summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2015-03-23 13:22:18 +0000
committerEmmanuele Bassi <ebassi@gnome.org>2015-03-23 13:24:44 +0000
commit505801cd095d2535dfbebf819d0ac9ec94522b2a (patch)
treef519c3aebaa3e0e21f9dbf24a99d365db86b360c
parent83edd9c4c5a872b9092d9394ecef66749e8a6f6f (diff)
downloadclutter-505801cd095d2535dfbebf819d0ac9ec94522b2a.tar.gz
gdk: Fix stage removal from the master clock
Prevents a double-free in the conformance test suite.
-rw-r--r--clutter/gdk/clutter-master-clock-gdk.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/clutter/gdk/clutter-master-clock-gdk.c b/clutter/gdk/clutter-master-clock-gdk.c
index f93e9aec1..de6b966c8 100644
--- a/clutter/gdk/clutter-master-clock-gdk.c
+++ b/clutter/gdk/clutter-master-clock-gdk.c
@@ -304,14 +304,20 @@ clutter_master_clock_gdk_remove_stage_clock (ClutterMasterClockGdk *master_clock
stages = g_hash_table_lookup (master_clock->clock_to_stage, frame_clock);
if (stages != NULL)
{
- stages = g_list_remove (stages, stage);
- if (stages == NULL)
+ if (stages->next == NULL)
{
g_signal_handlers_disconnect_by_func (frame_clock,
clutter_master_clock_gdk_update,
master_clock);
g_hash_table_remove (master_clock->clock_to_stage, frame_clock);
}
+ else
+ {
+ stages = g_list_remove (stages, stage);
+ g_hash_table_replace (master_clock->clock_to_stage,
+ g_object_ref (frame_clock),
+ stages);
+ }
}
}