Browse Source

Bluetooth: fix shutdown on SCO sockets

shutdown should wait for SCO link to be properly disconnected before
detroying the socket, otherwise an application using the socket may
assume link is properly disconnected before it really happens which
can be a problem when e.g synchronizing profile switch.

Signed-off-by: Luiz Augusto von Dentz <luiz.dentz-von@nokia.com>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Luiz Augusto von Dentz 14 years ago
parent
commit
f21ca5fff6
1 changed files with 9 additions and 0 deletions
  1. 9 0
      net/bluetooth/sco.c

+ 9 - 0
net/bluetooth/sco.c

@@ -369,6 +369,15 @@ static void __sco_sock_close(struct sock *sk)
 
 
 	case BT_CONNECTED:
 	case BT_CONNECTED:
 	case BT_CONFIG:
 	case BT_CONFIG:
+		if (sco_pi(sk)->conn) {
+			sk->sk_state = BT_DISCONN;
+			sco_sock_set_timer(sk, SCO_DISCONN_TIMEOUT);
+			hci_conn_put(sco_pi(sk)->conn->hcon);
+			sco_pi(sk)->conn = NULL;
+		} else
+			sco_chan_del(sk, ECONNRESET);
+		break;
+
 	case BT_CONNECT:
 	case BT_CONNECT:
 	case BT_DISCONN:
 	case BT_DISCONN:
 		sco_chan_del(sk, ECONNRESET);
 		sco_chan_del(sk, ECONNRESET);