[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