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 2011/04/08 21:33:43 UTC
svn commit: r1090411 -
/mina/branches/2.0.3/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
Author: elecharny
Date: Fri Apr 8 19:33:43 2011
New Revision: 1090411
URL: http://svn.apache.org/viewvc?rev=1090411&view=rev
Log:
Adapted the patch from DIRMINA-819 to the UDP Acceptor
Modified:
mina/branches/2.0.3/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
Modified: mina/branches/2.0.3/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/branches/2.0.3/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java?rev=1090411&r1=1090410&r2=1090411&view=diff
==============================================================================
--- mina/branches/2.0.3/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java (original)
+++ mina/branches/2.0.3/mina-core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java Fri Apr 8 19:33:43 2011
@@ -35,6 +35,7 @@ import java.util.Queue;
import java.util.Set;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicReference;
import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.buffer.IoBuffer;
@@ -88,7 +89,7 @@ public abstract class AbstractPollingCon
private volatile boolean selectable;
/** The thread responsible of accepting incoming requests */
- private Acceptor acceptor;
+ private AtomicReference<Acceptor> acceptorRef = new AtomicReference<Acceptor>();
private long lastIdleCheckTime;
@@ -365,9 +366,12 @@ public abstract class AbstractPollingCon
flushingSessions.clear();
}
- synchronized (lock) {
- if (acceptor == null) {
- acceptor = new Acceptor();
+ Acceptor acceptor = acceptorRef.get();
+
+ if (acceptor == null) {
+ acceptor = new Acceptor();
+
+ if (acceptorRef.compareAndSet(null, acceptor)) {
executeWorker(acceptor);
}
}
@@ -414,7 +418,7 @@ public abstract class AbstractPollingCon
if (nHandles == 0) {
synchronized (lock) {
if (registerQueue.isEmpty() && cancelQueue.isEmpty()) {
- acceptor = null;
+ acceptorRef.set(null);
break;
}
}