mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-08 13:29:59 -05:00
SW: Pulseaudio 8.0 / BlueZ 5.39 Symptoms: While disconnecting/reconnecting a paired bluetooth headset (LG HBS750) audio fails roughly on every other connection. On a failed connection "pactl list cards" shows the bluetooth device's card but "Active Profile: off". Issuing "pacmd set-card-profile X a2dp_sink" makes audio work immediately. I realized that when this happened, the previous disconnection did not remove the card, instead it was only configured for "Active Profile: off" but otherwise left in place. Upon looking at PA debug logs I saw that the transport for the a2dp_sink was first set into disconnected state and then into idle state. In "device_connection_changed_cb()" this causes the "pa_bluetooth_device_any_transport_connected()" return true and the module-bluez5-device is not unloaded. Further investigation shows that this is caused by a race of module-bluez5-device.c:thread_func() and MediaPoint1::ClearConfiguration(). When the FD in thread_func() is closed (POLLHUP) an BLUETOOTH_MESSAGE_STREAM_FD_HUP message is sent into the main thread. The handler of this message unconditionally sets the transport into IDLE state. This is a problem if it has already been set into DISCONNECTED state. |
||
|---|---|---|
| .. | ||
| a2dp-codecs.h | ||
| backend-native.c | ||
| backend-ofono.c | ||
| bluez4-util.c | ||
| bluez4-util.h | ||
| bluez5-util.c | ||
| bluez5-util.h | ||
| module-bluetooth-discover.c | ||
| module-bluetooth-policy.c | ||
| module-bluez4-device.c | ||
| module-bluez4-discover.c | ||
| module-bluez5-device.c | ||
| module-bluez5-discover.c | ||
| rtp.h | ||