changeset 1034:563458c4dc93

remove HttpGenerator.reset()
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 03 Nov 2016 21:02:59 -0600
parents 4ada7a8c128a
children 898774c2cd87
files src/org/eclipse/jetty/http/AbstractGenerator.java src/org/eclipse/jetty/http/HttpGenerator.java src/org/eclipse/jetty/http/HttpParser.java src/org/eclipse/jetty/server/AbstractHttpConnection.java
diffstat 4 files changed, 61 insertions(+), 91 deletions(-) [+]
line wrap: on
line diff
--- a/src/org/eclipse/jetty/http/AbstractGenerator.java	Thu Nov 03 04:00:25 2016 -0600
+++ b/src/org/eclipse/jetty/http/AbstractGenerator.java	Thu Nov 03 21:02:59 2016 -0600
@@ -108,23 +108,6 @@
 		return _endp.isOpen();
 	}
 
-	public void reset()
-	{
-		_state = STATE_HEADER;
-		_status = 0;
-		_version = HttpVersions.HTTP_1_1_ORDINAL;
-		_reason = null;
-		_last = false;
-		_head = false;
-		_noContent=false;
-		_persistent = null;
-		_contentWritten = 0;
-		_contentLength = HttpTokens.UNKNOWN_CONTENT;
-
-		_content = null;
-		_method = null;
-	}
-
 	public final void returnBuffers()
 	{
 		if (_buffer!=null && _buffer.length()==0)
@@ -144,7 +127,7 @@
 			throw new IllegalStateException("Flushed");
 
 		_last = false;
-		_persistent=null;
+		_persistent = null;
 		_contentWritten = 0;
 		_contentLength = HttpTokens.UNKNOWN_CONTENT;
 		_content=null;
--- a/src/org/eclipse/jetty/http/HttpGenerator.java	Thu Nov 03 04:00:25 2016 -0600
+++ b/src/org/eclipse/jetty/http/HttpGenerator.java	Thu Nov 03 21:02:59 2016 -0600
@@ -106,9 +106,7 @@
 		super(buffers,io);
 	}
 
-	@Override
-	public void reset()
-	{
+	public void shutdown() {
 		if (_persistent!=null && !_persistent && _endp!=null && !_endp.isOutputShutdown())
 		{
 			try
@@ -120,20 +118,6 @@
 				LOG.trace("",e);
 			}
 		}
-		super.reset();
-		if (_buffer!=null)
-			_buffer.clear();
-		if (_header!=null)
-			_header.clear();
-		if (_content!=null)
-			_content=null;
-		_bypass = false;
-		_needCRLF = false;
-		_needEOC = false;
-		_bufferChunked = false;
-		_method=null;
-		_uri=null;
-		_noContent=false;
 	}
 
 	/* ------------------------------------------------------------ */
