[ 
https://issues.apache.org/jira/browse/NET-466?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13437287#comment-13437287
 ] 

Sebb commented on NET-466:
--------------------------

Applied a fix which should work:

URL: http://svn.apache.org/viewvc?rev=1374548&view=rev
Log:
NET-466 Regression: TelnetInputStream#available() blocks

Modified:
    commons/proper/net/trunk/src/changes/changes.xml
    
commons/proper/net/trunk/src/main/java/org/apache/commons/net/telnet/TelnetInputStream.java


It might be that synchronizing the methods as per Gary's comment would also fix 
the issue.

Does anyone have a suitable test case that shows the issue?
                
> Regression: TelnetInputStream#available() blocks
> ------------------------------------------------
>
>                 Key: NET-466
>                 URL: https://issues.apache.org/jira/browse/NET-466
>             Project: Commons Net
>          Issue Type: Bug
>          Components: Telnet
>    Affects Versions: 3.1
>            Reporter: Martin Oberhuber
>            Priority: Critical
>             Fix For: 3.2
>
>
> When testing with Commons Net 3.1 for Eclipse 
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=194473 , I found that our 
> telnet client blocks when the ReaderThread is running and waiting for new 
> data. Investigation shows that our code blocks on 
> TelnetInputStream#available().
> This regression is due to the code introduced for NET-437 "TelnetInputStream 
> doesn't support non-blocking IO when reader thread is not enabled":
> TelnetInputStream#available() now calls super.available() which is declared 
> as "synchronized" on BufferedInputStream in JDK 1.6.0_21 at least. But at the 
> same time, the telnet ReaderThread has already the Monitor on 
> BufferedInputStream and doesn't give it up while sitting in read0().
> This seems to be exactly the situation that the comment before 
> TelnetInputStream#close() warns about:
>     // Cannot be synchronized.  Will cause deadlock if run() is blocked
>     // in read because BufferedInputStream read() is synchronized.
> This is a severe issue since it violates the specification and use of 
> available().

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to