When a task needs to send data, a callback is allocated and the transmission is happening in a worker task through devif_send. Synchronization between the two tasks (sender & worker) is achieved by a semaphore. If devif_send fails, this semaphore was never posted, leaving the sending task blocked indefinitely. This commit fixes this by checking the return code of netif_send, and posting this semaphore in case of failure. Polling then stops, and execution is resumed on the sending task. |
||
|---|---|---|
| .. | ||
| can.h | ||
| can_callback.c | ||
| can_conn.c | ||
| can_getsockopt.c | ||
| can_input.c | ||
| can_notifier.c | ||
| can_poll.c | ||
| can_recvmsg.c | ||
| can_sendmsg.c | ||
| can_setsockopt.c | ||
| can_sockif.c | ||
| Kconfig | ||
| Make.defs | ||