summaryrefslogtreecommitdiffstats
path: root/src/modules/module-pipe-source.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-09-14 21:51:05 +0000
committerLennart Poettering <lennart@poettering.net>2007-09-14 21:51:05 +0000
commit3396b65f15a06ff312e318bc05e502ba402c564e (patch)
tree5087148cbe36f765f9fff99528d812c198799c63 /src/modules/module-pipe-source.c
parentf0b9dce32e4c5d77f57364ccdc7795f828f7f6a0 (diff)
simplify rt loops a bit by moving more code into pa_rtpoll. It is now possible to attach "work" functions to a pa_rtpoll_item, which will be called in each loop iteration. This allows us to hide the message processing in the RT loops and to drop the seperate sink_input->process hooks. Basically, only the driver-specific code remains in the RT loops.
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1822 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/modules/module-pipe-source.c')
-rw-r--r--src/modules/module-pipe-source.c23
1 files changed, 6 insertions, 17 deletions
diff --git a/src/modules/module-pipe-source.c b/src/modules/module-pipe-source.c
index 1b42fcfa..382da8f9 100644
--- a/src/modules/module-pipe-source.c
+++ b/src/modules/module-pipe-source.c
@@ -149,26 +149,15 @@ static void thread_func(void *userdata) {
}
}
- /* Now give the source outputs some to time to process their data */
- if ((ret = pa_source_process_outputs(u->source)) < 0)
- goto fail;
- if (ret > 0)
- continue;
-
- /* Check whether there is a message for us to process */
- if ((ret = pa_thread_mq_process(&u->thread_mq) < 0))
- goto finish;
- if (ret > 0)
- continue;
-
/* Hmm, nothing to do. Let's sleep */
pollfd->events = u->source->thread_info.state == PA_SOURCE_RUNNING ? POLLIN : 0;
- if (pa_rtpoll_run(u->rtpoll, 1) < 0) {
- pa_log("poll() failed: %s", pa_cstrerror(errno));
+ if ((ret = pa_rtpoll_run(u->rtpoll, 1)) < 0)
goto fail;
- }
+ if (ret == 0)
+ goto finish;
+
pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
if (pollfd->revents & ~POLLIN) {
pa_log("FIFO shutdown.");
@@ -177,8 +166,8 @@ static void thread_func(void *userdata) {
}
fail:
- /* We have to continue processing messages until we receive the
- * SHUTDOWN message */
+ /* If this was no regular exit from the loop we have to continue
+ * processing messages until we received PA_MESSAGE_SHUTDOWN */
pa_asyncmsgq_post(u->thread_mq.outq, PA_MSGOBJECT(u->core), PA_CORE_MESSAGE_UNLOAD_MODULE, u->module, 0, NULL, NULL);
pa_asyncmsgq_wait_for(u->thread_mq.inq, PA_MESSAGE_SHUTDOWN);