From 68156d3f79b67c77f88050e6c9de180698377c64 Mon Sep 17 00:00:00 2001 From: Ben Brewer Date: Thu, 25 Jul 2013 13:44:29 +0100 Subject: [PATCH] mainloop, glib-mainloop: time_restart could cause incorrect event ordering This fixes a bug where calling time_restart can leave the current event in the cache, even though the restart scheduled the event in the future. This would cause the event to get executed more frequently than it should. --- src/pulse/glib-mainloop.c | 6 ++++-- src/pulse/mainloop.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/pulse/glib-mainloop.c b/src/pulse/glib-mainloop.c index bd24913b..34f35567 100644 --- a/src/pulse/glib-mainloop.c +++ b/src/pulse/glib-mainloop.c @@ -328,13 +328,15 @@ static void glib_time_restart(pa_time_event*e, const struct timeval *tv) { if ((e->enabled = !!tv)) e->timeval = *tv; + if (e->mainloop->cached_next_time_event == e) + e->mainloop->cached_next_time_event = NULL; + if (e->mainloop->cached_next_time_event && e->enabled) { g_assert(e->mainloop->cached_next_time_event->enabled); if (pa_timeval_cmp(tv, &e->mainloop->cached_next_time_event->timeval) < 0) e->mainloop->cached_next_time_event = e; - } else if (e->mainloop->cached_next_time_event == e) - e->mainloop->cached_next_time_event = NULL; + } } static void glib_time_free(pa_time_event *e) { diff --git a/src/pulse/mainloop.c b/src/pulse/mainloop.c index 60fbbb90..0e1fba04 100644 --- a/src/pulse/mainloop.c +++ b/src/pulse/mainloop.c @@ -379,13 +379,15 @@ static void mainloop_time_restart(pa_time_event *e, const struct timeval *tv) { pa_mainloop_wakeup(e->mainloop); } + if (e->mainloop->cached_next_time_event == e) + e->mainloop->cached_next_time_event = NULL; + if (e->mainloop->cached_next_time_event && e->enabled) { pa_assert(e->mainloop->cached_next_time_event->enabled); if (t < e->mainloop->cached_next_time_event->time) e->mainloop->cached_next_time_event = e; - } else if (e->mainloop->cached_next_time_event == e) - e->mainloop->cached_next_time_event = NULL; + } } static void mainloop_time_free(pa_time_event *e) { -- 2.39.2