Bluetooth: Refactor dlc disconnect logic in rfcomm_dlc_close()
authorPeter Hurley <peter@hurleysoftware.com>
Mon, 10 Feb 2014 01:59:13 +0000 (20:59 -0500)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 14 Feb 2014 21:39:30 +0000 (13:39 -0800)
Prepare for directly closing dlc if the RFCOMM session has not
yet been started; refactor the dlc disconnect logic into a separate
local function, __rfcomm_dlc_disconn(). Retains functional
equivalence.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Tested-By: Alexander Holler <holler@ahsoftware.de>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/rfcomm/core.c

index 3ce5ae493d1dcd77441a3cd7d123124ed02a6fff..5acc82fa020044228a07d0174987e397b21043c6 100644 (file)
@@ -431,6 +431,20 @@ int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 chann
        return r;
 }
 
+static void __rfcomm_dlc_disconn(struct rfcomm_dlc *d)
+{
+       struct rfcomm_session *s = d->session;
+
+       d->state = BT_DISCONN;
+       if (skb_queue_empty(&d->tx_queue)) {
+               rfcomm_send_disc(s, d->dlci);
+               rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
+       } else {
+               rfcomm_queue_disc(d);
+               rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
+       }
+}
+
 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
 {
        struct rfcomm_session *s = d->session;
@@ -458,14 +472,7 @@ static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
                /* Fall through */
 
        case BT_CONNECTED:
-               d->state = BT_DISCONN;
-               if (skb_queue_empty(&d->tx_queue)) {
-                       rfcomm_send_disc(s, d->dlci);
-                       rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
-               } else {
-                       rfcomm_queue_disc(d);
-                       rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
-               }
+               __rfcomm_dlc_disconn(d);
                break;
 
        default: