aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/rfcomm
diff options
context:
space:
mode:
authorPeter Hurley <peter@hurleysoftware.com>2014-02-09 20:59:13 -0500
committerMarcel Holtmann <marcel@holtmann.org>2014-02-14 16:39:30 -0500
commitf622357a5e83e3a812ca985a78e86d750c98228b (patch)
treeafac556beddac52f4e0f027298f9dfee0b959ebe /net/bluetooth/rfcomm
parent5998e04063563ff2ffc779510f072ff0ff94163b (diff)
Bluetooth: Refactor dlc disconnect logic in rfcomm_dlc_close()
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>
Diffstat (limited to 'net/bluetooth/rfcomm')
-rw-r--r--net/bluetooth/rfcomm/core.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c
index 3ce5ae493d1d..5acc82fa0200 100644
--- a/net/bluetooth/rfcomm/core.c
+++ b/net/bluetooth/rfcomm/core.c
@@ -431,6 +431,20 @@ int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 chann
431 return r; 431 return r;
432} 432}
433 433
434static void __rfcomm_dlc_disconn(struct rfcomm_dlc *d)
435{
436 struct rfcomm_session *s = d->session;
437
438 d->state = BT_DISCONN;
439 if (skb_queue_empty(&d->tx_queue)) {
440 rfcomm_send_disc(s, d->dlci);
441 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
442 } else {
443 rfcomm_queue_disc(d);
444 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
445 }
446}
447
434static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err) 448static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
435{ 449{
436 struct rfcomm_session *s = d->session; 450 struct rfcomm_session *s = d->session;
@@ -458,14 +472,7 @@ static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
458 /* Fall through */ 472 /* Fall through */
459 473
460 case BT_CONNECTED: 474 case BT_CONNECTED:
461 d->state = BT_DISCONN; 475 __rfcomm_dlc_disconn(d);
462 if (skb_queue_empty(&d->tx_queue)) {
463 rfcomm_send_disc(s, d->dlci);
464 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
465 } else {
466 rfcomm_queue_disc(d);
467 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
468 }
469 break; 476 break;
470 477
471 default: 478 default: