mirror of
https://github.com/apache/nuttx.git
synced 2026-10-01 19:36:28 +00:00
The condition work_available(&conn->work) && tx_unacked != 0 prevented tcp_update_retrantimer from being called when the work queue was still busy, leaving conn->timer stale or zero on subsequent sends. This caused the RTT estimation to compute a false RTT (m = rto - 0 = rto), creating a positive feedback loop that inflated the RTO to extreme values (e.g., 232 half-seconds = ~116 seconds). Fix: remove the work_available check so that tcp_update_retrantimer is always called when there is unacknowledged data. The decision to re-queue the work is handled internally by tcp_update_timer. Signed-off-by: zhekunren <zhekunren@qq.com> |
||
|---|---|---|
| .. | ||
| CMakeLists.txt | ||
| Kconfig | ||
| Make.defs | ||
| tcp.h | ||
| tcp_accept.c | ||
| tcp_appsend.c | ||
| tcp_backlog.c | ||
| tcp_callback.c | ||
| tcp_cc.c | ||
| tcp_close.c | ||
| tcp_conn.c | ||
| tcp_connect.c | ||
| tcp_devpoll.c | ||
| tcp_dump.c | ||
| tcp_finddev.c | ||
| tcp_getsockopt.c | ||
| tcp_input.c | ||
| tcp_ioctl.c | ||
| tcp_ipselect.c | ||
| tcp_listen.c | ||
| tcp_monitor.c | ||
| tcp_netpoll.c | ||
| tcp_notifier.c | ||
| tcp_recvfrom.c | ||
| tcp_recvwindow.c | ||
| tcp_send.c | ||
| tcp_send_buffered.c | ||
| tcp_send_unbuffered.c | ||
| tcp_sendfile.c | ||
| tcp_seqno.c | ||
| tcp_setsockopt.c | ||
| tcp_shutdown.c | ||
| tcp_timer.c | ||
| tcp_txdrain.c | ||
| tcp_wrbuffer.c | ||