Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

net: TCP retransmit queue implementation is broken #5857

Closed
pfalcon opened this issue Jan 28, 2018 · 16 comments
Closed

net: TCP retransmit queue implementation is broken #5857

pfalcon opened this issue Jan 28, 2018 · 16 comments
Assignees
Labels
area: Networking bug The issue is a bug, or the PR is fixing a bug priority: low Low impact/importance bug Waiting for response Waiting for author's response

Comments

@pfalcon
Copy link
Contributor

pfalcon commented Jan 28, 2018

Rexmit is implemented as sys_snode_t sent_list;, and may be accessed concurrently at least by net_tcp_send_data() and net_tcp_ack_received(), but slist.h is ridden with warnings like: "Note: the loop is unsafe and thus _cn should not be detached" and "This and other sys_slist*() functions are not thread safe.".

Here's typical logging for when working by a chance doesn't work:

got send_pkt: 0x00408338
appended 1079
[net/tcp] [DBG] net_tcp_queue_data: (0x004064a0): [0x00405ee0] Queue 0x00408338 len 1079
[net/tcp] [DBG] net_tcp_trace: (0x+ack_rcv
-ack_rcv
004064a0): [0x00405ee0] pkt 0x00408338 src 8080 dst 51352 seq 0x9d70a89c (2641406108) ack 0x5db6e7bb (1572267963/0) flags uAPrsf win 1280 chk 0xd46c
prepare_segment:ok
[net/tcp] [DBG] net_tcp_queue_data: (0x004064a0): [0x00405ee0] ref pkt 0x00408338 new ref 2 (net_tcp_queue_data:758)
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Sending pkt 0x00408338 (1119 bytes)
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x00+ack_rcv
-ack_rcv
4064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408338 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skippin[net/tcp] [DBG] tcp_retry_expired: (0x00406650): [0x00405ee0] ref pkt 0x00408338 new ref 2 (tcp_retry_expired:188)
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): retry 1: [0x00405ee0] sent pkt 0x00408338
g pkt 0x00408338 because it was already sent.
+ack_rcv
-ack_rcv
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): [0x00405ee0] ref pkt 0x00408338 new ref 2 (tcp_retry_expired:188)
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): retry 2: [0x00405ee0] sent pkt 0x00408338
+ack_rcv
-ack_rcv
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): [0x00405ee0] ref pkt 0x00408338 new ref 2 (tcp_retry_expired:188)
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): retry 3: [0x00405ee0] sent pkt 0x00408338
+ack_rcv
-ack_rcv
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): [0x00405ee0] ref pkt 0x00408338 new ref 2 (tcp_retry_expired:188)
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): retry 4: [0x00405ee0] sent pkt 0x00408338
+ack_rcv
-ack_rcv
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): [0x00405ee0] ref pkt 0x00408338 new ref 2 (tcp_retry_expired:188)
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): retry 5: [0x00405ee0] sent pkt 0x00408338
+ack_rcv
-ack_rcv
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): [0x00405ee0] ref pkt 0x00408338 new ref 2 (tcp_retry_expired:188)
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): retry 6: [0x00405ee0] sent pkt 0x00408338
+ack_rcv
-ack_rcv
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): [0x00405ee0] ref pkt 0x00408338 new ref 2 (tcp_retry_expired:188)
[net/tcp] [DBG] tcp_retry_expired: (0x00406650): retry 7: [0x00405ee0] sent pkt 0x00408338
+ack_rcv
-ack_rcv
-snd_dt
@pfalcon
Copy link
Contributor Author

pfalcon commented Jan 28, 2018

Needless to say, as you start to enable logging or add printk's, stuff gets nicely serialized and problems go away. After removing one of having-made-perfect printk's:

+snd_dt
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Sending pkt 0x00408260 (1492 bytes)
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408260 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408260 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408260 because it was already sent.
[net/tcp] [DBG] net_tcp_send_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408260 because it was already sent.
[net/tcp] [DBG] net_tcp_send+ack_rcv
unrf(0x00408260)
unrf(0x00408260)
[net/pkt] [ERR] net_pkt_unref_debug: *** ERROR *** pkt 0x00408260 is freed already by net_tcp_ack_received():970 (net_tcp_ack_received():970)
-ack_rcv
_data: (0x004064a0): [0x00405ee0] Skipping pkt 0x00408260 because it was already sent.
sock_write(4215872, 489a5, 1079)

@laperie
Copy link
Collaborator

laperie commented Feb 13, 2018

@pfalcon , do you have any suggestions on how to fix that?

@pfalcon
Copy link
Contributor Author

pfalcon commented Feb 13, 2018

do you have any suggestions on how to fix that?

