From: Weili Yao <weili_yao@trimble.com>
To: "ecos-discuss@ecos.sourceware.org" <ecos-discuss@ecos.sourceware.org>
Cc: "john.m.mills@alum.mit.edu" <john.m.mills@alum.mit.edu>,
"gary@mlbassoc.com" <gary@mlbassoc.com>,
"andrew@lunn.ch" <andrew@lunn.ch>
Subject: [ECOS] Re: Network TCP Handler: stale socket disposal
Date: Mon, 11 May 2015 16:39:00 -0000 [thread overview]
Message-ID: <B53EF7F1B3FACA45A95C31FB02F38C5108252F@usd-mbx-01.trimblecorp.net> (raw)
Hello John, Gary, and Andrew:
It seemed that John's patch proposal in the following post
https://www.sourceware.org/ml/ecos-patches/2007-08/msg00059.html
was not adopted by ECOS, but the patch indeed works for us. I put two devices using ECOS and put in our cooperation LAN side by side, one device with the patch and the other device without the patch. The device without the patch lost socketIDs, and the device with the patch has been running great. The backtrace shows as follows. I am not sure how to reproduce the problem, but when the devices are put in a big network, the patch code will be triggered and helped the free of socketIDs. Without the patch, the system slowly runs out of sockets and caused the system unaccessable.
My question is when the patch will be officially adopted by ECOS?
Thank you a lot!
Weili
(ECONNRESET is the so->error value) when reaching the patch code below:
(gdb) list *0x0010C8F0
0x10c8f0 is in debug_socket_patch (ecos/web/web_netinfo.c:501).
496 #include <sys/socketvar.h>
497 void debug_socket_patch(struct socket *so)
498 {
499 static int count = 0;
500 count++;
501 app_warning_error(fe_expro(), (count << 16) + so->so_error);
502 }
503
504 // end of the file
505
(gdb) list *0x003141D4
0x3141d4 is in cyg_sofree (/ecos_build/ecos_sources/packages/net/bsd_tcpip/current/src/sys/kern/uipc_socket.c:260).
255 head->so_incqlen--;
256 } else if (so->so_state & SS_COMP) {
257
258 if((so->so_error == ECONNRESET) ||
259 (so->so_error == ECONNREFUSED)){ // forced drop if flagged
260 debug_socket_patch(so);
261 TAILQ_REMOVE(&head->so_comp, so, so_list);
262 head->so_qlen--;
263 }
264 else
(gdb) list *0x003048F8
0x3048f8 is in cyg_in_pcbdetach (/ecos_build/ecos_sources/packages/net/bsd_tcpip/current/src/sys/netinet/in_pcb.c:528).
523 ipsec4_delete_pcbpolicy(inp);
524 #endif /*IPSEC*/
525 inp->inp_gencnt = ++ipi->ipi_gencnt;
526 in_pcbremlists(inp);
527 so->so_pcb = 0;
528 sofree(so);
529 if (inp->inp_options)
530 (void)m_free(inp->inp_options);
531 if (rt) {
532 /*
(gdb) list *0x00310FDC
0x310fdc is in cyg_tcp_close (/ecos_build/ecos_sources/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_subr.c:748).
743 #ifdef INET6
744 if (INP_CHECK_SOCKAF(so, AF_INET6))
745 in6_pcbdetach(inp);
746 else
747 #endif /* INET6 */
748 in_pcbdetach(inp);
749 tcpstat.tcps_closed++;
750 return ((struct tcpcb *)0);
751 }
752
(gdb) list *0x0030DB58
0x30db58 is in cyg_tcp_input (/ecos_build/ecos_sources/packages/net/bsd_tcpip/current/src/sys/netinet/tcp_input.c:2074).
2069 * If our FIN is now acknowledged, delete the TCB,
2070 * enter the closed state and return.
2071 */
2072 case TCPS_LAST_ACK:
2073 if (ourfinisacked) {
2074 tp = tcp_close(tp);
2075 goto drop;
2076 }
2077 break;
2078
(gdb) list *0x00308700
0x308700 is in cyg_ip_input (/ecos_build/ecos_sources/packages/net/bsd_tcpip/current/src/sys/netinet/ip_input.c:951).
946 ip->ip_len -= hlen; // subtract the hlen
947 }
948
949 upper_layer:
950
951 (*inetsw[ip_protox[ip->ip_p]].pr_input)(m, off);
952 #ifdef IPFIREWALL_FORWARD
953 ip_fw_fwd_addr = NULL; /* tcp needed it */
954 #endif
955 return;
(gdb) list *0x003087A8
0x3087a8 is in ipintr (/ecos_build/ecos_sources/packages/net/bsd_tcpip/current/src/sys/netinet/ip_input.c:979).
974 s = splimp();
975 IF_DEQUEUE(&ipintrq, m);
976 splx(s);
977 if (m == 0)
978 return;
979 ip_input(m);
980 }
981 }
982
983 /*
(gdb) list *0x002F987C
0x2f987c is in cyg_netint (/ecos_build/ecos_sources/packages/net/bsd_tcpip/current/src/ecos/support.c:757).
752 CYG_FLAG_WAITMODE_OR|CYG_FLAG_WAITMODE_CLR);
753 spl = splsoftnet(); // Prevent any overlapping "stack" processing
754 for (lvl = NETISR_MIN; lvl <= NETISR_MAX; lvl++) {
755 if (curisr & (1<<lvl)) {
756 if (NULL != _netisr_handlers[lvl])
757 (*_netisr_handlers[lvl])();
758 }
759 }
760 splx(spl);
761 }
(gdb) list *0x002D14B4
0x2d14b4 is in Cyg_HardwareThread::thread_entry(Cyg_Thread*) (/ecos_build/ecos_sources/packages/kernel/current/src/common/thread.cxx:94).
89 Cyg_Scheduler::scheduler.thread_entry( thread );
90
91 // Call entry point in a loop.
92 for(;;)
93 {
94 thread->entry_point(thread->entry_data);
95 thread->exit();
96 }
97 }
98
(gdb) list *0x002D147C
0x2d147c is in Cyg_Thread::exit() (/ecos_build/ecos_sources/packages/kernel/current/src/common/thread.cxx:781).
776
777 Cyg_Scheduler::scheduler.rem_thread(self);
778 }
779
780 Cyg_Scheduler::reschedule();
781 }
782
783 // -------------------------------------------------------------------------
784 // Kill thread. Force the thread into EXITED state externally, or
785 // make it wake up and call exit().
(gdb)
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
next reply other threads:[~2015-05-11 16:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-11 16:39 Weili Yao [this message]
-- strict thread matches above, loose matches on Subject: below --
2007-09-25 12:20 Alok Singh
[not found] ` <6F6F9AF887E54B47961CA0F5D1C228D102129720@shake.airdefense.net>
2007-09-25 13:41 ` Alok Singh
2007-09-25 14:56 ` John Mills
2007-09-28 12:06 ` Alok Singh
2007-09-28 13:31 ` John Mills
2007-10-02 9:15 ` Lars Povlsen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=B53EF7F1B3FACA45A95C31FB02F38C5108252F@usd-mbx-01.trimblecorp.net \
--to=weili_yao@trimble.com \
--cc=andrew@lunn.ch \
--cc=ecos-discuss@ecos.sourceware.org \
--cc=gary@mlbassoc.com \
--cc=john.m.mills@alum.mit.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).