From a95eacb56a5f6c4734ee232722f533fdfd9f5911 Mon Sep 17 00:00:00 2001 From: Trond Andersen Date: Tue, 12 Jan 2010 17:10:59 +0100 Subject: [PATCH] clock: fix racy shutdown clock id leak Clock IDs were leaked if the clock got disposed before the worker thread got a chance to reap unscheduled entries. Fixes bug #630439. --- gst/gstsystemclock.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gst/gstsystemclock.c b/gst/gstsystemclock.c index 87fb4d7790..6b31bab0d1 100644 --- a/gst/gstsystemclock.c +++ b/gst/gstsystemclock.c @@ -198,8 +198,6 @@ gst_system_clock_dispose (GObject * object) GST_CAT_DEBUG (GST_CAT_CLOCK, "unscheduling entry %p", entry); entry->status = GST_CLOCK_UNSCHEDULED; } - g_list_free (clock->entries); - clock->entries = NULL; GST_CLOCK_BROADCAST (clock); gst_system_clock_add_wakeup (sysclock); GST_OBJECT_UNLOCK (clock); @@ -209,6 +207,10 @@ gst_system_clock_dispose (GObject * object) sysclock->thread = NULL; GST_CAT_DEBUG (GST_CAT_CLOCK, "joined thread"); + g_list_foreach (clock->entries, (GFunc) gst_clock_id_unref, NULL); + g_list_free (clock->entries); + clock->entries = NULL; + gst_poll_free (sysclock->priv->timer); G_OBJECT_CLASS (parent_class)->dispose (object);