]> code.delx.au - pulseaudio/commitdiff
bluetooth: Fix unacquired transports during sink resume
authorMikel Astiz <mikel.astiz@bmw-carit.de>
Wed, 28 Nov 2012 18:20:58 +0000 (19:20 +0100)
committerArun Raghavan <arun.raghavan@collabora.co.uk>
Wed, 5 Dec 2012 03:41:27 +0000 (09:11 +0530)
The sink can be resumed while the source is still in PA_SOURCE_INIT.
This is the case if a module such as module-stream-restore routes the
audio to the sink during pa_sink_put(), leading to an inconsistent
state: the sink stays RUNNING but the transport is not actually
acquired.

src/modules/bluetooth/module-bluetooth-device.c

index 093550e0ae84b180e6a90b50e40bed0b16c1e993..6c0c746274a5a07fccaf83aad797bf9d48a5f796 100644 (file)
@@ -470,7 +470,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
                         break;
 
                     /* Resume the device if the source was suspended as well */
-                    if (!u->source || u->source->state == PA_SOURCE_SUSPENDED) {
+                    if (!u->source || !PA_SOURCE_IS_OPENED(u->source->thread_info.state)) {
                         if (bt_transport_acquire(u, TRUE) < 0)
                             failed = TRUE;
                     }
@@ -545,7 +545,7 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
                         break;
 
                     /* Resume the device if the sink was suspended as well */
-                    if (!u->sink || u->sink->thread_info.state == PA_SINK_SUSPENDED) {
+                    if (!u->sink || !PA_SINK_IS_OPENED(u->sink->thread_info.state)) {
                         if (bt_transport_acquire(u, TRUE) < 0)
                             failed = TRUE;
                     }