You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sebb <se...@gmail.com> on 2008/03/05 15:10:43 UTC
Re: svn commit: r633798 - /commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/telnet/TelnetInputStream.java
On 05/03/2008, rwinston@apache.org <rw...@apache.org> wrote:
> Author: rwinston
> Date: Wed Mar 5 01:25:48 2008
> New Revision: 633798
>
> URL: http://svn.apache.org/viewvc?rev=633798&view=rev
> Log:
> Add missing patch (NET-73)
>
> Modified:
> commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/telnet/TelnetInputStream.java
>
> Modified: commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/telnet/TelnetInputStream.java
> URL: http://svn.apache.org/viewvc/commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/telnet/TelnetInputStream.java?rev=633798&r1=633797&r2=633798&view=diff
> ==============================================================================
> --- commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/telnet/TelnetInputStream.java (original)
> +++ commons/proper/net/branches/NET_2_0/src/main/java/org/apache/commons/net/telnet/TelnetInputStream.java Wed Mar 5 01:25:48 2008
> @@ -106,14 +106,19 @@
> // TelnetOutputStream writing through the telnet client at same time
> // as a processDo/Will/etc. command invoked from TelnetInputStream
> // tries to write.
> - private int __read() throws IOException
> + private int __read(boolean mayBlock) throws IOException
> {
> int ch;
>
> _loop:
BTW, the _loop: label is not used (in either version of the class).
> while (true)
> {
> - // Exit only when we reach end of stream.
> +
> + // If there is no more data AND we were told not to block, just return -2. (More efficient than exception.)
> + if(!mayBlock && super.available() == 0)
> + return -2;
> +
> + // Otherwise, exit only when we reach end of stream.
> if ((ch = super.read()) < 0)
> return -1;
>
> @@ -360,12 +365,13 @@
> //__alreadyread = false;
> __readIsWaiting = true;
> int ch;
> -
> + boolean mayBlock = true; // block on the first read only
> +
> do
> {
> try
> {
> - if ((ch = __read()) < 0)
> + if ((ch = __read(mayBlock)) < 0)
> if(ch != -2)
> return (ch);
> }
> @@ -399,6 +405,11 @@
> if (__isClosed)
> return (-1);
> }
> +
> + // Reads should not block on subsequent iterations. Potentially, this could happen if the
> + // remaining buffered socket data consists entirely of Telnet command sequence and no "user" data.
> + mayBlock = false;
> +
> }
> // Continue reading as long as there is data available and the queue is not full.
> while (super.available() > 0 && __bytesAvailable < __queue.length - 1);
> @@ -544,7 +555,7 @@
> {
> try
> {
> - if ((ch = __read()) < 0)
> + if ((ch = __read(true)) < 0)
> break;
> }
> catch (InterruptedIOException e)
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org