diff options
author | Trond Andersen <trond.andersen@tandberg.com> | 2010-01-12 17:10:59 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-09-23 21:54:01 +0200 |
commit | a95eacb56a5f6c4734ee232722f533fdfd9f5911 (patch) | |
tree | 4770b3916a9bbe3edd61be7cb165cc167311ae08 | |
parent | 90d65cb446dbdaa681351a4dc0a65e77ac5fa330 (diff) |
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.
-rw-r--r-- | gst/gstsystemclock.c | 6 |
1 files 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); |