On 13/06/2012 09:51, Alan Bateman wrote:
On 13/06/2012 09:38, Weijun Wang wrote:Hi All I have a test that basically looks like: int p = new ServerSocket(0).getLocalPort(); //.... new Socket("localhost", p); Recently it's failing on solaris-i586, and after some investigation, I realize that the ServerSocket object is GC'ed and auto-closed. (But why only recently?) So I change the first line to ServerSocket ss = new ServerSocket(0); int p = ss.getLocalPort(); and it's running fine. I want to know if the ServerSocket object still has a chance to be closed. If yes, I'll add a ss.close(); at the end to be safer. Thanks MaxHotSpot changes I assume, perhaps changes to the reference processing or default heap settings.
Right, I assume there was some VM change that started this test to fail recently, but clearly this is a test issue. It was just passing all this time by accident, and there is an inherent race between the test and the GC/finalizer thread.
You should fix the test as you suggested. Also close the serversocket in a finally block ( or equivalent ). You should not rely on the finalizer to close it out.
-Chris.
-Alan
