You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Oleg Kalnichevski (JIRA)" <ji...@apache.org> on 2011/08/24 11:14:29 UTC

[jira] [Resolved] (HTTPCORE-270) IllegalStateException in AbstractSessionOutputBuffer

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

Oleg Kalnichevski resolved HTTPCORE-270.
----------------------------------------

    Resolution: Fixed

> Any thoughts on how this might be getting set inside the HttpClient? 

Only by explicitly setting the parameter. I double-checked. 

I also discovered that the AbstractSessionInputBuffer had been affected the same way. Fixes and test cases committed to SVN trunk. Please review / retest.

Oleg

> IllegalStateException in AbstractSessionOutputBuffer
> ----------------------------------------------------
>
>                 Key: HTTPCORE-270
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-270
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 4.2-alpha1
>            Reporter: William R. Speirs
>            Priority: Critical
>             Fix For: 4.2-alpha2
>
>         Attachments: SocketOutputBuffer.diff
>
>
> I am using httpclient-4.1.2 & httpcore-4.2-alpha1. In making an DefaultHttpClient.execute() call I get the following exception:
>  java.lang.IllegalStateException: Current state = RESET, new state = FLUSHED
> 	at java.nio.charset.CharsetEncoder.throwIllegalStateException(CharsetEncoder.java:951)
> 	at java.nio.charset.CharsetEncoder.flush(CharsetEncoder.java:640)
> 	at org.apache.http.impl.io.AbstractSessionOutputBuffer.writeEncoded(AbstractSessionOutputBuffer.java:264)
> 	at org.apache.http.impl.io.AbstractSessionOutputBuffer.writeLine(AbstractSessionOutputBuffer.java:247)
> 	at org.apache.http.impl.conn.LoggingSessionOutputBuffer.writeLine(LoggingSessionOutputBuffer.java:99)
> 	at org.apache.http.impl.io.AbstractMessageWriter.write(AbstractMessageWriter.java:97)
> 	at org.apache.http.impl.AbstractHttpClientConnection.sendRequestHeader(AbstractHttpClientConnection.java:253)
> On line 264 of AbstractSessionOutputBuffer.java, encoder.flush() is being called. My thought (I have not completely debugged) is that in this instance, cbuf.hasRemaining() is false, and therefor the following calls are being made:
> encoder.reset()
> encoder.flush()
> This is resulting in the above exception.
> I believe the following small patch will short-circuit the code, and fix the issue.
> Thoughts?
> Index: httpcore/src/main/java/org/apache/http/impl/io/AbstractSessionOutputBuffer.java
> ===================================================================
> --- httpcore/src/main/java/org/apache/http/impl/io/AbstractSessionOutputBuffer.java     (revision 1160689)
> +++ httpcore/src/main/java/org/apache/http/impl/io/AbstractSessionOutputBuffer.java     (working copy)
> @@ -256,6 +256,10 @@
>          if (this.bbuf == null) {
>              this.bbuf = ByteBuffer.allocate(1024);
>          }
> +       if(!cbuf.hasRemaining()) {
> +               return;
> +       }
> +
>          this.encoder.reset();
>          while (cbuf.hasRemaining()) {
>              CoderResult result = this.encoder.encode(cbuf, this.bbuf, true);

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

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