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:
parent
a9741e060a
commit
adc4b142ac
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user