hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Anders Wallgren (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HTTPCORE-51) My HttpRequestExecutionHandler.submitRequest is being called repeatedly
Date Sun, 04 Mar 2007 16:46:50 GMT

    [ https://issues.apache.org/jira/browse/HTTPCORE-51?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12477805
] 

Anders Wallgren commented on HTTPCORE-51:
-----------------------------------------

That seems to have fixed the symptoms on my end -- thanks for the quick response.  I'll modify
my requestReady handler to behave correctly if called more than once.

> My HttpRequestExecutionHandler.submitRequest is being called repeatedly
> -----------------------------------------------------------------------
>
>                 Key: HTTPCORE-51
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-51
>             Project: HttpComponents Core
>          Issue Type: Bug
>          Components: HttpCore NIO
>         Environment: Windows Vista
>            Reporter: Anders Wallgren
>         Assigned To: Oleg Kalnichevski
>             Fix For: 4.0-alpha4
>
>
> In my test suite, I'm sending a single post, but I'm finding that my HttpRequestExecutionHandler.submitRequest
handler is being called multiple times.  I think I've tracked it down to DefaultNHttpClientConnection.productOutput:
>     public void produceOutput(final NHttpClientHandler handler) {
>         try {
>             if (this.outbuf.hasData()) {
>                 this.outbuf.flush(this.session.channel());   <<--- this is called
>             }
>             if (!this.outbuf.hasData()) {
>                 if (this.closed) {
>                     this.session.close();
>                     resetOutput();
>                     return;
>                 } else {
>                     if (this.contentEncoder != null) {
>                         handler.outputReady(this, this.contentEncoder);
>                         if (this.contentEncoder.isCompleted()) {
>                             resetOutput();   <<<<----- then this 
>                         }
>                     }
>                 }
>                 if (this.contentEncoder == null && !this.outbuf.hasData()) {
>                     this.session.clearEvent(EventMask.WRITE);
>                 }
>             }
>         } catch (IOException ex) {
>             handler.exception(this, ex);
>         } finally {
>             // Finally set buffered output flag
>             this.hasBufferedOutput = this.outbuf.hasData();
>         }
>         if (this.request == null && !this.closed) {
>             handler.requestReady(this);   <<<--- then this
>         }
>     }
> The sequence of events is that my submitRequest is called once, then when the channel
becomes writable, produceOutput is called.  It's a small request (3 bytes of content), so
the first branch is followed and outbuf is flushed.  Then there is no more data, and the second
branch is called, where resetOutput is called, but the method doesn't return.  Then, at the
bottom of produceOutput, handle.requestReady is called again, since resetOutput set request
to null.
> Am I doing something wrong, or is there a bug here?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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


Mime
View raw message