[jboss-svn-commits] JBL Code SVN: r33500 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/process/instance/event and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jun 14 18:16:16 EDT 2010


Author: tirelli
Date: 2010-06-14 18:16:16 -0400 (Mon, 14 Jun 2010)
New Revision: 33500

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleFlowGroupTest.java
Log:
JBRULES-2375: fixing deadlock on queued actions

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	2010-06-14 21:36:00 UTC (rev 33499)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2010-06-14 22:16:16 UTC (rev 33500)
@@ -31,6 +31,7 @@
 import java.util.Queue;
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
@@ -174,7 +175,7 @@
 
     protected Queue<WorkingMemoryAction>                         actionQueue;
 
-    protected volatile boolean                                   evaluatingActionQueue;
+    protected AtomicBoolean                                      evaluatingActionQueue;
 
     protected ReentrantLock                                      lock;
 
@@ -353,7 +354,8 @@
             this.initialFactHandle = initialFactHandle;
         }
 
-        this.actionQueue = new LinkedList<WorkingMemoryAction>();
+        this.actionQueue = new ConcurrentLinkedQueue<WorkingMemoryAction>();
+        this.evaluatingActionQueue = new AtomicBoolean( false );
 
         this.addRemovePropertyChangeListenerArgs = new Object[]{this};
         this.workingMemoryEventSupport = workingMemoryEventSupport;
@@ -1459,9 +1461,8 @@
     public void executeQueuedActions() {
         try {
             startOperation();
-            synchronized ( this.actionQueue ) {
-                if ( !this.actionQueue.isEmpty() && !evaluatingActionQueue ) {
-                    evaluatingActionQueue = true;
+            if( evaluatingActionQueue.compareAndSet( false, true ) ) {
+                if ( !this.actionQueue.isEmpty() ) {
                     WorkingMemoryAction action = null;
 
                     while ( (action = actionQueue.poll()) != null ) {
@@ -1472,10 +1473,10 @@
                                                               e );
                         }
                     }
-                    evaluatingActionQueue = false;
                 }
             }
         } finally {
+            evaluatingActionQueue.compareAndSet( true, false );
             endOperation();
         }
     }
@@ -1485,14 +1486,12 @@
     }
 
     public void queueWorkingMemoryAction(final WorkingMemoryAction action) {
-        synchronized ( this.actionQueue ) {
-            try {
-                startOperation();
-                this.actionQueue.add( action );
-                this.agenda.notifyHalt();
-            } finally {
-                endOperation();
-            }
+        try {
+            startOperation();
+            this.actionQueue.add( action );
+            this.agenda.notifyHalt();
+        } finally {
+            endOperation();
         }
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java	2010-06-14 21:36:00 UTC (rev 33499)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/event/DefaultSignalManager.java	2010-06-14 22:16:16 UTC (rev 33500)
@@ -52,7 +52,6 @@
 	
 	public void signalEvent(String type, Object event) {
 		((InternalWorkingMemory) workingMemory).queueWorkingMemoryAction(new SignalAction(type, event));
-		workingMemory.fireAllRules();
 	}
 	
 	public void internalSignalEvent(String type, Object event) {

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleFlowGroupTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleFlowGroupTest.java	2010-06-14 21:36:00 UTC (rev 33499)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleFlowGroupTest.java	2010-06-14 22:16:16 UTC (rev 33500)
@@ -78,6 +78,7 @@
 
             public void evaluate(KnowledgeHelper knowledgeHelper,
                                  WorkingMemory workingMemory) {
+                System.out.println( knowledgeHelper.getRule() );
                 list.add( knowledgeHelper.getRule() );
             }
 



More information about the jboss-svn-commits mailing list