[pulseaudio-discuss] [RFC v0 1/5] bluetooth: Check errors in init_bt
Mikel Astiz
mikel.astiz.oss at gmail.com
Wed Apr 11 00:00:26 PDT 2012
From: Mikel Astiz <mikel.astiz at bmw-carit.de>
If bluetooth setup fails, the profile should be switched to off.
---
src/modules/bluetooth/module-bluetooth-device.c | 19 +++++++++++++------
1 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index b7945ed..50fbfbb 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -2004,7 +2004,8 @@ static int sco_over_pcm_state_update(struct userdata *u, pa_bool_t changed) {
if (u->service_fd >= 0 && u->stream_fd >= 0)
return 0;
- init_bt(u);
+ if (init_bt(u) < 0)
+ return -1;
pa_log_debug("Resuming SCO over PCM");
if (init_profile(u) < 0) {
@@ -2373,6 +2374,9 @@ static int init_bt(struct userdata *u) {
u->service_write_type = 0;
u->service_read_type = 0;
+ if (u->profile == PROFILE_OFF)
+ return 0;
+
if ((u->service_fd = bt_audio_service_open()) < 0) {
pa_log_warn("Bluetooth audio service not available");
return -1;
@@ -2662,10 +2666,12 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
if (USE_SCO_OVER_PCM(u))
save_sco_volume_callbacks(u);
- init_bt(u);
-
- if (u->profile != PROFILE_OFF)
- init_profile(u);
+ if (u->profile != PROFILE_OFF) {
+ if (init_bt(u) < 0)
+ u->profile = PROFILE_OFF;
+ else
+ init_profile(u);
+ }
if (u->sink || u->source)
start_thread(u);
@@ -2995,7 +3001,8 @@ int pa__init(pa_module* m) {
pa_xfree(mike);
/* Connect to the BT service */
- init_bt(u);
+ if (init_bt(u) < 0)
+ u->profile = PROFILE_OFF;
if (u->profile != PROFILE_OFF)
if (init_profile(u) < 0)
--
1.7.7.6
More information about the pulseaudio-discuss
mailing list