[jboss-svn-commits] JBL Code SVN: r30163 - 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
Sun Nov 15 19:41:34 EST 2009
Author: mark.proctor at jboss.com
Date: 2009-11-15 19:41:33 -0500 (Sun, 15 Nov 2009)
New Revision: 30163
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
Log:
JBRULES-2340 FireUntilHalt has race condition when using different entry points
-added temporary fix, that adds a boolean flag to check of missed notifications. Clunky :(
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2009-11-16 00:20:39 UTC (rev 30162)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2009-11-16 00:41:33 UTC (rev 30163)
@@ -1099,13 +1099,15 @@
fireUntilHalt( null );
}
+ private AtomicBoolean missedNotifyAll = new AtomicBoolean(false);
+
public void fireUntilHalt(final AgendaFilter agendaFilter) {
this.halt.set( false );
while ( continueFiring( -1 ) ) {
boolean fired = fireNextItem( agendaFilter );
fired = fired || !((AbstractWorkingMemory) this.workingMemory).getActionQueue().isEmpty();
this.workingMemory.executeQueuedActions();
- if ( !fired ) {
+ if ( !fired && !missedNotifyAll.get()) {
try {
synchronized ( this.halt ) {
this.halt.wait();
@@ -1113,6 +1115,7 @@
} catch ( InterruptedException e ) {
this.halt.set( true );
}
+ this.missedNotifyAll.set( false );
} else {
this.workingMemory.executeQueuedActions();
}
@@ -1145,6 +1148,7 @@
public void notifyHalt() {
synchronized ( this.halt ) {
+ this.missedNotifyAll.set( true );
this.halt.notifyAll();
}
}
More information about the jboss-svn-commits
mailing list