summaryrefslogtreecommitdiffstats
path: root/net/bluetooth/mgmt.c
diff options
context:
space:
mode:
authorMarcel Holtmann2012-02-22 18:21:00 +0100
committerJohan Hedberg2012-02-23 12:07:00 +0100
commit955638ecec9431788e291fc99f34c42124071abe (patch)
treeb2fb709e91207da67d3b1269b37b32ebb944a924 /net/bluetooth/mgmt.c
parentBluetooth: Disabling discoverable with timeout is invalid (diff)
downloadkernel-qcow2-linux-955638ecec9431788e291fc99f34c42124071abe.tar.gz
kernel-qcow2-linux-955638ecec9431788e291fc99f34c42124071abe.tar.xz
kernel-qcow2-linux-955638ecec9431788e291fc99f34c42124071abe.zip
Bluetooth: Fix handling of discoverable setting with timeout
The current handling of the discoverable timeout was missing the proper handling of the timeout when the mode was already set. Now the command can be used to expire or retrigger the timeout. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'net/bluetooth/mgmt.c')
-rw-r--r--net/bluetooth/mgmt.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 6df4af6e99cc..f7e111f30434 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -900,6 +900,17 @@ static int set_discoverable(struct sock *sk, u16 index, void *data, u16 len)
}
if (!!cp->val == test_bit(HCI_DISCOVERABLE, &hdev->dev_flags)) {
+ if (hdev->discov_timeout > 0) {
+ cancel_delayed_work(&hdev->discov_off);
+ hdev->discov_timeout = 0;
+ }
+
+ if (cp->val && timeout > 0) {
+ hdev->discov_timeout = timeout;
+ queue_delayed_work(hdev->workqueue, &hdev->discov_off,
+ msecs_to_jiffies(hdev->discov_timeout * 1000));
+ }
+
err = send_settings_rsp(sk, MGMT_OP_SET_DISCOVERABLE, hdev);
goto failed;
}