You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2011/11/25 16:27:07 UTC
svn commit: r1206214 -
/james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/executor/FutureSPFResult.java
Author: norman
Date: Fri Nov 25 15:27:06 2011
New Revision: 1206214
URL: http://svn.apache.org/viewvc?rev=1206214&view=rev
Log:
Don't hold the lock while executing the listeners
Modified:
james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/executor/FutureSPFResult.java
Modified: james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/executor/FutureSPFResult.java
URL: http://svn.apache.org/viewvc/james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/executor/FutureSPFResult.java?rev=1206214&r1=1206213&r2=1206214&view=diff
==============================================================================
--- james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/executor/FutureSPFResult.java (original)
+++ james/jspf/trunk/resolver/src/main/java/org/apache/james/jspf/executor/FutureSPFResult.java Fri Nov 25 15:27:06 2011
@@ -20,6 +20,7 @@
package org.apache.james.jspf.executor;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import org.apache.james.jspf.core.Logger;
@@ -53,29 +54,35 @@ public class FutureSPFResult extends SPF
* @param session
*
*/
- public synchronized void setSPFResult(SPFSession session) {
- if (!isReady) {
- setSPFSession(session);
- isReady = true;
- if (waiters > 0) {
- notifyAll();
+ public void setSPFResult(SPFSession session) {
+ Iterator<IFutureSPFResultListener> listenerIt = null;
+ synchronized (this) {
+ if (!isReady) {
+ setSPFSession(session);
+ isReady = true;
+ if (waiters > 0) {
+ notifyAll();
+ }
+ if (listeners != null) {
+ listenerIt = listeners.iterator();
+ listeners = null;
+ }
}
- if (listeners != null) {
- for (IFutureSPFResultListener listener : listeners) {
- try {
- listener.onSPFResult(this);
- } catch (Throwable e) {
- // catch exception. See JSPF-95
- if (log != null) {
- log.warn("An exception was thrown by the listener " + listener, e);
- }
+ }
+ if (listenerIt != null) {
+ while (listenerIt.hasNext()) {
+ IFutureSPFResultListener listener = listenerIt.next();
+ try {
+ listener.onSPFResult(this);
+ } catch (Throwable e) {
+ // catch exception. See JSPF-95
+ if (log != null) {
+ log.warn("An exception was thrown by the listener " + listener, e);
}
}
}
- listeners = null;
+ listenerIt = null;
}
-
-
}
/**
@@ -166,7 +173,7 @@ public class FutureSPFResult extends SPF
* @param listener
*/
public synchronized void removeListener(IFutureSPFResultListener listener) {
- if (listeners != null) {
+ if (!isReady && listeners != null) {
listeners.remove(listener);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org