Skip to content

Commit

Permalink
[IrDA]: f-timer reloading when sending rejected frames.
Browse files Browse the repository at this point in the history
Jean II was right: you have to re-charge the final timer when
resending rejected frames. Otherwise it triggers at a wrong time and
can break the currently running communication. Reproducible under
rt-preempt.

Signed-off-by: G. Liakhovetski <gl@dsa-ac.de>
Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
G. Liakhovetski authored and davem330 committed Jun 9, 2007
1 parent c0cfe7f commit b7e773b
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions net/irda/irlap_event.c
Original file line number Diff line number Diff line change
Expand Up @@ -1418,14 +1418,14 @@ static int irlap_state_nrm_p(struct irlap_cb *self, IRLAP_EVENT event,
*/
self->remote_busy = FALSE;

/* Stop final timer */
del_timer(&self->final_timer);

/*
* Nr as expected?
*/
ret = irlap_validate_nr_received(self, info->nr);
if (ret == NR_EXPECTED) {
/* Stop final timer */
del_timer(&self->final_timer);

/* Update Nr received */
irlap_update_nr_received(self, info->nr);

Expand Down Expand Up @@ -1457,14 +1457,12 @@ static int irlap_state_nrm_p(struct irlap_cb *self, IRLAP_EVENT event,

/* Resend rejected frames */
irlap_resend_rejected_frames(self, CMD_FRAME);

/* Final timer ??? Jean II */
irlap_start_final_timer(self, self->final_timeout * 2);

irlap_next_state(self, LAP_NRM_P);
} else if (ret == NR_INVALID) {
IRDA_DEBUG(1, "%s(), Received RR with "
"invalid nr !\n", __FUNCTION__);
del_timer(&self->final_timer);

irlap_next_state(self, LAP_RESET_WAIT);

Expand Down

0 comments on commit b7e773b

Please sign in to comment.