bluetoth-device: be less strict on CONNECTED state to switch profile
authorMarc-André Lureau <marc-andre.lureau@nokia.com>
Sat, 4 Apr 2009 14:56:36 +0000 (17:56 +0300)
committerLennart Poettering <lennart@poettering.net>
Fri, 17 Apr 2009 20:41:36 +0000 (22:41 +0200)
src/modules/bluetooth/module-bluetooth-device.c

index 90f6486..ecb5e83 100644 (file)
@@ -1877,11 +1877,16 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
         return -1;
     }
 
-    if (device->headset_state != PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_HSP) {
+    /* The state signal is sent by bluez, so it is racy to check
+       strictly for CONNECTED, we should also accept STREAMING state
+       as being good enough. However, if the profile is used
+       concurrently (which is unlikely), ipc will fail later on, and
+       module will be unloaded. */
+    if (device->headset_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_HSP) {
         pa_log_warn("HSP is not connected, refused to switch profile");
         return -1;
     }
-    else if (device->audio_sink_state != PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_A2DP) {
+    else if (device->audio_sink_state < PA_BT_AUDIO_STATE_CONNECTED && *d == PROFILE_A2DP) {
         pa_log_warn("A2DP is not connected, refused to switch profile");
         return -1;
     }