From: Debian Multimedia Maintainers Date: Sun, 31 Jul 2022 20:01:04 +0000 (+0100) Subject: Fix freeze when exiting cmus X-Git-Tag: archive/raspbian/2.10.0-2+rpi1^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=58b9c09a9f1ea6561f8fb253fac9f56cd67257c5;p=cmus.git Fix freeze when exiting cmus Origin: upstream, https://github.com/cmus/cmus/pull/1172 Bug: https://github.com/cmus/cmus/issues/1184 Gbp-Pq: Name 0004-Fix-freeze-on-exit.patch --- diff --git a/op/pulse.c b/op/pulse.c index c8a6d6a..78ec066 100644 --- a/op/pulse.c +++ b/op/pulse.c @@ -17,7 +17,9 @@ */ #include +#include +#include #include #include "../op.h" @@ -33,6 +35,8 @@ static pa_channel_map pa_cmap; static pa_cvolume pa_vol; static pa_sample_spec pa_ss; +static bool is_pipewire = false; + static int mixer_notify_in; static int mixer_notify_out; @@ -175,6 +179,20 @@ static void _pa_sink_input_info_cb(pa_context *c, } } +static void _pa_server_info_cb(pa_context *c, + const pa_server_info *i, + void *data) +{ + is_pipewire = false; + if (i) { + if (strstr(i->server_name, "PipeWire") != NULL) { + // server is PipeWire + d_print("Pulseaudio server is pipewire. Disabling _pa_stream_drain()\n"); + is_pipewire = true; + } + } +} + static void _pa_stream_success_cb(pa_stream *s, int success, void *data) { pa_threaded_mainloop_signal(pa_ml, 0); @@ -422,6 +440,8 @@ static int op_pulse_open(sample_format_t sf, const channel_position_t *channel_m pa_context_get_sink_input_info(pa_ctx, pa_stream_get_index(pa_s), _pa_sink_input_info_cb, NULL); + pa_context_get_server_info(pa_ctx, _pa_server_info_cb, NULL); + pa_threaded_mainloop_unlock(pa_ml); return OP_ERROR_SUCCESS; @@ -440,8 +460,10 @@ static int op_pulse_close(void) * If this _pa_stream_drain() will be moved below following * pa_threaded_mainloop_lock(), PulseAudio 0.9.19 will hang. */ - if (pa_s) + + if (pa_s && !is_pipewire){ _pa_stream_drain(); + } pa_threaded_mainloop_lock(pa_ml);