Skip to content

Commit

Permalink
Bluetooth: mgmt: Fix New Settings event for connectable/discoverable
Browse files Browse the repository at this point in the history
When powered off and doing changes to the Connectable or Discoverable
setting we should also send an appropriate New Settings event in
addition to the command response.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Johan Hedberg committed Feb 21, 2012
1 parent beadb2b commit 0224d2f
Showing 1 changed file with 25 additions and 4 deletions.
29 changes: 25 additions & 4 deletions net/bluetooth/mgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -876,11 +876,20 @@ static int set_discoverable(struct sock *sk, u16 index, void *data, u16 len)
}

if (!hdev_is_powered(hdev)) {
if (cp->val)
set_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
else
clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
bool changed = false;

if (!!cp->val != test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) {
change_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
changed = true;
}

err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
if (err < 0)
goto failed;

if (changed)
err = new_settings(hdev, sk);

goto failed;
}

Expand Down Expand Up @@ -938,13 +947,25 @@ static int set_connectable(struct sock *sk, u16 index, void *data, u16 len)
hci_dev_lock(hdev);

if (!hdev_is_powered(hdev)) {
bool changed = false;

if (!!cp->val != test_bit(HCI_CONNECTABLE, &hdev->dev_flags))
changed = true;

if (cp->val)
set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
else {
clear_bit(HCI_CONNECTABLE, &hdev->dev_flags);
clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
}

err = send_settings_rsp(sk, MGMT_OP_SET_CONNECTABLE, hdev);
if (err < 0)
goto failed;

if (changed)
err = new_settings(hdev, sk);

goto failed;
}

Expand Down

0 comments on commit 0224d2f

Please sign in to comment.