From 6176ea23c485543db6a0f34da4a1d7e31c61d707 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 8 Apr 2010 09:55:28 +0000 Subject: [PATCH] 294563 cleaned up connection return git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@1482 7e9141cc-0065-0410-87d8-b60c137991c4 --- .../eclipse/jetty/server/HttpConnection.java | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java index 41f72b1e23d..e704d2bc430 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java @@ -377,6 +377,8 @@ public class HttpConnection implements Connection /* ------------------------------------------------------------ */ public Connection handle() throws IOException { + Connection connection = this; + // Loop while more in buffer boolean more_in_buffer =true; // assume true until proven otherwise boolean progress=true; @@ -462,32 +464,38 @@ public class HttpConnection implements Connection { more_in_buffer = _parser.isMoreInBuffer() || _endp.isBufferingInput(); + // Is this request/response round complete? if (_parser.isComplete() && _generator.isComplete() && !_endp.isBufferingOutput()) { - if (_response.getStatus()==HttpStatus.SWITCHING_PROTOCOLS_101) - { - Connection connection = (Connection)_request.getAttribute("org.eclipse.jetty.io.Connection"); - if (connection!=null) - { - _parser.reset(true); - return connection; - } - } + // look for a switched connection instance? + Connection switched=(_response.getStatus()==HttpStatus.SWITCHING_PROTOCOLS_101) + ?(Connection)_request.getAttribute("org.eclipse.jetty.io.Connection"):null; - if (!_generator.isPersistent()) + // have we switched? + if (switched!=null) { _parser.reset(true); - more_in_buffer=false; - } - - if (more_in_buffer) - { - reset(false); - more_in_buffer = _parser.isMoreInBuffer() || _endp.isBufferingInput(); + _generator.reset(true); + connection=switched; } else - reset(true); - progress=true; + { + // No switch, so cleanup and reset + if (!_generator.isPersistent()) + { + _parser.reset(true); + more_in_buffer=false; + } + + if (more_in_buffer) + { + reset(false); + more_in_buffer = _parser.isMoreInBuffer() || _endp.isBufferingInput(); + } + else + reset(true); + progress=true; + } } if (_request.isAsyncStarted()) @@ -505,7 +513,7 @@ public class HttpConnection implements Connection setCurrentConnection(null); _handling=false; } - return this; + return connection; } /* ------------------------------------------------------------ */