You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by "Marco Campelo (JIRA)" <ji...@apache.org> on 2007/01/03 17:07:27 UTC

[jira] Commented: (NET-145) Deadlock in TelnetInputStream

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

Marco Campelo commented on NET-145:
-----------------------------------

This deadlock happens when you lost the connection with the FTP server and tries to send a logout () command.

Find below the thead dump from a Solaris box:

Full thread dump Java HotSpot(TM) Client VM (1.4.2_08-b03 mixed mode):

"Thread-0" daemon prio=6 tid=0x001cbf18 nid=0x9 runnable [f9a7f000..f9a7fc30]
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
        - locked <0xf1845a20> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:66)
        at java.io.PushbackInputStream.read(PushbackInputStream.java:120)
        at org.apache.commons.net.io.FromNetASCIIInputStream.__read(FromNetASCIIInputStream.java:75)
        at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:170)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
        - locked <0xf1846988> (a org.apache.commons.net.telnet.TelnetInputStream)
        at org.apache.commons.net.telnet.TelnetInputStream.__read(TelnetInputStream.java:114)
        at org.apache.commons.net.telnet.TelnetInputStream.run(TelnetInputStream.java:535)
        at java.lang.Thread.run(Thread.java:534)

"Signal Dispatcher" daemon prio=10 tid=0x000cddc0 nid=0x6 waiting on condition [0..0]

"Finalizer" daemon prio=8 tid=0x000c7d68 nid=0x4 in Object.wait() [fc77f000..fc77fc30]
        at java.lang.Object.wait(Native Method)
        - waiting on <0xf1f437a8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
        - locked <0xf1f437a8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x000c72e8 nid=0x3 in Object.wait() [fe27f000..fe27fc30]
        at java.lang.Object.wait(Native Method)
        - waiting on <0xf1f43810> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:429)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
        - locked <0xf1f43810> (a java.lang.ref.Reference$Lock)

"main" prio=5 tid=0x000356b8 nid=0x1 in Object.wait() [ffbfe000..ffbff164]
        at java.lang.Object.wait(Native Method)
        - waiting on <0xf18475f8> (a [I)
        at java.lang.Object.wait(Object.java:429)
        at org.apache.commons.net.telnet.TelnetInputStream.read(TelnetInputStream.java:339)
        - locked <0xf18475f8> (a [I)
        at org.apache.commons.net.telnet.TelnetInputStream.read(TelnetInputStream.java:466)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:220)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
        - locked <0xf1849700> (a java.io.BufferedInputStream)
        at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:408)
        at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:450)
        at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:182)
        - locked <0xf184a0c0> (a java.io.InputStreamReader)
        at java.io.InputStreamReader.read(InputStreamReader.java:167)
        at java.io.BufferedReader.fill(BufferedReader.java:136)
        at java.io.BufferedReader.readLine(BufferedReader.java:299)
        - locked <0xf184a0c0> (a java.io.InputStreamReader)
        at java.io.BufferedReader.readLine(BufferedReader.java:362)
        at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:264)
        at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:460)
        at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:520)
        at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:569)
        at org.apache.commons.net.ftp.FTP.quit(FTP.java:781)
        at org.apache.commons.net.ftp.FTPClient.logout(FTPClient.java:706)
        at com.nokia.ci.nwg.util.ftp.FTPHandler.disconnect(FTPHandler.java:318)
        at com.nokia.ci.nwg.CDRTransmitter.doPerformControl(CDRTransmitter.java:71)
        at com.nokia.ci.nwg.CDRProcessor.doProccessCDRs(CDRProcessor.java:59)
        at com.nokia.ci.nwg.CDRProcessor.main(CDRProcessor.java:85)

"VM Thread" prio=5 tid=0x000c64a0 nid=0x2 runnable

"VM Periodic Task Thread" prio=10 tid=0x000d0c20 nid=0x8 waiting on condition
"Suspend Checker Thread" prio=10 tid=0x000cd488 nid=0x5 runnable

> Deadlock in TelnetInputStream
> -----------------------------
>
>                 Key: NET-145
>                 URL: https://issues.apache.org/jira/browse/NET-145
>             Project: Commons Net
>          Issue Type: Bug
>    Affects Versions: 1.4 Final
>         Environment: Heavy mutlithreaded environment using Jakarta VFS (which uses Commons Net) for ftp file transfers
>            Reporter: Norbert Seekircher
>             Fix For: 2.0
>
>
> "Sometimes" single threads of our application (each thread transfering data from ftp servers) get locked forever. When monitoring our tool with JConsole, I can see that such a thread usually hangs at org.apache.commons.net.telnet.TelnetInputStream, line 339.
> This line contains the statement 
> __queue.wait();
> Unfortunately I haven't found a way to reproduce this issue, it just happens about once a day (while running 24 hours and transfering about 50000 files).
> As a quick and dirty workaround: What do you think about replacing this line with something like
> long startTime = System.currentTimeMillis();
> __queue.wait(60000);
> if ((System.currentTimeMillis() - startTime) > 55000) {
>     throw new InterruptedException("Unknown strange and nasty blocker detected");
> } 
> So at least it would not just block the thread.

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

        

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org