Commit 8692bf7d authored by Kővágó, Zoltán's avatar Kővágó, Zoltán Committed by Gerd Hoffmann
Browse files

paaudio: properly disconnect streams in fini_*



Currently this needs a workaround due to bug #247 in pulseaudio.

Signed-off-by: default avatarKővágó, Zoltán <DirtY.iCE.hu@gmail.com>
Reviewed-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Message-id: c81019d550d9c3518185d3d08bd463ae3ccdc392.1566168923.git.DirtY.iCE.hu@gmail.com
Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
parent 8a435f74
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -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;
    }