From owner-p4-projects@FreeBSD.ORG Wed Nov 12 14:29:26 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 34A5316A4D0; Wed, 12 Nov 2003 14:29:26 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id ECBAE16A4CE for ; Wed, 12 Nov 2003 14:29:25 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6790143FDD for ; Wed, 12 Nov 2003 14:29:25 -0800 (PST) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.9/8.12.9) with ESMTP id hACMTPXJ027131 for ; Wed, 12 Nov 2003 14:29:25 -0800 (PST) (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.9/8.12.9/Submit) id hACMTO4R027128 for perforce@freebsd.org; Wed, 12 Nov 2003 14:29:24 -0800 (PST) (envelope-from sam@freebsd.org) Date: Wed, 12 Nov 2003 14:29:24 -0800 (PST) Message-Id: <200311122229.hACMTO4R027128@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 42175 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Nov 2003 22:29:26 -0000 http://perforce.freebsd.org/chv.cgi?CH=42175 Change 42175 by sam@sam_ebb on 2003/11/12 14:28:49 o shuffle lock assertions so they reflect the order the locks are to be taken o add missing inpcb lock required before destroying the inpcb mutex in tcp_twclose Affected files ... .. //depot/projects/netperf/sys/netinet/in_pcb.c#15 edit Differences ... ==== //depot/projects/netperf/sys/netinet/in_pcb.c#15 (text+ko) ==== @@ -208,9 +208,9 @@ { int anonport, error; + INP_INFO_WLOCK_ASSERT(inp->inp_pcbinfo); INP_LOCK_ASSERT(inp); - INP_INFO_WLOCK_ASSERT(inp->inp_pcbinfo); if (inp->inp_lport != 0 || inp->inp_laddr.s_addr != INADDR_ANY) return (EINVAL); anonport = inp->inp_lport == 0 && (nam == NULL || @@ -255,9 +255,9 @@ int wild = 0, reuseport = (so->so_options & SO_REUSEPORT); int error, prison = 0; + INP_INFO_WLOCK_ASSERT(pcbinfo); INP_LOCK_ASSERT(inp); - INP_INFO_WLOCK_ASSERT(pcbinfo); if (TAILQ_EMPTY(&in_ifaddrhead)) /* XXX broken! */ return (EADDRNOTAVAIL); laddr.s_addr = *laddrp; @@ -939,7 +939,8 @@ int matchwild = 3, wildcard; u_short lport = lport_arg; - INP_INFO_RLOCK_ASSERT(pcbinfo); + INP_INFO_WLOCK_ASSERT(pcbinfo); + if (!wild_okay) { struct inpcbhead *head; /* @@ -999,6 +1000,7 @@ */ if ((inp->inp_vflag & INP_TIMEWAIT) != 0) { if (tcp_twrecycleable((struct tcptw *)inp->inp_ppcb)) { + INP_LOCK(inp); tcp_twclose((struct tcptw *)inp->inp_ppcb, 0); match = NULL; goto retrylookup;