@@ -330,7 +314,7 @@
 		{
 			if (isRequest())
 			{
-				_persistent=true;
+				_persistent = true;
 
 				if (_version == HttpVersions.HTTP_0_9_ORDINAL)
 				{
@@ -366,7 +350,7 @@
 				else
 				{
 					if (_persistent==null)
-						_persistent= (_version > HttpVersions.HTTP_1_0_ORDINAL);
+						_persistent = (_version > HttpVersions.HTTP_1_0_ORDINAL);
 
 					// add response line
 					Status status = _status<__status.length?__status[_status]:null;
@@ -493,7 +477,7 @@
 												case HttpHeaderValues.CLOSE_ORDINAL:
 													close=true;
 													if (isResponse())
-														_persistent=false;
+														_persistent = false;
 													keep_alive=false;
 													if (!_persistent && isResponse() && _contentLength == HttpTokens.UNKNOWN_CONTENT)
 														_contentLength = HttpTokens.EOF_CONTENT;
--- a/src/org/eclipse/jetty/http/HttpParser.java	Thu Nov 03 04:00:25 2016 -0600
+++ b/src/org/eclipse/jetty/http/HttpParser.java	Thu Nov 03 21:02:59 2016 -0600
@@ -36,28 +36,26 @@
 	private static final Logger LOG = LoggerFactory.getLogger(HttpParser.class);
 
 	// States
-	private static final int STATE_START=-14;
-	private static final int STATE_FIELD0=-13;
-	private static final int STATE_SPACE1=-12;
-	private static final int STATE_STATUS=-11;
-	private static final int STATE_URI=-10;
-	private static final int STATE_SPACE2=-9;
-	private static final int STATE_END0=-8;
-	private static final int STATE_END1=-7;
-	private static final int STATE_FIELD2=-6;
-	private static final int STATE_HEADER=-5;
-	private static final int STATE_HEADER_NAME=-4;
-	private static final int STATE_HEADER_IN_NAME=-3;
-	private static final int STATE_HEADER_VALUE=-2;
-	private static final int STATE_HEADER_IN_VALUE=-1;
-	private static final int STATE_END=0;
-	private static final int STATE_EOF_CONTENT=1;
-	private static final int STATE_CONTENT=2;
-	private static final int STATE_CHUNKED_CONTENT=3;
-	private static final int STATE_CHUNK_SIZE=4;
-	private static final int STATE_CHUNK_PARAMS=5;
-	private static final int STATE_CHUNK=6;
-	private static final int STATE_SEEKING_EOF=7;
+	private static final int STATE_START = -14;
+	private static final int STATE_FIELD0 = -13;
+	private static final int STATE_SPACE1 = -12;
+	private static final int STATE_STATUS = -11;
+	private static final int STATE_URI = -10;
+	private static final int STATE_SPACE2 = -9;
+	private static final int STATE_FIELD2 = -6;
+	private static final int STATE_HEADER = -5;
+	private static final int STATE_HEADER_NAME = -4;
+	private static final int STATE_HEADER_IN_NAME = -3;
+	private static final int STATE_HEADER_VALUE = -2;
+	private static final int STATE_HEADER_IN_VALUE = -1;
+	private static final int STATE_END = 0;
+	private static final int STATE_EOF_CONTENT = 1;
+	private static final int STATE_CONTENT = 2;
+	private static final int STATE_CHUNKED_CONTENT = 3;
+	private static final int STATE_CHUNK_SIZE = 4;
+	private static final int STATE_CHUNK_PARAMS = 5;
+	private static final int STATE_CHUNK = 6;
+	private static final int STATE_SEEKING_EOF = 7;
 
 	private final EventHandler _handler;
 	private final EndPoint _endp;
@@ -132,7 +130,7 @@
 	{
 		_persistent = persistent;
 		if (!_persistent &&(_state==STATE_END || _state==STATE_START))
-			_state=STATE_SEEKING_EOF;
+			_state = STATE_SEEKING_EOF;
 	}
 
 	/* ------------------------------------------------------------------------------- */
@@ -203,7 +201,7 @@
 					progress++;
 				else if (filled < 0 )
 				{
-					_persistent=false;
+					_persistent = false;
 
 					// do we have content to deliver?
 					if (_state>STATE_END)
@@ -306,7 +304,7 @@
 							_buffer.mark();
 							if (_responseStatus>=0)
 							{
-								_state=STATE_STATUS;
+								_state = STATE_STATUS;
 								_responseStatus=ch-'0';
 							}
 							else
@@ -323,7 +321,7 @@
 						{
 //							_tok1.update(_buffer.markIndex(), _buffer.getIndex() - 1);
 							_tok1 = _buffer.toString(_buffer.markIndex(), _buffer.getIndex() - 1 - _buffer.markIndex());
-							_state=STATE_SPACE2;
+							_state = STATE_SPACE2;
 							continue;
 						}
 						else if (ch>='0' && ch<='9')
@@ -334,7 +332,7 @@
 						else if (ch < HttpTokens.SPACE && ch>=0)
 						{
 							_eol=ch;
-							_state=STATE_HEADER;
+							_state = STATE_HEADER;
 							_tok0 = "";
 							_tok1 = "";
 							_multiLineValue=null;
@@ -357,8 +355,8 @@
 						{
 							// HTTP/0.9
 							_handler.startRequest(_tok0, _buffer.sliceFromMark().toString(), null);
-							_persistent=false;
-							_state=STATE_SEEKING_EOF;
+							_persistent = false;
+							_state = STATE_SEEKING_EOF;
 							_handler.headerComplete();
 							_handler.messageComplete(_contentPosition);
 							return 1;
@@ -385,8 +383,8 @@
 							{
 								// HTTP/0.9
 								_handler.startRequest(_tok0, _tok1, null);
-								_persistent=false;
-								_state=STATE_SEEKING_EOF;
+								_persistent = false;
+								_state = STATE_SEEKING_EOF;
 								_handler.headerComplete();
 								_handler.messageComplete(_contentPosition);
 								return 1;
@@ -478,11 +476,11 @@
 												switch(HttpHeaderValues.CACHE.getOrdinal(value))
 												{
 													case HttpHeaderValues.CLOSE_ORDINAL:
-														_persistent=false;
+														_persistent = false;
 														break;
 
 													case HttpHeaderValues.KEEP_ALIVE_ORDINAL:
-														_persistent=true;
+														_persistent = true;
 														break;
 
 													case -1: // No match, may be multi valued
@@ -492,11 +490,11 @@
 															switch(HttpHeaderValues.CACHE.getOrdinal(v.trim()))
 															{
 																case HttpHeaderValues.CLOSE_ORDINAL:
-																	_persistent=false;
+																	_persistent = false;
 																	break;
 
 																case HttpHeaderValues.KEEP_ALIVE_ORDINAL:
-																	_persistent=true;
+																	_persistent = true;
 																	break;
 															}
 														}
@@ -555,7 +553,7 @@
 
 										case HttpTokens.NO_CONTENT:
 											_handler.headerComplete();
-											_state=_persistent||(_responseStatus>=100&&_responseStatus<200)?STATE_END:STATE_SEEKING_EOF;
+											_state = _persistent||(_responseStatus>=100&&_responseStatus<200)?STATE_END:STATE_SEEKING_EOF;
 											_handler.messageComplete(_contentPosition);
 											return 1;
 
@@ -619,7 +617,7 @@
 								if (_length == -1)
 									_buffer.mark();
 								_length=_buffer.getIndex() - _buffer.markIndex();
-								_state=STATE_HEADER_IN_NAME;
+								_state = STATE_HEADER_IN_NAME;
 							}
 						}
 
@@ -685,7 +683,7 @@
 								if (_length == -1)
 									_buffer.mark();
 								_length=_buffer.getIndex() - _buffer.markIndex();
-								_state=STATE_HEADER_IN_VALUE;
+								_state = STATE_HEADER_IN_VALUE;
 							}
 						}
 						break;
@@ -728,7 +726,7 @@
 			// Handle HEAD response
 			if (_responseStatus>0 && _headResponse)
 			{
-				_state=_persistent||(_responseStatus>=100&&_responseStatus<200)?STATE_END:STATE_SEEKING_EOF;
+				_state = _persistent||(_responseStatus>=100&&_responseStatus<200)?STATE_END:STATE_SEEKING_EOF;
 				_handler.messageComplete(_contentLength);
 			}
 
@@ -769,7 +767,7 @@
 						long remaining=_contentLength - _contentPosition;
 						if (remaining == 0)
 						{
-							_state=_persistent?STATE_END:STATE_SEEKING_EOF;
+							_state = _persistent?STATE_END:STATE_SEEKING_EOF;
 							_handler.messageComplete(_contentPosition);
 							return 1;
 						}
@@ -788,7 +786,7 @@
 
 						if(_contentPosition == _contentLength)
 						{
-							_state=_persistent?STATE_END:STATE_SEEKING_EOF;
+							_state = _persistent?STATE_END:STATE_SEEKING_EOF;
 							_handler.messageComplete(_contentPosition);
 						}
 						// TODO adjust the _buffer to keep unconsumed content
@@ -806,7 +804,7 @@
 						{
 							_chunkLength=0;
 							_chunkPosition=0;
-							_state=STATE_CHUNK_SIZE;
+							_state = STATE_CHUNK_SIZE;
 						}
 						break;
 					}
@@ -822,12 +820,12 @@
 							{
 								if (_eol==HttpTokens.CARRIAGE_RETURN && _buffer.hasContent() && _buffer.peek()==HttpTokens.LINE_FEED)
 									_eol=_buffer.get();
-								_state=_persistent?STATE_END:STATE_SEEKING_EOF;
+								_state = _persistent?STATE_END:STATE_SEEKING_EOF;
 								_handler.messageComplete(_contentPosition);
 								return 1;
 							}
 							else
-								_state=STATE_CHUNK;
+								_state = STATE_CHUNK;
 						}
 						else if (ch <= HttpTokens.SPACE || ch == HttpTokens.SEMI_COLON)
 							_state=STATE_CHUNK_PARAMS;
@@ -852,7 +850,7 @@
 							{
 								if (_eol==HttpTokens.CARRIAGE_RETURN && _buffer.hasContent() && _buffer.peek()==HttpTokens.LINE_FEED)
 									_eol=_buffer.get();
-								_state=_persistent?STATE_END:STATE_SEEKING_EOF;
+								_state = _persistent?STATE_END:STATE_SEEKING_EOF;
 								_handler.messageComplete(_contentPosition);
 								return 1;
 							}
@@ -886,7 +884,7 @@
 						// Close if there is more data than CRLF
 						if (_buffer.length()>2)
 						{
-							_state=STATE_END;
+							_state = STATE_END;
 							_endp.close();
 						}
 						else  
@@ -913,8 +911,8 @@
 		}
 		catch(HttpException e)
 		{
-			_persistent=false;
-			_state=STATE_SEEKING_EOF;
+			_persistent = false;
+			_state = STATE_SEEKING_EOF;
 			throw e;
 		}
 	}
