From b5a712138927a4d19017a75ca2c62664fda2701a Mon Sep 17 00:00:00 2001 From: ologantr Date: Mon, 19 Sep 2022 20:50:46 +0200 Subject: [PATCH] cmus: patch to fix freeze with PipeWire-PulseAudio This patch fixes cmus freezing on exit using both cmus-pulseaudio and pipewire-pulse. Original bug report: https://github.com/cmus/cmus/issues/1184 Patch from: https://github.com/cmus/cmus/pull/1172 Debian: https://salsa.debian.org/multimedia-team/cmus/-/commit/2e20a489bc58a604a0093830d71e43a5ac2b6c51 --- .../patches/0004-Fix-freeze-on-exit.patch | 74 +++++++++++++++++++ srcpkgs/cmus/template | 2 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/cmus/patches/0004-Fix-freeze-on-exit.patch diff --git a/srcpkgs/cmus/patches/0004-Fix-freeze-on-exit.patch b/srcpkgs/cmus/patches/0004-Fix-freeze-on-exit.patch new file mode 100644 index 000000000000..a8dfa0e91f9f --- /dev/null +++ b/srcpkgs/cmus/patches/0004-Fix-freeze-on-exit.patch @@ -0,0 +1,74 @@ +Description: Fix freeze when exiting cmus +Origin: upstream, https://github.com/cmus/cmus/pull/1172 +Bug: https://github.com/cmus/cmus/issues/1184 +Date: Thu, 14 Jul 2022 18:21:59 +0200 + +--- + op/pulse.c | 24 +++++++++++++++++++++++- + 1 file changed, 23 insertions(+), 1 deletion(-) + +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); + diff --git a/srcpkgs/cmus/template b/srcpkgs/cmus/template index 0fcb424ce336..05b77d0fecae 100644 --- a/srcpkgs/cmus/template +++ b/srcpkgs/cmus/template @@ -1,7 +1,7 @@ # Template file for 'cmus' pkgname=cmus version=2.10.0 -revision=1 +revision=2 build_style=configure configure_args="prefix=/usr LD=$CC" hostmakedepends="pkg-config"