Author: markt
Date: Tue Sep 15 11:11:51 2015
New Revision: 1703151

URL: http://svn.apache.org/r1703151
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58381
The list of events is accessed by multiple threads so use a thread safe Deque 
implementation.
Fix a Javadoc comment
Simplify the code a little

Modified:
    tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java

Modified: 
tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java?rev=1703151&r1=1703150&r2=1703151&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java 
Tue Sep 15 11:11:51 2015
@@ -27,9 +27,10 @@ import java.nio.channels.SelectionKey;
 import java.nio.channels.Selector;
 import java.nio.channels.ServerSocketChannel;
 import java.nio.channels.SocketChannel;
+import java.util.Deque;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.Set;
+import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.catalina.tribes.io.ObjectReader;
@@ -56,7 +57,7 @@ public class NioReceiver extends Receive
     private ServerSocketChannel serverChannel = null;
     private DatagramChannel datagramChannel = null;
 
-    protected final LinkedList<Runnable> events = new LinkedList<>();
+    protected final Deque<Runnable> events = new ConcurrentLinkedDeque<>();
 
     public NioReceiver() {
     }
@@ -68,8 +69,10 @@ public class NioReceiver extends Receive
     }
 
     /**
-     * start cluster receiver
-     * @throws IOException
+     * Start cluster receiver.
+     *
+     * @throws IOException If the receiver fails to start
+     *
      * @see org.apache.catalina.tribes.ChannelReceiver#start()
      */
     @Override
@@ -141,25 +144,33 @@ public class NioReceiver extends Receive
 
     public void addEvent(Runnable event) {
         Selector selector = this.selector.get();
-        if ( selector != null ) {
+        if (selector != null) {
             synchronized (events) {
                 events.add(event);
             }
-            if ( log.isTraceEnabled() ) log.trace("Adding event to 
selector:"+event);
-            if ( isListening() ) selector.wakeup();
+            if (log.isTraceEnabled()) {
+                log.trace("Adding event to selector:" + event);
+            }
+            if (isListening()) {
+                selector.wakeup();
+            }
         }
     }
 
     public void events() {
-        if ( events.size() == 0 ) return;
+        if (events.size() == 0) {
+            return;
+        }
         synchronized (events) {
             Runnable r = null;
-            while ( (events.size() > 0) && (r = events.removeFirst()) != null 
) {
+            while ((r = events.pollFirst()) != null ) {
                 try {
-                    if ( log.isTraceEnabled() ) log.trace("Processing event in 
selector:"+r);
+                    if (log.isTraceEnabled()) {
+                        log.trace("Processing event in selector:" + r);
+                    }
                     r.run();
-                } catch ( Exception x ) {
-                    log.error("",x);
+                } catch (Exception x) {
+                    log.error("", x);
                 }
             }
             events.clear();



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to