summaryrefslogtreecommitdiffstats
path: root/src/pulsecore/asyncmsgq.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/pulsecore/asyncmsgq.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/pulsecore/asyncmsgq.c')
-rw-r--r--src/pulsecore/asyncmsgq.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/pulsecore/asyncmsgq.c b/src/pulsecore/asyncmsgq.c
index e3a1ba91..b3654460 100644
--- a/src/pulsecore/asyncmsgq.c
+++ b/src/pulsecore/asyncmsgq.c
@@ -248,6 +248,27 @@ int pa_asyncmsgq_wait_for(pa_asyncmsgq *a, int code) {
return 0;
}
+int pa_asyncmsgq_process_one(pa_asyncmsgq *a) {
+ pa_msgobject *object;
+ int code;
+ void *data;
+ pa_memchunk chunk;
+ int64_t offset;
+ int ret;
+
+ pa_assert(PA_REFCNT_VALUE(a) > 0);
+
+ if (pa_asyncmsgq_get(a, &object, &code, &data, &offset, &chunk, 0) < 0)
+ return 0;
+
+ pa_asyncmsgq_ref(a);
+ ret = pa_asyncmsgq_dispatch(object, code, data, offset, &chunk);
+ pa_asyncmsgq_done(a, ret);
+ pa_asyncmsgq_unref(a);
+
+ return 1;
+}
+
int pa_asyncmsgq_get_fd(pa_asyncmsgq *a) {
pa_assert(PA_REFCNT_VALUE(a) > 0);