FirstBill found a bug in my poll implementation today. It was working for sockets most of the time, but it always failed with pipes. It also wasn't correctly returning APR_TIMEUP. This new patch should fix the problems.
Same as last time, apply the patch, then in srclib/apr, untar the tarball. Ryan Index: modules/experimental/mod_ext_filter.c =================================================================== RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_ext_filter.c,v retrieving revision 1.31 diff -u -d -b -w -u -r1.31 mod_ext_filter.c --- modules/experimental/mod_ext_filter.c 28 Jun 2002 08:40:24 -0000 1.31 +++ modules/experimental/mod_ext_filter.c 10 Jul 2002 05:36:02 -0000 @@ -71,6 +71,7 @@ #include "apr_strings.h" #include "apr_hash.h" #include "apr_lib.h" +#include "apr_poll.h" #define APR_WANT_STRFUNC #include "apr_want.h" @@ -626,7 +627,7 @@ #if APR_FILES_AS_SOCKETS int num_events; - rv = apr_poll(ctx->pollset, + rv = apr_poll(ctx->pollset, 2 &num_events, f->r->server->timeout); if (rv || dc->debug >= DBGLVL_GORY) { Index: modules/proxy/proxy_connect.c =================================================================== RCS file: /home/cvs/httpd-2.0/modules/proxy/proxy_connect.c,v retrieving revision 1.59 diff -u -d -b -w -u -r1.59 proxy_connect.c --- modules/proxy/proxy_connect.c 17 May 2002 11:24:16 -0000 1.59 +++ modules/proxy/proxy_connect.c 10 Jul 2002 05:36:02 -0000 @@ -61,6 +61,7 @@ #define CORE_PRIVATE #include "mod_proxy.h" +#include "apr_poll.h" module AP_MODULE_DECLARE_DATA proxy_connect_module; @@ -320,7 +321,7 @@ while (1) { /* Infinite loop until error (one side closes the connection) */ /* ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, "proxy: CONNECT: going to sleep (poll)");*/ - if ((rv = apr_poll(pollfd, &pollcnt, -1)) != APR_SUCCESS) + if ((rv = apr_poll(pollfd, 2, &pollcnt, -1)) != APR_SUCCESS) { apr_socket_close(sock); ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "proxy: CONNECT: error apr_poll()"); Index: server/mpm/beos/beos.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/beos/beos.c,v retrieving revision 1.97 diff -u -d -b -w -u -r1.97 beos.c --- server/mpm/beos/beos.c 4 Jul 2002 15:20:52 -0000 1.97 +++ server/mpm/beos/beos.c 10 Jul 2002 05:36:05 -0000 @@ -87,6 +87,7 @@ #include "mpm.h" #include "mpm_default.h" #include "apr_thread_mutex.h" +#include "apr_poll.h" extern int _kset_fd_limit_(int num); @@ -421,7 +422,7 @@ apr_int16_t event; apr_status_t ret; - ret = apr_poll(pollset, &srv, -1); + ret = apr_poll(pollset, num_listening_sockets, &srv, -1); if (ret != APR_SUCCESS) { if (APR_STATUS_IS_EINTR(ret)) { Index: server/mpm/experimental/leader/leader.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/experimental/leader/leader.c,v retrieving revision 1.22 diff -u -d -b -w -u -r1.22 leader.c --- server/mpm/experimental/leader/leader.c 4 Jul 2002 15:20:53 -0000 1.22 +++ server/mpm/experimental/leader/leader.c 10 Jul 2002 05:36:05 -0000 @@ -106,6 +106,7 @@ #include "ap_listen.h" #include "scoreboard.h" #include "mpm_default.h" +#include "apr_poll.h" #include <signal.h> #include <limits.h> /* for INT_MAX */ @@ -888,7 +889,7 @@ apr_status_t ret; apr_int16_t event; - ret = apr_poll(pollset, &n, -1); + ret = apr_poll(pollset, num_listensocks, &n, -1); if (ret != APR_SUCCESS) { if (APR_STATUS_IS_EINTR(ret)) { continue; Index: server/mpm/experimental/perchild/perchild.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/experimental/perchild/perchild.c,v retrieving revision 1.128 diff -u -d -b -w -u -r1.128 perchild.c --- server/mpm/experimental/perchild/perchild.c 30 Jun 2002 21:59:50 -0000 1.128 +++ server/mpm/experimental/perchild/perchild.c 10 Jul 2002 05:36:09 -0000 @@ -95,6 +95,7 @@ #include "mpm.h" #include "scoreboard.h" #include "util_filter.h" +#include "apr_poll.h" /* ### should be APR-ized */ #include <poll.h> @@ -748,7 +749,7 @@ while (!workers_may_exit) { apr_int16_t event; - srv = apr_poll(pollset, &n, -1); + srv = apr_poll(pollset, num_listensocks, &n, -1); if (srv != APR_SUCCESS) { if (APR_STATUS_IS_EINTR(srv)) { Index: server/mpm/experimental/threadpool/threadpool.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/experimental/threadpool/threadpool.c,v retrieving revision 1.12 diff -u -d -b -w -u -r1.12 threadpool.c --- server/mpm/experimental/threadpool/threadpool.c 4 Jul 2002 15:20:53 -0000 1.12 +++ server/mpm/experimental/threadpool/threadpool.c 10 Jul 2002 05:36:12 -0000 @@ -69,6 +69,7 @@ #include "apr_file_io.h" #include "apr_thread_proc.h" #include "apr_signal.h" +#include "apr_poll.h" #include "apr_thread_mutex.h" #include "apr_thread_cond.h" #include "apr_proc_mutex.h" @@ -913,7 +914,7 @@ apr_status_t ret; apr_int16_t event; - ret = apr_poll(pollset, &n, -1); + ret = apr_poll(pollset, num_listensocks, &n, -1); if (ret != APR_SUCCESS) { if (APR_STATUS_IS_EINTR(ret)) { continue; Index: server/mpm/mpmt_os2/mpmt_os2_child.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/mpmt_os2/mpmt_os2_child.c,v retrieving revision 1.22 diff -u -d -b -w -u -r1.22 mpmt_os2_child.c --- server/mpm/mpmt_os2/mpmt_os2_child.c 17 May 2002 11:11:39 -0000 1.22 +++ server/mpm/mpmt_os2/mpmt_os2_child.c 10 Jul 2002 05:36:13 -0000 @@ -73,6 +73,7 @@ #include "ap_mpm.h" #include "ap_listen.h" #include "apr_portable.h" +#include "apr_poll.h" #include "mpm_common.h" #include "apr_strings.h" #include <os2.h> @@ -250,7 +251,7 @@ rv = APR_FROM_OS_ERROR(rc); if (rv == APR_SUCCESS) { - rv = apr_poll(pollset, &nsds, -1); + rv = apr_poll(pollset, num_listeners, &nsds, -1); DosReleaseMutexSem(ap_mpm_accept_mutex); } Index: server/mpm/prefork/prefork.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/prefork/prefork.c,v retrieving revision 1.268 diff -u -d -b -w -u -r1.268 prefork.c --- server/mpm/prefork/prefork.c 4 Jul 2002 15:20:54 -0000 1.268 +++ server/mpm/prefork/prefork.c 10 Jul 2002 05:36:15 -0000 @@ -89,6 +89,7 @@ #include "mpm_common.h" #include "ap_listen.h" #include "ap_mmn.h" +#include "apr_poll.h" #ifdef HAVE_BSTRING_H #include <bstring.h> /* for IRIX, FD_SET calls bzero() */ @@ -631,7 +632,7 @@ apr_int16_t event; apr_int32_t n; - ret = apr_poll(pollset, &n, -1); + ret = apr_poll(pollset, num_listensocks, &n, -1); if (ret != APR_SUCCESS) { if (APR_STATUS_IS_EINTR(ret)) { continue; Index: server/mpm/worker/worker.c =================================================================== RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v retrieving revision 1.130 diff -u -d -b -w -u -r1.130 worker.c --- server/mpm/worker/worker.c 4 Jul 2002 22:41:48 -0000 1.130 +++ server/mpm/worker/worker.c 10 Jul 2002 05:36:18 -0000 @@ -71,6 +71,7 @@ #include "apr_signal.h" #include "apr_thread_mutex.h" #include "apr_proc_mutex.h" +#include "apr_poll.h" #define APR_WANT_STRFUNC #include "apr_want.h" @@ -758,7 +759,7 @@ apr_status_t ret; apr_int16_t event; - ret = apr_poll(pollset, &n, -1); + ret = apr_poll(pollset, num_listensocks, &n, -1); if (ret != APR_SUCCESS) { if (APR_STATUS_IS_EINTR(ret)) { continue; Index: srclib/apr/configure.in =================================================================== RCS file: /home/cvs/apr/configure.in,v retrieving revision 1.460 diff -u -d -b -w -u -r1.460 configure.in --- srclib/apr/configure.in 2 Jul 2002 21:33:43 -0000 1.460 +++ srclib/apr/configure.in 10 Jul 2002 05:36:20 -0000 @@ -82,7 +82,7 @@ DEFAULT_OSDIR="unix" echo "(Default will be ${DEFAULT_OSDIR})" -apr_modules="file_io network_io threadproc misc locks time mmap shmem i18n user memory atomic" +apr_modules="file_io network_io threadproc misc locks time mmap shmem i18n user +memory atomic poll support" dnl Checks for programs. AC_PROG_MAKE_SET Index: srclib/apr/file_io/unix/readwrite.c =================================================================== RCS file: /home/cvs/apr/file_io/unix/readwrite.c,v retrieving revision 1.80 diff -u -d -b -w -u -r1.80 readwrite.c --- srclib/apr/file_io/unix/readwrite.c 4 Jul 2002 23:10:24 -0000 1.80 +++ srclib/apr/file_io/unix/readwrite.c 10 Jul 2002 05:36:20 -0000 @@ -55,6 +55,7 @@ #include "fileio.h" #include "apr_strings.h" #include "apr_thread_mutex.h" +#include "apr_support.h" /* The only case where we don't use wait_for_io_or_timeout is on * pre-BONE BeOS, so this check should be sufficient and simpler */ @@ -62,43 +63,6 @@ #define USE_WAIT_FOR_IO #endif -#ifdef USE_WAIT_FOR_IO -static apr_status_t wait_for_io_or_timeout(apr_file_t *file, int for_read) -{ - struct timeval tv, *tvptr; - fd_set fdset; - int srv; - - /* TODO - timeout should be less each time through this loop */ - - do { - FD_ZERO(&fdset); - FD_SET(file->filedes, &fdset); - if (file->timeout >= 0) { - tv.tv_sec = apr_time_sec(file->timeout); - tv.tv_usec = apr_time_usec(file->timeout); - tvptr = &tv; - } - else { - tvptr = NULL; - } - srv = select(file->filedes + 1, - for_read ? &fdset : NULL, - for_read ? NULL : &fdset, - NULL, - tvptr); - } while (srv == -1 && errno == EINTR); - - if (srv == 0) { - return APR_TIMEUP; - } - else if (srv < 0) { - return errno; - } - return APR_SUCCESS; -} -#endif - /* problems: * 1) ungetchar not used for buffered files */ @@ -193,7 +157,7 @@ if (rv == -1 && (errno == EAGAIN || errno == EWOULDBLOCK) && thefile->timeout != 0) { - apr_status_t arv = wait_for_io_or_timeout(thefile, 1); + apr_status_t arv = apr_wait_for_io_or_timeout(thefile, NULL, 1); if (arv != APR_SUCCESS) { *nbytes = bytes_read; return arv; @@ -272,7 +236,7 @@ if (rv == (apr_size_t)-1 && (errno == EAGAIN || errno == EWOULDBLOCK) && thefile->timeout != 0) { - apr_status_t arv = wait_for_io_or_timeout(thefile, 0); + apr_status_t arv = apr_wait_for_io_or_timeout(thefile, NULL, 0); if (arv != APR_SUCCESS) { *nbytes = 0; return arv; Index: srclib/apr/include/apr_network_io.h =================================================================== RCS file: /home/cvs/apr/include/apr_network_io.h,v retrieving revision 1.124 diff -u -d -b -w -u -r1.124 apr_network_io.h --- srclib/apr/include/apr_network_io.h 5 Jul 2002 17:58:10 -0000 1.124 +++ srclib/apr/include/apr_network_io.h 10 Jul 2002 05:36:21 -0000 @@ -187,7 +187,6 @@ #endif typedef struct apr_socket_t apr_socket_t; -typedef struct apr_pollfd_t apr_pollfd_t; /** * A structure to encapsulate headers and trailers for apr_sendfile */ @@ -634,123 +633,6 @@ APR_DECLARE(int) apr_sockaddr_equal(const apr_sockaddr_t *addr1, const apr_sockaddr_t *addr2); -/** - * Setup the memory required for poll to operate properly - * @param new_poll The poll structure to be used. - * @param num The number of socket descriptors to be polled. - * @param cont The pool to operate on. - */ -APR_DECLARE(apr_status_t) apr_poll_setup(apr_pollfd_t **new_poll, - apr_int32_t num, - apr_pool_t *cont); - -/** - * Poll the sockets in the poll structure - * @param aprset The poll structure we will be using. - * @param nsds The number of sockets we are polling. - * @param timeout The amount of time in microseconds to wait. This is - * a maximum, not a minimum. If a socket is signalled, we - * will wake up before this time. A negative number means - * wait until a socket is signalled. - * @remark - * <PRE> - * The number of sockets signalled is returned in the second argument. - * - * This is a blocking call, and it will not return until either a - * socket has been signalled, or the timeout has expired. - * </PRE> - */ -APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, apr_int32_t *nsds, - apr_interval_time_t timeout); - -/** - * Add a socket to the poll structure. - * @param aprset The poll structure we will be using. - * @param socket The socket to add to the current poll structure. - * @param event The events to look for when we do the poll. One of: - * <PRE> - * APR_POLLIN signal if read will not block - * APR_POLLPRI signal if prioirty data is availble to be read - * APR_POLLOUT signal if write will not block - * </PRE> - */ -APR_DECLARE(apr_status_t) apr_poll_socket_add(apr_pollfd_t *aprset, - apr_socket_t *sock, - apr_int16_t event); - -/** - * Modify a socket in the poll structure with mask. - * @param aprset The poll structure we will be using. - * @param sock The socket to modify in poll structure. - * @param events The events to stop looking for during the poll. One of: - * <PRE> - * APR_POLLIN signal if read will not block - * APR_POLLPRI signal if priority data is available to be read - * APR_POLLOUT signal if write will not block - * </PRE> - */ -APR_DECLARE(apr_status_t) apr_poll_socket_mask(apr_pollfd_t *aprset, - apr_socket_t *sock, - apr_int16_t events); -/** - * Remove a socket from the poll structure. - * @param aprset The poll structure we will be using. - * @param sock The socket to remove from the current poll structure. - */ -APR_DECLARE(apr_status_t) apr_poll_socket_remove(apr_pollfd_t *aprset, - apr_socket_t *sock); - -/** - * Remove all sockets from the poll structure. - * @param aprset The poll structure we will be using. - * @param events The events to clear from all sockets. One of: - * <PRE> - * APR_POLLIN signal if read will not block - * APR_POLLPRI signal if priority data is available to be read - * APR_POLLOUT signal if write will not block - * </PRE> - */ -APR_DECLARE(apr_status_t) apr_poll_socket_clear(apr_pollfd_t *aprset, - apr_int16_t events); - -/** - * Get the return events for the specified socket. - * @param event The returned events for the socket. One of: - * <PRE> - * APR_POLLIN Data is available to be read - * APR_POLLPRI Priority data is availble to be read - * APR_POLLOUT Write will succeed - * APR_POLLERR An error occurred on the socket - * APR_POLLHUP The connection has been terminated - * APR_POLLNVAL This is an invalid socket to poll on. - * Socket not open. - * </PRE> - * @param sock The socket we wish to get information about. - * @param aprset The poll structure we will be using. - */ -APR_DECLARE(apr_status_t) apr_poll_revents_get(apr_int16_t *event, - apr_socket_t *sock, - apr_pollfd_t *aprset); - -/** - * Return the data associated with the current poll. - * @param pollfd The currently open pollfd. - * @param key The key to use for retrieving data associated with a poll struct. - * @param data The user data associated with the pollfd. - */ -APR_DECLARE(apr_status_t) apr_poll_data_get(apr_pollfd_t *pollfd, - const char *key, void *data); - -/** - * Set the data associated with the current poll. - * @param pollfd The currently open pollfd. - * @param data The key to associate with the data. - * @param key The user data to associate with the pollfd. - * @param cleanup The cleanup function - */ -APR_DECLARE(apr_status_t) apr_poll_data_set(apr_pollfd_t *pollfd, void *data, - const char *key, - apr_status_t (*cleanup)(void *)); #if APR_FILES_AS_SOCKETS || defined(DOXYGEN) Index: srclib/apr/include/arch/unix/networkio.h =================================================================== RCS file: /home/cvs/apr/include/arch/unix/networkio.h,v retrieving revision 1.53 diff -u -d -b -w -u -r1.53 networkio.h --- srclib/apr/include/arch/unix/networkio.h 1 Apr 2002 14:13:45 -0000 1.53 +++ srclib/apr/include/arch/unix/networkio.h 10 Jul 2002 05:36:21 -0000 @@ -69,12 +69,6 @@ #if APR_HAVE_SYS_UIO_H #include <sys/uio.h> #endif -#ifdef HAVE_SYS_POLL_H -#include <sys/poll.h> -#endif -#ifdef HAVE_POLL_H -#include <poll.h> -#endif #ifdef HAVE_SYS_SELECT_H #include <sys/select.h> #endif @@ -138,32 +132,8 @@ apr_int32_t inherit; }; -struct apr_pollfd_t { - apr_pool_t *cntxt; -#ifdef HAVE_POLL - struct pollfd *pollset; - int num; - int curpos; -#else - fd_set *read; - fd_set *write; - fd_set *except; - int highsock; - fd_set *read_set; - fd_set *write_set; - fd_set *except_set; - apr_int16_t *events; - apr_int16_t *revents; -#ifdef BEOS - int lowsock; - int ncks; -#endif -#endif -}; - const char *apr_inet_ntop(int af, const void *src, char *dst, apr_size_t size); int apr_inet_pton(int af, const char *src, void *dst); -apr_status_t apr_wait_for_io_or_timeout(apr_socket_t *sock, int for_read); void apr_sockaddr_vars_set(apr_sockaddr_t *, int, apr_port_t); #define apr_is_option_set(mask, option) ((mask & option) ==option) Index: srclib/apr/network_io/unix/Makefile.in =================================================================== RCS file: /home/cvs/apr/network_io/unix/Makefile.in,v retrieving revision 1.23 diff -u -d -b -w -u -r1.23 Makefile.in --- srclib/apr/network_io/unix/Makefile.in 22 Apr 2002 01:24:50 -0000 1.23 +++ srclib/apr/network_io/unix/Makefile.in 10 Jul 2002 05:36:21 -0000 @@ -2,7 +2,6 @@ VPATH = @srcdir@ TARGETS = \ - poll.lo \ sendrecv.lo \ sockets.lo \ sockopt.lo \ Index: srclib/apr/network_io/unix/sendrecv.c =================================================================== RCS file: /home/cvs/apr/network_io/unix/sendrecv.c,v retrieving revision 1.85 diff -u -d -b -w -u -r1.85 sendrecv.c --- srclib/apr/network_io/unix/sendrecv.c 2 Jul 2002 21:33:43 -0000 1.85 +++ srclib/apr/network_io/unix/sendrecv.c 10 Jul 2002 05:36:22 -0000 @@ -53,6 +53,7 @@ */ #include "networkio.h" +#include "apr_support.h" #if APR_HAS_SENDFILE /* This file is needed to allow us access to the apr_file_t internals. */ @@ -63,40 +64,6 @@ #include <sys/sysctl.h> #endif -apr_status_t apr_wait_for_io_or_timeout(apr_socket_t *sock, int for_read) -{ - struct timeval tv, *tvptr; - fd_set fdset; - int srv; - - do { - FD_ZERO(&fdset); - FD_SET(sock->socketdes, &fdset); - if (sock->timeout < 0) { - tvptr = NULL; - } - else { - tv.tv_sec = sock->timeout / APR_USEC_PER_SEC; - tv.tv_usec = sock->timeout % APR_USEC_PER_SEC; - tvptr = &tv; - } - srv = select(sock->socketdes + 1, - for_read ? &fdset : NULL, - for_read ? NULL : &fdset, - NULL, - tvptr); - /* TODO - timeout should be smaller on repeats of this loop */ - } while (srv == -1 && errno == EINTR); - - if (srv == 0) { - return APR_TIMEUP; - } - else if (srv < 0) { - return errno; - } - return APR_SUCCESS; -} - apr_status_t apr_send(apr_socket_t *sock, const char *buf, apr_size_t *len) { ssize_t rv; @@ -114,7 +81,7 @@ && sock->timeout != 0) { apr_status_t arv; do_select: - arv = apr_wait_for_io_or_timeout(sock, 0); + arv = apr_wait_for_io_or_timeout(NULL, sock, 0); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -153,7 +120,7 @@ if (rv == -1 && (errno == EAGAIN || errno == EWOULDBLOCK) && sock->timeout != 0) { do_select: - arv = apr_wait_for_io_or_timeout(sock, 1); + arv = apr_wait_for_io_or_timeout(NULL, sock, 1); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -191,7 +158,7 @@ if (rv == -1 && (errno == EAGAIN || errno == EWOULDBLOCK) && sock->timeout != 0) { - apr_status_t arv = apr_wait_for_io_or_timeout(sock, 0); + apr_status_t arv = apr_wait_for_io_or_timeout(NULL, sock, 0); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -224,7 +191,7 @@ if (rv == -1 && (errno == EAGAIN || errno == EWOULDBLOCK) && sock->timeout != 0) { - apr_status_t arv = apr_wait_for_io_or_timeout(sock, 1); + apr_status_t arv = apr_wait_for_io_or_timeout(NULL, sock, 1); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -272,7 +239,7 @@ sock->timeout != 0) { apr_status_t arv; do_select: - arv = apr_wait_for_io_or_timeout(sock, 0); + arv = apr_wait_for_io_or_timeout(NULL, sock, 0); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -370,7 +337,7 @@ (errno == EAGAIN || errno == EWOULDBLOCK) && sock->timeout > 0) { do_select: - arv = apr_wait_for_io_or_timeout(sock, 0); + arv = apr_wait_for_io_or_timeout(NULL, sock, 0); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -528,7 +495,7 @@ if (sock->netmask & APR_INCOMPLETE_WRITE) { apr_status_t arv; sock->netmask &= ~APR_INCOMPLETE_WRITE; - arv = apr_wait_for_io_or_timeout(sock, 0); + arv = apr_wait_for_io_or_timeout(NULL, sock, 0); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -590,7 +557,7 @@ if (rv == -1 && errno == EAGAIN && sock->timeout > 0) { - apr_status_t arv = apr_wait_for_io_or_timeout(sock, 0); + apr_status_t arv = apr_wait_for_io_or_timeout(NULL, sock, 0); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -708,7 +675,7 @@ if (rc == -1 && (errno == EAGAIN || errno == EWOULDBLOCK) && sock->timeout > 0) { - apr_status_t arv = apr_wait_for_io_or_timeout(sock, 0); + apr_status_t arv = apr_wait_for_io_or_timeout(NULL, sock, 0); if (arv != APR_SUCCESS) { *len = 0; @@ -847,7 +814,7 @@ (errno == EAGAIN || errno == EWOULDBLOCK) && sock->timeout > 0) { do_select: - arv = apr_wait_for_io_or_timeout(sock, 0); + arv = apr_wait_for_io_or_timeout(NULL, sock, 0); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -957,7 +924,7 @@ */ if (sock->netmask & APR_INCOMPLETE_WRITE) { sock->netmask &= ~APR_INCOMPLETE_WRITE; - arv = apr_wait_for_io_or_timeout(sock, 0); + arv = apr_wait_for_io_or_timeout(NULL, sock, 0); if (arv != APR_SUCCESS) { *len = 0; return arv; @@ -989,7 +956,7 @@ else if (!arv && apr_is_option_set(sock->netmask, APR_SO_TIMEOUT) == 1) { - apr_status_t t = apr_wait_for_io_or_timeout(sock, 0); + apr_status_t t = apr_wait_for_io_or_timeout(NULL, sock, 0); if (t != APR_SUCCESS) { Index: srclib/apr/test/sendfile.c =================================================================== RCS file: /home/cvs/apr/test/sendfile.c,v retrieving revision 1.20 diff -u -d -b -w -u -r1.20 sendfile.c --- srclib/apr/test/sendfile.c 13 Mar 2002 20:39:27 -0000 1.20 +++ srclib/apr/test/sendfile.c 10 Jul 2002 05:36:22 -0000 @@ -60,6 +60,7 @@ #include "apr_network_io.h" #include "apr_errno.h" #include "apr_general.h" +#include "apr_poll.h" #if !APR_HAS_SENDFILE int main(void) @@ -373,7 +374,7 @@ if (APR_STATUS_IS_EAGAIN(rv)) { assert(tmplen == 0); nsocks = 1; - tmprv = apr_poll(pfd, &nsocks, -1); + tmprv = apr_poll(pfd, 1, &nsocks, -1); assert(!tmprv); assert(nsocks == 1); /* continue; */ Index: srclib/apr/test/server.c =================================================================== RCS file: /home/cvs/apr/test/server.c,v retrieving revision 1.34 diff -u -d -b -w -u -r1.34 server.c --- srclib/apr/test/server.c 13 Mar 2002 20:39:27 -0000 1.34 +++ srclib/apr/test/server.c 10 Jul 2002 05:36:23 -0000 @@ -58,6 +58,7 @@ #include <stdlib.h> #include "apr_network_io.h" #include "apr_getopt.h" +#include "apr_poll.h" #define STRLEN 15 @@ -138,7 +139,7 @@ pollres = 1; APR_TEST_BEGIN(rv, "Polling for socket", - apr_poll(sdset, &pollres, -1)) + apr_poll(sdset, 1, &pollres, -1)) if (pollres == 0) { fprintf(stdout, "Failed\n"); Index: srclib/apr/test/testfile.c =================================================================== RCS file: /home/cvs/apr/test/testfile.c,v retrieving revision 1.49 diff -u -d -b -w -u -r1.49 testfile.c --- srclib/apr/test/testfile.c 5 Jul 2002 00:26:36 -0000 1.49 +++ srclib/apr/test/testfile.c 10 Jul 2002 05:36:24 -0000 @@ -61,6 +61,7 @@ #include "apr_network_io.h" #include "apr_errno.h" #include "apr_general.h" +#include "apr_poll.h" #include "apr_lib.h" #include "test_apr.h" @@ -157,7 +158,7 @@ apr_poll_socket_add(sdset, testsock, APR_POLLIN); num = 1; STD_TEST_NEQ(" Checking for incoming data", - apr_poll(sdset, &num, apr_time_from_sec(1))); + apr_poll(sdset, 1, &num, apr_time_from_sec(1))); if (num == 0) { printf("** This platform doesn't return readability on a regular file.**\n"); } Index: srclib/apr/test/testpoll.c =================================================================== RCS file: /home/cvs/apr/test/testpoll.c,v retrieving revision 1.8 diff -u -d -b -w -u -r1.8 testpoll.c --- srclib/apr/test/testpoll.c 13 Mar 2002 20:39:27 -0000 1.8 +++ srclib/apr/test/testpoll.c 10 Jul 2002 05:36:24 -0000 @@ -57,6 +57,7 @@ #include "apr_general.h" #include "apr_lib.h" #include "apr_network_io.h" +#include "apr_poll.h" #if APR_HAVE_UNISTD_H #include <unistd.h> #endif @@ -145,7 +146,7 @@ apr_socket_t *s[3]; apr_sockaddr_t *sa[3]; apr_pollfd_t *pollset; - int i = 0, srv = 0; + int i = 0, srv = 3; fprintf (stdout,"APR Poll Test\n*************\n\n"); @@ -186,29 +187,29 @@ printf("OK\n"); printf("Starting Tests\n"); - apr_poll(pollset, &srv, 10); + apr_poll(pollset, 3, &srv, 10); check_sockets(pollset, s); send_msg(s, sa, 2); - apr_poll(pollset, &srv, 10); + apr_poll(pollset, 3, &srv, 10); check_sockets(pollset, s); recv_msg(s, 2, context); send_msg(s, sa, 1); - apr_poll(pollset, &srv, 10); + apr_poll(pollset, 3, &srv, 10); check_sockets(pollset, s); send_msg(s, sa, 2); - apr_poll(pollset, &srv, 10); + apr_poll(pollset, 3, &srv, 10); check_sockets(pollset, s); recv_msg(s, 1, context); send_msg(s, sa, 0); - apr_poll(pollset, &srv, 10); + apr_poll(pollset, 3, &srv, 10); check_sockets(pollset, s); printf("Tests completed.\n"); Index: support/ab.c =================================================================== RCS file: /home/cvs/httpd-2.0/support/ab.c,v retrieving revision 1.108 diff -u -d -b -w -u -r1.108 ab.c --- support/ab.c 8 Jul 2002 19:39:01 -0000 1.108 +++ support/ab.c 10 Jul 2002 05:36:28 -0000 @@ -166,6 +166,7 @@ #include "apr_lib.h" #include "apr_portable.h" #include "ap_release.h" +#include "apr_poll.h" #define APR_WANT_STRFUNC #include "apr_want.h" @@ -1648,7 +1649,7 @@ status = APR_SUCCESS; else #endif - status = apr_poll(readbits, &n, aprtimeout); + status = apr_poll(readbits, concurrency, &n, aprtimeout); if (status != APR_SUCCESS) apr_err("apr_poll", status);
newpoll2.tar.gz
Description: GNU Zip compressed data