Clarified HttpReceiver.responseFailure().
Added javadocs to relevant methods in HttpChannel. Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
This commit is contained in:
parent
119996c16f
commit
bc0b4149ff
|
@ -78,6 +78,12 @@ public abstract class HttpChannel implements CyclicTimeouts.Expirable
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Disassociates the exchange from this channel.</p>
|
||||||
|
*
|
||||||
|
* @param exchange the current exchange that must be already completed
|
||||||
|
* @return true if the exchange was disassociated, false otherwise
|
||||||
|
*/
|
||||||
public boolean disassociate(HttpExchange exchange)
|
public boolean disassociate(HttpExchange exchange)
|
||||||
{
|
{
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
|
@ -97,6 +103,14 @@ public abstract class HttpChannel implements CyclicTimeouts.Expirable
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Returns the {@code HttpExchange} currently associated
|
||||||
|
* with this channel, possibly {@code null}.</p>
|
||||||
|
* <p>The exchange may be completed and disassociated concurrently,
|
||||||
|
* so callers must act atomically on the exchange.</p>
|
||||||
|
*
|
||||||
|
* @return the {@code HttpExchange} currently associated with this channel, possibly {@code null}.
|
||||||
|
*/
|
||||||
public HttpExchange getHttpExchange()
|
public HttpExchange getHttpExchange()
|
||||||
{
|
{
|
||||||
try (AutoLock l = _lock.lock())
|
try (AutoLock l = _lock.lock())
|
||||||
|
|
|
@ -386,23 +386,19 @@ public abstract class HttpReceiver
|
||||||
LOG.debug("Failing with {} on {}", failure, this);
|
LOG.debug("Failing with {} on {}", failure, this);
|
||||||
|
|
||||||
HttpExchange exchange = getHttpExchange();
|
HttpExchange exchange = getHttpExchange();
|
||||||
// In case of a response error, the failure has already been notified
|
|
||||||
// and it is possible that a further attempt to read in the receive
|
|
||||||
// loop throws an exception that reenters here but without exchange;
|
|
||||||
// or, the server could just have timed out the connection.
|
|
||||||
if (exchange == null)
|
|
||||||
{
|
|
||||||
promise.succeeded(false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mark atomically the response as completed, with respect
|
// Mark atomically the response as completed, with respect
|
||||||
// to concurrency between response success and response failure.
|
// to concurrency between response success and response failure.
|
||||||
boolean completed = exchange.responseComplete(failure);
|
if (exchange != null && exchange.responseComplete(failure))
|
||||||
if (completed)
|
{
|
||||||
abort(exchange, failure, promise);
|
abort(exchange, failure, promise);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
// The response was already completed (either successfully
|
||||||
|
// or with a failure) by a previous event, bail out.
|
||||||
promise.succeeded(false);
|
promise.succeeded(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void terminateResponse(HttpExchange exchange)
|
private void terminateResponse(HttpExchange exchange)
|
||||||
|
|
Loading…
Reference in New Issue