summaryrefslogtreecommitdiffstats
path: root/src/polyp/mainloop.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/polyp/mainloop.c')
-rw-r--r--src/polyp/mainloop.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/polyp/mainloop.c b/src/polyp/mainloop.c
index da3f57b2..87ef623e 100644
--- a/src/polyp/mainloop.c
+++ b/src/polyp/mainloop.c
@@ -101,6 +101,9 @@ struct pa_mainloop {
STATE_POLLED,
STATE_QUIT
} state;
+
+ pa_poll_func poll_func;
+ void *poll_func_userdata;
};
/* IO events */
@@ -355,6 +358,9 @@ pa_mainloop *pa_mainloop_new(void) {
m->deferred_pending = 0;
m->state = STATE_PASSIVE;
+
+ m->poll_func = NULL;
+ m->poll_func_userdata = NULL;
return m;
}
@@ -665,7 +671,10 @@ int pa_mainloop_poll(pa_mainloop *m) {
if (m->deferred_pending)
r = 0;
else {
- r = poll(m->pollfds, m->n_pollfds, m->prepared_timeout);
+ if (m->poll_func)
+ r = m->poll_func(m->pollfds, m->n_pollfds, m->prepared_timeout, m->poll_func_userdata);
+ else
+ r = poll(m->pollfds, m->n_pollfds, m->prepared_timeout);
if (r < 0) {
if (errno == EINTR)
@@ -767,6 +776,14 @@ pa_mainloop_api* pa_mainloop_get_api(pa_mainloop*m) {
return &m->api;
}
+void pa_mainloop_set_poll_func(pa_mainloop *m, pa_poll_func poll_func, void *userdata) {
+ assert(m);
+
+ m->poll_func = poll_func;
+ m->poll_func_userdata = userdata;
+}
+
+
#if 0
void pa_mainloop_dump(pa_mainloop *m) {
assert(m);