MCPcopy Create free account
hub / github.com/F-Stack/f-stack / uipc_close

Function uipc_close

freebsd/kern/uipc_usrreq.c:731–763  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

729}
730
731static void
732uipc_close(struct socket *so)
733{
734 struct unpcb *unp, *unp2;
735 struct vnode *vp = NULL;
736 struct mtx *vplock;
737
738 unp = sotounpcb(so);
739 KASSERT(unp != NULL, ("uipc_close: unp == NULL"));
740
741 vplock = NULL;
742 if ((vp = unp->unp_vnode) != NULL) {
743 vplock = mtx_pool_find(mtxpool_sleep, vp);
744 mtx_lock(vplock);
745 }
746 UNP_PCB_LOCK(unp);
747 if (vp && unp->unp_vnode == NULL) {
748 mtx_unlock(vplock);
749 vp = NULL;
750 }
751 if (vp != NULL) {
752 VOP_UNP_DETACH(vp);
753 unp->unp_vnode = NULL;
754 }
755 if ((unp2 = unp_pcb_lock_peer(unp)) != NULL)
756 unp_disconnect(unp, unp2);
757 else
758 UNP_PCB_UNLOCK(unp);
759 if (vp) {
760 mtx_unlock(vplock);
761 vrele(vp);
762 }
763}
764
765static int
766uipc_connect2(struct socket *so1, struct socket *so2)

Callers

nothing calls this directly

Calls 6

mtx_pool_findFunction · 0.85
unp_pcb_lock_peerFunction · 0.85
unp_disconnectFunction · 0.85
mtx_lockFunction · 0.70
mtx_unlockFunction · 0.70
vreleFunction · 0.70

Tested by

no test coverage detected