diff options
Diffstat (limited to 'sys/kern/uipc_usrreq.c')
| -rw-r--r-- | sys/kern/uipc_usrreq.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c index 2c7222398cb6..02b641a89725 100644 --- a/sys/kern/uipc_usrreq.c +++ b/sys/kern/uipc_usrreq.c @@ -149,8 +149,7 @@ uipc_abort(struct socket *so) KASSERT(unp != NULL, ("uipc_abort: unp == NULL")); UNP_LOCK(); unp_drop(unp, ECONNABORTED); - unp_detach(unp); - UNP_UNLOCK_ASSERT(); + UNP_UNLOCK(); } static int @@ -210,6 +209,21 @@ uipc_connect(struct socket *so, struct sockaddr *nam, struct thread *td) return (error); } +/* + * XXXRW: Should also unbind? + */ +static void +uipc_close(struct socket *so) +{ + struct unpcb *unp; + + unp = sotounpcb(so); + KASSERT(unp != NULL, ("uipc_close: unp == NULL")); + UNP_LOCK(); + unp_disconnect(unp); + UNP_UNLOCK(); +} + int uipc_connect2(struct socket *so1, struct socket *so2) { @@ -565,6 +579,7 @@ struct pr_usrreqs uipc_usrreqs = { .pru_sosend = sosend, .pru_soreceive = soreceive, .pru_sopoll = sopoll, + .pru_close = uipc_close, }; int |
