summaryrefslogtreecommitdiffstats
path: root/src/modules/module-alsa-source.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-10-01 16:39:04 +0000
committerLennart Poettering <lennart@poettering.net>2007-10-01 16:39:04 +0000
commitd6a22032078bcb260eb2e0dd2ca36235c5251115 (patch)
tree46536a6d505ab4e6f8a4cf2862fb5704a78b809c /src/modules/module-alsa-source.c
parent9d34a1e18b33330717caca6c25345ccb061cd7ea (diff)
Fix race condition between IO thread creation and pa_sink_put(). Move activation of rtpoll fds when we change the state INIT->IDLE.
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1922 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/modules/module-alsa-source.c')
-rw-r--r--src/modules/module-alsa-source.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/modules/module-alsa-source.c b/src/modules/module-alsa-source.c
index de019ffb..0f19a4ae 100644
--- a/src/modules/module-alsa-source.c
+++ b/src/modules/module-alsa-source.c
@@ -437,6 +437,13 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
case PA_SOURCE_IDLE:
case PA_SOURCE_RUNNING:
+ if (u->source->thread_info.state == PA_SOURCE_INIT) {
+ if (build_pollfd(u) < 0)
+ return -1;
+
+ snd_pcm_start(u->pcm_handle);
+ }
+
if (u->source->thread_info.state == PA_SOURCE_SUSPENDED) {
if (unsuspend(u) < 0)
return -1;
@@ -591,11 +598,6 @@ static void thread_func(void *userdata) {
pa_thread_mq_install(&u->thread_mq);
pa_rtpoll_install(u->rtpoll);
- if (build_pollfd(u) < 0)
- goto fail;
-
- snd_pcm_start(u->pcm_handle);
-
for (;;) {
int ret;