paaudio: properly disconnect streams in fini_*
Currently this needs a workaround due to bug #247 in pulseaudio. Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-id: c81019d550d9c3518185d3d08bd463ae3ccdc392.1566168923.git.DirtY.iCE.hu@gmail.com Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
8a435f7478
commit
8692bf7d97
@ -685,6 +685,27 @@ static int qpa_init_in(HWVoiceIn *hw, struct audsettings *as, void *drv_opaque)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void qpa_simple_disconnect(PAConnection *c, pa_stream *stream)
|
||||
{
|
||||
int err;
|
||||
|
||||
pa_threaded_mainloop_lock(c->mainloop);
|
||||
/*
|
||||
* wait until actually connects. workaround pa bug #247
|
||||
* https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/247
|
||||
*/
|
||||
while (pa_stream_get_state(stream) == PA_STREAM_CREATING) {
|
||||
pa_threaded_mainloop_wait(c->mainloop);
|
||||
}
|
||||
|
||||
err = pa_stream_disconnect(stream);
|
||||
if (err != 0) {
|
||||
dolog("Failed to disconnect! err=%d\n", err);
|
||||
}
|
||||
pa_stream_unref(stream);
|
||||
pa_threaded_mainloop_unlock(c->mainloop);
|
||||
}
|
||||
|
||||
static void qpa_fini_out (HWVoiceOut *hw)
|
||||
{
|
||||
void *ret;
|
||||
@ -696,7 +717,7 @@ static void qpa_fini_out (HWVoiceOut *hw)
|
||||
audio_pt_join(&pa->pt, &ret, __func__);
|
||||
|
||||
if (pa->stream) {
|
||||
pa_stream_unref (pa->stream);
|
||||
qpa_simple_disconnect(pa->g->conn, pa->stream);
|
||||
pa->stream = NULL;
|
||||
}
|
||||
|
||||
@ -716,7 +737,7 @@ static void qpa_fini_in (HWVoiceIn *hw)
|
||||
audio_pt_join(&pa->pt, &ret, __func__);
|
||||
|
||||
if (pa->stream) {
|
||||
pa_stream_unref (pa->stream);
|
||||
qpa_simple_disconnect(pa->g->conn, pa->stream);
|
||||
pa->stream = NULL;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user