summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarc-André Lureau <marc-andre.lureau@nokia.com>2009-04-04 17:56:36 +0300
committerLennart Poettering <lennart@poettering.net>2009-04-17 22:41:36 +0200
commit099b3284ec7e78da25baa70d42a2ecdc1092b935 (patch)
treecd5cff92d7dde0377484f017a325aa79d04dbc5e /src
parent344eea4f586fe2fd7d774b5cc38e8ea2bf582d60 (diff)
bluetoth-device: be less strict on CONNECTED state to switch profile
Diffstat (limited to 'src')
-rw-r--r--src/modules/bluetooth/module-bluetooth-device.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 90f64861..ecb5e83d 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -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;
}