Author: markt
Date: Tue Dec 4 21:37:03 2012
New Revision: 1417199
URL: http://svn.apache.org/viewvc?rev=1417199&view=rev
Log:
Fix FindBugs warnings
volatile int -> AtomicIntger so operations are actually atomic
Modified:
tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
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=1417199&r1=1417198&r2=1417199&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Tue Dec 4
21:37:03 2012
@@ -25,6 +25,7 @@ import java.util.Iterator;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -1134,7 +1135,7 @@ public class AprEndpoint extends Abstrac
private int[] addSocketTimeout;
private int[] addSocketFlags;
- private volatile int addCount = 0;
+ private AtomicInteger addCount = new AtomicInteger(0);
private boolean comet = true;
@@ -1167,7 +1168,7 @@ public class AprEndpoint extends Abstrac
addSocket = new long[size];
addSocketTimeout = new int[size];
addSocketFlags = new int[size];
- addCount = 0;
+ addCount.set(0);
}
/**
@@ -1176,7 +1177,7 @@ public class AprEndpoint extends Abstrac
@Override
public void destroy() {
// Close all sockets in the add queue
- for (int i = 0; i < addCount; i++) {
+ for (int i = 0; i < addCount.get(); i++) {
if (comet) {
processSocket(addSocket[i], SocketStatus.STOP);
} else {
@@ -1187,7 +1188,7 @@ public class AprEndpoint extends Abstrac
closePollset(connectionPollset);
Pool.destroy(pool);
keepAliveCount = 0;
- addCount = 0;
+ addCount.set(0);
try {
while (this.isAlive()) {
this.interrupt();
@@ -1231,7 +1232,7 @@ public class AprEndpoint extends Abstrac
synchronized (this) {
// Add socket to the list. Newly added sockets will wait
// at most for pollTime before being polled
- if (addCount >= addSocket.length) {
+ if (addCount.get() >= addSocket.length) {
// Can't do anything: close the socket right away
if (comet) {
processSocket(socket, SocketStatus.ERROR);
@@ -1240,10 +1241,10 @@ public class AprEndpoint extends Abstrac
}
return;
}
- addSocket[addCount] = socket;
- addSocketTimeout[addCount] = timeout;
- addSocketFlags[addCount] = flags;
- addCount++;
+ addSocket[addCount.get()] = socket;
+ addSocketTimeout[addCount.get()] = timeout;
+ addSocketFlags[addCount.get()] = flags;
+ addCount.incrementAndGet();
// TODO: interrupt poll ?
this.notify();
}
@@ -1271,9 +1272,9 @@ public class AprEndpoint extends Abstrac
if (!running) {
break;
}
- if (keepAliveCount < 1 && addCount < 1) {
+ if (keepAliveCount < 1 && addCount.get() < 1) {
synchronized (this) {
- while (keepAliveCount < 1 && addCount < 1 && running) {
+ while (keepAliveCount < 1 && addCount.get() < 1 &&
running) {
// Reset maintain time.
maintainTime = 0;
try {
@@ -1290,11 +1291,11 @@ public class AprEndpoint extends Abstrac
}
try {
// Add sockets which are waiting to the poller
- if (addCount > 0) {
+ if (addCount.get() > 0) {
synchronized (this) {
int successCount = 0;
try {
- for (int i = (addCount - 1); i >= 0; i--) {
+ for (int i = (addCount.get() - 1); i >= 0;
i--) {
int timeout = addSocketTimeout[i];
if (timeout > 0) {
// Convert milliseconds to microseconds
@@ -1316,7 +1317,7 @@ public class AprEndpoint extends Abstrac
}
} finally {
keepAliveCount += successCount;
- addCount = 0;
+ addCount.set(0);
}
}
}
@@ -1437,11 +1438,11 @@ public class AprEndpoint extends Abstrac
protected long[] desc;
protected HashMap<Long, SendfileData> sendfileData;
- protected volatile int sendfileCount;
- public int getSendfileCount() { return sendfileCount; }
+ protected AtomicInteger sendfileCount = new AtomicInteger(0);
+ public int getSendfileCount() { return sendfileCount.get(); }
protected ArrayList<SendfileData> addS;
- protected volatile int addCount;
+ protected AtomicInteger addCount = new AtomicInteger(0);
/**
* Create the sendfile poller. With some versions of APR, the maximum
poller size will
@@ -1462,7 +1463,7 @@ public class AprEndpoint extends Abstrac
desc = new long[size * 2];
sendfileData = new HashMap<>(size);
addS = new ArrayList<>();
- addCount = 0;
+ addCount.set(0);
}
/**
@@ -1471,7 +1472,7 @@ public class AprEndpoint extends Abstrac
@Override
public void destroy() {
// Close any socket remaining in the add queue
- addCount = 0;
+ addCount.set(0);
for (int i = (addS.size() - 1); i >= 0; i--) {
SendfileData data = addS.get(i);
destroySocket(data.socket);
@@ -1559,7 +1560,7 @@ public class AprEndpoint extends Abstrac
// at most for pollTime before being polled
synchronized (this) {
addS.add(data);
- addCount++;
+ addCount.incrementAndGet();
this.notify();
}
return false;
@@ -1573,7 +1574,7 @@ public class AprEndpoint extends Abstrac
protected void remove(SendfileData data) {
int rv = Poll.remove(sendfilePollset, data.socket);
if (rv == Status.APR_SUCCESS) {
- sendfileCount--;
+ sendfileCount.decrementAndGet();
}
sendfileData.remove(Long.valueOf(data.socket));
}
@@ -1601,9 +1602,9 @@ public class AprEndpoint extends Abstrac
if (!running) {
break;
}
- if (sendfileCount < 1 && addCount < 1) {
+ if (sendfileCount.get() < 1 && addCount.get() < 1) {
synchronized (this) {
- while (sendfileCount < 1 && addS.size() < 1 &&
running) {
+ while (sendfileCount.get() < 1 && addS.size() < 1 &&
running) {
// Reset maintain time.
maintainTime = 0;
try {
@@ -1620,7 +1621,7 @@ public class AprEndpoint extends Abstrac
}
try {
// Add socket to the poller
- if (addCount > 0) {
+ if (addCount.get() > 0) {
synchronized (this) {
int successCount = 0;
try {
@@ -1637,9 +1638,9 @@ public class AprEndpoint extends Abstrac
}
}
} finally {
- sendfileCount += successCount;
+ sendfileCount.addAndGet(successCount);
addS.clear();
- addCount = 0;
+ addCount.set(0);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]