Browse Source

Bluetooth: mgmt: Fix Removing discoverable timeout in set_connectable

When switching connectable mode off any pending discoverable timeout
must also be disabled to avoid duplicate write_scan_enable commands.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Johan Hedberg 13 năm trước cách đây
mục cha
commit
df2c6c5ed5
1 tập tin đã thay đổi với 6 bổ sung1 xóa
  1. 6 1
      net/bluetooth/mgmt.c

+ 6 - 1
net/bluetooth/mgmt.c

@@ -935,9 +935,14 @@ static int set_connectable(struct sock *sk, u16 index, void *data, u16 len)
 
 
 	if (cp->val)
 	if (cp->val)
 		scan = SCAN_PAGE;
 		scan = SCAN_PAGE;
-	else
+	else {
 		scan = 0;
 		scan = 0;
 
 
+		if (test_bit(HCI_ISCAN, &hdev->flags) &&
+						hdev->discov_timeout > 0)
+			cancel_delayed_work(&hdev->discov_off);
+	}
+
 	err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
 	err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
 	if (err < 0)
 	if (err < 0)
 		mgmt_pending_remove(cmd);
 		mgmt_pending_remove(cmd);