On Fri, Feb 24, 2017 at 1:35 PM, Stefan Eissing <stefan.eiss...@greenbytes.de> wrote: > Meh. > > Stefan: once during the last 2 days or several? > > > This is accessing r->useragent_addr by mod_access_compat which is, for h2 > slaves, initialized with c->client_addr. > > Since c->client_addr is always initialized by the master connection, I did > not see any race issues with sharing this across multiple slaves. Anyone has > an idea?
No idea, but don't see it related to http2, though. I'm there: 1078 APR_DECLARE(int) apr_ipsubnet_test(apr_ipsubnet_t *ipsub, apr_sockaddr_t *sa) 1079 { 1080 #if APR_HAVE_IPV6 1081 /* XXX This line will segv on Win32 build with APR_HAVE_IPV6, 1082 * but without the IPV6 drivers installed. 1083 */ 1084 if (sa->family == AF_INET) { 1085 if (ipsub->family == AF_INET && 1086 ((sa->sa.sin.sin_addr.s_addr & ipsub->mask[0]) == ipsub->sub[0])) { 1087 return 1; 1088 } 1089 } 1090 else if (IN6_IS_ADDR_V4MAPPED((struct in6_addr *)sa->ipaddr_ptr)) { 1091 if (ipsub->family == AF_INET && 1092 (((apr_uint32_t *)sa->ipaddr_ptr)[3] & ipsub->mask[0]) == ipsub->sub[0]) { 1093 return 1; 1094 } 1095 } 1096 else if (sa->family == AF_INET6 && ipsub->family == AF_INET6) { 1097 apr_uint32_t *addr = (apr_uint32_t *)sa->ipaddr_ptr; 1098 1099 if ((addr[0] & ipsub->mask[0]) == ipsub->sub[0] && 1100 (addr[1] & ipsub->mask[1]) == ipsub->sub[1] && 1101 (addr[2] & ipsub->mask[2]) == ipsub->sub[2] && 1102 (addr[3] & ipsub->mask[3]) == ipsub->sub[3]) { 1103 return 1; 1104 } 1105 } 1106 #else 1107 if ((sa->sa.sin.sin_addr.s_addr & ipsub->mask[0]) == ipsub->sub[0]) { 1108 return 1; 1109 } 1110 #endif /* APR_HAVE_IPV6 */ 1111 return 0; /* no match */ 1112 } => IN6_IS_ADDR_V4MAPPED((struct in6_addr *)sa->ipaddr_ptr) Hmm...