[pulseaudio-discuss] module-bluetooth-device does not automatically select the a2dp profile when pulseaudio is loaded

Arun Raghavan arun.raghavan at collabora.co.uk
Mon Feb 20 19:18:23 PST 2012


On Sat, 2012-02-04 at 12:32 +0100, Erwan Martin wrote:
> So, I'll answer my own question:
> 
> Here's what happens:
> In src/modules/bluetooth/bluetooth-util.c:
> 1) found_device() calls org.bluez.Device.GetProperties.
> 2) get_properties_reply() parses the first properties, then calls 
> parse_device_property().
> 3) parse_device_property() sees that the device has interface 
> A2DP_SINK_UUID, so it calls org.bluez.AudioSink.GetProperties 
> asynchronously.
> 4) get_properties_reply() calls its callback, load_module_for_device() 
> (in src/modules/bluetooth/module-bluetooth-discover.c). This callback 
> loads module-bluetooth-device, which creates the audio card.
> 
> The problem is that in my configuration, the answer to 
> org.bluez.AudioSink.GetProperties does not come before 
> load_module_for_device() is called. In that case, the device is 
> instantiated with its properties half loaded (device->audio_state == 
> connected but device->audio_sink_state == invalid_state), hence no 
> profile is selected.
> 
> The fact that we are dealing with a concurrency issue was why I could 
> not reproduce this with my other system.
> 
> I don't have any system where I can compile and test the latest version, 
> so I don't know if this problem was fixed since 0.9.21.
> Should I create a proper bug report?

It would really help if you could test with a more recent version.
0.9.21 is more than 2 years old, and a *lot* of changes have been made
since.

Luiz, I see from the patch you posted that the GetProperties bit might
still be racy. Could this be what Erwan is facing?

-- Arun



More information about the pulseaudio-discuss mailing list