diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2007-05-05 00:36:13 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2007-05-05 00:36:13 +0200 |
commit | 9cf5b0ea3a7f1432c61029f7aaf4b8b338628884 (patch) | |
tree | df659b3fe371301a6dba33782451655a09e9c25b /net | |
parent | [Bluetooth] Check that device is in rfcomm_dev_list before deleting (diff) | |
download | linux-9cf5b0ea3a7f1432c61029f7aaf4b8b338628884.tar.xz linux-9cf5b0ea3a7f1432c61029f7aaf4b8b338628884.zip |
[Bluetooth] Disconnect L2CAP connection after last RFCOMM DLC
The RFCOMM specification says that the device closing the last DLC on
a particular session is responsible for closing the multiplexer by
closing the corresponding L2CAP channel.
Signed-off-by: Ville Tervo <ville.tervo@nokia.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net')
-rw-r--r-- | net/bluetooth/rfcomm/core.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index 71a72fcb2b54..52e04df323ea 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c @@ -1058,6 +1058,12 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci) case BT_DISCONN: d->state = BT_CLOSED; __rfcomm_dlc_close(d, 0); + + if (list_empty(&s->dlcs)) { + s->state = BT_DISCONN; + rfcomm_send_disc(s, 0); + } + break; } } else { @@ -1067,6 +1073,10 @@ static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci) s->state = BT_CONNECTED; rfcomm_process_connect(s); break; + + case BT_DISCONN: + rfcomm_session_put(s); + break; } } return 0; |