servlet = (CometProcessor) request.getWrapper().allocate();
} catch (Throwable t) {
log.error(sm.getString("coyoteAdapter.service"), t);
- request.removeAttribute("org.apache.tomcat.comet");
+ request.recycle();
+ response.recycle();
// Restore the context classloader
Thread.currentThread().setContextClassLoader
(CoyoteAdapter.class.getClassLoader());
} else {
if (!servlet.read(request.getRequest(), response.getResponse())) {
error = true;
- request.removeAttribute("org.apache.tomcat.comet");
try {
servlet.error(request.getRequest(), response.getResponse());
} catch (Throwable th) {
}
}
}
+ if (response.isClosed()) {
+ res.action(ActionCode.ACTION_COMET_END, null);
+ }
return (!error);
} catch (Throwable t) {
if (!(t instanceof IOException)) {
log.error(sm.getString("coyoteAdapter.service"), t);
}
- request.removeAttribute("org.apache.tomcat.comet");
+ error = true;
try {
servlet.error(request.getRequest(), response.getResponse());
} catch (Throwable th) {
}
return false;
} finally {
+ // Restore the context classloader
+ Thread.currentThread().setContextClassLoader
+ (CoyoteAdapter.class.getClassLoader());
// Recycle the wrapper request and response
- if (request.getAttribute("org.apache.tomcat.comet") == null) {
+ if (error || response.isClosed()) {
request.recycle();
response.recycle();
}
- // Restore the context classloader
- Thread.currentThread().setContextClassLoader
- (CoyoteAdapter.class.getClassLoader());
}
}
return true;
connector.getContainer().getPipeline().getFirst().invoke(request, response);
}
- if (request.getAttribute("org.apache.tomcat.comet") == Boolean.TRUE
- && request.getWrapper().allocate() instanceof CometProcessor) {
+ if (request.getWrapper().allocate() instanceof CometProcessor
+ && !response.isClosed()) {
comet = true;
+ res.action(ActionCode.ACTION_COMET_BEGIN, null);
}
if (!comet) {
response.finishResponse();
- req.action( ActionCode.ACTION_POST_REQUEST , null);
+ req.action(ActionCode.ACTION_POST_REQUEST , null);
}
} catch (IOException e) {
try {
rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
error = !adapter.event(request, response, error);
- if (request.getAttribute("org.apache.tomcat.comet") == null) {
- comet = false;
- }
} catch (InterruptedIOException e) {
error = true;
} catch (Throwable t) {
error = response.getErrorException() != null ||
statusDropsConnection(response.getStatus());
}
- // Comet support
- if (request.getAttribute("org.apache.tomcat.comet") != null) {
- comet = true;
- }
} catch (InterruptedIOException e) {
error = true;
} catch (Throwable t) {
InternalAprInputBuffer internalBuffer = (InternalAprInputBuffer)
request.getInputBuffer();
internalBuffer.addActiveFilter(savedBody);
+
+ } else if (actionCode == ActionCode.ACTION_COMET_BEGIN) {
+ comet = true;
+ } else if (actionCode == ActionCode.ACTION_COMET_END) {
+ comet = false;
}
}