On Mon, 20 Dec 2004, Alan Cox wrote: > > I haven't seen this in a very long time, but I've definitely tried to > > track it down before with zero luck. > > With the attached change, I've had no more crashes. > > I speculate uipc_send() is missing needed synchronization on so_snd. > Robert, can you verify the patch? Sorry for the delay in responding to your original post; I'm still catching up with e-mail from my trip to Bangladesh. I actually had similar changes to this in the netperf branch at one point, but think I removed them due to concerns about lock order. However, this change is careful to acquire the send lock before the receive lock, so I think shouldn't present a problem from that perspective. Please go ahead and commit, perhaps with a 2 week MFC time? Thanks! Robert N M Watson FreeBSD Core Team, TrustedBSD Projects robert_at_fledge.watson.org Principal Research Scientist, McAfee Research > Index: kern/uipc_usrreq.c > =================================================================== > RCS file: /home/ncvs/src/sys/kern/uipc_usrreq.c,v > retrieving revision 1.143 > diff -u -r1.143 uipc_usrreq.c > --- kern/uipc_usrreq.c 1 Dec 2004 09:22:26 -0000 1.143 > +++ kern/uipc_usrreq.c 19 Dec 2004 03:22:50 -0000 > _at__at_ -452,7 +452,9 _at__at_ > } > } > > + SOCKBUF_LOCK(&so->so_snd); > if (so->so_snd.sb_state & SBS_CANTSENDMORE) { > + SOCKBUF_UNLOCK(&so->so_snd); > error = EPIPE; > break; > } > _at__at_ -478,6 +480,7 _at__at_ > (so2->so_rcv.sb_cc - unp->unp_conn->unp_cc); > (void)chgsbsize(so->so_cred->cr_uidinfo, &so->so_snd.sb_hiwat, > newhiwat, RLIM_INFINITY); > + SOCKBUF_UNLOCK(&so->so_snd); > unp->unp_conn->unp_cc = so2->so_rcv.sb_cc; > sorwakeup_locked(so2); > m = NULL;Received on Wed Dec 22 2004 - 07:58:41 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:25 UTC