[PATCH v1 2/8] bluetooth: Check return value of init_profile()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Mikel Astiz <mikel.astiz@xxxxxxxxxxxx>

If profile could not be successfully initialized, the card should be
set to PROFILE_OFF automatically. If sinks or sources exist, they need
to be destroyed, therefore stop_thread() is called.
---
 src/modules/bluetooth/module-bluetooth-device.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index d78ce8c..5801885 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -2230,12 +2230,21 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
         save_sco_volume_callbacks(u);
 
     if (u->profile != PROFILE_OFF)
-        init_profile(u);
+        if (init_profile(u) < 0)
+            goto off;
 
     if (u->sink || u->source)
         start_thread(u);
 
     return 0;
+
+off:
+    stop_thread(u);
+
+    if (pa_card_set_profile(u->card, "off", FALSE) < 0)
+        pa_log_debug("Failed to switch profile to off");
+
+    return -PA_ERR_IO;
 }
 
 static void create_ports_for_profile(struct userdata *u, const pa_bluetooth_device *device, pa_card_new_data *card_new_data, pa_card_profile *profile) {
-- 
1.7.11.7



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux