[pulseaudio-commits] src/pulse

Tanu Kaskinen tanuk at kemper.freedesktop.org
Tue Oct 29 18:15:42 CET 2013


 src/pulse/glib-mainloop.c |    6 ++++--
 src/pulse/mainloop.c      |    6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

New commits:
commit 68156d3f79b67c77f88050e6c9de180698377c64
Author: Ben Brewer <benbrewer at codethink.co.uk>
Date:   Thu Jul 25 13:44:29 2013 +0100

    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.

diff --git a/src/pulse/glib-mainloop.c b/src/pulse/glib-mainloop.c
index bd24913..34f3556 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 60fbbb9..0e1fba0 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) {



More information about the pulseaudio-commits mailing list