You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/06/22 21:11:39 UTC
svn commit: r549935 -
/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
Author: olegk
Date: Fri Jun 22 12:11:39 2007
New Revision: 549935
URL: http://svn.apache.org/viewvc?view=rev&rev=549935
Log:
HTTPCORE-83: Revised synchronization on the connection state object
Modified:
jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java?view=diff&rev=549935&r1=549934&r2=549935
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpServiceHandler.java Fri Jun 22 12:11:39 2007
@@ -175,9 +175,6 @@
final ServerConnState connState = (ServerConnState) context.getAttribute(CONN_STATE);
synchronized (connState) {
- connState.setInputState(ServerConnState.REQUEST_RECEIVED);
- connState.setRequest(request);
-
boolean contentExpected = false;
if (request instanceof HttpEntityEnclosingRequest) {
HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();
@@ -195,7 +192,7 @@
public void run() {
try {
- handleRequest(connState, conn);
+ handleRequest(request, connState, conn);
} catch (IOException ex) {
shutdownConnection(conn, ex);
@@ -264,9 +261,10 @@
HttpEntity entity = response.getEntity();
if (statusCode >= 200 && entity == null) {
- connState.resetOutput();
- connState.resetInput();
+ connState.setOutputState(ServerConnState.RESPONSE_DONE);
if (!connState.isWorkerRunning()) {
+ connState.resetOutput();
+ connState.resetInput();
conn.requestInput();
}
@@ -307,10 +305,11 @@
buffer.produceContent(encoder);
if (encoder.isCompleted()) {
- connState.resetOutput();
- connState.resetInput();
+ connState.setOutputState(ServerConnState.RESPONSE_BODY_DONE);
if (!connState.isWorkerRunning()) {
+ connState.resetOutput();
+ connState.resetInput();
conn.requestInput();
}
@@ -349,11 +348,11 @@
}
private void handleRequest(
+ final HttpRequest request,
final ServerConnState connState,
final NHttpServerConnection conn) throws HttpException, IOException {
HttpContext context = conn.getContext();
- HttpRequest request = null;
// Block until previous request is fully processed and
// the worker thread no longer holds the shared buffer
@@ -373,11 +372,13 @@
connState.shutdown();
return;
}
+ connState.setInputState(ServerConnState.REQUEST_RECEIVED);
+ connState.setRequest(request);
connState.setWorkerRunning(true);
- request = connState.getRequest();
- HttpParamsLinker.link(request, this.params);
}
+ HttpParamsLinker.link(request, this.params);
+
context.setAttribute(HttpExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(HttpExecutionContext.HTTP_REQUEST, request);
@@ -507,7 +508,10 @@
}
synchronized (connState) {
- if (connState.getOutputState() == ServerConnState.READY && conn.isOpen()) {
+ if (connState.getOutputState() == ServerConnState.RESPONSE_DONE
+ && conn.isOpen()) {
+ connState.resetInput();
+ connState.resetOutput();
conn.requestInput();
}
connState.setWorkerRunning(false);
@@ -536,6 +540,8 @@
public static final int REQUEST_BODY_DONE = 4;
public static final int RESPONSE_SENT = 8;
public static final int RESPONSE_BODY_STREAM = 16;
+ public static final int RESPONSE_BODY_DONE = 32;
+ public static final int RESPONSE_DONE = 32;
private final SharedInputBuffer inbuffer;
private final SharedOutputBuffer outbuffer;