Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
Windows Vista
Description
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())
if (!this.outbuf.hasData()) {
if (this.closed)
else {
if (this.contentEncoder != null) {
handler.outputReady(this, this.contentEncoder);
if (this.contentEncoder.isCompleted())
}
}
if (this.contentEncoder == null && !this.outbuf.hasData())
}
} catch (IOException 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?