:> tcp_disconnect(0,deda6b04,ff808000,dbc8cd78,c01aa6f7) at
:> tcp_disconnect+0x8
:> tcp_usr_detach(db0d48a0) at tcp_usr_detach+0x1e
:> netmsg_pru_detach(deda6b04) at netmsg_pru_detach+0xf
:> tcpmsg_service_loop(0,0,0,0,0) at tcpmsg_service_loop+0x26
:> lwkt_exit() at lwkt_exit
:> db> reset
:
:It'a already happened a couple more times, now. At least one of those
:times, I had closed an ssh session just before the lockup occurred. The
:most recent time, the entire machien locked up before the debug prompt
:showed up, leaving me with:
:..
It must be a remote close race with a local close. Try this patch.
Jeff I *think* the situation I am correcting here can happen but I'm
not sure, could you take a look at it?
p.s. keep the bug reports coming! Your SMP setup/use appears to be
catching issues that ours are not.
-Matt
Index: netinet/tcp_usrreq.c
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v
retrieving revision 1.26
diff -u -r1.26 tcp_usrreq.c
--- netinet/tcp_usrreq.c 11 Aug 2004 02:36:22 -0000 1.26
+++ netinet/tcp_usrreq.c 26 Oct 2004 19:44:25 -0000
@@ -215,15 +215,15 @@
struct tcpcb *tp;
TCPDEBUG0;
- if (inp == 0) {
+ if (inp == NULL) {
splx(s);
return EINVAL; /* XXX */
}
- tp = intotcpcb(inp);
- TCPDEBUG1();
- tp = tcp_disconnect(tp);
-
- TCPDEBUG2(PRU_DETACH);
+ if ((tp = intotcpcb(inp)) != NULL) {
+ TCPDEBUG1();
+ tp = tcp_disconnect(tp);
+ TCPDEBUG2(PRU_DETACH);
+ }
splx(s);
return error;
}