nuttx/net/tcp
chao an e46688c1ee net/tcp: use independent work to free the conn instance
I noticed that the conn instance will leak during stress test,
The close work queued from tcp_close_eventhandler() will be canceled
by tcp_timer() immediately:

Breakpoint 1, tcp_close_eventhandler (dev=0x565cd338 <up_irq_restore+108>, pvpriv=0x5655e6ff <getpid+12>, flags=0) at tcp/tcp_close.c:71
(gdb) bt
| #0  tcp_close_eventhandler (dev=0x565cd338 <up_irq_restore+108>, pvpriv=0x5655e6ff <getpid+12>, flags=0) at tcp/tcp_close.c:71
| #1  0x5658bf1e in devif_conn_event (dev=0x5660bd80 <g_sim_dev>, flags=512, list=0x5660d558 <g_cbprealloc+312>) at devif/devif_callback.c:508
| #2  0x5658a219 in tcp_callback (dev=0x5660bd80 <g_sim_dev>, conn=0x5660c4a0 <g_tcp_connections>, flags=512) at tcp/tcp_callback.c:167
| #3  0x56589253 in tcp_timer (dev=0x5660bd80 <g_sim_dev>, conn=0x5660c4a0 <g_tcp_connections>) at tcp/tcp_timer.c:378
| #4  0x5658dd47 in tcp_poll (dev=0x5660bd80 <g_sim_dev>, conn=0x5660c4a0 <g_tcp_connections>) at tcp/tcp_devpoll.c:95
| #5  0x5658b95f in devif_poll_tcp_connections (dev=0x5660bd80 <g_sim_dev>, callback=0x565770f2 <netdriver_txpoll>) at devif/devif_poll.c:601
| #6  0x5658b9ea in devif_poll (dev=0x5660bd80 <g_sim_dev>, callback=0x565770f2 <netdriver_txpoll>) at devif/devif_poll.c:722
| #7  0x56577230 in netdriver_txavail_work (arg=0x5660bd80 <g_sim_dev>) at sim/up_netdriver.c:308
| #8  0x5655999e in work_thread (argc=2, argv=0xf3db5dd0) at wqueue/kwork_thread.c:178
| #9  0x5655983f in nxtask_start () at task/task_start.c:129

(gdb) c
Continuing.
Breakpoint 2, tcp_update_timer (conn=0x5660c4a0 <g_tcp_connections>) at tcp/tcp_timer.c:178
(gdb) bt
| #0  tcp_update_timer (conn=0x5660c4a0 <g_tcp_connections>) at tcp/tcp_timer.c:178
| #1  0x5658952a in tcp_timer (dev=0x5660bd80 <g_sim_dev>, conn=0x5660c4a0 <g_tcp_connections>) at tcp/tcp_timer.c:708
| #2  0x5658dd47 in tcp_poll (dev=0x5660bd80 <g_sim_dev>, conn=0x5660c4a0 <g_tcp_connections>) at tcp/tcp_devpoll.c:95
| #3  0x5658b95f in devif_poll_tcp_connections (dev=0x5660bd80 <g_sim_dev>, callback=0x565770f2 <netdriver_txpoll>) at devif/devif_poll.c:601
| #4  0x5658b9ea in devif_poll (dev=0x5660bd80 <g_sim_dev>, callback=0x565770f2 <netdriver_txpoll>) at devif/devif_poll.c:722
| #5  0x56577230 in netdriver_txavail_work (arg=0x5660bd80 <g_sim_dev>) at sim/up_netdriver.c:308
| #6  0x5655999e in work_thread (argc=2, argv=0xf3db5dd0) at wqueue/kwork_thread.c:178
| #7  0x5655983f in nxtask_start () at task/task_start.c:129

Since a separate work will add 24 bytes to each conn instance,
but in order to support the feature of asynchronous close(),
I can not find a better way than adding a separate work,
for resource constraints, I recommend the developers to enable
CONFIG_NET_ALLOC_CONNS, which will reduce the ram usage.

Signed-off-by: chao an <anchao@xiaomi.com>
2022-09-22 23:33:00 +08:00
..
Kconfig Change dpends on SCHED_[L|H]PWORK to SCHED_WORKQUEUE 2022-05-28 18:41:51 +03:00
Make.defs net: fix the build when CONFIG_NET_TCP_WRITE_BUFFERS is not enabled 2022-05-18 07:54:17 +09:00
tcp_accept.c net/inet: move socket flags into socket_conn_s 2022-02-10 15:04:33 -03:00
tcp_appsend.c net/tcp: fix regression of invalid update the rexmit_seq in buffer mode 2022-07-12 11:04:39 +03:00
tcp_backlog.c
tcp_callback.c net: cleanup pvconn reference to avoid confuse 2022-08-26 20:58:11 +08:00
tcp_close.c net/tcp: use independent work to free the conn instance 2022-09-22 23:33:00 +08:00
tcp_conn.c net/tcp: use independent work to free the conn instance 2022-09-22 23:33:00 +08:00
tcp_connect.c net: cleanup pvconn reference to avoid confuse 2022-08-26 20:58:11 +08:00
tcp_devpoll.c tcp: move wd_timer from wifi driver to tcp stack 2022-05-28 16:29:51 +08:00
tcp_dump.c net: cleanup pvconn reference to avoid confuse 2022-08-26 20:58:11 +08:00
tcp_finddev.c
tcp_getsockopt.c net/tcp: Use the relative value for keep alive timer 2022-05-18 18:40:41 +03:00
tcp_input.c tcp: reset conn->nrtx when ack received 2022-08-17 21:35:09 +03:00
tcp_ioctl.c net: Align the prototype of sock_intf_s::si_ioctl with file_operations::ioctl 2022-09-06 22:46:37 +08:00
tcp_ipselect.c
tcp_listen.c net/tcp: Remove tcp_listen_initialize 2022-03-12 19:24:17 +02:00
tcp_monitor.c net/tcp: fix devif callback list corruption on tcp_close() 2022-08-30 19:41:18 +08:00
tcp_netpoll.c net: cleanup pvconn reference to avoid confuse 2022-08-26 20:58:11 +08:00
tcp_notifier.c sched/wqueue: Change the return type of work_notifier_teardown to void 2022-05-14 00:35:29 +03:00
tcp_recvfrom.c udp: add IPVx_PKTINFO related support 2022-09-07 10:49:47 +08:00
tcp_recvwindow.c
tcp_send_buffered.c net: cleanup pvconn reference to avoid confuse 2022-08-26 20:58:11 +08:00
tcp_send_unbuffered.c net: cleanup pvconn reference to avoid confuse 2022-08-26 20:58:11 +08:00
tcp_send.c net: unify FAR keyword usage for all net buffer memory mapped buffers 2022-01-20 01:42:56 +08:00
tcp_sendfile.c net: cleanup pvconn reference to avoid confuse 2022-08-26 20:58:11 +08:00
tcp_seqno.c
tcp_setsockopt.c tcp: move wd_timer from wifi driver to tcp stack 2022-05-28 16:29:51 +08:00
tcp_timer.c net/tcp: Search conn list again to aovid the race condition in tcp_timer_expiry 2022-06-07 20:15:41 +03:00
tcp_txdrain.c
tcp_wrbuffer.c iob: Remove iob_user_e enum and related code 2022-08-15 08:41:20 +03:00
tcp.h net/tcp: use independent work to free the conn instance 2022-09-22 23:33:00 +08:00