[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