!68 alsa-mixer: avoid assertion at alsa-lib mixer API when element removal
From: @wuxu_buque Reviewed-by: @liqingqing_1229 Signed-off-by: @liqingqing_1229
This commit is contained in:
commit
347860192e
@ -0,0 +1,59 @@
|
|||||||
|
From 4bdf4c99662f3da0e58d6c04bafff95d84362922 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
|
||||||
|
Date: Mon, 27 Jun 2022 10:09:52 +0900
|
||||||
|
Subject: [PATCH] alsa-mixer: avoid assertion at alsa-lib mixer API when
|
||||||
|
element removal
|
||||||
|
|
||||||
|
PulseAudio v5.99 or later hits assertion at alsa-lib mixer API due to
|
||||||
|
wrong handling of removal event for mixer element.
|
||||||
|
|
||||||
|
pulseaudio: mixer.c:149: hctl_elem_event_handler: Assertion `bag_empty(bag)' failed.
|
||||||
|
|
||||||
|
The removal event is defined as '~0U', thus it's not distinguished from
|
||||||
|
the other type of event just by bitwise operator.
|
||||||
|
|
||||||
|
At the removal event, class implementator for mixer API should detach
|
||||||
|
mixer element from hcontrol element in callback handler since alsa-lib
|
||||||
|
has assertion to check the list of mixer elements for a hcontrol element
|
||||||
|
is empty or not after calling all of handlers. In detail, please refer to
|
||||||
|
MR to alsa-lib:
|
||||||
|
|
||||||
|
* https://github.com/alsa-project/alsa-lib/pull/244
|
||||||
|
|
||||||
|
This commit fixes the above two issues. The issue can be regenerated by
|
||||||
|
`samples/ctl` Python 3 script of alsa-gobject.
|
||||||
|
|
||||||
|
* https://github.com/alsa-project/alsa-gobject/
|
||||||
|
|
||||||
|
It adds some user-defined elements into sound card 0. When terminated by
|
||||||
|
SIGINT signal, it removes the elements. Then PulseAudio dies due to the
|
||||||
|
assertion.
|
||||||
|
|
||||||
|
Fixes: 1fd8848e64cf ("alsa-util: Add functions for accessing mixer elements through mixer class")
|
||||||
|
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/728>
|
||||||
|
---
|
||||||
|
src/modules/alsa/alsa-util.c | 8 +++++++-
|
||||||
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
|
||||||
|
index 7dc373fa0..f4e838d37 100644
|
||||||
|
--- a/src/modules/alsa/alsa-util.c
|
||||||
|
+++ b/src/modules/alsa/alsa-util.c
|
||||||
|
@@ -1654,7 +1654,13 @@ static int mixer_class_event(snd_mixer_class_t *class, unsigned int mask,
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
const char *name = snd_hctl_elem_get_name(helem);
|
||||||
|
- if (mask & SND_CTL_EVENT_MASK_ADD) {
|
||||||
|
+ /* NOTE: The remove event is defined as '~0U`. */
|
||||||
|
+ if (mask == SND_CTL_EVENT_MASK_REMOVE) {
|
||||||
|
+ /* NOTE: Unless we remove the pointer to melem from the linked-list at
|
||||||
|
+ * private_data of helem, an assertion will be hit in alsa-lib since
|
||||||
|
+ * the list is not empty. */
|
||||||
|
+ snd_mixer_elem_detach(melem, helem);
|
||||||
|
+ } else if (mask & SND_CTL_EVENT_MASK_ADD) {
|
||||||
|
snd_ctl_elem_iface_t iface = snd_hctl_elem_get_interface(helem);
|
||||||
|
if (iface == SND_CTL_ELEM_IFACE_CARD || iface == SND_CTL_ELEM_IFACE_PCM) {
|
||||||
|
snd_mixer_elem_t *new_melem;
|
||||||
|
--
|
||||||
|
2.33.0
|
||||||
|
|
||||||
@ -15,6 +15,7 @@ Source5: default.pa-for-gdm
|
|||||||
|
|
||||||
Patch201: pulseaudio-autostart.patch
|
Patch201: pulseaudio-autostart.patch
|
||||||
Patch1001: 0001-Fix-the-problem-that-the-description-field-of-pa_als.patch
|
Patch1001: 0001-Fix-the-problem-that-the-description-field-of-pa_als.patch
|
||||||
|
Patch1002: 0001-alsa-mixer-avoid-assertion-at-alsa-lib-mixer-API-whe.patch
|
||||||
|
|
||||||
BuildRequires: meson
|
BuildRequires: meson
|
||||||
BuildRequires: automake libtool gcc-c++ bash-completion
|
BuildRequires: automake libtool gcc-c++ bash-completion
|
||||||
@ -242,6 +243,9 @@ exit 0
|
|||||||
%{_mandir}/man*/*
|
%{_mandir}/man*/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Dec 12 2022 wuxu <wuxu.wu@huawei.com> - 16.1-4
|
||||||
|
- alsa-mixer: avoid assertion at alsa-lib mixer API when element removal
|
||||||
|
|
||||||
* Tue Oct 18 2022 Liu Zixian <liuzixian4@huawei.com> - 16.1-4
|
* Tue Oct 18 2022 Liu Zixian <liuzixian4@huawei.com> - 16.1-4
|
||||||
- delete unused BuildRequires
|
- delete unused BuildRequires
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user