Hi,<br><br>I just checked ubuntu was applied patch which you mentioned.<br><br>&gt; alsa-plugins (1.0.17-0ubuntu5) intrepid-proposed; urgency=low<br>&gt; <br>&gt;&nbsp;&nbsp; * debian/patches/pulse_recording_fix.patch:&nbsp; pa_stream_trigger()<br>
&gt; returns<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; NULL for capture, so test for it first.&nbsp; Spotted by Takashi Iwai<br>&gt; and<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; acked by Lennart Poettering.<br>&gt;&nbsp;&nbsp; * LP: #282316 - erratic elapsed time count in &quot;sound recorder&quot;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; <a href="https://bugs.launchpad.net/ubuntu/+bug/282316">https://bugs.launchpad.net/ubuntu/+bug/282316</a><br>&gt; <br>&gt;&nbsp; -- Daniel T Chen &lt;<a href="mailto:crimsun@ubuntu.com">crimsun@ubuntu.com</a>&gt;&nbsp; Mon, 27 Oct 2008 00:14:00<br>
&gt; -0400<br><br>and I upgraded to 1.0.17-0ubuntu5,<br>then -5 I/O error has gone. :-)<br><br>but, still there is a problem, and it looks related with pulseaudio<br><br>
Before using pulseaudio my recording program works well...<br>I know my source is not good code,<br>
but I want to know, what I have to pay attention<br>
when backend of sound system is pulseaudio?<br><br>I use alsa lib to recording from input device,<br>so I made linux_audio_capture() function.<br>When I use snd_pcm_readi() function,<br>the program is aborted or terminated cause of segmentation fault.<br>
<br>&gt; audio_linux_capture()<br>&gt;&nbsp;&nbsp; -&gt; snd_pcm_readi()<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; ...(?)...<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; pulse_poll_activate()<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt; write() &lt;- crash!<br><br>gdb tells...<br><br>&gt; (gdb) thread 6<br>
&gt; [Switching to thread 6 (Thread 0xb57e9b90 (LWP 11361))]#0&nbsp; 0xb7ff4430 in __kernel_vsyscall ()<br>&gt; (gdb) bt<br>&gt; #0&nbsp; 0xb7ff4430 in __kernel_vsyscall ()<br>&gt; #1&nbsp; 0xb77d53bb in write () from /lib/tls/i686/cmov/libc.so.6<br>
&gt; #2&nbsp; 0xb4f8d796 in pulse_poll_activate () from /usr/lib/alsa-lib/libasound_module_pcm_pulse.so<br>&gt; #3&nbsp; 0xb4f8be8f in ?? () from /usr/lib/alsa-lib/libasound_module_pcm_pulse.so<br>&gt; #4&nbsp; 0xb4f8c01d in ?? () from /usr/lib/alsa-lib/libasound_module_pcm_pulse.so<br>
&gt; #5&nbsp; 0xb78f2201 in ?? () from /usr/lib/libasound.so.2<br>&gt; #6&nbsp; 0xb78ae0d0 in ?? () from /usr/lib/libasound.so.2<br>&gt; #7&nbsp; 0xb78f2465 in ?? () from /usr/lib/libasound.so.2<br>&gt; #8&nbsp; 0xb78a8544 in snd_pcm_readi () from /usr/lib/libasound.so.2<br>
&gt; #9&nbsp; 0x0805e641 in audio_linux_capture (handle=0x979ee00) at audio_linux.c:720<br>&gt; #10 0x0805c07c in audio_do_thread_work (data=0x97cd648, user_data=0xb57e933c) at audio.c:474<br>&gt; #11 0x0805c1d0 in audio_thread_func (data=0x0) at audio.c:514<br>
&gt; #12 0xb799b02f in ?? () from /usr/lib/libglib-2.0.so.0<br>&gt; #13 0xb75f350f in start_thread () from /lib/tls/i686/cmov/libpthread.so.0<br>&gt; #14 0xb77e57ee in clone () from /lib/tls/i686/cmov/libc.so.6<br>&gt; (gdb)<br>
<br>my audio_linux_capture() function looks like:<br><br>&gt; static int<br>&gt; audio_linux_capture (void *handle)<br>&gt; {<br>&gt;&nbsp;&nbsp; AudioLinux *al = handle;<br>&gt;&nbsp;&nbsp; snd_pcm_uframes_t frames;<br>&gt;&nbsp;&nbsp; int err, worked;<br>
&gt; <br>&gt;&nbsp;&nbsp; worked = 0;<br>&gt; <br>&gt;&nbsp;&nbsp; if (!al-&gt;first)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* is it time for reading? */<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = audio_linux_wait_poll (al);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (err &lt; 0)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (snd_pcm_state (al-&gt;handle) == SND_PCM_STATE_XRUN ||<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; snd_pcm_state (al-&gt;handle) == SND_PCM_STATE_SUSPENDED)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; err = snd_pcm_state (al-&gt;handle) == SND_PCM_STATE_XRUN ? -EPIPE : -ESTRPIPE;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (audio_linux_xrun_recovery (al, err) &lt; 0)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_warning (NULL, &quot;write error: %s&quot;, snd_strerror (err));<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return worked;<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; al-&gt;first = 1;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (snd_pcm_state (al-&gt;handle) == SND_PCM_STATE_RUNNING)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* nothing to do */<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_debug (NULL, &quot;failed to wait poll&quot;);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return worked;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt; <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* nothing to do yet */<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!err)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return worked;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt; <br>&gt;&nbsp;&nbsp; al-&gt;frame-&gt;len = 0;<br>&gt;&nbsp;&nbsp; al-&gt;frame_offset = 0;<br>&gt; <br>&gt; capture_loop:<br>&gt; <br>
&gt;&nbsp;&nbsp; /* read it now */<br>&gt;&nbsp;&nbsp; if (0) log_debug (NULL, &quot;bytes: %d&quot;, err * al-&gt;bytes_per_frame);<br>&gt;&nbsp;&nbsp; err = snd_pcm_readi (al-&gt;handle, al-&gt;frame-&gt;data, frames);<br>&gt;&nbsp;&nbsp; if (err &lt; 0)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (1) log_debug (NULL, &quot;err: %d&quot;, err);<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (audio_linux_xrun_recovery (al, err) &lt; 0)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (err != -EAGAIN)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log_warning (NULL, &quot;failed to read: %s&quot;, snd_strerror (err));<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; al-&gt;first = 1;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return worked;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&gt; <br>&gt;&nbsp;&nbsp; if (snd_pcm_state (al-&gt;handle) == SND_PCM_STATE_RUNNING)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; al-&gt;first = 0;<br>&gt; <br>&gt;&nbsp;&nbsp; if (!err)<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; return worked;<br>&gt; <br>&gt;&nbsp;&nbsp; al-&gt;frame-&gt;len = err * al-&gt;bytes_per_frame;<br>&gt; <br>&gt;&nbsp;&nbsp; if (al-&gt;capture_callback)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; al-&gt;capture_callback (al-&gt;frame, al-&gt;capture_callback_data);<br>
&gt; <br>&gt;&nbsp;&nbsp; ++worked;<br>&gt; <br>&gt;&nbsp;&nbsp; goto capture_loop;<br>&gt; }<br><br>Thanks,<br><br>-- <br>Best Regards,<br><br>Keedi Kim<br><br><br><div class="gmail_quote">2008/10/17 Colin Guthrie <span dir="ltr">&lt;<a href="mailto:gmane@colin.guthr.ie">gmane@colin.guthr.ie</a>&gt;</span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">Keedi Kim wrote:<br>
&gt; Hi.<br>
&gt;<br>
&gt; I followed PerfectSetup of pulseaudio wiki,<br>
&gt; &nbsp;then aplay works well, but arecord doesn&#39;t.<br>
&gt; ALSA&#39;s arecord terminates with<br>
&gt; &quot;pcm_read:1473: read error: Input/output error&quot; message.<br>
&gt;<br>
&gt; Does anybody has idea?<br>
<br>
</div>I know you&#39;ve said that the package is using 1.0.17 but there is a<br>
chacne that the Ubuntu package updated the pulse plugin to the latest<br>
version in git (from the 1.0.18rc3 tree).<br>
<br>
If this is the case, then Takashi found a problem with recording via<br>
alsa with these recently on the alsa Mailing list.<br>
<br>
Lennart has yet to ACK this and an earlier message on the Alsa mailing<br>
list from a couple weeks back (unless he&#39;s done so privately to Takashi)<br>
so I&#39;m guessing he&#39;s a little behind on things right now.<br>
<br>
In lieu of an ACK from Lennart, it may be worth trying out the patch<br>
from Takashi.<br>
<br>
<a href="http://thread.gmane.org/gmane.linux.alsa.devel/56875" target="_blank">http://thread.gmane.org/gmane.linux.alsa.devel/56875</a><br>
<br>
I&#39;d also like to know if it works (not had a moment to try yet) so I can<br>
issue an update package for this.<br>
<br>
Col<br>
<br>
--<br>
<br>
Colin Guthrie<br>
gmane(at)<a href="http://colin.guthr.ie" target="_blank">colin.guthr.ie</a><br>
<a href="http://colin.guthr.ie/" target="_blank">http://colin.guthr.ie/</a><br>
<br>
Day Job:<br>
 &nbsp; Tribalogic Limited [<a href="http://www.tribalogic.net/" target="_blank">http://www.tribalogic.net/</a>]<br>
Open Source:<br>
 &nbsp; Mandriva Linux Contributor [<a href="http://www.mandriva.com/" target="_blank">http://www.mandriva.com/</a>]<br>
 &nbsp; PulseAudio Hacker [<a href="http://www.pulseaudio.org/" target="_blank">http://www.pulseaudio.org/</a>]<br>
 &nbsp; Trac Hacker [<a href="http://trac.edgewall.org/" target="_blank">http://trac.edgewall.org/</a>]<br>
<div><div></div><div class="Wj3C7c"><br>
_______________________________________________<br>
pulseaudio-discuss mailing list<br>
<a href="mailto:pulseaudio-discuss@mail.0pointer.de">pulseaudio-discuss@mail.0pointer.de</a><br>
<a href="https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss" target="_blank">https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss</a><br>
</div></div></blockquote></div><br><br clear="all"><br>