Rob, This version of your fix looks good for me.
Inet4AddressImpl.c: Thumbs up. Inet6AddressImpl.c: Thumbs up. 173 if (JVM_GetHostName(myhostname, NI_MAXHOST)) { Nitpicking, explicit == -1 would be better here. > Actually, can you tell me why you'd rather not > include ipv6 loopbacks at all? If interface don't have ipv6 address but we have ipv6 loopback it most likely means that ipv6 is not functioning properly. -Dmitry On 2013-10-04 19:03, Rob McKenna wrote: > Hi Dmitry, > > Thanks a lot for the comprehensive review. W.r.t. line 210, I agree > there is a problem with the logic, but I'd like to suggest an > alternative solution: > > - If addrs4 >= 1, then we will always be including loopback addresses in > the list. Since the idea of this extra condition is to exclude loopback > interfaces from the list unless they're the only available addresses, I > would suggest "(addrs4 == numV4Loopback && addrs6 == numV6Loopback)" > instead. > > - On the very limited chance that a user has a machine with only an ipv6 > loopback configured (unlikely, I'd agree) it probably makes sense to > leave it in there. Actually, can you tell me why you'd rather not > include ipv6 loopbacks at all? > > New webrev at: > > http://cr.openjdk.java.net/~robm/7180557/webrev.04/ > > -Rob > > On 21/09/13 12:20, Dmitry Samersoff wrote: >> Rob, >> >> See below - >> ll. 210 have to be fixed, other comments is just an opinion. >> >> >> Inet4AddressImpl.c: >> >> ll.132 - it might be better to move initialization to a separate >> function, the same way as in Inet6 - I really like this idea. >> >> Inet6AddressImpl.c >> >> >> ll. 126. >> >> it's better to move static int initialized into initializeInetClasses() >> and don't check it ll. 282. >> >> >> ll. 170 >> >> it looks like rest of the code uses NI_MAXHOST also we have to check >> results of JVM_GetHostName if it returns -1 it's probably better to >> bailout immediately. >> >> >> ll. 193 and below - wrong indent >> >> 4) >> >> ll. 210 >> >> we can have more than one v4 address so >> >> if (addrs4 >= 1) >> >> have to be here. >> >> *. >> >> Your include ipv6 loopback in the list if interface has no ipv4 >> addresses, I'm not sure this logic is correct. On my opinion it's better >> to never include ipv6 loopbacks. >> >> *. >> >> Is it better to rename: >> includeLoopback => includeLoopbacks >> >> >> ll. 218 >> >> It might be better to calculate arraySize under if at ll. 210 to make >> code better readable >> >> ll. 236 >> >> It might be better to split if statement to make it more readable at the >> cost of duplicating iter = iter->ifa_next; line. >> >> e.g. >> >> while (iter != NULL) { >> ... >> >> if (family != AF_INET6 and family != AF_INET) { >> iter = iter->ifa_next; >> continue; >> } >> >> if ((!includeV6 and family == AF_INET6)) { >> iter = iter->ifa_next; >> continue; >> } >> >> if (!includeLoopback and isLoopback) { >> iter = iter->ifa_next; >> continue; >> } >> >> if (iter->ifa_name[0] != '\0' && iter->ifa_addr) { >> // Copy address to Java array >> .... >> iter = iter->ifa_next; >> continue; // redundant just for readability >> } >> } >> >> ll.244 >> >> I'm not sure it's good to return partially complete array in case of >> object allocation fail. Probably you should throw >> >> JNU_ThrowOutOfMemoryError(env, "Object allocation failed"); >> >> -Dmitry >> >> >> On 2013-09-20 18:58, Rob McKenna wrote: >>> After a brief discussion with Chris, we decided to revert the position >>> of the call to lookupIfLocalAddrs so as to give the local host primacy >>> over DNS. >>> >>> Latest (and hopefully last) webrev here: >>> >>> http://cr.openjdk.java.net/~robm/7180557/webrev.03/ >>> >>> -Rob >>> >>> On 14/09/13 00:00, Rob McKenna wrote: >>>> Hi Bernd, >>>> >>>> I should have said in the context of this bug. What I meant was >>>> removing AI_CANONNAME doesn't resolve the issue as far as Mac is >>>> concerned. I.e. I still see the UnknownHostException. In this >>>> particular case the hostname is not set via the hosts file. >>>> >>>> In the latest webrev the call to getifaddrs only occurs if getaddrinfo >>>> fails. >>>> >>>> -Rob >>>> >>>> On 13/09/13 20:28, Bernd Eckenfels wrote: >>>>> Am 13.09.2013, 19:32 Uhr, schrieb Rob McKenna >>>>> <rob.mcke...@oracle.com>: >>>>>> W.r.t. the use of AI_CANONNAME, this doesn't actually make a >>>>>> difference in the context of this fix, but is definitely something >>>>>> that should be looked at. I'll put it on the todo list. >>>>> I think it does make a difference: If you remove the CANON flag >>>>> getaddrinfo() will not do DNS lookups when the host is configured to >>>>> prefer the hosts file (which it should do on Linux and OSX). And so >>>>> the platform specific lookupIfLocalhost() can be put after the >>>>> getaddrinfo() (again). >>>>> >>>>> I actually think the bug "exists" on all platforms. If getaddrinfo() >>>>> fails because neighter hosts nor DNS file finds the name this can >>>>> happen on all platforms. I dont think it helps to add a fallback only >>>>> on MACOSX (and there is certainly no need to prefer the fallback >>>>> then). >>>>> >>>>> Gruss >>>>> Bernd >> > -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.