Strange Issue With Static Global Variable in Native

Alan Bateman Alan.Bateman at oracle.com
Sat Dec 7 02:57:26 PST 2013


On 07/12/2013 01:22, Dan Xu wrote:
> Hi All,
>
> When working on src/solaris/native/sun/net/spi/DefaultProxySelector.c, 
> previously I tried to cached a jobject (The cached java object is 
> java.net.Proxy.NO_PROXY, which is a special type of Proxy.) as a 
> global static variable, no_proxy, in this c file. Its value is 
> initialized in the init() native function call. In the following proxy 
> query by calling native function, getSystemProxy(), I will just return 
> this no_proxy object if no proxy is found.
>
> But strangely, in the case that I return this no_proxy object back to 
> java side, the program may throw an ClassCastException saying that the 
> object that is passed to java side is a java.io.FileDescriptor instead 
> of a java.net.Proxy. The problem only happened in jprt in test, 
> java/net/ProxySelector/MultiThreadedSystemProxies.java. If I test it 
> in my local linux, it seems always passed.
>
> In addition, instead of caching this special proxy object, I modified 
> my change to create no_proxy jobject every time I need by using the 
> same code that I previously used to create no_proxy in the init() 
> function. And the change can pass the jprt test without any issue. 
> Does anyone know why the cached proxy object changed to a 
> FileDescriptor? Thanks!
>
> -Dan
Just so I understand, did you use a JNI global when caching the reference?

-Alan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/net-dev/attachments/20131207/dde6c038/attachment.html 


More information about the net-dev mailing list