From 9ffc959e07b5d52ba70691083ac3923e484da7ff Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Wed, 13 Feb 2013 11:16:14 +0100 Subject: php 5.4: sync patch with rawhide --- php-5.4.11-select.patch | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 php-5.4.11-select.patch (limited to 'php-5.4.11-select.patch') diff --git a/php-5.4.11-select.patch b/php-5.4.11-select.patch new file mode 100644 index 0000000..3c2a9a3 --- /dev/null +++ b/php-5.4.11-select.patch @@ -0,0 +1,68 @@ +From 0cea9e6843384c6c0ebb52047c42b0431a4f5660 Mon Sep 17 00:00:00 2001 +From: Remi Collet +Date: Fri, 1 Feb 2013 19:23:25 +0100 +Subject: [PATCH] Fixed bug #64128 buit-in web server is broken on ppc64. + +fdset management using bit operator is broken on non-x86 arch +and cause built-in server the enter an infinite loop of "select" +and never handle any request. +--- + NEWS | 3 +++ + sapi/cli/php_cli_server.c | 30 +++++++++++++----------------- + 2 files changed, 16 insertions(+), 17 deletions(-) + +diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c +index 28aba19..6a4e7c5 100644 +--- a/sapi/cli/php_cli_server.c ++++ b/sapi/cli/php_cli_server.c +@@ -710,10 +710,9 @@ static void php_cli_server_poller_remove(php_cli_server_poller *poller, int mode + if (fd == poller->max_fd) { + while (fd > 0) { + fd--; +- if (((unsigned int *)&poller->rfds)[fd / (8 * sizeof(unsigned int))] || ((unsigned int *)&poller->wfds)[fd / (8 * sizeof(unsigned int))]) { ++ if (PHP_SAFE_FD_ISSET(fd, &poller->rfds) || PHP_SAFE_FD_ISSET(fd, &poller->wfds)) { + break; + } +- fd -= fd % (8 * sizeof(unsigned int)); + } + poller->max_fd = fd; + } +@@ -772,23 +771,20 @@ static int php_cli_server_poller_iter_on_active(php_cli_server_poller *poller, v + } + + #else +- php_socket_t fd = 0; ++ php_socket_t fd; + const php_socket_t max_fd = poller->max_fd; +- const unsigned int *pr = (unsigned int *)&poller->active.rfds, +- *pw = (unsigned int *)&poller->active.wfds, +- *e = pr + (max_fd + (8 * sizeof(unsigned int)) - 1) / (8 * sizeof(unsigned int)); +- unsigned int mask; +- while (pr < e && fd <= max_fd) { +- for (mask = 1; mask; mask <<= 1, fd++) { +- int events = (*pr & mask ? POLLIN: 0) | (*pw & mask ? POLLOUT: 0); +- if (events) { +- if (SUCCESS != callback(opaque, fd, events)) { +- retval = FAILURE; +- } +- } ++ ++ for (fd=0 ; fd<=max_fd ; fd++) { ++ if (PHP_SAFE_FD_ISSET(fd, &poller->active.rfds)) { ++ if (SUCCESS != callback(opaque, fd, POLLIN)) { ++ retval = FAILURE; ++ } ++ } ++ if (PHP_SAFE_FD_ISSET(fd, &poller->active.wfds)) { ++ if (SUCCESS != callback(opaque, fd, POLLOUT)) { ++ retval = FAILURE; ++ } + } +- pr++; +- pw++; + } + #endif + return retval; +-- +1.7.11.5 + -- cgit