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