I try to fix the bug #49119 [1] but I have some threading and IO issues.

The bug is about a forked <java> stealing characters from the input stream even 
if is finished.
This is due to the pumping thread which is reading the Ant own input stream and 
redirecting it to the the process. It doesn't stop at the end of the java task. 
It is actually blocked into the intputstream.read call.

So my first fix [2] was to use the non-blocking feature of StreamPumper, 
relying on inputstream.available() to know if there is something to read. It 
does fix my issue, the pumping thread terminate as soon as the java task finish.
But then I broke the unit test JavaTest#testRedirect1. The test is sending a 
string as input expecting to see it in the output. Before my patch the pumping 
thread was reading the input string but was also closing the stream. Relying on 
is.available() cannot tell us if it is actually closed. The other end of the 
stream JavaTest#PipeEntryPoint is expecting a closed input at some point so it 
doesn't know where to stop redirecting everything from input to the output. 
Then with my patch it is hanging indefinitely.

Then I looked into interrupting the read, it doesn't seem to be possible [3].

Another fix I thought is about closing the output if the input is empty: if 
is.available() == 0 and closeWhenExhausted == true, then do stop the pumping 
and close. But it seems quite dangerous if some input stream is quite slow.

But now I am wondering if it is a false assumption that an input stream can 
close. In "real life" scripting, how would an input stream be closed ? It 
should be opened as long as the user is typing on his keyboard, isn't it ? So 
maybe just the unit test is doing false assumption ?

Nicolas

[1] https://issues.apache.org/bugzilla/show_bug.cgi?id=49119
[2] http://svn.apache.org/viewvc?view=revision&revision=985632
[3] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4514257


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to