mainloop fixes: when disabling time events when dispatching them, make sure to adjust...
authorLennart Poettering <lennart@poettering.net>
Wed, 26 Jul 2006 22:39:06 +0000 (22:39 +0000)
committerLennart Poettering <lennart@poettering.net>
Wed, 26 Jul 2006 22:39:06 +0000 (22:39 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@1153 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/pulse/glib-mainloop.c
src/pulse/mainloop.c

index 7676755..201b6e2 100644 (file)
@@ -573,7 +573,10 @@ static gboolean dispatch_func(GSource *source, PA_GCC_UNUSED GSourceFunc callbac
         tvnow.tv_usec = now.tv_usec;
 
         if (pa_timeval_cmp(&t->timeval, &tvnow) <= 0) {
-            t->enabled = 0;
+
+            /* Disable time event */
+            glib_time_restart(t, NULL);
+            
             t->callback(&g->api, t, &t->timeval, t->userdata);
             return TRUE;
         }
@@ -634,6 +637,8 @@ pa_glib_mainloop *pa_glib_mainloop_new(GMainContext *c) {
 
     g->n_enabled_defer_events = g->n_enabled_time_events = 0;
     g->io_events_please_scan = g->time_events_please_scan = g->defer_events_please_scan = 0;
+
+    g->cached_next_time_event = NULL;
     
     g_source_attach(&g->source, g->context);
     g_source_set_can_recurse(&g->source, FALSE);
index 682b2cc..699c0ee 100644 (file)
@@ -766,7 +766,12 @@ static int dispatch_timeout(pa_mainloop *m) {
         if (pa_timeval_cmp(&e->timeval, &now) <= 0) {
             assert(e->callback);
 
-            e->enabled = 0;
+            /* Disable time event */
+            mainloop_time_restart(e, NULL);
+
+            if (m->cached_next_time_event == e)
+                m->cached_next_time_event = NULL;
+            
             e->callback(&m->api, e, &e->timeval, e->userdata);
 
             r++;