|
@@ -545,6 +545,8 @@ void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
|
|
|
|
|
|
l2cap_chan_hold(chan);
|
|
|
|
|
|
+ hci_conn_hold(conn->hcon);
|
|
|
+
|
|
|
list_add(&chan->list, &conn->chan_l);
|
|
|
}
|
|
|
|
|
@@ -1361,7 +1363,6 @@ static void l2cap_le_conn_ready(struct l2cap_conn *conn)
|
|
|
|
|
|
chan->dcid = L2CAP_CID_ATT;
|
|
|
|
|
|
- hci_conn_hold(conn->hcon);
|
|
|
conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
|
|
|
|
|
|
bacpy(&bt_sk(chan->sk)->src, conn->src);
|
|
@@ -1827,6 +1828,9 @@ int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
|
|
|
l2cap_chan_add(conn, chan);
|
|
|
l2cap_chan_lock(chan);
|
|
|
|
|
|
+ /* l2cap_chan_add takes its own ref so we can drop this one */
|
|
|
+ hci_conn_drop(hcon);
|
|
|
+
|
|
|
l2cap_state_change(chan, BT_CONNECT);
|
|
|
__set_chan_timer(chan, sk->sk_sndtimeo);
|
|
|
|
|
@@ -3748,8 +3752,6 @@ static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn,
|
|
|
|
|
|
sk = chan->sk;
|
|
|
|
|
|
- hci_conn_hold(conn->hcon);
|
|
|
-
|
|
|
bacpy(&bt_sk(sk)->src, conn->src);
|
|
|
bacpy(&bt_sk(sk)->dst, conn->dst);
|
|
|
chan->psm = psm;
|