Author: michiel
Date: 2010-04-20 15:53:27 +0200 (Tue, 20 Apr 2010)
New Revision: 41979

Modified:
   
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/EventManager.java
Log:
sometime more than one broker matched listener, avoid propagating collected 
system events more than once

Modified: 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/EventManager.java
===================================================================
--- 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/EventManager.java
       2010-04-20 13:30:18 UTC (rev 41978)
+++ 
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/core/event/EventManager.java
       2010-04-20 13:53:27 UTC (rev 41979)
@@ -83,7 +83,7 @@
     }
 
 
-    protected void configure(String resource) {
+    protected synchronized void configure(String resource) {
         log.service("Configuring the event manager");
         eventBrokers.clear();
         for (URL url : 
ResourceLoader.getConfigurationRoot().getResourceList(resource)) {
@@ -159,12 +159,15 @@
     /**
      * @param listener
      */
-    public void addEventListener(EventListener listener) {
+    public synchronized void addEventListener(EventListener listener) {
         BrokerIterator i =  findBrokers(listener);
+        boolean notifiedReceived = false;
         while (i.hasNext()) {
             EventBroker broker = i.next();
             if (broker.addListener(listener)) {
-                if (listener instanceof SystemEventListener) {
+                if (! notifiedReceived && listener instanceof 
SystemEventListener) {
+                    log.debug("Notifying " + receivedSystemEvents + " to " + 
listener);
+                    notifiedReceived = true;
                     for (SystemEvent.Collectable se : receivedSystemEvents) {
                         ((SystemEventListener) listener).notify(se);
                     }
@@ -233,6 +236,7 @@
     /**
      * Like {...@link #propagateEvent} but with an extra argument 
'asynchronous'.
      * @param asynchronous If true, execute the propagation in a different 
thread, and don't let this thread wait for the result.
+     * @since MMBase-1.9.3
      */
     public void propagateEvent(final Event event, boolean asynchronous) {
         if (asynchronous) {

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to