In syncache_timer(), don't attempt to lock the inpcb structure

associated with the syncache entry: in case tcp_close() has been
called on the corresponding listening socket, the lock has been
destroyed as a side effect of in_pcbdetach(), causing a panic when
we attempt to lock on it.

Reviewed by:	hsu
This commit is contained in:
pb 2002-12-21 19:59:47 +00:00
parent a9741e060a
commit adc4b142ac

View File

@ -384,7 +384,6 @@ syncache_timer(xslot)
break;
sc = nsc;
inp = sc->sc_tp->t_inpcb;
INP_LOCK(inp);
if (slot == SYNCACHE_MAXREXMTS ||
slot >= tcp_syncache.rexmt_limit ||
inp->inp_gencnt != sc->sc_inp_gencnt) {
@ -400,7 +399,6 @@ syncache_timer(xslot)
* entry on the timer chain until it has completed.
*/
(void) syncache_respond(sc, NULL);
INP_UNLOCK(inp);
nsc = TAILQ_NEXT(sc, sc_timerq);
tcpstat.tcps_sc_retransmitted++;
TAILQ_REMOVE(&tcp_syncache.timerq[slot], sc, sc_timerq);