summaryrefslogtreecommitdiffstats
path: root/polyp/mainloop.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-11-17 23:11:34 +0000
committerLennart Poettering <lennart@poettering.net>2004-11-17 23:11:34 +0000
commitc57d5deef6ee33ab892398c7fd27400cd4ce4542 (patch)
treef97cbdec3066ac66523539ef4763cfca3e779e38 /polyp/mainloop.c
parentcd3a98a2ab1b8be413d50db9baa5bf52fa3a3a45 (diff)
minor fixes for latency interpolation
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@291 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/mainloop.c')
-rw-r--r--polyp/mainloop.c59
1 files changed, 52 insertions, 7 deletions
diff --git a/polyp/mainloop.c b/polyp/mainloop.c
index eb2eddc2..e13e7b11 100644
--- a/polyp/mainloop.c
+++ b/polyp/mainloop.c
@@ -425,6 +425,9 @@ static int dispatch_defer(struct pa_mainloop *m) {
struct pa_defer_event *e;
int r = 0;
+ if (!m->deferred_pending)
+ return 0;
+
for (e = pa_idxset_first(m->defer_events, &index); e && !m->quit; e = pa_idxset_next(m->defer_events, &index)) {
if (e->dead || !e->enabled)
continue;
@@ -516,10 +519,10 @@ static int dispatch_timeout(struct pa_mainloop *m) {
int pa_mainloop_iterate(struct pa_mainloop *m, int block, int *retval) {
int r, t, dispatched = 0;
assert(m && !m->running);
-
- m->running = 1;
- if(m->quit)
+ m->running ++;
+
+ if (m->quit)
goto quit;
scan_dead(m);
@@ -534,6 +537,7 @@ int pa_mainloop_iterate(struct pa_mainloop *m, int block, int *retval) {
}
t = block ? calc_next_timeout(m) : 0;
+
r = poll(m->pollfds, m->n_pollfds, t);
if (r < 0) {
@@ -555,15 +559,15 @@ int pa_mainloop_iterate(struct pa_mainloop *m, int block, int *retval) {
}
}
- m->running = 0;
-
+ m->running--;
+
/* pa_log("dispatched: %i\n", dispatched); */
return r < 0 ? -1 : dispatched;
quit:
-
- m->running = 0;
+
+ m->running--;
if (retval)
*retval = m->retval;
@@ -597,3 +601,44 @@ int pa_mainloop_deferred_pending(struct pa_mainloop *m) {
assert(m);
return m->deferred_pending > 0;
}
+
+
+void pa_mainloop_dump(struct pa_mainloop *m) {
+ assert(m);
+
+ pa_log(__FILE__": Dumping mainloop sources START\n");
+
+ {
+ uint32_t index = PA_IDXSET_INVALID;
+ struct pa_io_event *e;
+ for (e = pa_idxset_first(m->io_events, &index); e; e = pa_idxset_next(m->io_events, &index)) {
+ if (e->dead)
+ continue;
+
+ pa_log(__FILE__": kind=io fd=%i events=%i callback=%p userdata=%p\n", e->fd, (int) e->events, e->callback, e->userdata);
+ }
+ }
+ {
+ uint32_t index = PA_IDXSET_INVALID;
+ struct pa_defer_event *e;
+ for (e = pa_idxset_first(m->defer_events, &index); e; e = pa_idxset_next(m->defer_events, &index)) {
+ if (e->dead)
+ continue;
+
+ pa_log(__FILE__": kind=defer enabled=%i callback=%p userdata=%p\n", e->enabled, e->callback, e->userdata);
+ }
+ }
+ {
+ uint32_t index = PA_IDXSET_INVALID;
+ struct pa_time_event *e;
+ for (e = pa_idxset_first(m->time_events, &index); e; e = pa_idxset_next(m->time_events, &index)) {
+ if (e->dead)
+ continue;
+
+ pa_log(__FILE__": kind=time enabled=%i time=%u.%u callback=%p userdata=%p\n", e->enabled, e->timeval.tv_sec, e->timeval.tv_usec, e->callback, e->userdata);
+ }
+ }
+
+ pa_log(__FILE__": Dumping mainloop sources STOP\n");
+
+}