# HG changeset patch # User robm # Date 1433510440 -3600 # Node ID 0ec777e00e2ec24fb6cfc6bbea626ea5ac1007e6 # Parent fbe6df60e104813efe9009cf744c8bbee54ba73f 8080819: Inet4AddressImpl regression caused by JDK-7180557 Reviewed-by: michaelm Contributed-by: brian.toal@gmail.com diff -r fbe6df60e104 -r 0ec777e00e2e jdk/src/java.base/unix/native/libnet/Inet4AddressImpl.c --- a/jdk/src/java.base/unix/native/libnet/Inet4AddressImpl.c Fri Jun 05 13:14:36 2015 +0300 +++ b/jdk/src/java.base/unix/native/libnet/Inet4AddressImpl.c Fri Jun 05 14:20:40 2015 +0100 @@ -121,7 +121,7 @@ jobjectArray ret = 0; int retLen = 0; - int error=0; + int getaddrinfo_error=0; struct addrinfo hints, *res, *resNew = NULL; initInetAddressIDs(env); @@ -149,22 +149,24 @@ return NULL; } + + getaddrinfo_error = getaddrinfo(hostname, NULL, &hints, &res); + #ifdef MACOSX - /* If we're looking up the local machine, bypass DNS lookups and get - * address from getifaddrs. - */ - ret = lookupIfLocalhost(env, hostname, JNI_FALSE); - if (ret != NULL || (*env)->ExceptionCheck(env)) { - JNU_ReleaseStringPlatformChars(env, host, hostname); - return ret; + if (getaddrinfo_error) { + // If getaddrinfo fails try getifaddrs. + ret = lookupIfLocalhost(env, hostname, JNI_FALSE); + if (ret != NULL || (*env)->ExceptionCheck(env)) { + JNU_ReleaseStringPlatformChars(env, host, hostname); + return ret; + } } #endif - error = getaddrinfo(hostname, NULL, &hints, &res); - - if (error) { + if (getaddrinfo_error) { /* report error */ - NET_ThrowUnknownHostExceptionWithGaiError(env, hostname, error); + NET_ThrowUnknownHostExceptionWithGaiError( + env, hostname, getaddrinfo_error); JNU_ReleaseStringPlatformChars(env, host, hostname); return NULL; } else { diff -r fbe6df60e104 -r 0ec777e00e2e jdk/src/java.base/unix/native/libnet/Inet6AddressImpl.c --- a/jdk/src/java.base/unix/native/libnet/Inet6AddressImpl.c Fri Jun 05 13:14:36 2015 +0300 +++ b/jdk/src/java.base/unix/native/libnet/Inet6AddressImpl.c Fri Jun 05 14:20:40 2015 +0100 @@ -254,7 +254,7 @@ jobjectArray ret = 0; int retLen = 0; - int error=0; + int getaddrinfo_error=0; #ifdef AF_INET6 struct addrinfo hints, *res, *resNew = NULL; #endif /* AF_INET6 */ @@ -269,19 +269,6 @@ hostname = JNU_GetStringPlatformChars(env, host, JNI_FALSE); CHECK_NULL_RETURN(hostname, NULL); -#ifdef MACOSX - /* - * If we're looking up the local machine, attempt to get the address - * from getifaddrs. This ensures we get an IPv6 address for the local - * machine. - */ - ret = lookupIfLocalhost(env, hostname, JNI_TRUE); - if (ret != NULL || (*env)->ExceptionCheck(env)) { - JNU_ReleaseStringPlatformChars(env, host, hostname); - return ret; - } -#endif - #ifdef AF_INET6 /* Try once, with our static buffer. */ memset(&hints, 0, sizeof(hints)); @@ -301,11 +288,27 @@ } #endif - error = getaddrinfo(hostname, NULL, &hints, &res); + getaddrinfo_error = getaddrinfo(hostname, NULL, &hints, &res); - if (error) { +#ifdef MACOSX + if (getaddrinfo_error) { + /* + * If getaddrinfo fails looking up the local machine, attempt to get the + * address from getifaddrs. This ensures we get an IPv6 address for the + * local machine. + */ + ret = lookupIfLocalhost(env, hostname, JNI_TRUE); + if (ret != NULL || (*env)->ExceptionCheck(env)) { + JNU_ReleaseStringPlatformChars(env, host, hostname); + return ret; + } + } +#endif + + if (getaddrinfo_error) { /* report error */ - NET_ThrowUnknownHostExceptionWithGaiError(env, hostname, error); + NET_ThrowUnknownHostExceptionWithGaiError( + env, hostname, getaddrinfo_error); JNU_ReleaseStringPlatformChars(env, host, hostname); return NULL; } else {