Created attachment 122981 [details] Patch to fix the issue 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. See attached patch for a fix.
Thanks a lot for investigating and fixing this! I applied the patch now. I'm sorry it took so long, I have a bunch of old bugmail that I didn't have time to read at the time, and I'm now catching up on them.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.