Rob, Existing code uses if (JVM_GetHostName(myhostname, NI_MAXHOST)) so I withdraw my last comments. Please, don't change it!!!
-Dmitry On 2013-10-07 20:30, Rob McKenna wrote: > Thanks Dmitry! I'll correct that nipick pre-push. > > -Rob > > On 07/10/13 16:47, Dmitry Samersoff wrote: >> 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.