Pierre, can you see if this patch fixes your problem?  Thanks.

                                                Jeffrey
Index: tcp_syncache.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/tcp_syncache.c,v
retrieving revision 1.30
diff -u -r1.30 tcp_syncache.c
--- tcp_syncache.c      20 Dec 2002 11:24:02 -0000      1.30
+++ tcp_syncache.c      21 Dec 2002 19:52:18 -0000
@@ -384,14 +384,12 @@
                        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) {
                        nsc = TAILQ_NEXT(sc, sc_timerq);
                        syncache_drop(sc, NULL);
                        tcpstat.tcps_sc_stale++;
-                       INP_UNLOCK(inp);
                        continue;
                }
                /*
@@ -399,6 +397,7 @@
                 * to modify another entry, so do not obtain the next
                 * entry on the timer chain until it has completed.
                 */
+               INP_LOCK(inp);
                (void) syncache_respond(sc, NULL);
                INP_UNLOCK(inp);
                nsc = TAILQ_NEXT(sc, sc_timerq);


Reply via email to