svn commit: r359593 - stable/12/sys/kern
Mark Johnston
markj at FreeBSD.org
Fri Apr 3 13:26:49 UTC 2020
Author: markj
Date: Fri Apr 3 13:26:38 2020
New Revision: 359593
URL: https://svnweb.freebsd.org/changeset/base/359593
Log:
MFC r359171:
Simplify uipc_detach() slightly.
Modified:
stable/12/sys/kern/uipc_usrreq.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/kern/uipc_usrreq.c
==============================================================================
--- stable/12/sys/kern/uipc_usrreq.c Fri Apr 3 13:25:53 2020 (r359592)
+++ stable/12/sys/kern/uipc_usrreq.c Fri Apr 3 13:26:38 2020 (r359593)
@@ -763,7 +763,6 @@ uipc_detach(struct socket *so)
{
struct unpcb *unp, *unp2;
struct mtx *vplock;
- struct sockaddr_un *saved_unp_addr;
struct vnode *vp;
int freeunp, local_unp_rights;
@@ -787,8 +786,7 @@ uipc_detach(struct socket *so)
mtx_lock(vplock);
}
UNP_PCB_LOCK(unp);
- if (unp->unp_vnode != vp &&
- unp->unp_vnode != NULL) {
+ if (unp->unp_vnode != vp && unp->unp_vnode != NULL) {
if (vplock)
mtx_unlock(vplock);
UNP_PCB_UNLOCK(unp);
@@ -801,21 +799,20 @@ uipc_detach(struct socket *so)
if (__predict_false(unp == unp->unp_conn)) {
unp_disconnect(unp, unp);
unp2 = NULL;
- goto connect_self;
+ } else {
+ if ((unp2 = unp->unp_conn) != NULL) {
+ unp_pcb_owned_lock2(unp, unp2, freeunp);
+ if (freeunp)
+ unp2 = NULL;
+ }
+ unp_pcb_hold(unp);
+ if (unp2 != NULL) {
+ unp_pcb_hold(unp2);
+ unp_disconnect(unp, unp2);
+ if (unp_pcb_rele(unp2) == 0)
+ UNP_PCB_UNLOCK(unp2);
+ }
}
- if ((unp2 = unp->unp_conn) != NULL) {
- unp_pcb_owned_lock2(unp, unp2, freeunp);
- if (freeunp)
- unp2 = NULL;
- }
- unp_pcb_hold(unp);
- if (unp2 != NULL) {
- unp_pcb_hold(unp2);
- unp_disconnect(unp, unp2);
- if (unp_pcb_rele(unp2) == 0)
- UNP_PCB_UNLOCK(unp2);
- }
- connect_self:
UNP_PCB_UNLOCK(unp);
UNP_REF_LIST_LOCK();
while (!LIST_EMPTY(&unp->unp_refs)) {
@@ -836,13 +833,10 @@ uipc_detach(struct socket *so)
MPASS(freeunp == 0);
local_unp_rights = unp_rights;
unp->unp_socket->so_pcb = NULL;
- saved_unp_addr = unp->unp_addr;
- unp->unp_addr = NULL;
unp->unp_socket = NULL;
- freeunp = unp_pcb_rele(unp);
- if (saved_unp_addr != NULL)
- free(saved_unp_addr, M_SONAME);
- if (!freeunp)
+ free(unp->unp_addr, M_SONAME);
+ unp->unp_addr = NULL;
+ if (!unp_pcb_rele(unp))
UNP_PCB_UNLOCK(unp);
if (vp) {
mtx_unlock(vplock);
More information about the svn-src-stable
mailing list