On 03/01/2011 11:26 PM, Stuart Marks wrote:
On 3/1/11 7:28 AM, Rémi Forax wrote:
  Le 01/03/2011 10:46, Alan Bateman a écrit :
Stuart Marks wrote:
Here's a small webrev with changes to a handful of java.io tests to use TWR.

http://cr.openjdk.java.net/~smarks/reviews/7022624/webrev.0/

* test/java/io/OutputStreamWriter/Encode.java

Pretty clearly a ServerSocket is a distinct resource from a Socket returned from the accept() call. However, does Socket.getInputStream() represent a distinct resource from the Socket? In this case it seemed most sensible to unroll them into separate resource variables, but again I could go either
way on this.
I wouldn't bother but would instead reduce this down to three resources, maybe:

try (ServerSocket listener = ss;
     Socket s = listener.accept();
     BufferedReader reader = new BufferedReader(new
InputStreamReader(s.getInputStream()))
{
   ...
}

While you are there, I assume ss should be final.

Local variables declared in a try-with resources are implicitly final.

Alan means the field ss, which is a mutable field written by one thread and read by another. I don't think the code as it stands is incorrect, but you have to do a fair bit of reading before you can figure out what it's trying to do and to verify that it's doing it correctly. Making ss final would help, as the field doesn't really need to be mutable. Moving the declaration of ss before the constructor would help too. As it stands it looks like the run() method reads an uninitialized ss.

s'marks

Ok, got it.

Rémi

Reply via email to