1 Commits

Author SHA1 Message Date
buque
18236ec9a4 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>
2022-12-12 12:39:27 +08:00