mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 12:35:52 +02:00
If timeout occurs, j1939_tp_rxtimer() first calls hrtimer_start() to restart
rxtimer, and then calls __j1939_session_cancel() to set session->state =
J1939_SESSION_WAITING_ABORT. At next timeout expiration, because of the
J1939_SESSION_WAITING_ABORT session state j1939_tp_rxtimer() will call
j1939_session_deactivate_activate_next() to deactivate current session, and
rxtimer won't be set.
But for multipacket broadcast session, __j1939_session_cancel() don't set
session->state = J1939_SESSION_WAITING_ABORT, thus current session won't be
deactivate and hrtimer_start() is called to start new rxtimer again and again.
So fix it by moving session->state = J1939_SESSION_WAITING_ABORT out of if
(!j1939_cb_is_broadcast(&session->skcb)) statement.
Fixes:
|
||
|---|---|---|
| .. | ||
| j1939 | ||
| af_can.c | ||
| af_can.h | ||
| bcm.c | ||
| gw.c | ||
| Kconfig | ||
| Makefile | ||
| proc.c | ||
| raw.c | ||