summaryrefslogtreecommitdiffstats
path: root/contrib/apr/poll/unix/kqueue.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2015-08-09 05:14:25 +0000
committerpeter <peter@FreeBSD.org>2015-08-09 05:14:25 +0000
commita9920216aaac71c26df6ad27f831f7d627470fff (patch)
tree630fa907bbf67b68f5bda48e89976d92874a7eb0 /contrib/apr/poll/unix/kqueue.c
parent9f652d03928c8e5407bf522f8101dc1f597f5615 (diff)
downloadFreeBSD-src-a9920216aaac71c26df6ad27f831f7d627470fff.zip
FreeBSD-src-a9920216aaac71c26df6ad27f831f7d627470fff.tar.gz
Update apr-1.5.1 to 1.5.2
Diffstat (limited to 'contrib/apr/poll/unix/kqueue.c')
-rw-r--r--contrib/apr/poll/unix/kqueue.c33
1 files changed, 25 insertions, 8 deletions
diff --git a/contrib/apr/poll/unix/kqueue.c b/contrib/apr/poll/unix/kqueue.c
index dbe785a..efc5898 100644
--- a/contrib/apr/poll/unix/kqueue.c
+++ b/contrib/apr/poll/unix/kqueue.c
@@ -115,12 +115,20 @@ static apr_status_t impl_pollset_create(apr_pollset_t *pollset,
{
int flags;
- if ((flags = fcntl(pollset->p->kqueue_fd, F_GETFD)) == -1)
- return errno;
+ if ((flags = fcntl(pollset->p->kqueue_fd, F_GETFD)) == -1) {
+ rv = errno;
+ close(pollset->p->kqueue_fd);
+ pollset->p = NULL;
+ return rv;
+ }
flags |= FD_CLOEXEC;
- if (fcntl(pollset->p->kqueue_fd, F_SETFD, flags) == -1)
- return errno;
+ if (fcntl(pollset->p->kqueue_fd, F_SETFD, flags) == -1) {
+ rv = errno;
+ close(pollset->p->kqueue_fd);
+ pollset->p = NULL;
+ return rv;
+ }
}
pollset->p->result_set = apr_palloc(p, pollset->p->setsize * sizeof(apr_pollfd_t));
@@ -338,13 +346,22 @@ static apr_status_t impl_pollcb_create(apr_pollcb_t *pollcb,
{
int flags;
+ apr_status_t rv;
- if ((flags = fcntl(fd, F_GETFD)) == -1)
- return errno;
+ if ((flags = fcntl(fd, F_GETFD)) == -1) {
+ rv = errno;
+ close(fd);
+ pollcb->fd = -1;
+ return rv;
+ }
flags |= FD_CLOEXEC;
- if (fcntl(fd, F_SETFD, flags) == -1)
- return errno;
+ if (fcntl(fd, F_SETFD, flags) == -1) {
+ rv = errno;
+ close(fd);
+ pollcb->fd = -1;
+ return rv;
+ }
}
pollcb->fd = fd;
OpenPOWER on IntegriCloud