Skip to content

Commit

Permalink
Bluetooth: Use the ERTM transmit state machine from timeout handlers
Browse files Browse the repository at this point in the history
Different states have different actions for retransmit and monitor
timeouts, so remove the logic for those actions from the timer handlers.

Signed-off-by: Mat Martineau <mathewm@codeaurora.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
  • Loading branch information
Mat Martineau authored and Johan Hedberg committed Jun 5, 2012
1 parent 4239d16 commit 80909e0
Showing 1 changed file with 8 additions and 11 deletions.
19 changes: 8 additions & 11 deletions net/bluetooth/l2cap_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1643,17 +1643,14 @@ static void l2cap_monitor_timeout(struct work_struct *work)

l2cap_chan_lock(chan);

if (chan->retry_count >= chan->remote_max_tx) {
l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
if (!chan->conn) {
l2cap_chan_unlock(chan);
l2cap_chan_put(chan);
return;
}

chan->retry_count++;
__set_monitor_timer(chan);
l2cap_tx(chan, 0, 0, L2CAP_EV_MONITOR_TO);

l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
l2cap_chan_unlock(chan);
l2cap_chan_put(chan);
}
Expand All @@ -1667,13 +1664,13 @@ static void l2cap_retrans_timeout(struct work_struct *work)

l2cap_chan_lock(chan);

chan->retry_count = 1;
__set_monitor_timer(chan);

set_bit(CONN_WAIT_F, &chan->conn_state);

l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
if (!chan->conn) {
l2cap_chan_unlock(chan);
l2cap_chan_put(chan);
return;
}

l2cap_tx(chan, 0, 0, L2CAP_EV_RETRANS_TO);
l2cap_chan_unlock(chan);
l2cap_chan_put(chan);
}
Expand Down

0 comments on commit 80909e0

Please sign in to comment.