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);