<div dir="ltr">Answering my own question here <a href="http://freedesktop.org/software/pulseaudio/doxygen/index.html#thread_sec">[1]</a>:<div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">The PulseAudio client libraries are not designed to be directly thread-safe. They are however designed to be reentrant and threads-aware.<br>To use the libraries in a threaded environment, you must assure that all objects are only used in one thread at a time. Normally, this means that all objects belonging to a single context must be accessed from the same thread.<br>The included main loop implementation is also not thread safe. Take care to make sure event objects are not manipulated when any other code is using the main loop.</blockquote><div><br></div><div>I switched to the threaded mainloop API and now everything is stable and working fine.</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 13, 2015 at 12:36 PM, Andrew Kelley <span dir="ltr"><<a href="mailto:superjoe30@gmail.com" target="_blank">superjoe30@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">A couple more clues:<div><br></div><div>1. Once the recording hangs like this, when I call pa_stream_disconnect on the record stream, pavucontrol says that my application is still recording. If I call pa_stream_disconnect before the recording hangs like this, then pavucontrol correctly reports that my application has stopped recording.</div><div><br></div><div>2. If I call pa_stream_peek more frequently, it is less likely for the pa_stream_peek get into the state where it only returns nbytes = 0.</div><div><br></div><div>3. I'm getting an assertion failure just by recording the monitor of analog stereo:</div><div><br></div><div><div>Assertion '!e->next' failed at pulsecore/queue.c:106, function pa_queue_pop(). Aborting.</div></div><div><br></div><div><div>#2  0x00007ffff046b8e5 in pa_queue_pop () from /usr/lib/x86_64-linux-gnu/pulseaudio/<a href="http://libpulsecommon-4.0.so" target="_blank">libpulsecommon-4.0.so</a></div><div>#3  0x00007ffff046a94f in ?? () from /usr/lib/x86_64-linux-gnu/pulseaudio/<a href="http://libpulsecommon-4.0.so" target="_blank">libpulsecommon-4.0.so</a></div><div>#4  0x00007ffff5b20d7a in pa_mainloop_dispatch () from /usr/lib/x86_64-linux-gnu/libpulse.so.0</div><div>#5  0x00007ffff5b20f8c in pa_mainloop_iterate () from /usr/lib/x86_64-linux-gnu/libpulse.so.0</div></div><div><div class="h5"><div><br></div><div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Mar 13, 2015 at 12:09 PM, Andrew Kelley <span dir="ltr"><<a href="mailto:superjoe30@gmail.com" target="_blank">superjoe30@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div>I'm using the asynchronous API to record audio from a source. I'm able to obtain about 1-5 seconds of audio and then every time I call pa_stream_peek, I get nbytes = 0. Any troubleshooting suggestions?</div><div><br></div><div>I have verified that the stream is not corked, not suspended, and I am in fact calling pa_stream_drop every time that nbytes > 0. I also noticed that when nbytes starts being 0 always, this other stream I have open, which is a playback stream, also stops having room for playback buffers.</div><div><br></div><div>This is pulseaudio version 1:4.0-0ubuntu22.</div></div>
</blockquote></div><br></div></div></div></div></div>
</blockquote></div><br></div>