[jboss-svn-commits] JBL Code SVN: r18557 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 21 15:18:35 EST 2008


Author: tirelli
Date: 2008-02-21 15:18:35 -0500 (Thu, 21 Feb 2008)
New Revision: 18557

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
Log:
JBRULES-1481: stoping action queue recursion

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-02-21 18:18:52 UTC (rev 18556)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-02-21 20:18:35 UTC (rev 18557)
@@ -29,6 +29,7 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Queue;
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.Lock;
@@ -70,7 +71,6 @@
 import org.drools.rule.Rule;
 import org.drools.rule.TimeMachine;
 import org.drools.ruleflow.core.RuleFlowProcess;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
 import org.drools.ruleflow.instance.RuleFlowProcessInstanceFactory;
 import org.drools.spi.Activation;
 import org.drools.spi.AgendaFilter;
@@ -140,7 +140,9 @@
     /** Rule-firing agenda. */
     protected DefaultAgenda                              agenda;
 
-    protected final List                                 actionQueue                                   = new ArrayList();
+    protected final Queue<WorkingMemoryAction>           actionQueue                                   = new LinkedList<WorkingMemoryAction>();
+    
+    protected boolean                                    evaluatingActionQueue;
 
     protected final ReentrantLock                        lock                                          = new ReentrantLock();
 
@@ -1409,17 +1411,15 @@
     }
 
     public void executeQueuedActions() {
-        while ( !actionQueue.isEmpty() ) {
-            final WorkingMemoryAction action = (WorkingMemoryAction) actionQueue.get( 0 );
-            actionQueue.remove( 0 );
-            action.execute( this );
+        if( ! evaluatingActionQueue ) {
+            evaluatingActionQueue = true;
+            WorkingMemoryAction action = null;
+            
+            while ( ( action = actionQueue.poll() ) != null ) {
+                action.execute( this );
+            }
+            evaluatingActionQueue = false;
         }
-        // for ( final Iterator it = this.actionQueue.iterator(); it.hasNext();
-        // ) {
-        // final WorkingMemoryAction action = (WorkingMemoryAction) it.next();
-        // it.remove();
-        // action.execute( this );
-        // }
     }
 
     public void queueWorkingMemoryAction(final WorkingMemoryAction action) {




More information about the jboss-svn-commits mailing list