123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- $OpenBSD: patch-libfcgi_os_unix_c,v 1.4 2015/02/06 14:55:41 sthen Exp $
- select->poll conversion, modified from patch at
- https://bugs.launchpad.net/ubuntu/+source/libfcgi/+bug/933417
- (difference: don't use env variables to control timeouts)
- --- libfcgi/os_unix.c.orig Tue Mar 5 19:14:49 2002
- +++ libfcgi/os_unix.c Fri Feb 6 11:51:00 2015
- @@ -42,6 +42,7 @@ static const char rcsid[] = "$Id: os_unix.c,v 1.37 200
- #include <sys/time.h>
- #include <sys/un.h>
- #include <signal.h>
- +#include <poll.h>
-
- #ifdef HAVE_NETDB_H
- #include <netdb.h>
- @@ -103,6 +104,9 @@ static int volatile maxFd = -1;
- static int shutdownPending = FALSE;
- static int shutdownNow = FALSE;
-
- +static int libfcgiOsClosePollTimeout = 2000;
- +static int libfcgiIsAfUnixKeeperPollTimeout = 2000;
- +
- void OS_ShutdownPending()
- {
- shutdownPending = TRUE;
- @@ -755,19 +759,16 @@ int OS_Close(int fd)
-
- if (shutdown(fd, 1) == 0)
- {
- - struct timeval tv;
- - fd_set rfds;
- + struct pollfd pfd;
- int rv;
- char trash[1024];
-
- - FD_ZERO(&rfds);
- + pfd.fd = fd;
- + pfd.events = POLLIN;
-
- do
- {
- - FD_SET(fd, &rfds);
- - tv.tv_sec = 2;
- - tv.tv_usec = 0;
- - rv = select(fd + 1, &rfds, NULL, NULL, &tv);
- + rv = poll(&pfd, 1, libfcgiOsClosePollTimeout);
- }
- while (rv > 0 && read(fd, trash, sizeof(trash)) > 0);
- }
- @@ -1116,13 +1117,11 @@ static int is_reasonable_accept_errno (const int error
- */
- static int is_af_unix_keeper(const int fd)
- {
- - struct timeval tval = { READABLE_UNIX_FD_DROP_DEAD_TIMEVAL };
- - fd_set read_fds;
- + struct pollfd pfd;
- + pfd.fd = fd;
- + pfd.events = POLLIN;
-
- - FD_ZERO(&read_fds);
- - FD_SET(fd, &read_fds);
- -
- - return select(fd + 1, &read_fds, NULL, NULL, &tval) >= 0 && FD_ISSET(fd, &read_fds);
- + return poll(&pfd, 1, libfcgiIsAfUnixKeeperPollTimeout) >= 0 && (pfd.revents & POLLIN);
- }
-
- /*
|