diff options
author | fenner <fenner@FreeBSD.org> | 2000-03-18 08:56:56 +0000 |
---|---|---|
committer | fenner <fenner@FreeBSD.org> | 2000-03-18 08:56:56 +0000 |
commit | 284fc45a1e4761e20ca244e50ae94ec40e29b128 (patch) | |
tree | a4a9f9dbf16c0a5e6bf3609693e4355669c2224e /sys/kern | |
parent | 855f88c9ee43d878e9dc8c5f4b362bd197d6f68d (diff) | |
download | FreeBSD-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.c | 8 |
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 |