[ https://issues.apache.org/jira/browse/NET-466?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13420833#comment-13420833 ]
Konrad Garus commented on NET-466: ---------------------------------- The issue disappears as soon as I disable the reader thread. Here are relevant stacktraces from the lock-up: {code}"Thread-0" daemon prio=10 tid=0x00007f721c61a000 nid=0x3dea runnable [0x00007f7218ee7000] java.lang.Thread.State: RUNNABLE at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.read1(BufferedInputStream.java:256) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) - locked <0x00000007d70f7510> (a java.io.BufferedInputStream) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:237) - locked <0x00000007d70fbab0> (a org.apache.commons.net.telnet.TelnetInputStream) at org.apache.commons.net.telnet.TelnetInputStream.__read(TelnetInputStream.java:140) at org.apache.commons.net.telnet.TelnetInputStream.run(TelnetInputStream.java:608) at java.lang.Thread.run(Thread.java:662) Locked ownable synchronizers: - None "main" prio=10 tid=0x00007f721c00d000 nid=0x3dd0 waiting for monitor entry [0x00007f7223c29000] java.lang.Thread.State: BLOCKED (on object monitor) at java.io.BufferedInputStream.available(BufferedInputStream.java:381) - waiting to lock <0x00000007d70fbab0> (a org.apache.commons.net.telnet.TelnetInputStream) at org.apache.commons.net.telnet.TelnetInputStream.available(TelnetInputStream.java:563) - locked <0x00000007d70fe320> (a [I) at java.io.BufferedInputStream.available(BufferedInputStream.java:381) - locked <0x00000007d7100498> (a java.io.BufferedInputStream) at com.example.Main.main(Main.java:95) Locked ownable synchronizers: - None {code} > 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.1 > > > 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