--- a/src/org/eclipse/jetty/server/AbstractHttpConnection.java	Thu Nov 03 04:00:25 2016 -0600
+++ b/src/org/eclipse/jetty/server/AbstractHttpConnection.java	Thu Nov 03 21:02:59 2016 -0600
@@ -98,7 +98,7 @@
 	public volatile Request _request;
 	private volatile ServletInputStream _in;
 
-	protected final HttpGenerator _generator;
+	protected volatile HttpGenerator _generator;
 	final HttpFields _responseFields = new HttpFields();
 	protected volatile Response _response;
 	private volatile Output _out;
@@ -119,7 +119,6 @@
 	{
 		super(endpoint);
 		_connector = connector;
-		_generator = new HttpGenerator(_connector.getResponseBuffers(), endpoint);
 		_server = connector.server;
 		init();
 	}
@@ -129,8 +128,15 @@
 		_parser = new HttpParser(buffers.getHeader(), buffers.getBuffer(), _endp, new RequestHandler());
 	}
 
+	void initGenerator() {
+		if( _generator != null )
+			_generator.shutdown();
+		_generator = new HttpGenerator(_connector.getResponseBuffers(), _endp);
+	}
+
 	private void init() {
 		initParser();
+		initGenerator();
 		_request = new Request(this);
 		_response = new Response(this);
 	}
@@ -231,7 +237,6 @@
 	protected void reset()
 	{
 		_requestFields.clear();
-		_generator.reset();
 		_generator.returnBuffers();// TODO maybe only on unhandle
 		_responseFields.clear();
 		_uri.clear();
@@ -380,7 +385,7 @@
 				LOG.warn("header full: " + e);
 
 				_response.reset();
-				_generator.reset();
+				initGenerator();
 				_generator.setResponse(HttpStatus.INTERNAL_SERVER_ERROR_500,null);
 				_generator.completeHeader(_responseFields,HttpGenerator.LAST);
 				_generator.complete();
@@ -407,7 +412,7 @@
 				LOG.debug("",e);
 
 				_response.reset();
-				_generator.reset();
+				initGenerator();
 				_generator.setResponse(HttpStatus.INTERNAL_SERVER_ERROR_500,null);
 				_generator.completeHeader(_responseFields,HttpGenerator.LAST);
 				_generator.complete();