فهرست منبع

Bluetooth: check for already existent channel before create new one

Move this check to before the channel time creation simplifies the code
and avoid memory allocation if the channel already exist.

Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Acked-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Gustavo Padovan 13 سال پیش
والد
کامیت
2dfa1003cc
1فایلهای تغییر یافته به همراه4 افزوده شده و 9 حذف شده
  1. 4 9
      net/bluetooth/l2cap_core.c

+ 4 - 9
net/bluetooth/l2cap_core.c

@@ -3343,21 +3343,16 @@ static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hd
 
 
 	result = L2CAP_CR_NO_MEM;
 	result = L2CAP_CR_NO_MEM;
 
 
+	/* Check if we already have channel with that dcid */
+	if (__l2cap_get_chan_by_dcid(conn, scid))
+		goto response;
+
 	chan = pchan->ops->new_connection(pchan);
 	chan = pchan->ops->new_connection(pchan);
 	if (!chan)
 	if (!chan)
 		goto response;
 		goto response;
 
 
 	sk = chan->sk;
 	sk = chan->sk;
 
 
-	/* Check if we already have channel with that dcid */
-	if (__l2cap_get_chan_by_dcid(conn, scid)) {
-		if (chan->ops->teardown)
-			chan->ops->teardown(chan, 0);
-
-		chan->ops->close(chan);
-		goto response;
-	}
-
 	hci_conn_hold(conn->hcon);
 	hci_conn_hold(conn->hcon);
 
 
 	bacpy(&bt_sk(sk)->src, conn->src);
 	bacpy(&bt_sk(sk)->src, conn->src);