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