Well, this is a complex issue, which is hard to debug due to time-sensitivity to debugging, as shown above. So, ideas to approach it:

  1. Find a way to do logging in a way to minimize affecting time-sensitive code, e.g. by adopting/extending @nashif's Add a very basic logger shell service #5586 , or by some alternative.
  2. Fix cases of avoidable extra allocation (== potential failure cases). I have some ideas, will file them later.
  3. It's clear that there're access synchronization issues to rexmit queue, ideas of wrapping it with semaphore/mutax can be tried even independently of p.1.
  4. Hopefully after all of the above, the general issue will be more clear (or maybe even resolved). Worst-case, we may need to rework TCP processing to be more synchronous (== conflict-free), rather than being done by competing, conflicting threads.
  5. Actually, first of all above, there should be good reproduction cases (most of issues I face happen with out-of-tree projects). Working on that.

Given the current situation (1.11 release, sockets work to cover TLS), this is in backlog, but I'd really like to focus on this with 1.12 window opening. Marking the issue accordingly. (@rveerama1 also touched some of issues with TCP re-xmit in #6058, but I doubt that resolved everything, due p.3 above).

Of course, I'd appreciate other developers to triage this issue.

Thanks.

@pfalcon pfalcon self-assigned this Feb 13, 2018
@pfalcon pfalcon added this to the v1.12.0 milestone Feb 13, 2018
@nashif nashif added the priority: medium Medium impact/importance bug label Feb 15, 2018
@nashif
Copy link
Member

nashif commented Feb 20, 2018

is this already fixed? can someone please verify!

@pfalcon
Copy link
Contributor Author

pfalcon commented Feb 20, 2018

is this already fixed? can someone please verify!

It's not, just last week I was getting non-deterministic lockups and errors when playing with sockets code. Per my comment above and metadata on the issue, I'm going to dig into this when 1.12 windows opens.

@nashif
Copy link
Member

nashif commented May 15, 2018

@jukka any news on this?

@pfalcon
Copy link
Contributor Author

pfalcon commented May 15, 2018

@jukka any news on this?

This is assigned to me, and I was working on streamlined ways to reproduce it - the original logs above were produced with a server written in MicroPython, trying to reproduce it with in-tree samples. But moving in that direction, I faced other issues, like #7476 , so this is backlogged somewhat. I also started to analyze/trace the source code trying for find issues with "static analysis".

@jukka
Copy link

jukka commented May 15, 2018

@jukkar

@pfalcon
Copy link
Contributor Author

pfalcon commented May 15, 2018

@jukka: Oops, sorry for disturbing!

@nashif
Copy link
Member

nashif commented May 29, 2018

@pfalcon What is the status? Are we going to see a fix for 1.12?

@pfalcon
Copy link
Contributor Author

pfalcon commented May 29, 2018

No, this is non-deterministic issue which is hard to reproduce. (We're with other folks working on reproducing such issues, e.g. #7831, but results aren't bright so far.)

@nashif nashif added this to the v1.13.0 milestone May 29, 2018
@nashif nashif added priority: low Low impact/importance bug and removed priority: medium Medium impact/importance bug labels Jul 24, 2018
@nashif nashif removed this from the v1.13.0 milestone Sep 10, 2018
@rljordan-zz
Copy link

Any new updates on this? Does the issue still exist?

@nashif nashif added this to the future milestone Apr 2, 2019
@nashif nashif removed this from the future milestone May 21, 2019
@nashif nashif added the Waiting for response Waiting for author's response label Mar 11, 2020
@nashif
Copy link
Member

nashif commented Mar 11, 2020

No updates for almost 2 years, does not seem important for anyone? @jukkar

@pfalcon
Copy link
Contributor Author

pfalcon commented Mar 11, 2020

The issues described here are (IMHO) the root cause of things like #23302. It seems like more people only now start to play with Zephyr networking and raise concerns.

@jukkar
Copy link
Member

jukkar commented Mar 11, 2020

I fixed several issues for TCP in #23334 that might actually help with this issue.

@carlescufi carlescufi changed the title net: TCP retransmit queue implementation is completely broken and works by a chance (when nobody's looking) net: TCP retransmit queue implementation is broken Apr 28, 2020
@jukkar
Copy link
Member

jukkar commented Apr 28, 2020

Old issue and things have improved a lot in the latest version. We are also migrating to new TCP version and the testing should go there. As agreed in release readiness and bug triage meeting, closing this issue.

@jukkar jukkar closed this as completed Apr 28, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: Networking bug The issue is a bug, or the PR is fixing a bug priority: low Low impact/importance bug Waiting for response Waiting for author's response
Projects
None yet
Development

No branches or pull requests

6 participants