Date: Fri, 3 Apr 2020 13:26:38 +0000 (UTC) From: Mark Johnston <markj@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359593 - stable/12/sys/kern Message-ID: <202004031326.033DQco2080524@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202004031326.033DQco2080524>