svn commit: r198013 - user/kmacy/releng_8_fcs/sys/kern

Kip Macy kmacy at FreeBSD.org
Tue Oct 13 03:55:58 UTC 2009


Author: kmacy
Date: Tue Oct 13 03:55:57 2009
New Revision: 198013
URL: http://svn.freebsd.org/changeset/base/198013

Log:
  remove residual bg sendfile socket references before destroying socket buffer

Modified:
  user/kmacy/releng_8_fcs/sys/kern/uipc_socket.c
  user/kmacy/releng_8_fcs/sys/kern/uipc_syscalls.c

Modified: user/kmacy/releng_8_fcs/sys/kern/uipc_socket.c
==============================================================================
--- user/kmacy/releng_8_fcs/sys/kern/uipc_socket.c	Tue Oct 13 01:58:50 2009	(r198012)
+++ user/kmacy/releng_8_fcs/sys/kern/uipc_socket.c	Tue Oct 13 03:55:57 2009	(r198013)
@@ -166,6 +166,7 @@ static struct filterops sowrite_filtops 
 uma_zone_t socket_zone;
 so_gen_t	so_gencnt;	/* generation count for sockets */
 
+extern int bg_sendfile_enable;
 int	maxsockets;
 
 MALLOC_DEFINE(M_SONAME, "soname", "socket name");
@@ -620,6 +621,16 @@ sofree(struct socket *so)
 	if (pr->pr_usrreqs->pru_detach != NULL)
 		(*pr->pr_usrreqs->pru_detach)(so);
 
+	if (bg_sendfile_enable) {
+		SOCKBUF_LOCK(&so->so_snd);
+		if ((so->so_snd.sb_flags & (SB_SENDING|SB_SENDING_TASK)) ==
+		    (SB_SENDING|SB_SENDING_TASK))
+			sbwait(&so->so_snd);
+		else if (so->so_snd.sb_flags & SB_SENDING)
+			sosendingwakeup(&so->so_snd);
+		SOCKBUF_UNLOCK(&so->so_snd);
+	}
+
 	/*
 	 * From this point on, we assume that no other references to this
 	 * socket exist anywhere else in the stack.  Therefore, no locks need

Modified: user/kmacy/releng_8_fcs/sys/kern/uipc_syscalls.c
==============================================================================
--- user/kmacy/releng_8_fcs/sys/kern/uipc_syscalls.c	Tue Oct 13 01:58:50 2009	(r198012)
+++ user/kmacy/releng_8_fcs/sys/kern/uipc_syscalls.c	Tue Oct 13 03:55:57 2009	(r198013)
@@ -116,7 +116,7 @@ SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufsu
 /* XXX move to header */
 int getsock(struct filedesc *fdp, int fd, struct file **fpp, u_int *fflagp);
 
-static int bg_sendfile_enable = 0;
+int bg_sendfile_enable = 0;
 SYSCTL_INT(_kern_ipc, OID_AUTO, bg_sendfile_enable, CTLFLAG_RW,
     &bg_sendfile_enable, 0, "Enable background sendfile");
 


More information about the svn-src-user mailing list