com php-src: Fix bug #68423i PHP-FPM will no longer load all pools: sapi/fpm/fpm/fpm_sockets.c
| From: | Remi Collet | Date: | Fri, 14 Nov 2014 16:29:31 +0000 |
| Subject: | com php-src: Fix bug #68423i PHP-FPM will no longer load all pools: sapi/fpm/fpm/fpm_sockets.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-83090@lists.php.net to get a copy of this message | ||
Commit: 23db11976889c3600cf7853fe0fd687a1c9435e6
Author: Remi Collet <remi@php.net> Fri, 14 Nov 2014 17:29:31 +0100
Parents: faaea4f304cd6693e5f76c5a5d64d46e24326806
Branches: PHP-5.5 PHP-5.6 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=23db11976889c3600cf7853fe0fd687a1c9435e6
Log:
Fix bug #68423i PHP-FPM will no longer load all pools
The hash need to be unique per IP + Port
Previous version have (IPv4 only)
sprintf(key, "%u.%u.%u.%u:%u", IPQUAD(&sa_in->sin_addr), (unsigned int)
ntohs(sa_in->sin_port));
Bugs:
https://bugs.php.net/68423
Changed paths:
M sapi/fpm/fpm/fpm_sockets.c
Diff:
diff --git a/sapi/fpm/fpm/fpm_sockets.c b/sapi/fpm/fpm/fpm_sockets.c
index da14d63..3e4f09c 100644
--- a/sapi/fpm/fpm/fpm_sockets.c
+++ b/sapi/fpm/fpm/fpm_sockets.c
@@ -85,13 +85,24 @@ static void *fpm_get_in_addr(struct sockaddr *sa) /* {{{ */
}
/* }}} */
+static int fpm_get_in_port(struct sockaddr *sa) /* {{{ */
+{
+ if (sa->sa_family == AF_INET) {
+ return ntohs(((struct sockaddr_in*)sa)->sin_port);
+ }
+
+ return ntohs(((struct sockaddr_in6*)sa)->sin6_port);
+}
+/* }}} */
+
static int fpm_sockets_hash_op(int sock, struct sockaddr *sa, char *key, int type, int op) /* {{{
*/
{
if (key == NULL) {
switch (type) {
case FPM_AF_INET : {
- key = alloca(INET6_ADDRSTRLEN);
- inet_ntop(sa->sa_family, fpm_get_in_addr(sa), key, sizeof key);
+ key = alloca(INET6_ADDRSTRLEN+10);
+ inet_ntop(sa->sa_family, fpm_get_in_addr(sa), key, INET6_ADDRSTRLEN);
+ sprintf(key+strlen(key), ":%d", fpm_get_in_port(sa));
break;
}
@@ -246,7 +257,7 @@ static int fpm_socket_af_inet_listening_socket(struct fpm_worker_pool_s *wp) /*
char *addr = NULL;
int addr_len;
int port = 0;
- int sock;
+ int sock = -1;
int status;
if (port_str) { /* this is host:port pair */