diff options
-rw-r--r-- | net/bluetooth/l2cap_core.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 38e9a0ea4f4..3c5ae0e4c56 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -1643,17 +1643,14 @@ static void l2cap_monitor_timeout(struct work_struct *work) | |||
1643 | 1643 | ||
1644 | l2cap_chan_lock(chan); | 1644 | l2cap_chan_lock(chan); |
1645 | 1645 | ||
1646 | if (chan->retry_count >= chan->remote_max_tx) { | 1646 | if (!chan->conn) { |
1647 | l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED); | ||
1648 | l2cap_chan_unlock(chan); | 1647 | l2cap_chan_unlock(chan); |
1649 | l2cap_chan_put(chan); | 1648 | l2cap_chan_put(chan); |
1650 | return; | 1649 | return; |
1651 | } | 1650 | } |
1652 | 1651 | ||
1653 | chan->retry_count++; | 1652 | l2cap_tx(chan, 0, 0, L2CAP_EV_MONITOR_TO); |
1654 | __set_monitor_timer(chan); | ||
1655 | 1653 | ||
1656 | l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL); | ||
1657 | l2cap_chan_unlock(chan); | 1654 | l2cap_chan_unlock(chan); |
1658 | l2cap_chan_put(chan); | 1655 | l2cap_chan_put(chan); |
1659 | } | 1656 | } |
@@ -1667,13 +1664,13 @@ static void l2cap_retrans_timeout(struct work_struct *work) | |||
1667 | 1664 | ||
1668 | l2cap_chan_lock(chan); | 1665 | l2cap_chan_lock(chan); |
1669 | 1666 | ||
1670 | chan->retry_count = 1; | 1667 | if (!chan->conn) { |
1671 | __set_monitor_timer(chan); | 1668 | l2cap_chan_unlock(chan); |
1672 | 1669 | l2cap_chan_put(chan); | |
1673 | set_bit(CONN_WAIT_F, &chan->conn_state); | 1670 | return; |
1674 | 1671 | } | |
1675 | l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL); | ||
1676 | 1672 | ||
1673 | l2cap_tx(chan, 0, 0, L2CAP_EV_RETRANS_TO); | ||
1677 | l2cap_chan_unlock(chan); | 1674 | l2cap_chan_unlock(chan); |
1678 | l2cap_chan_put(chan); | 1675 | l2cap_chan_put(chan); |
1679 | } | 1676 | } |