diff options
author | pgollucci <pgollucci@FreeBSD.org> | 2010-05-18 12:44:59 +0800 |
---|---|---|
committer | pgollucci <pgollucci@FreeBSD.org> | 2010-05-18 12:44:59 +0800 |
commit | 3d30f523cff4b4d7739553486773300acd7d46fa (patch) | |
tree | dea88dec25a8723909b92c34dd548ae392606d87 /www | |
parent | 67aa88966b13a5df2c6ee3120ee93c759f46f21a (diff) | |
download | freebsd-ports-gnome-3d30f523cff4b4d7739553486773300acd7d46fa.tar.gz freebsd-ports-gnome-3d30f523cff4b4d7739553486773300acd7d46fa.tar.zst freebsd-ports-gnome-3d30f523cff4b4d7739553486773300acd7d46fa.zip |
- drop KQUEUE_SUPPORT, patch doesn't apply cleaning to devel/apr0
Patches to devel/apr0 are welcome, send-pr.
With Hat: apache@
Diffstat (limited to 'www')
-rw-r--r-- | www/apache20/Makefile | 4 | ||||
-rw-r--r-- | www/apache20/files/exp-apr-kqueue.patch | 493 |
2 files changed, 0 insertions, 497 deletions
diff --git a/www/apache20/Makefile b/www/apache20/Makefile index 33235686ccac..54fbd437f28c 100644 --- a/www/apache20/Makefile +++ b/www/apache20/Makefile @@ -49,10 +49,6 @@ CONFLICTS= apache+mod_ssl-1.* apache+mod_ssl+ipv6-1.* apache+mod_ssl+modsnmp-1.* # LDAP "Enable LDAP Support" Off \ # THREADS "Enable threads in apr" Off -.if defined(WITH_KQUEUE_SUPPORT) -EXTRA_PATCHES+= ${FILESDIR}/exp-apr-kqueue.patch -.endif - SCRIPTS_ENV+= LIBTOOL=${LIBTOOL} LIBTOOLIZE=${LIBTOOLIZE} \ LIBTOOL_VERSION=${LIBTOOL_VERSION} AUTOCONF=${AUTOCONF} \ LIBTOOL_M4=${LIBTOOL_M4} \ diff --git a/www/apache20/files/exp-apr-kqueue.patch b/www/apache20/files/exp-apr-kqueue.patch deleted file mode 100644 index 79f820823349..000000000000 --- a/www/apache20/files/exp-apr-kqueue.patch +++ /dev/null @@ -1,493 +0,0 @@ ---- srclib/apr/poll/unix/poll.c.orig Wed Mar 15 02:03:56 2006 -+++ srclib/apr/poll/unix/poll.c Tue May 2 09:43:06 2006 -@@ -26,8 +26,15 @@ - #if HAVE_SYS_POLL_H - #include <sys/poll.h> - #endif --#if HAVE_ALLOCA_H --#include <alloca.h> -+ -+#ifdef HAVE_KQUEUE -+#include <sys/types.h> -+#include <sys/event.h> -+#include <sys/time.h> -+#endif -+ -+#ifdef HAVE_EPOLL -+#include <sys/epoll.h> - #endif - - #ifdef NETWARE -@@ -35,6 +42,63 @@ - #define HAS_PIPES(dt) (dt == APR_POLL_FILE) ? 1 : 0 - #endif - -+#ifdef HAVE_KQUEUE -+static apr_int16_t get_kqueue_revent(apr_int16_t event, apr_int16_t flags) -+{ -+ apr_int16_t rv = 0; -+ -+ if (event & EVFILT_READ) -+ rv |= APR_POLLIN; -+ if (event & EVFILT_WRITE) -+ rv |= APR_POLLOUT; -+ if (flags & EV_ERROR || flags & EV_EOF) -+ rv |= APR_POLLERR; -+ -+ return rv; -+} -+ -+#endif -+ -+#ifdef HAVE_EPOLL -+static apr_int16_t get_epoll_event(apr_int16_t event) -+{ -+ apr_int16_t rv = 0; -+ -+ if (event & APR_POLLIN) -+ rv |= EPOLLIN; -+ if (event & APR_POLLPRI) -+ rv |= EPOLLPRI; -+ if (event & APR_POLLOUT) -+ rv |= EPOLLOUT; -+ if (event & APR_POLLERR) -+ rv |= EPOLLERR; -+ if (event & APR_POLLHUP) -+ rv |= EPOLLHUP; -+ /* APR_POLLNVAL is not handled by epoll. */ -+ -+ return rv; -+} -+ -+static apr_int16_t get_epoll_revent(apr_int16_t event) -+{ -+ apr_int16_t rv = 0; -+ -+ if (event & EPOLLIN) -+ rv |= APR_POLLIN; -+ if (event & EPOLLPRI) -+ rv |= APR_POLLPRI; -+ if (event & EPOLLOUT) -+ rv |= APR_POLLOUT; -+ if (event & EPOLLERR) -+ rv |= APR_POLLERR; -+ if (event & EPOLLHUP) -+ rv |= APR_POLLHUP; -+ /* APR_POLLNVAL is not handled by epoll. */ -+ -+ return rv; -+} -+#endif -+ - #ifdef HAVE_POLL /* We can just use poll to do our socket polling. */ - - static apr_int16_t get_event(apr_int16_t event) -@@ -285,11 +349,19 @@ - - #endif - -- - struct apr_pollset_t { -+ apr_pool_t *pool; -+ - apr_uint32_t nelts; - apr_uint32_t nalloc; --#ifdef HAVE_POLL -+#ifdef HAVE_KQUEUE -+ int kqueue_fd; -+ struct kevent kevent; -+ struct kevent *ke_set; -+#elif defined(HAVE_EPOLL) -+ int epoll_fd; -+ struct epoll_event *pollset; -+#elif defined(HAVE_POLL) - struct pollfd *pollset; - #else - fd_set readset, writeset, exceptset; -@@ -297,18 +369,31 @@ - #endif - apr_pollfd_t *query_set; - apr_pollfd_t *result_set; -- apr_pool_t *pool; -+ - #ifdef NETWARE - int set_type; - #endif - }; - -+#if defined(HAVE_KQUEUE) || defined(HAVE_EPOLL) -+static apr_status_t backend_cleanup(void *p_) -+{ -+ apr_pollset_t *pollset = (apr_pollset_t *)p_; -+#ifdef HAVE_KQUEUE -+ close(pollset->kqueue_fd); -+#elif defined(HAVE_EPOLL) -+ close(pollset->epoll_fd); -+#endif -+ return APR_SUCCESS; -+} -+#endif /* HAVE_KQUEUE || HAVE_EPOLL */ -+ - APR_DECLARE(apr_status_t) apr_pollset_create(apr_pollset_t **pollset, - apr_uint32_t size, - apr_pool_t *p, - apr_uint32_t flags) - { --#if !defined(HAVE_POLL) && defined(FD_SETSIZE) -+#if !defined(HAVE_KQUEUE) && !defined(HAVE_EPOLL) && !defined(HAVE_POLL) && defined(FD_SETSIZE) - if (size > FD_SETSIZE) { - *pollset = NULL; - return APR_EINVAL; -@@ -317,7 +402,22 @@ - *pollset = apr_palloc(p, sizeof(**pollset)); - (*pollset)->nelts = 0; - (*pollset)->nalloc = size; --#ifdef HAVE_POLL -+ (*pollset)->pool = p; -+#ifdef HAVE_KQUEUE -+ (*pollset)->ke_set = (struct kevent*)apr_palloc(p, size * sizeof(struct kevent)); -+ memset((*pollset)->ke_set, 0, size * sizeof(struct kevent)); -+ (*pollset)->kqueue_fd = kqueue(); -+ if ((*pollset)->kqueue_fd == -1) { -+ return APR_ENOMEM; -+ } -+ apr_pool_cleanup_register(p, (void*)(*pollset), backend_cleanup, -+ apr_pool_cleanup_null); -+#elif defined(HAVE_EPOLL) -+ (*pollset)->epoll_fd = epoll_create(size); -+ (*pollset)->pollset = apr_palloc(p, size * sizeof(struct epoll_event)); -+ apr_pool_cleanup_register(p, (void*)(*pollset), backend_cleanup, -+ apr_pool_cleanup_null); -+#elif defined(HAVE_POLL) - (*pollset)->pollset = apr_palloc(p, size * sizeof(struct pollfd)); - #else - FD_ZERO(&((*pollset)->readset)); -@@ -330,23 +430,31 @@ - #endif - (*pollset)->query_set = apr_palloc(p, size * sizeof(apr_pollfd_t)); - (*pollset)->result_set = apr_palloc(p, size * sizeof(apr_pollfd_t)); -- (*pollset)->pool = p; -+ - return APR_SUCCESS; - } - - APR_DECLARE(apr_status_t) apr_pollset_destroy(apr_pollset_t *pollset) - { -- /* A no-op function for now. If we later implement /dev/poll -- * support, we'll need to close the /dev/poll fd here -- */ -+#if defined(HAVE_KQUEUE) || defined(HAVE_EPOLL) -+ return apr_pool_cleanup_run(pollset->pool, pollset, backend_cleanup); -+#else - return APR_SUCCESS; -+#endif - } - - APR_DECLARE(apr_status_t) apr_pollset_add(apr_pollset_t *pollset, - const apr_pollfd_t *descriptor) - { --#ifndef HAVE_POLL -+#ifdef HAVE_KQUEUE - apr_os_sock_t fd; -+#elif defined(HAVE_EPOLL) -+ struct epoll_event ev; -+ int ret = -1; -+#else -+#if !defined(HAVE_POLL) -+ apr_os_sock_t fd; -+#endif - #endif - - if (pollset->nelts == pollset->nalloc) { -@@ -354,7 +462,49 @@ - } - - pollset->query_set[pollset->nelts] = *descriptor; --#ifdef HAVE_POLL -+ -+#ifdef HAVE_KQUEUE -+ if (descriptor->desc_type == APR_POLL_SOCKET) { -+ fd = descriptor->desc.s->socketdes; -+ } -+ else { -+ fd = descriptor->desc.f->filedes; -+ } -+ -+ if (descriptor->reqevents & APR_POLLIN) { -+ EV_SET(&pollset->kevent, fd, EVFILT_READ, EV_ADD, 0, 0, NULL); -+ -+ if (kevent(pollset->kqueue_fd, &pollset->kevent, 1, NULL, 0, -+ NULL) == -1) { -+ return APR_ENOMEM; -+ } -+ } -+ -+ if (descriptor->reqevents & APR_POLLOUT) { -+ EV_SET(&pollset->kevent, fd, EVFILT_WRITE, EV_ADD, 0, 0, NULL); -+ -+ if (kevent(pollset->kqueue_fd, &pollset->kevent, 1, NULL, 0, -+ NULL) == -1) { -+ return APR_ENOMEM; -+ } -+ } -+ -+#elif defined(HAVE_EPOLL) -+ ev.events = get_epoll_event(descriptor->reqevents); -+ if (descriptor->desc_type == APR_POLL_SOCKET) { -+ ev.data.fd = descriptor->desc.s->socketdes; -+ ret = epoll_ctl(pollset->epoll_fd, EPOLL_CTL_ADD, -+ descriptor->desc.s->socketdes, &ev); -+ } -+ else { -+ ev.data.fd = descriptor->desc.f->filedes; -+ ret = epoll_ctl(pollset->epoll_fd, EPOLL_CTL_ADD, -+ descriptor->desc.f->filedes, &ev); -+ } -+ if (0 != ret) { -+ return APR_EBADF; -+ } -+#elif defined(HAVE_POLL) - - if (descriptor->desc_type == APR_POLL_SOCKET) { - pollset->pollset[pollset->nelts].fd = descriptor->desc.s->socketdes; -@@ -423,11 +573,97 @@ - const apr_pollfd_t *descriptor) - { - apr_uint32_t i; --#ifndef HAVE_POLL -+#ifdef HAVE_KQUEUE -+ apr_os_sock_t fd; -+#elif defined(HAVE_EPOLL) -+ struct epoll_event ev; -+ int ret = -1; -+#elif !defined(HAVE_POLL) - apr_os_sock_t fd; - #endif - --#ifdef HAVE_POLL -+#ifdef HAVE_KQUEUE -+ for (i = 0; i < pollset->nelts; i++) { -+ if (descriptor->desc.s == pollset->query_set[i].desc.s) { -+ /* Found an instance of the fd: remove this and any other copies */ -+ apr_uint32_t dst = i; -+ apr_uint32_t old_nelts = pollset->nelts; -+ pollset->nelts--; -+ for (i++; i < old_nelts; i++) { -+ if (descriptor->desc.s == pollset->query_set[i].desc.s) { -+ pollset->nelts--; -+ } -+ else { -+ pollset->query_set[dst] = pollset->query_set[i]; -+ dst++; -+ } -+ } -+ -+ if (descriptor->desc_type == APR_POLL_SOCKET) { -+ fd = descriptor->desc.s->socketdes; -+ } -+ else { -+ fd = descriptor->desc.f->filedes; -+ } -+ -+ if (descriptor->reqevents & APR_POLLIN) { -+ EV_SET(&pollset->kevent, fd, -+ EVFILT_READ, EV_DELETE, 0, 0, NULL); -+ -+ if (kevent(pollset->kqueue_fd, &pollset->kevent, 1, NULL, 0, -+ NULL) == -1) { -+ return APR_EBADF; -+ } -+ } -+ -+ if (descriptor->reqevents & APR_POLLOUT) { -+ EV_SET(&pollset->kevent, fd, -+ EVFILT_WRITE, EV_DELETE, 0, 0, NULL); -+ -+ if (kevent(pollset->kqueue_fd, &pollset->kevent, 1, NULL, 0, -+ NULL) == -1) { -+ return APR_EBADF; -+ } -+ } -+ -+ return APR_SUCCESS; -+ } -+ } -+#elif defined(HAVE_EPOLL) -+ for (i = 0; i < pollset->nelts; i++) { -+ if (descriptor->desc.s == pollset->query_set[i].desc.s) { -+ /* Found an instance of the fd: remove this and any other copies */ -+ apr_uint32_t dst = i; -+ apr_uint32_t old_nelts = pollset->nelts; -+ pollset->nelts--; -+ for (i++; i < old_nelts; i++) { -+ if (descriptor->desc.s == pollset->query_set[i].desc.s) { -+ pollset->nelts--; -+ } -+ else { -+ pollset->query_set[dst] = pollset->query_set[i]; -+ dst++; -+ } -+ } -+ ev.events = get_epoll_event(descriptor->reqevents); -+ if (descriptor->desc_type == APR_POLL_SOCKET) { -+ ev.data.fd = descriptor->desc.s->socketdes; -+ ret = epoll_ctl(pollset->epoll_fd, EPOLL_CTL_DEL, -+ descriptor->desc.s->socketdes, &ev); -+ } -+ else { -+ ev.data.fd = descriptor->desc.f->filedes; -+ ret = epoll_ctl(pollset->epoll_fd, EPOLL_CTL_DEL, -+ descriptor->desc.f->filedes, &ev); -+ } -+ if (ret < 0) { -+ return APR_EBADF; -+ } -+ -+ return APR_SUCCESS; -+ } -+ } -+#elif defined(HAVE_POLL) - for (i = 0; i < pollset->nelts; i++) { - if (descriptor->desc.s == pollset->query_set[i].desc.s) { - /* Found an instance of the fd: remove this and any other copies */ -@@ -488,8 +724,119 @@ - - return APR_NOTFOUND; - } -+#ifdef HAVE_KQUEUE -+APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset, -+ apr_interval_time_t timeout, -+ apr_int32_t *num, -+ const apr_pollfd_t **descriptors) -+{ -+ int rv; -+ apr_uint32_t i, j, r = 0; -+ struct timespec tv, *tvptr; - --#ifdef HAVE_POLL -+ if (timeout < 0) { -+ tvptr = NULL; -+ } -+ else { -+ tv.tv_sec = (long)apr_time_sec(timeout); -+ tv.tv_nsec = (long)apr_time_msec(timeout); -+ tvptr = &tv; -+ } -+ -+ rv = kevent(pollset->kqueue_fd, NULL, 0, pollset->ke_set, pollset->nelts, -+ tvptr); -+ (*num) = rv; -+ if (rv < 0) { -+ return apr_get_netos_error(); -+ } -+ if (rv == 0) { -+ return APR_TIMEUP; -+ } -+ -+ /* TODO: Is there a better way to re-associate our data? */ -+ for (i = 0; i < pollset->nelts; i++) { -+ apr_os_sock_t fd; -+ if (pollset->query_set[i].desc_type == APR_POLL_SOCKET) { -+ fd = pollset->query_set[i].desc.s->socketdes; -+ } -+ else { -+ fd = pollset->query_set[i].desc.f->filedes; -+ } -+ for (j = 0; j < rv; j++) { -+ if (pollset->ke_set[j].ident == fd ) { -+ pollset->result_set[r] = pollset->query_set[i]; -+ pollset->result_set[r].rtnevents = -+ get_kqueue_revent(pollset->ke_set[j].filter, -+ pollset->ke_set[j].flags); -+ r++; -+ } -+ } -+ } -+ -+ (*num) = r; -+ -+ if (descriptors) { -+ *descriptors = pollset->result_set; -+ } -+ -+ return APR_SUCCESS; -+} -+ -+#elif defined(HAVE_EPOLL) -+ -+APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset, -+ apr_interval_time_t timeout, -+ apr_int32_t *num, -+ const apr_pollfd_t **descriptors) -+{ -+ int rv; -+ apr_uint32_t i, j, k; -+ -+ if (timeout > 0) { -+ timeout /= 1000; -+ } -+ -+ rv = epoll_wait(pollset->epoll_fd, pollset->pollset, pollset->nelts, -+ timeout); -+ (*num) = rv; -+ if (rv < 0) { -+ return apr_get_netos_error(); -+ } -+ if (rv == 0) { -+ return APR_TIMEUP; -+ } -+ j = 0; -+ for (i = 0; i < pollset->nelts; i++) { -+ if (pollset->pollset[i].events != 0) { -+ /* TODO: Is there a better way to re-associate our data? */ -+ for (k = 0; k < pollset->nelts; k++) { -+ if (pollset->query_set[k].desc_type == APR_POLL_SOCKET && -+ pollset->query_set[k].desc.s->socketdes == -+ pollset->pollset[i].data.fd) { -+ pollset->result_set[j] = pollset->query_set[k]; -+ pollset->result_set[j].rtnevents = -+ get_epoll_revent(pollset->pollset[i].events); -+ j++; -+ break; -+ } -+ else if (pollset->query_set[k].desc_type == APR_POLL_FILE -+ && pollset->query_set[k].desc.f->filedes == -+ pollset->pollset[i].data.fd) { -+ pollset->result_set[j] = pollset->query_set[k]; -+ pollset->result_set[j].rtnevents = -+ get_epoll_revent(pollset->pollset[i].events); -+ j++; -+ break; -+ } -+ } -+ } -+ } -+ if (descriptors) { -+ *descriptors = pollset->result_set; -+ } -+ return APR_SUCCESS; -+} -+#elif defined(HAVE_POLL) - APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset, - apr_interval_time_t timeout, - apr_int32_t *num, -@@ -518,7 +865,8 @@ - j++; - } - } -- *descriptors = pollset->result_set; -+ if (descriptors) -+ *descriptors = pollset->result_set; - return APR_SUCCESS; - } - -@@ -598,7 +946,8 @@ - * The *num returned must match the size of result_set[] - */ - (*num) = j; -- *descriptors = pollset->result_set; -+ if (descriptors) -+ *descriptors = pollset->result_set; - return APR_SUCCESS; - } - |