From f29e7d31734049ed14a54d71e9140f0bd8c74ed2 Mon Sep 17 00:00:00 2001 From: Davide Beatrici Date: Sun, 31 Mar 2024 01:09:15 +0100 Subject: [PATCH] FIX(client): Correctly subscribe to both sink and source events in PulseAudioSystem The second call to pa_context_subscribe() was overriding the first, as a result we were only receiving sink events. This caused hotplugging to fail with devices that don't have any output ports (e.g. USB microphones). --- src/mumble/PulseAudio.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/mumble/PulseAudio.cpp b/src/mumble/PulseAudio.cpp index db2c08a415d..a110b0f43b6 100644 --- a/src/mumble/PulseAudio.cpp +++ b/src/mumble/PulseAudio.cpp @@ -879,14 +879,14 @@ void PulseAudioSystem::setVolumes() { void PulseAudioSystem::contextCallback(pa_context *c) { Q_ASSERT(c == pacContext); switch (m_pulseAudio.context_get_state(c)) { - case PA_CONTEXT_READY: + case PA_CONTEXT_READY: { bPulseIsGood = true; - m_pulseAudio.operation_unref( - m_pulseAudio.context_subscribe(pacContext, PA_SUBSCRIPTION_MASK_SOURCE, nullptr, this)); - m_pulseAudio.operation_unref( - m_pulseAudio.context_subscribe(pacContext, PA_SUBSCRIPTION_MASK_SINK, nullptr, this)); + const auto mask = + static_cast< pa_subscription_mask_t >(PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE); + m_pulseAudio.operation_unref(m_pulseAudio.context_subscribe(pacContext, mask, nullptr, this)); query(); break; + } case PA_CONTEXT_TERMINATED: qWarning("PulseAudio: Forcibly disconnected from PulseAudio"); break;