367485 - HttpExchange canceled before response do not release connection.
This commit is contained in:
parent
62bec09a6b
commit
371e998b62
|
@ -179,7 +179,7 @@ public abstract class AbstractHttpConnection extends AbstractConnection implemen
|
||||||
_generator.setVersion(_exchange.getVersion());
|
_generator.setVersion(_exchange.getVersion());
|
||||||
|
|
||||||
String method=_exchange.getMethod();
|
String method=_exchange.getMethod();
|
||||||
String uri = _exchange.getURI();
|
String uri = _exchange.getRequestURI();
|
||||||
if (_destination.isProxied() && !HttpMethods.CONNECT.equals(method) && uri.startsWith("/"))
|
if (_destination.isProxied() && !HttpMethods.CONNECT.equals(method) && uri.startsWith("/"))
|
||||||
{
|
{
|
||||||
boolean secure = _destination.isSecure();
|
boolean secure = _destination.isSecure();
|
||||||
|
@ -394,7 +394,11 @@ public abstract class AbstractHttpConnection extends AbstractConnection implemen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_endp.isOpen())
|
||||||
|
{
|
||||||
_endp.close();
|
_endp.close();
|
||||||
|
_destination.returnConnection(this, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIdleTimeout()
|
public void setIdleTimeout()
|
||||||
|
|
|
@ -14,15 +14,8 @@
|
||||||
|
|
||||||
package org.eclipse.jetty.client;
|
package org.eclipse.jetty.client;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.is;
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
import static org.junit.Assert.assertThat;
|
|
||||||
import static org.junit.Assert.assertTrue;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.SocketTimeoutException;
|
import java.net.SocketTimeoutException;
|
||||||
|
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.ServletOutputStream;
|
import javax.servlet.ServletOutputStream;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
@ -36,18 +29,22 @@ import org.eclipse.jetty.server.Server;
|
||||||
import org.eclipse.jetty.server.handler.AbstractHandler;
|
import org.eclipse.jetty.server.handler.AbstractHandler;
|
||||||
import org.eclipse.jetty.server.nio.SelectChannelConnector;
|
import org.eclipse.jetty.server.nio.SelectChannelConnector;
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
|
||||||
import org.eclipse.jetty.util.log.StdErrLog;
|
import org.eclipse.jetty.util.log.StdErrLog;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractHttpExchangeCancelTest
|
public abstract class AbstractHttpExchangeCancelTest
|
||||||
{
|
{
|
||||||
private static final Logger LOG = Log.getLogger(AbstractHttpExchangeCancelTest.TestHttpExchange.class);
|
|
||||||
|
|
||||||
private Server server;
|
private Server server;
|
||||||
private Connector connector;
|
private Connector connector;
|
||||||
|
|
||||||
|
@ -371,6 +368,26 @@ public abstract class AbstractHttpExchangeCancelTest
|
||||||
assertFalse(exchange.isAssociated());
|
assertFalse(exchange.isAssociated());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHttpExchangeCancelReturnsConnection() throws Exception
|
||||||
|
{
|
||||||
|
TestHttpExchange exchange = new TestHttpExchange();
|
||||||
|
Address address = newAddress();
|
||||||
|
exchange.setAddress(address);
|
||||||
|
long delay = 5000;
|
||||||
|
exchange.setRequestURI("/?action=wait" + delay);
|
||||||
|
|
||||||
|
HttpClient httpClient = getHttpClient();
|
||||||
|
HttpDestination destination = httpClient.getDestination(address, false);
|
||||||
|
int connections = destination.getConnections();
|
||||||
|
httpClient.send(exchange);
|
||||||
|
Thread.sleep(delay / 2);
|
||||||
|
Assert.assertEquals(connections + 1, destination.getConnections());
|
||||||
|
|
||||||
|
exchange.cancel();
|
||||||
|
Assert.assertEquals(connections, destination.getConnections());
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
protected abstract HttpClient getHttpClient();
|
protected abstract HttpClient getHttpClient();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue