]> git.hungrycats.org Git - linux/commitdiff
[Bluetooth] Set disconnect timer for incoming ACL links
authorMarcel Holtmann <marcel@holtmann.org>
Tue, 13 Jan 2004 05:17:12 +0000 (06:17 +0100)
committerMarcel Holtmann <holtmann@holtmann.org>
Tue, 13 Jan 2004 05:17:12 +0000 (06:17 +0100)
In general a Bluetooth stack that creates an ACL link should also take
care of its termination, but some Bluetooth devices think otherwise. The
problem is that the Bluetooth specification don't defines an ownership
of an ACL link and if nobody cares about it, two devices stay connected
even if there is no need. To avoid leftover ACL links the disconnect
timer must also be used for incoming connections, but it is set twice
the default disconnect timeout so the other side get enough time to
clean everything by itself.

include/net/bluetooth/hci_core.h

index fd010a9dc75e3b6bc01261cc455d0055231b3c9f..dd11dfdfe0bdca496277a3f12743a93d32f128f5 100644 (file)
@@ -281,10 +281,12 @@ static inline void hci_conn_hold(struct hci_conn *conn)
 static inline void hci_conn_put(struct hci_conn *conn)
 {
        if (atomic_dec_and_test(&conn->refcnt)) {
-               if (conn->type == SCO_LINK)
+               if (conn->type == ACL_LINK) {
+                       unsigned long timeo = (conn->out) ?
+                               HCI_DISCONN_TIMEOUT : HCI_DISCONN_TIMEOUT * 2;
+                       hci_conn_set_timer(conn, timeo);
+               } else
                        hci_conn_set_timer(conn, HZ / 100);
-               else if (conn->out)
-                       hci_conn_set_timer(conn, HCI_DISCONN_TIMEOUT);
        }
 }