Mercurial Hosting > luan
diff src/org/eclipse/jetty/server/AsyncHttpConnection.java @ 963:4b6216fa9cec
replace SelectChannelEndPoint._state with isDispatched
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 14 Oct 2016 00:15:28 -0600 |
parents | 1094975d013b |
children | 866f2e801618 |
line wrap: on
line diff
--- a/src/org/eclipse/jetty/server/AsyncHttpConnection.java Thu Oct 13 22:56:15 2016 -0600 +++ b/src/org/eclipse/jetty/server/AsyncHttpConnection.java Fri Oct 14 00:15:28 2016 -0600 @@ -37,159 +37,159 @@ */ public class AsyncHttpConnection extends AbstractHttpConnection implements AsyncConnection { - private final static int NO_PROGRESS_INFO = Integer.getInteger("org.mortbay.jetty.NO_PROGRESS_INFO",100); - private final static int NO_PROGRESS_CLOSE = Integer.getInteger("org.mortbay.jetty.NO_PROGRESS_CLOSE",200); + private final static int NO_PROGRESS_INFO = Integer.getInteger("org.mortbay.jetty.NO_PROGRESS_INFO",100); + private final static int NO_PROGRESS_CLOSE = Integer.getInteger("org.mortbay.jetty.NO_PROGRESS_CLOSE",200); - private static final Logger LOG = LoggerFactory.getLogger(AsyncHttpConnection.class); - private int _total_no_progress; - private final AsyncEndPoint _asyncEndp; - private boolean _readInterested = true; + private static final Logger LOG = LoggerFactory.getLogger(AsyncHttpConnection.class); + private int _total_no_progress; + private final AsyncEndPoint _asyncEndp; + private boolean _readInterested = true; - public AsyncHttpConnection(Connector connector, EndPoint endpoint, Server server) - { - super(connector,endpoint,server); - _asyncEndp=(AsyncEndPoint)endpoint; - } + public AsyncHttpConnection(Connector connector, EndPoint endpoint, Server server) + { + super(connector,endpoint,server); + _asyncEndp=(AsyncEndPoint)endpoint; + } - @Override - public Connection handle() throws IOException - { - Connection connection = this; - boolean some_progress=false; - boolean progress=true; + @Override + public Connection handle() throws IOException + { + Connection connection = this; + boolean some_progress = false; + boolean progress = true; - try - { - setCurrentConnection(this); + try + { + setCurrentConnection(this); - // While progress and the connection has not changed - while (progress && connection==this) - { - progress=false; - try - { - // Parse more input - if (!_parser.isComplete() && _parser.parseAvailable()) - progress=true; + // While progress and the connection has not changed + while (progress && connection==this) + { + progress=false; + try + { + // Parse more input + if (!_parser.isComplete() && _parser.parseAvailable()) + progress = true; - // Generate more output - if (_generator.isCommitted() && !_generator.isComplete() && !_endp.isOutputShutdown()) - if (_generator.flushBuffer()>0) - progress=true; + // Generate more output + if (_generator.isCommitted() && !_generator.isComplete() && !_endp.isOutputShutdown()) + if (_generator.flushBuffer()>0) + progress = true; - // Flush output - _endp.flush(); + // Flush output + _endp.flush(); - // Has any IO been done by the endpoint itself since last loop - if (_asyncEndp.hasProgressed()) - progress=true; - } - catch (HttpException e) - { - if (LOG.isDebugEnabled()) - { - LOG.debug("uri="+_uri); - LOG.debug("fields="+_requestFields); - LOG.debug("",e); - } - progress=true; - _generator.sendError(e.getStatus(), e.getReason(), null, true); - } - finally - { - some_progress|=progress; - // Is this request/response round complete and are fully flushed? - boolean parserComplete = _parser.isComplete(); - boolean generatorComplete = _generator.isComplete(); - boolean complete = parserComplete && generatorComplete; - if (parserComplete) - { - if (generatorComplete) - { - // Reset the parser/generator - progress=true; + // Has any IO been done by the endpoint itself since last loop + if (_asyncEndp.hasProgressed()) + progress = true; + } + catch (HttpException e) + { + if (LOG.isDebugEnabled()) + { + LOG.debug("uri="+_uri); + LOG.debug("fields="+_requestFields); + LOG.debug("",e); + } + progress = true; + _generator.sendError(e.getStatus(), e.getReason(), null, true); + } + finally + { + some_progress |= progress; + // Is this request/response round complete and are fully flushed? + boolean parserComplete = _parser.isComplete(); + boolean generatorComplete = _generator.isComplete(); + boolean complete = parserComplete && generatorComplete; + if (parserComplete) + { + if (generatorComplete) + { + // Reset the parser/generator + progress=true; - // look for a switched connection instance? - if (_response.getStatus()==HttpStatus.SWITCHING_PROTOCOLS_101) - { - Connection switched=(Connection)_request.getAttribute("org.eclipse.jetty.io.Connection"); - if (switched!=null) - connection=switched; - } + // look for a switched connection instance? + if (_response.getStatus()==HttpStatus.SWITCHING_PROTOCOLS_101) + { + Connection switched=(Connection)_request.getAttribute("org.eclipse.jetty.io.Connection"); + if (switched!=null) + connection=switched; + } - reset(); + reset(); - // TODO Is this still required? - if (!_generator.isPersistent() && !_endp.isOutputShutdown()) - { - LOG.warn("Safety net oshut!!! IF YOU SEE THIS, PLEASE RAISE BUGZILLA"); - _endp.shutdownOutput(); - } - } - else - { - // We have finished parsing, but not generating so - // we must not be interested in reading until we - // have finished generating and we reset the generator - _readInterested = false; - LOG.debug("Disabled read interest while writing response {}", _endp); - } - } - } - } - } - finally - { - setCurrentConnection(null); + // TODO Is this still required? + if (!_generator.isPersistent() && !_endp.isOutputShutdown()) + { + LOG.warn("Safety net oshut!!! IF YOU SEE THIS, PLEASE RAISE BUGZILLA"); + _endp.shutdownOutput(); + } + } + else + { + // We have finished parsing, but not generating so + // we must not be interested in reading until we + // have finished generating and we reset the generator + _readInterested = false; + LOG.debug("Disabled read interest while writing response {}", _endp); + } + } + } + } + } + finally + { + setCurrentConnection(null); - // return buffers - _parser.returnBuffers(); - _generator.returnBuffers(); + // return buffers + _parser.returnBuffers(); + _generator.returnBuffers(); - // Safety net to catch spinning - if (some_progress) - _total_no_progress=0; - else - { - _total_no_progress++; - if (NO_PROGRESS_INFO>0 && _total_no_progress%NO_PROGRESS_INFO==0 && (NO_PROGRESS_CLOSE<=0 || _total_no_progress< NO_PROGRESS_CLOSE)) - LOG.info("EndPoint making no progress: "+_total_no_progress+" "+_endp+" "+this); - if (NO_PROGRESS_CLOSE>0 && _total_no_progress==NO_PROGRESS_CLOSE) - { - LOG.warn("Closing EndPoint making no progress: "+_total_no_progress+" "+_endp+" "+this); - if (_endp instanceof SelectChannelEndPoint) - ((SelectChannelEndPoint)_endp).getChannel().close(); - } - } - } - return connection; - } + // Safety net to catch spinning + if (some_progress) + _total_no_progress = 0; + else + { + _total_no_progress++; + if (NO_PROGRESS_INFO>0 && _total_no_progress%NO_PROGRESS_INFO==0 && (NO_PROGRESS_CLOSE<=0 || _total_no_progress< NO_PROGRESS_CLOSE)) + LOG.info("EndPoint making no progress: "+_total_no_progress+" "+_endp+" "+this); + if (NO_PROGRESS_CLOSE>0 && _total_no_progress==NO_PROGRESS_CLOSE) + { + LOG.warn("Closing EndPoint making no progress: "+_total_no_progress+" "+_endp+" "+this); + if (_endp instanceof SelectChannelEndPoint) + ((SelectChannelEndPoint)_endp).getChannel().close(); + } + } + } + return connection; + } - public void onInputShutdown() throws IOException - { - // If we don't have a committed response and we are not suspended - if (_generator.isIdle()) - { - // then no more can happen, so close. - _endp.close(); - } + public void onInputShutdown() throws IOException + { + // If we don't have a committed response and we are not suspended + if (_generator.isIdle()) + { + // then no more can happen, so close. + _endp.close(); + } - // Make idle parser seek EOF - if (_parser.isIdle()) - _parser.setPersistent(false); - } + // Make idle parser seek EOF + if (_parser.isIdle()) + _parser.setPersistent(false); + } - @Override - public void reset() - { - _readInterested = true; - LOG.debug("Enabled read interest {}", _endp); - super.reset(); - } + @Override + public void reset() + { + _readInterested = true; + LOG.debug("Enabled read interest {}", _endp); + super.reset(); + } - @Override - public boolean isSuspended() - { - return !_readInterested || super.isSuspended(); - } + @Override + public boolean isSuspended() + { + return !_readInterested || super.isSuspended(); + } }