You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2015/12/24 17:18:52 UTC
[8/8] mina git commit: Used an AtomicLong instead of a volatile long,
as we are incrementing it and it's not guaranteed to be thread safe
Used an AtomicLong instead of a volatile long, as we are incrementing it
and it's not guaranteed to be thread safe
Project: http://git-wip-us.apache.org/repos/asf/mina/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina/commit/5c1f4866
Tree: http://git-wip-us.apache.org/repos/asf/mina/tree/5c1f4866
Diff: http://git-wip-us.apache.org/repos/asf/mina/diff/5c1f4866
Branch: refs/heads/2.0
Commit: 5c1f4866d432adb050e7fcb58a07667e5b208233
Parents: 4aa9309
Author: Emmanuel Lécharny <el...@symas.com>
Authored: Thu Dec 24 17:17:27 2015 +0100
Committer: Emmanuel Lécharny <el...@symas.com>
Committed: Thu Dec 24 17:17:27 2015 +0100
----------------------------------------------------------------------
.../mina/filter/executor/OrderedThreadPoolExecutor.java | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina/blob/5c1f4866/mina-core/src/main/java/org/apache/mina/filter/executor/OrderedThreadPoolExecutor.java
----------------------------------------------------------------------
diff --git a/mina-core/src/main/java/org/apache/mina/filter/executor/OrderedThreadPoolExecutor.java b/mina-core/src/main/java/org/apache/mina/filter/executor/OrderedThreadPoolExecutor.java
index ce9c13d..14c400f 100644
--- a/mina-core/src/main/java/org/apache/mina/filter/executor/OrderedThreadPoolExecutor.java
+++ b/mina-core/src/main/java/org/apache/mina/filter/executor/OrderedThreadPoolExecutor.java
@@ -34,6 +34,7 @@ import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
import org.apache.mina.core.session.AttributeKey;
import org.apache.mina.core.session.DummySession;
@@ -522,7 +523,7 @@ public class OrderedThreadPoolExecutor extends ThreadPoolExecutor {
synchronized (workers) {
long answer = completedTaskCount;
for (Worker w : workers) {
- answer += w.completedTaskCount;
+ answer += w.completedTaskCount.get();
}
return answer;
@@ -620,13 +621,13 @@ public class OrderedThreadPoolExecutor extends ThreadPoolExecutor {
IoEvent event = (IoEvent) task;
IoSession session = event.getSession();
SessionTasksQueue sessionTasksQueue = (SessionTasksQueue) session.getAttribute(TASKS_QUEUE);
- Queue<Runnable> tasksQueue = sessionTasksQueue.tasksQueue;
if (sessionTasksQueue == null) {
return false;
}
boolean removed;
+ Queue<Runnable> tasksQueue = sessionTasksQueue.tasksQueue;
synchronized (tasksQueue) {
removed = tasksQueue.remove(task);
@@ -671,7 +672,7 @@ public class OrderedThreadPoolExecutor extends ThreadPoolExecutor {
private class Worker implements Runnable {
- private volatile long completedTaskCount;
+ private AtomicLong completedTaskCount = new AtomicLong(0);
private Thread thread;
@@ -709,7 +710,7 @@ public class OrderedThreadPoolExecutor extends ThreadPoolExecutor {
} finally {
synchronized (workers) {
workers.remove(this);
- OrderedThreadPoolExecutor.this.completedTaskCount += completedTaskCount;
+ OrderedThreadPoolExecutor.this.completedTaskCount += completedTaskCount.get();
workers.notifyAll();
}
}
@@ -769,7 +770,7 @@ public class OrderedThreadPoolExecutor extends ThreadPoolExecutor {
task.run();
ran = true;
afterExecute(task, null);
- completedTaskCount++;
+ completedTaskCount.incrementAndGet();
} catch (RuntimeException e) {
if (!ran) {
afterExecute(task, e);