commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sebb (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (NET-501) Race Condition on TelnetClient.disconnect() and TelnetInputStream.run() . java.lang.IllegalStateException: Queue is full! Cannot process another character.
Date Thu, 06 Jun 2013 11:34:20 GMT

     [ https://issues.apache.org/jira/browse/NET-501?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Sebb resolved NET-501.
----------------------

       Resolution: Fixed
    Fix Version/s: 3.3

Thanks for the report; fix applied to SVN:

URL: http://svn.apache.org/r1490241
Log:
NET-501 Race Condition on TelnetClient.disconnect() and TelnetInputStream.run()

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

                
> Race Condition on TelnetClient.disconnect() and TelnetInputStream.run() . java.lang.IllegalStateException:
Queue is full! Cannot process another character.
> -----------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: NET-501
>                 URL: https://issues.apache.org/jira/browse/NET-501
>             Project: Commons Net
>          Issue Type: Bug
>          Components: Telnet
>    Affects Versions: 3.2
>         Environment: Ubuntu 12.04 64 bits x86
>            Reporter: Julián Lastiri
>            Priority: Minor
>             Fix For: 3.3
>
>
> I'm getting the following exception while disconnecting a threaded (readerThread=true)
TelnetClient connection. 
> {code}
> Exception in thread "Thread-160" java.lang.IllegalStateException: Queue is full! Cannot
process another character. 
> 	at org.apache.commons.net.telnet.TelnetInputStream.__processChar(TelnetInputStream.java:339)
> 	at org.apache.commons.net.telnet.TelnetInputStream.run(TelnetInputStream.java:647)
> 	at java.lang.Thread.run(Thread.java:722)
> {code}
> I noticed that when TelnetClient.disconnect() is called the attribute __threaded is set
to false while the thread in the TelnetInputStream.run() method could call TelnetInputStream().__processChar(...)
throwing IllegalStateException
> This is a test program to reproduce the issue
> {code}
> public class TestTelnetClient implements Runnable {
> 	/**
> 	 * @param args
> 	 */
> 	public static void main(String[] args) {
> 		ArrayList<Thread> workers = new ArrayList<Thread>();
> 		for( int i=0; i<1000; ++i){
> 			Thread t = new Thread ( new TestTelnetClient() );
> 			t.start();
> 			workers.add(t);
> 		}
> 		for (Thread t : workers ) {			
> 			try {
> 				t.join();			
> 			} catch (InterruptedException e) {
> 				e.printStackTrace();
> 			}
> 		}			
> 	}
> 	@Override
> 	public void run() {
> 		System.out.println("Starting thread...");
> 		TelnetClient tc = new TelnetClient();
> //		tc.setReaderThread(false);
> 		try {
> 			tc.connect("localhost", 23);
> 			tc.setSoTimeout(1000);
> 			InputStream in = tc.getInputStream();
> 			int ch;
> 			in.read();
> 		} catch (SocketException e) {
> 			e.printStackTrace();
> 		} catch (IOException e) {
> 			e.printStackTrace();
> 		} finally {
> 			System.out.println("Disconnecting...");
> 			try {
> 				tc.disconnect();
> 			} catch (IOException e) {
> 				// TODO Auto-generated catch block
> 				e.printStackTrace();
> 			}
> 		}
> 		
> 	}
> }
> {code}
> A telnet server (telnetd) is required. I also modified the initial banner ( /etc/issue.net
) with a lot of characters to get a better chance to receive information while calling disconnect.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message