Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Dec 2003 12:35:54 -0800 (PST)
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 43754 for review
Message-ID:  <200312102035.hBAKZshC030116@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=43754

Change 43754 by sam@sam_ebb on 2003/12/10 12:35:06

	o correctly order so_rcv lock in pru_send+pru_rcvd
	o corect lock/unlock typo

Affected files ...

.. //depot/projects/netperf+sockets/sys/kern/uipc_usrreq.c#4 edit

Differences ...

==== //depot/projects/netperf+sockets/sys/kern/uipc_usrreq.c#4 (text+ko) ====

@@ -300,6 +300,12 @@
 
 	if (unp == 0)
 		return EINVAL;
+	/*
+	 * Reorder locks to avoid LORs.  Note that we
+	 * delay re-locking so_rcv to below so it can
+	 * be done only once.
+	 */
+	SOCKBUF_UNLOCK(&so->so_rcv);
 	UNP_ENTER(unp);
 	switch (so->so_type) {
 	case SOCK_DGRAM:
@@ -307,11 +313,14 @@
 		/*NOTREACHED*/
 
 	case SOCK_STREAM:
-		if (unp->unp_conn == 0)
+		if (unp->unp_conn == 0) {
+			SOCKBUF_LOCK(&so->so_rcv);
 			break;
+		}
 		so2 = unp->unp_conn->unp_socket;
-		/* XXX so_rcv lock */
+		/* NB: careful of order here */
 		SOCKBUF_LOCK(&so2->so_snd);
+		SOCKBUF_LOCK(&so->so_rcv);
 		/*
 		 * Adjust backpressure on sender
 		 * and wakeup any waiting to write.
@@ -413,7 +422,7 @@
 			if (nam) {
 				SOCKBUF_UNLOCK(&so->so_snd);
 				error = unp_connect(so, nam, td);
-				SOCKBUF_UNLOCK(&so->so_snd);
+				SOCKBUF_LOCK(&so->so_snd);
 				if (error)
 					break;	/* XXX */
 			} else {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200312102035.hBAKZshC030116>