summaryrefslogtreecommitdiff
path: root/network_io/unix
diff options
context:
space:
mode:
authortrawick <trawick@13f79535-47bb-0310-9956-ffa450edef68>2011-03-18 16:29:27 +0000
committertrawick <trawick@13f79535-47bb-0310-9956-ffa450edef68>2011-03-18 16:29:27 +0000
commit5331e5971a6017106f2be4c59ef34157228ae5ce (patch)
tree2e7e297f8ffa6944b6285425b8d6094ebcbdb796 /network_io/unix
parent676db15f3cee425d9738e8f5ebdf85ced8639fb1 (diff)
downloadlibapr-5331e5971a6017106f2be4c59ef34157228ae5ce.tar.gz
apr_socket_create/accept: clean up socket descriptor on
some error paths which happen before the cleanup is registered git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@1082963 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io/unix')
-rw-r--r--network_io/unix/sockets.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/network_io/unix/sockets.c b/network_io/unix/sockets.c
index 11d284916..b7b175e11 100644
--- a/network_io/unix/sockets.c
+++ b/network_io/unix/sockets.c
@@ -177,10 +177,14 @@ apr_status_t apr_socket_create(apr_socket_t **new, int ofamily, int type,
int flags;
if ((flags = fcntl((*new)->socketdes, F_GETFD)) == -1)
+ close((*new)->socketdes);
+ (*new)->socketdes = -1;
return errno;
flags |= FD_CLOEXEC;
if (fcntl((*new)->socketdes, F_SETFD, flags) == -1)
+ close((*new)->socketdes);
+ (*new)->socketdes = -1;
return errno;
}
#endif
@@ -339,12 +343,18 @@ apr_status_t apr_socket_accept(apr_socket_t **new, apr_socket_t *sock,
{
int flags;
- if ((flags = fcntl((*new)->socketdes, F_GETFD)) == -1)
+ if ((flags = fcntl((*new)->socketdes, F_GETFD)) == -1) {
+ close((*new)->socketdes);
+ (*new)->socketdes = -1;
return errno;
+ }
flags |= FD_CLOEXEC;
- if (fcntl((*new)->socketdes, F_SETFD, flags) == -1)
+ if (fcntl((*new)->socketdes, F_SETFD, flags) == -1) {
+ close((*new)->socketdes);
+ (*new)->socketdes = -1;
return errno;
+ }
}
#endif