Sean, The fix looks good for me but the code might be better readable if you inverse the condition.
if (!(s instanceof PlainSocketImpl)) { impl.accept(s) return; } ... rest of the code -Dmitry On 2013-10-01 18:54, Daniel Fuchs wrote: > On 10/1/13 4:50 PM, Seán Coffey wrote: >> >> On 01/10/2013 14:51, Daniel Fuchs wrote: >>> On 10/1/13 3:09 PM, Seán Coffey wrote: >>>> Since I'm only creating a dummy socketImpl to test the >>>> classcastexception, no real networking stack is in place here. I'm >>>> catching the NPE that would be thrown from the native >>>> Java_java_net_TwoStacksPlainSocketImpl_socketAccept function since the >>>> underlying socket passed to it is null. >>>> >>>> C:\tmp>java CustomSocketImplFactory >>>> Created Socket[addr=null,port=0,localport=0] >>>> Exception in thread "main" java.lang.NullPointerException: socket is >>>> null >>>> at java.net.TwoStacksPlainSocketImpl.socketAccept(Native >>>> Method) >>> >>> That's what I would have expected from your previous changeset. >>> >>> But you're no longer passing null - right? Now you're passing >>> an instance of CustomSocketImpl. >>> >>> So where does the NPE come from? Could it be because you should >>> be calling: >>> ServerSocket.setSocketImplFactory(new CustomSocketImplFactory()); >>> and not: >>> Socket.setSocketImplFactory(new CustomSocketImplFactory()); ? >> The original bug stemmed from a custom socket Impl interacting with the >> JDK ServerSocket Impl. If I move both Socket and ServerSocket factory >> implementations over to use the custom Impl, the testcase doesn't get to >> walk through the JDK serverSocket code and the ClassCastException is not >> seen. >> >> The NPE seen is coming from down in the native stack when the JDK >> ServerSocket is running through accept request (from our client socket). >> I don't think it's an issue for this case. >> >> line 611 : >> http://hg.openjdk.java.net/jdk8/tl/jdk/file/tip/src/windows/native/java/net/TwoStacksPlainSocketImpl.c >> >> >> >> regards, >> Sean. > > Thanks Seán. You convinced me. > > -- daniel > >>> Or should you call both? >>> >>> best regards, >>> >>> -- daniel >>> >>> >>>> >>>> Regards, >>>> Sean. >>>> >>>>> >>>>> Or is that going to hide future bugs? >>>>> >>>>> best regards >>>>> >>>>> -- daniel (not a reviewer) >>>> >>> >> > -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.