summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_socket.c
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>2000-03-18 08:56:56 +0000
committerfenner <fenner@FreeBSD.org>2000-03-18 08:56:56 +0000
commit284fc45a1e4761e20ca244e50ae94ec40e29b128 (patch)
treea4a9f9dbf16c0a5e6bf3609693e4355669c2224e /sys/kern/uipc_socket.c
parent855f88c9ee43d878e9dc8c5f4b362bd197d6f68d (diff)
downloadFreeBSD-src-284fc45a1e4761e20ca244e50ae94ec40e29b128.zip
FreeBSD-src-284fc45a1e4761e20ca244e50ae94ec40e29b128.tar.gz
Make sure to free the socket in soabort() if the protocol couldn't
free it (this could happen if the protocol already freed its part and we just kept the socket around to make sure accept(2) didn't block)
Diffstat (limited to 'sys/kern/uipc_socket.c')
-rw-r--r--sys/kern/uipc_socket.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 6355dd0..e4433be 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -297,8 +297,14 @@ int
soabort(so)
struct socket *so;
{
+ int error;
- return (*so->so_proto->pr_usrreqs->pru_abort)(so);
+ error = (*so->so_proto->pr_usrreqs->pru_abort)(so);
+ if (error) {
+ sofree(so);
+ return error;
+ }
+ return (0);
}
int
OpenPOWER on IntegriCloud