svn commit: r339419 - in head: share/man/man9 sys/kern

Jonathan T. Looney jtl at FreeBSD.org
Thu Oct 18 14:20:17 UTC 2018


Author: jtl
Date: Thu Oct 18 14:20:15 2018
New Revision: 339419
URL: https://svnweb.freebsd.org/changeset/base/339419

Log:
  r334853 added a "socket destructor" callback. However, as implemented, it
  was really a "socket close" callback.
  
  Update the socket destructor functionality to run when a socket is
  destroyed (rather than when it is closed). The original submitter has
  confirmed that this change satisfies the intended use case.
  
  Suggested by:	rwatson
  Submitted by:	Michio Honda <micchie at sfc.wide.ad.jp>
  Tested by:	Michio Honda <micchie at sfc.wide.ad.jp>
  Approved by:	re (kib)
  Differential Revision:	https://reviews.freebsd.org/D17590

Modified:
  head/share/man/man9/socket.9
  head/sys/kern/uipc_socket.c

Modified: head/share/man/man9/socket.9
==============================================================================
--- head/share/man/man9/socket.9	Thu Oct 18 04:36:25 2018	(r339418)
+++ head/share/man/man9/socket.9	Thu Oct 18 14:20:15 2018	(r339419)
@@ -26,7 +26,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd June 8, 2018
+.Dd October 18, 2018
 .Dt SOCKET 9
 .Os
 .Sh NAME
@@ -378,8 +378,8 @@ or
 A kernel system can use the
 .Fn sodtor_set
 function to set a destructor for a socket.
-The destructor is called when the socket is closed.
-The destructor is called after the protocol close routine has completed.
+The destructor is called when the socket is is about to be freed.
+The destructor is called before the protocol detach routine.
 The destructor can serve as a callback to initiate additional cleanup actions.
 .Ss Socket I/O
 The

Modified: head/sys/kern/uipc_socket.c
==============================================================================
--- head/sys/kern/uipc_socket.c	Thu Oct 18 04:36:25 2018	(r339418)
+++ head/sys/kern/uipc_socket.c	Thu Oct 18 14:20:15 2018	(r339419)
@@ -1026,6 +1026,9 @@ sofree(struct socket *so)
 		so->so_error = ECONNABORTED;
 	SOCK_UNLOCK(so);
 
+	if (so->so_dtor != NULL)
+		so->so_dtor(so);
+
 	VNET_SO_ASSERT(so);
 	if (pr->pr_flags & PR_RIGHTS && pr->pr_domain->dom_dispose != NULL)
 		(*pr->pr_domain->dom_dispose)(so);
@@ -1102,8 +1105,6 @@ soclose(struct socket *so)
 drop:
 	if (so->so_proto->pr_usrreqs->pru_close != NULL)
 		(*so->so_proto->pr_usrreqs->pru_close)(so);
-	if (so->so_dtor != NULL)
-		so->so_dtor(so);
 
 	SOCK_LOCK(so);
 	if ((listening = (so->so_options & SO_ACCEPTCONN))) {


More information about the svn-src-head mailing list