Author: michiel
Date: 2010-04-20 15:54:54 +0200 (Tue, 20 Apr 2010)
New Revision: 41980

Modified:
   mmbase/trunk/utils/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/trunk/utils/src/main/java/org/mmbase/core/event/EventManager.java
===================================================================
--- mmbase/trunk/utils/src/main/java/org/mmbase/core/event/EventManager.java    
2010-04-20 13:53:27 UTC (rev 41979)
+++ mmbase/trunk/utils/src/main/java/org/mmbase/core/event/EventManager.java    
2010-04-20 13:54:54 UTC (rev 41980)
@@ -105,7 +105,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)) {
@@ -181,12 +181,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);
                     }
@@ -255,6 +258,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