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