2014-08-11 17:23:32

by Lukasz Rymanowski

[permalink] [raw]
Subject: [PATCH] android/health: Fix reconnect scenario

When trying to reconnect to HDP device, BfA tries to connect MDL even
MCL is not connected.

D/BlueZ ( 2218): external/bluetooth/bluez/android/hal-health.c:connect_channel()
I/bluetoothd( 2220): bluetoothd[2221]: external/bluetooth/bluez/android/health.c:bt_health_connect_channel()
I/bluetoothd( 2220): bluetoothd[2221]: external/bluetooth/bluez/android/health.c:create_channel() mdep 1
D/BlueZ ( 2218): external/bluetooth/bluez/android/hal-bluetooth.c:handle_acl_state_changed() state 0
I/bluetoothd( 2220): bluetoothd[2221]: external/bluetooth/bluez/android/mcap-lib.c:mcap_create_mdl()
I/bluetoothd( 2220): bluetoothd[2221]: health: error creating mdl MCL is not connected

This patch makes sure that MCL is connected before trying to connect
MDL.
---
android/health.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/android/health.c b/android/health.c
index 2d80365..f4edc3e 100644
--- a/android/health.c
+++ b/android/health.c
@@ -1949,7 +1949,7 @@ static void bt_health_connect_channel(const void *buf, uint16_t len)
}
}

- if (!dev->mcl) {
+ if (!dev->mcl || (dev->mcl && !dev->mcl_conn)) {
if (connect_mcl(channel) < 0) {
error("health: error retrieving HDP SDP record");
goto fail;
--
1.8.4



2014-08-13 14:57:25

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH] android/health: Fix reconnect scenario

Hi Lukasz,

On Mon, Aug 11, 2014, Lukasz Rymanowski wrote:
> When trying to reconnect to HDP device, BfA tries to connect MDL even
> MCL is not connected.
>
> D/BlueZ ( 2218): external/bluetooth/bluez/android/hal-health.c:connect_channel()
> I/bluetoothd( 2220): bluetoothd[2221]: external/bluetooth/bluez/android/health.c:bt_health_connect_channel()
> I/bluetoothd( 2220): bluetoothd[2221]: external/bluetooth/bluez/android/health.c:create_channel() mdep 1
> D/BlueZ ( 2218): external/bluetooth/bluez/android/hal-bluetooth.c:handle_acl_state_changed() state 0
> I/bluetoothd( 2220): bluetoothd[2221]: external/bluetooth/bluez/android/mcap-lib.c:mcap_create_mdl()
> I/bluetoothd( 2220): bluetoothd[2221]: health: error creating mdl MCL is not connected
>
> This patch makes sure that MCL is connected before trying to connect
> MDL.
> ---
> android/health.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/android/health.c b/android/health.c
> index 2d80365..f4edc3e 100644
> --- a/android/health.c
> +++ b/android/health.c
> @@ -1949,7 +1949,7 @@ static void bt_health_connect_channel(const void *buf, uint16_t len)
> }
> }
>
> - if (!dev->mcl) {
> + if (!dev->mcl || (dev->mcl && !dev->mcl_conn)) {

The patch looks good but the second check for dev->mcl is a bit
redundant as this part is only evaluated if the first part (!dev->mcl)
was false. So the more concise form would be:

if (!dev->mcl || !dev->mcl_conn)

However, could you explain to me why these separate variables are needed
to begin with? Why isn't dev->mcl cleared in the mcl_disconnected()
function that sets dev->mcl_conn to false but doesn't do anything to the
dev->mcl pointer?

Johan

2014-08-13 14:30:55

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH] android/health: Fix reconnect scenario

Hi,

On Wed, Aug 13, 2014 at 4:09 PM, Ravi kumar Veeramally
<[email protected]> wrote:
> ping.
>
>
> On 08/11/2014 08:23 PM, Lukasz Rymanowski wrote:
>>
>> When trying to reconnect to HDP device, BfA tries to connect MDL even
>> MCL is not connected.
>>
>> D/BlueZ ( 2218):
>> external/bluetooth/bluez/android/hal-health.c:connect_channel()
>> I/bluetoothd( 2220): bluetoothd[2221]:
>> external/bluetooth/bluez/android/health.c:bt_health_connect_channel()
>> I/bluetoothd( 2220): bluetoothd[2221]:
>> external/bluetooth/bluez/android/health.c:create_channel() mdep 1
>> D/BlueZ ( 2218):
>> external/bluetooth/bluez/android/hal-bluetooth.c:handle_acl_state_changed()
>> state 0
>> I/bluetoothd( 2220): bluetoothd[2221]:
>> external/bluetooth/bluez/android/mcap-lib.c:mcap_create_mdl()
>> I/bluetoothd( 2220): bluetoothd[2221]: health: error creating mdl MCL is
>> not connected
>>
>> This patch makes sure that MCL is connected before trying to connect
>> MDL.
>> ---
>> android/health.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/android/health.c b/android/health.c
>> index 2d80365..f4edc3e 100644
>> --- a/android/health.c
>> +++ b/android/health.c
>> @@ -1949,7 +1949,7 @@ static void bt_health_connect_channel(const void
>> *buf, uint16_t len)
>> }
>> }
>> - if (!dev->mcl) {
>> + if (!dev->mcl || (dev->mcl && !dev->mcl_conn)) {
>> if (connect_mcl(channel) < 0) {
>> error("health: error retrieving HDP SDP record");
>> goto fail;
>
>
> Ravi.

Pushed, thanks.


--
Luiz Augusto von Dentz

2014-08-13 13:09:39

by Ravi kumar Veeramally

[permalink] [raw]
Subject: Re: [PATCH] android/health: Fix reconnect scenario

ping.

On 08/11/2014 08:23 PM, Lukasz Rymanowski wrote:
> When trying to reconnect to HDP device, BfA tries to connect MDL even
> MCL is not connected.
>
> D/BlueZ ( 2218): external/bluetooth/bluez/android/hal-health.c:connect_channel()
> I/bluetoothd( 2220): bluetoothd[2221]: external/bluetooth/bluez/android/health.c:bt_health_connect_channel()
> I/bluetoothd( 2220): bluetoothd[2221]: external/bluetooth/bluez/android/health.c:create_channel() mdep 1
> D/BlueZ ( 2218): external/bluetooth/bluez/android/hal-bluetooth.c:handle_acl_state_changed() state 0
> I/bluetoothd( 2220): bluetoothd[2221]: external/bluetooth/bluez/android/mcap-lib.c:mcap_create_mdl()
> I/bluetoothd( 2220): bluetoothd[2221]: health: error creating mdl MCL is not connected
>
> This patch makes sure that MCL is connected before trying to connect
> MDL.
> ---
> android/health.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/android/health.c b/android/health.c
> index 2d80365..f4edc3e 100644
> --- a/android/health.c
> +++ b/android/health.c
> @@ -1949,7 +1949,7 @@ static void bt_health_connect_channel(const void *buf, uint16_t len)
> }
> }
>
> - if (!dev->mcl) {
> + if (!dev->mcl || (dev->mcl && !dev->mcl_conn)) {
> if (connect_mcl(channel) < 0) {
> error("health: error retrieving HDP SDP record");
> goto fail;

Ravi.