summaryrefslogtreecommitdiff
path: root/network_io
diff options
context:
space:
mode:
authorJeff Trawick <trawick@apache.org>2011-03-18 16:29:27 +0000
committerJeff Trawick <trawick@apache.org>2011-03-18 16:29:27 +0000
commit6f23050bc8fe430e7b89d7bc35af060b99a128a8 (patch)
tree2e7e297f8ffa6944b6285425b8d6094ebcbdb796 /network_io
parentcecb6d3aacd0a0410c443642f1eaeda7bdbf51ce (diff)
downloadapr-6f23050bc8fe430e7b89d7bc35af060b99a128a8.tar.gz
apr_socket_create/accept: clean up socket descriptor on
some error paths which happen before the cleanup is registered git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1082963 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-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