[pulseaudio-discuss] [PATCH next v1 12/13] bluetooth: Call setup_stream() manually

Mikel Astiz mikel.astiz.oss at gmail.com
Fri Dec 14 06:14:39 PST 2012


From: Mikel Astiz <mikel.astiz at bmw-carit.de>

Do not call setup_stream() automatically inside bt_transport_acquire().
Instead, the caller is responsible to use both functions as necessary.

As a first trivial step, setup_stream() is now called manually after
all calls to bt_transport_acquire(u, TRUE), with the exception of
setup_transport() where the thread is still about to start and thus
setup_stream() will be called later on from thread_func().
---
 src/modules/bluetooth/module-bluetooth-device.c | 26 +++++++++++--------------
 1 file changed, 11 insertions(+), 15 deletions(-)

diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 9039eb5..32fbd03 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -354,11 +354,8 @@ static void bt_transport_release(struct userdata *u) {
 static int bt_transport_acquire(struct userdata *u, pa_bool_t start) {
     pa_assert(u->transport);
 
-    if (u->transport_acquired) {
-        if (start)
-            goto done;
+    if (u->transport_acquired)
         return 0;
-    }
 
     pa_log_debug("Acquiring transport %s", u->transport->path);
 
@@ -375,16 +372,6 @@ static int bt_transport_acquire(struct userdata *u, pa_bool_t start) {
     u->transport_acquired = true;
     pa_log_info("Transport %s acquired: fd %d", u->transport->path, u->stream_fd);
 
-    if (!start)
-        return 0;
-
-done:
-    /* If thread is still about to start, the stream will be set up in the beginning of thread_func() */
-    if (u->thread == NULL)
-        return 0;
-
-    setup_stream(u);
-
     return 0;
 }
 
@@ -426,6 +413,8 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
                     if (!u->source || !PA_SOURCE_IS_OPENED(u->source->thread_info.state)) {
                         if (bt_transport_acquire(u, TRUE) < 0)
                             failed = TRUE;
+                        else
+                            setup_stream(u);
                     }
                     break;
 
@@ -501,6 +490,8 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
                     if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state)) {
                         if (bt_transport_acquire(u, TRUE) < 0)
                             failed = TRUE;
+                        else
+                            setup_stream(u);
                     }
                     /* We don't resume the smoother here. Instead we
                      * wait until the first packet arrives */
@@ -1425,7 +1416,12 @@ static int sco_over_pcm_state_update(struct userdata *u, pa_bool_t changed) {
             return -1;
         }
 
-        return bt_transport_acquire(u, TRUE);
+        if (bt_transport_acquire(u, TRUE) < 0)
+            return -1;
+
+        setup_stream(u);
+
+        return 0;
     }
 
     if (changed) {
-- 
1.7.11.7



More information about the pulseaudio-discuss mailing list