summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-09-11 13:15:39 +0000
committerLennart Poettering <lennart@poettering.net>2007-09-11 13:15:39 +0000
commit391d09cd6e8d47ad8255736be5cb512b04843ed1 (patch)
treed5f66e0e8476ed5d3f21791c80a4a8fadf7bdef6
parent597a1c4e82f2bb84e983d0cbb9be7e79c5607c00 (diff)
add 'wait' parameter to pa_rtpoll_run(), if zero pa_rtpoll_runn will only update the struct pollfd but not wait for an event
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1803 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r--src/modules/module-alsa-sink.c2
-rw-r--r--src/modules/module-alsa-source.c2
-rw-r--r--src/modules/module-combine.c2
-rw-r--r--src/modules/module-null-sink.c2
-rw-r--r--src/modules/module-oss.c2
-rw-r--r--src/modules/module-pipe-sink.c2
-rw-r--r--src/modules/module-pipe-source.c2
-rw-r--r--src/pulsecore/rtpoll.c7
-rw-r--r--src/pulsecore/rtpoll.h5
-rw-r--r--src/tests/rtpoll-test.c4
10 files changed, 18 insertions, 12 deletions
diff --git a/src/modules/module-alsa-sink.c b/src/modules/module-alsa-sink.c
index c75f195e..bb7392d8 100644
--- a/src/modules/module-alsa-sink.c
+++ b/src/modules/module-alsa-sink.c
@@ -643,7 +643,7 @@ static void thread_func(void *userdata) {
continue;
/* Hmm, nothing to do. Let's sleep */
- if (pa_rtpoll_run(u->rtpoll) < 0) {
+ if (pa_rtpoll_run(u->rtpoll, 1) < 0) {
pa_log("poll() failed: %s", pa_cstrerror(errno));
goto fail;
}
diff --git a/src/modules/module-alsa-source.c b/src/modules/module-alsa-source.c
index 365f6ab2..fef7b01e 100644
--- a/src/modules/module-alsa-source.c
+++ b/src/modules/module-alsa-source.c
@@ -626,7 +626,7 @@ static void thread_func(void *userdata) {
continue;
/* Hmm, nothing to do. Let's sleep */
- if (pa_rtpoll_run(u->rtpoll) < 0) {
+ if (pa_rtpoll_run(u->rtpoll, 1) < 0) {
pa_log("poll() failed: %s", pa_cstrerror(errno));
goto fail;
}
diff --git a/src/modules/module-combine.c b/src/modules/module-combine.c
index 3e56bc67..390b6e5c 100644
--- a/src/modules/module-combine.c
+++ b/src/modules/module-combine.c
@@ -268,7 +268,7 @@ static void thread_func(void *userdata) {
continue;
/* Hmm, nothing to do. Let's sleep */
- if (pa_rtpoll_run(u->rtpoll) < 0) {
+ if (pa_rtpoll_run(u->rtpoll, 1) < 0) {
pa_log("poll() failed: %s", pa_cstrerror(errno));
goto fail;
}
diff --git a/src/modules/module-null-sink.c b/src/modules/module-null-sink.c
index 78d99ceb..2fe541fc 100644
--- a/src/modules/module-null-sink.c
+++ b/src/modules/module-null-sink.c
@@ -158,7 +158,7 @@ static void thread_func(void *userdata) {
continue;
/* Hmm, nothing to do. Let's sleep */
- if (pa_rtpoll_run(u->rtpoll) < 0) {
+ if (pa_rtpoll_run(u->rtpoll, 1) < 0) {
pa_log("poll() failed: %s", pa_cstrerror(errno));
goto fail;
}
diff --git a/src/modules/module-oss.c b/src/modules/module-oss.c
index 1e524fcf..9273a393 100644
--- a/src/modules/module-oss.c
+++ b/src/modules/module-oss.c
@@ -1031,7 +1031,7 @@ static void thread_func(void *userdata) {
}
/* Hmm, nothing to do. Let's sleep */
- if (pa_rtpoll_run(u->rtpoll) < 0) {
+ if (pa_rtpoll_run(u->rtpoll, 1) < 0) {
pa_log("poll() failed: %s", pa_cstrerror(errno));
goto fail;
}
diff --git a/src/modules/module-pipe-sink.c b/src/modules/module-pipe-sink.c
index 55a4e0ce..5cafaada 100644
--- a/src/modules/module-pipe-sink.c
+++ b/src/modules/module-pipe-sink.c
@@ -185,7 +185,7 @@ static void thread_func(void *userdata) {
/* Hmm, nothing to do. Let's sleep */
pollfd->events = u->sink->thread_info.state == PA_SINK_RUNNING ? POLLOUT : 0;
- if (pa_rtpoll_run(u->rtpoll) < 0) {
+ if (pa_rtpoll_run(u->rtpoll, 1) < 0) {
pa_log("poll() failed: %s", pa_cstrerror(errno));
goto fail;
}
diff --git a/src/modules/module-pipe-source.c b/src/modules/module-pipe-source.c
index 6dc94648..291010e1 100644
--- a/src/modules/module-pipe-source.c
+++ b/src/modules/module-pipe-source.c
@@ -164,7 +164,7 @@ static void thread_func(void *userdata) {
/* 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) < 0) {
+ if (pa_rtpoll_run(u->rtpoll, 1) < 0) {
pa_log("poll() failed: %s", pa_cstrerror(errno));
goto fail;
}
diff --git a/src/pulsecore/rtpoll.c b/src/pulsecore/rtpoll.c
index e43ec610..be1c83c0 100644
--- a/src/pulsecore/rtpoll.c
+++ b/src/pulsecore/rtpoll.c
@@ -257,7 +257,7 @@ void pa_rtpoll_free(pa_rtpoll *p) {
pa_xfree(p);
}
-int pa_rtpoll_run(pa_rtpoll *p) {
+int pa_rtpoll_run(pa_rtpoll *p, int wait) {
pa_rtpoll_item *i;
int r = 0;
int no_events = 0;
@@ -301,7 +301,10 @@ int pa_rtpoll_run(pa_rtpoll *p) {
rtpoll_rebuild(p);
/* Calculate timeout */
- if (p->timer_enabled) {
+ if (!wait) {
+ timeout.tv_sec = 0;
+ timeout.tv_nsec = 0;
+ } else if (p->timer_enabled) {
struct timespec now;
pa_rtclock_get(&now);
diff --git a/src/pulsecore/rtpoll.h b/src/pulsecore/rtpoll.h
index 7fe5cb37..f393f918 100644
--- a/src/pulsecore/rtpoll.h
+++ b/src/pulsecore/rtpoll.h
@@ -58,7 +58,10 @@ void pa_rtpoll_free(pa_rtpoll *p);
void pa_rtpoll_install(pa_rtpoll *p);
-int pa_rtpoll_run(pa_rtpoll *f);
+/* Sleep on the rtpoll until the time event, or any of the fd events
+ * is triggered. If "wait" is 0 we don't sleep but only update the
+ * struct pollfd. */
+int pa_rtpoll_run(pa_rtpoll *f, int wait);
void pa_rtpoll_set_timer_absolute(pa_rtpoll *p, const struct timespec *ts);
void pa_rtpoll_set_timer_periodic(pa_rtpoll *p, pa_usec_t usec);
diff --git a/src/tests/rtpoll-test.c b/src/tests/rtpoll-test.c
index 2a90684e..20913e7f 100644
--- a/src/tests/rtpoll-test.c
+++ b/src/tests/rtpoll-test.c
@@ -58,7 +58,7 @@ int main(int argc, char *argv[]) {
pa_rtpoll_install(p);
pa_rtpoll_set_timer_periodic(p, 10000000); /* 10 s */
- pa_rtpoll_run(p);
+ pa_rtpoll_run(p, 1);
pa_rtpoll_item_free(i);
@@ -70,7 +70,7 @@ int main(int argc, char *argv[]) {
pollfd->fd = 0;
pollfd->events = POLLIN;
- pa_rtpoll_run(p);
+ pa_rtpoll_run(p, 1);
pa_rtpoll_item_free(i);