Author: markt Date: Wed Jan 16 22:40:40 2013 New Revision: 1434456 URL: http://svn.apache.org/viewvc?rev=1434456&view=rev Log: APR/native refactoring - Pull up comet flag to SocketWrappoer - Remove dedicated Comet Poller
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1434456&r1=1434455&r2=1434456&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Wed Jan 16 22:40:40 2013 @@ -294,7 +294,8 @@ public class Http11AprProtocol extends A } else if (processor.isComet()) { // Comet if (proto.endpoint.isRunning()) { - ((AprEndpoint) proto.endpoint).getCometPoller().add( + socket.setComet(true); + ((AprEndpoint) proto.endpoint).getPoller().add( socket.getSocket().longValue(), proto.endpoint.getSoTimeout(), true, false); } else { Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1434456&r1=1434455&r2=1434456&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Wed Jan 16 22:40:40 2013 @@ -195,15 +195,6 @@ public class AprEndpoint extends Abstrac /** - * The socket poller used for Comet support. - */ - protected Poller cometPoller = null; - public Poller getCometPoller() { - return cometPoller; - } - - - /** * The static file sender. */ protected Sendfile sendfile = null; @@ -600,22 +591,13 @@ public class AprEndpoint extends Abstrac initializeConnectionLatch(); // Start poller thread - poller = new Poller(false); + poller = new Poller(); poller.init(); Thread pollerThread = new Thread(poller, getName() + "-Poller"); pollerThread.setPriority(threadPriority); pollerThread.setDaemon(true); pollerThread.start(); - // Start comet poller thread - cometPoller = new Poller(true); - cometPoller.init(); - Thread cometPollerThread = - new Thread(cometPoller, getName() + "-CometPoller"); - cometPollerThread.setPriority(threadPriority); - cometPollerThread.setDaemon(true); - cometPollerThread.start(); - // Start sendfile thread if (useSendfile) { sendfile = new Sendfile(); @@ -681,12 +663,6 @@ public class AprEndpoint extends Abstrac } poller = null; connections.clear(); - try { - cometPoller.destroy(); - } catch (Exception e) { - // Ignore - } - cometPoller = null; if (useSendfile) { try { sendfile.destroy(); @@ -935,7 +911,6 @@ public class AprEndpoint extends Abstrac return log; } - // --------------------------------------------------- Acceptor Inner Class /** * The background thread that listens for incoming TCP/IP connections and @@ -1272,11 +1247,6 @@ public class AprEndpoint extends Abstrac protected SocketList localAddList = null; /** - * Event mode flag. - */ - protected boolean event = true; - - /** * Structure used for storing timeouts. */ protected SocketTimeouts timeouts = null; @@ -1294,9 +1264,6 @@ public class AprEndpoint extends Abstrac protected int connectionCount = 0; public int getConnectionCount() { return connectionCount; } - public Poller(boolean event) { - this.event = event; - } /** * Create the poller. With some versions of APR, the maximum poller size @@ -1371,7 +1338,9 @@ public class AprEndpoint extends Abstrac // Close all sockets in the add queue SocketInfo info = addList.get(); while (info != null) { - if (!event || (event && !processSocket( + boolean comet = + connections.get(Long.valueOf(info.socket)).isComet(); + if (!comet || (comet && !processSocket( info.socket, SocketStatus.STOP))) { destroySocket(info.socket); } @@ -1383,7 +1352,9 @@ public class AprEndpoint extends Abstrac int rv = Poll.pollset(pollers[i], desc); if (rv > 0) { for (int n = 0; n < rv; n++) { - if (!event || (event && !processSocket( + boolean comet = connections.get( + Long.valueOf(desc[n*2+1])).isComet(); + if (!comet || (comet && !processSocket( desc[n*2+1], SocketStatus.STOP))) { destroySocket(desc[n*2+1]); } @@ -1423,7 +1394,9 @@ public class AprEndpoint extends Abstrac } if (!ok) { // Can't do anything: close the socket right away - if (!event || (event && !processSocket( + boolean comet = connections.get( + Long.valueOf(socket)).isComet(); + if (!comet || (comet && !processSocket( socket, SocketStatus.ERROR))) { destroySocket(socket); } @@ -1465,7 +1438,9 @@ public class AprEndpoint extends Abstrac } if (!ok) { // Can't do anything: close the socket right away - if (!event || (event && !processSocket( + boolean comet = connections.get( + Long.valueOf(socket)).isComet(); + if (!comet || (comet && !processSocket( socket, SocketStatus.ERROR))) { destroySocket(socket); } @@ -1524,7 +1499,9 @@ public class AprEndpoint extends Abstrac long socket = timeouts.check(date); while (socket != 0) { removeFromPoller(socket); - if (!event || (event && !processSocket( + boolean comet = connections.get( + Long.valueOf(socket)).isComet(); + if (!comet || (comet && !processSocket( socket, SocketStatus.TIMEOUT))) { destroySocket(socket); } @@ -1539,7 +1516,7 @@ public class AprEndpoint extends Abstrac @Override public String toString() { StringBuffer buf = new StringBuffer(); - buf.append("Poller event=[").append(event).append("]"); + buf.append("Poller"); long[] res = new long[actualPollerSize * 2]; for (int i = 0; i < pollers.length; i++) { int count = Poll.pollset(pollers[i], res); @@ -1602,8 +1579,10 @@ public class AprEndpoint extends Abstrac SocketInfo info = localAddList.get(); while (info != null) { if (info.read() || info.write()) { + boolean comet = connections.get( + Long.valueOf(info.socket)).isComet(); // Store timeout - if (event) { + if (comet) { removeFromPoller(info.socket); } int events = @@ -1612,7 +1591,7 @@ public class AprEndpoint extends Abstrac if (!addToPoller(info.socket, events)) { // Can't do anything: close the socket right // away - if (!event || (event && !processSocket( + if (!comet || (comet && !processSocket( info.socket, SocketStatus.ERROR))) { destroySocket(info.socket); } @@ -1650,7 +1629,7 @@ public class AprEndpoint extends Abstrac for (int n = 0; n < rv; n++) { timeouts.remove(desc[n*2+1]); // Check for failed sockets and hand this socket off to a worker - if (event) { + if (connections.get(Long.valueOf(desc[n*2+1])).isComet()) { // Event processes either a read or a write depending on what the poller returns if (((desc[n*2] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP) || ((desc[n*2] & Poll.APR_POLLERR) == Poll.APR_POLLERR) Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1434456&r1=1434455&r2=1434456&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Wed Jan 16 22:40:40 2013 @@ -945,7 +945,7 @@ public class NioEndpoint extends Abstrac try { if ( key == null ) return;//nothing to do KeyAttachment ka = (KeyAttachment) key.attachment(); - if (ka != null && ka.getComet() && status != null) { + if (ka != null && ka.isComet() && status != null) { ka.setComet(false);//to avoid a loop if (status == SocketStatus.TIMEOUT ) { if (processSocket(ka.getChannel(), status, true)) { @@ -1122,7 +1122,7 @@ public class NioEndpoint extends Abstrac if (sk.isReadable() || sk.isWritable() ) { if ( attachment.getSendfileData() != null ) { processSendfile(sk,attachment, false); - } else if ( attachment.getComet() ) { + } else if ( attachment.isComet() ) { //check if thread is available if ( isWorkerAvailable() ) { //set interest ops to 0 so we don't get multiple @@ -1334,7 +1334,7 @@ public class NioEndpoint extends Abstrac ka.interestOps(0); //avoid duplicate timeout calls cancelledKey(key, SocketStatus.TIMEOUT); } - } else if (ka.isAsync() || ka.getComet()) { + } else if (ka.isAsync() || ka.isComet()) { if (close) { key.interestOps(0); ka.interestOps(0); //avoid duplicate stop calls @@ -1379,7 +1379,7 @@ public class NioEndpoint extends Abstrac this.socket = channel; this.poller = poller; lastAccess = System.currentTimeMillis(); - comet = false; + setComet(false); timeout = soTimeout; error = false; lastRegistered = 0; @@ -1414,8 +1414,6 @@ public class NioEndpoint extends Abstrac public Poller getPoller() { return poller;} public void setPoller(Poller poller){this.poller = poller;} - public void setComet(boolean comet) { this.comet = comet; } - public boolean getComet() { return comet; } public void setCometNotify(boolean notify) { this.cometNotify = notify; } public boolean getCometNotify() { return cometNotify; } public NioChannel getChannel() { return getSocket();} @@ -1452,7 +1450,6 @@ public class NioEndpoint extends Abstrac private Poller poller = null; private int interestOps = 0; - private boolean comet = false; private boolean cometNotify = false; private CountDownLatch readLatch = null; private CountDownLatch writeLatch = null; Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java?rev=1434456&r1=1434455&r2=1434456&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapper.java Wed Jan 16 22:40:40 2013 @@ -25,6 +25,7 @@ public class SocketWrapper<E> { protected boolean error = false; protected long lastRegistered = 0; protected volatile int keepAliveLeft = 100; + private boolean comet = false; protected boolean async = false; protected boolean keptAlive = false; private boolean upgraded = false; @@ -51,6 +52,8 @@ public class SocketWrapper<E> { return socket; } + public boolean isComet() { return comet; } + public void setComet(boolean comet) { this.comet = comet; } public boolean isAsync() { return async; } public void setAsync(boolean async) { this.async = async; } public boolean isUpgraded() { return upgraded; } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org