summaryrefslogtreecommitdiffstats
path: root/sys/kern
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
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')
-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