[jboss-svn-commits] JBL Code SVN: r35744 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/common and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Oct 26 11:20:39 EDT 2010


Author: tirelli
Date: 2010-10-26 11:20:38 -0400 (Tue, 26 Oct 2010)
New Revision: 35744

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
Log:
JBRULES-2756: fixing busy wait in fireUntilHalt()

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2010-10-26 14:46:16 UTC (rev 35743)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2010-10-26 15:20:38 UTC (rev 35744)
@@ -6842,7 +6842,12 @@
         ep.insert( new Person( "darth" ) );
         Thread.currentThread().sleep( 500 );
         ksession.halt();
-        t1.stop();
+        t1.join(5000);
+        boolean alive = t1.isAlive();
+        if( alive ) {
+            t1.interrupt();
+        }
+        assertFalse( "Thread should have died!", alive );
         assertEquals( 1,
                       list.size() );
     }

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	2010-10-26 14:46:16 UTC (rev 35743)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2010-10-26 15:20:38 UTC (rev 35744)
@@ -36,9 +36,7 @@
 import org.drools.core.util.ClassUtils;
 import org.drools.core.util.LinkedListNode;
 import org.drools.event.rule.ActivationCancelledCause;
-import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.reteoo.LeftTuple;
-import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.rule.Declaration;
 import org.drools.rule.GroupElement;
 import org.drools.rule.Rule;
@@ -372,9 +370,7 @@
         }
 
         // making sure we re-evaluate agenda in case we are waiting for activations
-        synchronized ( this.halt ) {
-            this.halt.notifyAll();
-        }
+        notifyHalt();
         return true;
 
     }
@@ -1040,23 +1036,20 @@
         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 && !missedNotifyAll.get()) {
+            if ( !fired ) {
                 try {
                     synchronized ( this.halt ) {
-                        this.halt.wait();
+                        if( !this.halt.get() ) this.halt.wait();
                     }
                 } catch ( InterruptedException e ) {
                     this.halt.set( true );
                 }
-                this.missedNotifyAll.set( false );
             } else {
                 this.workingMemory.executeQueuedActions();
             }
@@ -1089,7 +1082,6 @@
 
     public void notifyHalt() {
         synchronized ( this.halt ) {
-            this.missedNotifyAll.set( true );
             this.halt.notifyAll();
         }
     }



More information about the jboss-svn-commits mailing list