You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/01/16 23:40:41 UTC

svn commit: r1434456 - in /tomcat/trunk/java/org/apache: coyote/http11/Http11AprProtocol.java tomcat/util/net/AprEndpoint.java tomcat/util/net/NioEndpoint.java tomcat/util/net/SocketWrapper.java

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org