Hi Vyom,
thanks you for having a look at my patch! Regarding your suggestion to call CHECK_NULL_RETURN in DefaultProxySelector.c: I guess you mean the Unix variant of DefaultProxySelector.c (src/java.base/unix/native/libnet/DefaultProxySelector.c). 419 if (proxies) { 420 if (!error) { 421 int i; 422 // create an empty LinkedList to add the Proxy objects. 423 proxyList = (*env)->NewObject(env, list_class, list_ctrID); 424 if (proxyList != NULL) { 425 for(i = 0; proxies[i]; i++) { ... 454 } 455 } 456 } 457 (*g_strfreev)(proxies); 458 } There I check in the next line if proxyList is NULL and skip the rest in this case, but I cannot return without freeing the memory I got from the gnome function call by calling (g_strfreev) later - otherwise there would be a memory leak. And in the Windows case it is the same pattern - at the point where I removed the CHECK_NULL_RETURN macros I hold Windows system memory (in proxy_info and ie_proxy_config) that I have to free with GlobalFree(...) and I also have to release the JNI memory I hold with ReleaseStringChars(...). I hope this explains the motivation of my change at this point. Best regards, Arno From: net-dev [mailto:net-dev-boun...@openjdk.java.net] On Behalf Of Vyom Tewari Sent: Mittwoch, 21. Dezember 2016 17:08 To: net-dev@openjdk.java.net Subject: Re: RFR:8170868: DefaultProxySelector should use system defaults on Windows, MacOS and Gnome Hi Arno, I suggest you to call "CHECK_NULL_RETURN" after below line in DefaultProxySelector.c // create an empty LinkedList to add the Proxy objects. + proxyList = (*env)->NewObject(env, list_class, list_ctrID); in windows/native/libnet/DefaultProxySelector.c file you remove the couple of "CHECK_NULL_RETURN" jstring jhost; - if (pport == 0) - pport = defport; - jhost = (*env)->NewStringUTF(env, phost); - CHECK_NULL_RETURN(jhost, NULL); - isa = (*env)->CallStaticObjectMethod(env, isaddr_class, isaddr_createUnresolvedID, jhost, pport); - CHECK_NULL_RETURN(isa, NULL); - proxy = (*env)->NewObject(env, proxy_class, proxy_ctrID, type_proxy, isa); - return proxy; + if (portVal == 0) + portVal = defport; + jhost = (*env)->NewString(env, phost, (jsize)wcslen(phost)); + if (jhost != NULL) { + isa = (*env)->CallStaticObjectMethod(env, isaddr_class, isaddr_createUnresolvedID, jhost, portVal); + if (isa != NULL) { + jobject proxy = (*env)->NewObject(env, proxy_class, proxy_ctrID, type_proxy, isa); + if (proxy != NULL) { + (*env)->CallBooleanMethod(env, proxy_list, list_addID, proxy); + } + } + } } Is there is specific reason behind removing these checks ? Thanks, Vyom On 12/21/2016 6:23 PM, Zeller, Arno wrote: Hi Volker, thanks for your valuable comments! I have a new patch ready that should address your issues and contains also a forgotten change to the map file... New webrev: http://cr.openjdk.java.net/~clanger/webrevs/8170868.1/ - make/lib/NetworkingLibraries.gmk ... Have you tried to use LIBNET_EXCLUDE_FILES := $(JDK_TOPDIR)/src/java.base/unix/native/libnet/DefaultProxySelector.c I think this should work and it would mke it possible to rename: src/java.base/macosx/native/libnet/DefaultProxySelector_mac.c to: src/java.base/macosx/native/libnet/DefaultProxySelector.c which is much nicer IMHO :) Great idea - it works and is of course the much nicer solution! - DefaultProxySelector.java 322 return proxyList == null ? Arrays.asList(Proxy.NO_PROXY) : proxyList; Not sure if it would make sense to preallocate a static List with a single Proxy.NO_PROXY element and always return that if proxyList equals null? I return a new List object each time, because the select(URI uri) method does not state anything about not modifying the returned list. In case I return a static list containing only the NO_PROXY element a caller could remove the object from the list and other caller would use the same modified list. To avoid this I always create a new List object. - java.base/unix/native/libnet/DefaultProxySelector.c You've removed "#include <strings.h>". Have you built on all Unix platforms (AIX, Solaris) to make sure you don't break anything? It compiled on Linux, AIX, Solaris and Mac without problems for me. - java.base/windows/native/libnet/DefaultProxySelector.c Not sure if I understand this right, but in the gconf case above you insert all proxies returned by "g_proxy_resolver_lookup" into the prox-list returned by DefaultProxySelector_getSystemProxies. In the Windows case you write: 247 * From MSDN: The proxy server list contains one or more of the following strings separated by semicolons or whitespace. 248 * ([<scheme>=][<scheme>"://"]<server>[":"<port>]) 249 * We will only take the first entry here because the java.net.Proxy class has only one entry. Why can't you build up a proxy list here in the same way you do it for the gconf case on Unix? Sorry - I just forgot to implement it. Good that you found it. The new webrev contains the missing functionality. - src/java.base/macosx/native/libnet/DefaultProxySelector_mac.c 76 #define kResolveProxyRunLoopMode CFSTR("com.sap.jvm.DefaultProxySelector") I'm not familiar with the Mac programming model, but I don't think "com.sap.jvm.DefaultProxySelector" is a good name for kResolveProxyRunLoopMode. It should be something like "java.net.DefaultProxySelector" but I'm open for better proposals :) You are right - I changed it to "sun.net.spi.DefaultProxySelector". PS: for your next RFR, can you please also add the estimated sisze and the bug id to the subject line (e.g. "RFR(M): 8170868:DefaultProxySelector should..."). This makes it much easier to find a review thread :) I'll do my best next time... Best regards, Arno On Wed, Dec 14, 2016 at 5:06 PM, Zeller, Arno <arno.zel...@sap.com><mailto:arno.zel...@sap.com> wrote: Hi, can you please review my proposal for bug 8170868 - DefaultProxySelector should use system defaults on Windows, MacOS and Gnome. Bug: https://bugs.openjdk.java.net/browse/JDK-8170868 Webrev: http://cr.openjdk.java.net/~clanger/webrevs/8170868.0/ Thanks a lot, Arno Zeller