2012-02-13 18:41:01

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 1/2] Bluetooth: Fix discovery state machine

In case of Start Discovery command failure, we should set the
discovery state to DISCOVERY_STOPPED. Otherwise, we stuck at
DISCOVERY_STARTING state and subsequent Start Discovery commands
will simply fail.

Signed-off-by: Andre Guedes <[email protected]>
---
net/bluetooth/mgmt.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index a2c2e12..a01d0af 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -2997,6 +2997,8 @@ int mgmt_start_discovery_failed(struct hci_dev *hdev, u8 status)
struct pending_cmd *cmd;
int err;

+ hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
+
cmd = mgmt_pending_find(MGMT_OP_START_DISCOVERY, hdev);
if (!cmd)
return -ENOENT;
--
1.7.9



2012-02-15 13:25:33

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH 1/2] Bluetooth: Fix discovery state machine

Hi Andre,

On Mon, Feb 13, 2012, Andre Guedes wrote:
> In case of Start Discovery command failure, we should set the
> discovery state to DISCOVERY_STOPPED. Otherwise, we stuck at
> DISCOVERY_STARTING state and subsequent Start Discovery commands
> will simply fail.
>
> Signed-off-by: Andre Guedes <[email protected]>
> ---
> net/bluetooth/mgmt.c | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)

Both patches have been applied to my bluetooth-next tree. I also fixed
the summary line of the second patch to be a bit more descriptive.
Thanks.

Johan

2012-02-15 12:31:20

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH 2/2] Bluetooth: DISCOVERY_STOPPED state

Hi Andre,

> We are not supposed to send mgmt_discovering events if we are
> transiting from DISCOVERY_STARTING to DISCOVERY_STOPPED state.
> It doesn't make sense to send mgmt_discovering event once
> discovery procedure has not been even started.
>
> Signed-off-by: Andre Guedes <[email protected]>
> ---
> net/bluetooth/hci_core.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)

Acked-by: Marcel Holtmann <[email protected]>

Regards

Marcel



2012-02-15 12:30:57

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH 1/2] Bluetooth: Fix discovery state machine

Hi Andre,

> In case of Start Discovery command failure, we should set the
> discovery state to DISCOVERY_STOPPED. Otherwise, we stuck at
> DISCOVERY_STARTING state and subsequent Start Discovery commands
> will simply fail.
>
> Signed-off-by: Andre Guedes <[email protected]>
> ---
> net/bluetooth/mgmt.c | 2 ++
> 1 files changed, 2 insertions(+), 0 deletions(-)

Acked-by: Marcel Holtmann <[email protected]>

Regards

Marcel



2012-02-13 18:41:02

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 2/2] Bluetooth: DISCOVERY_STOPPED state

We are not supposed to send mgmt_discovering events if we are
transiting from DISCOVERY_STARTING to DISCOVERY_STOPPED state.
It doesn't make sense to send mgmt_discovering event once
discovery procedure has not been even started.

Signed-off-by: Andre Guedes <[email protected]>
---
net/bluetooth/hci_core.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 9ada164..dc31e7d 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -380,7 +380,8 @@ void hci_discovery_set_state(struct hci_dev *hdev, int state)

switch (state) {
case DISCOVERY_STOPPED:
- mgmt_discovering(hdev, 0);
+ if (hdev->discovery.state != DISCOVERY_STARTING)
+ mgmt_discovering(hdev, 0);
break;
case DISCOVERY_STARTING:
break;
--
1.7.9