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