changeset 9995:d626655ec3b9

6847403 tcp_fuse() leak stroptions mblk when re-fuse'ing
author Anders Persson <Anders.Persson@Sun.COM>
date Mon, 29 Jun 2009 13:59:59 -0700
parents 99552628e44c
children c439ba713aee
files usr/src/uts/common/inet/tcp/tcp_fusion.c
diffstat 1 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/inet/tcp/tcp_fusion.c	Mon Jun 29 13:59:59 2009 -0700
+++ b/usr/src/uts/common/inet/tcp/tcp_fusion.c	Mon Jun 29 13:59:59 2009 -0700
@@ -316,8 +316,6 @@
 				stropt->so_hiwat = tcp_fuse_set_rcv_hiwat(
 				    peer_tcp, peer_rq->q_hiwat);
 
-				tcp->tcp_refuse = B_FALSE;
-				peer_tcp->tcp_refuse = B_FALSE;
 				/* Send the options up */
 				putnext(peer_rq, mp);
 			} else {
@@ -339,6 +337,14 @@
 				(*peer_connp->conn_upcalls->su_set_proto_props)
 				    (peer_connp->conn_upper_handle, &sopp);
 			}
+		} else {
+			/*
+			 * Endpoints are being re-fused, so options will not
+			 * be sent up. In case of STREAMS, free the stroptions
+			 * mblk.
+			 */
+			if (!IPCL_IS_NONSTR(connp))
+				freemsg(mp);
 		}
 		tcp->tcp_refuse = B_FALSE;
 		peer_tcp->tcp_refuse = B_FALSE;