svn commit: r560282 - /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r560282 - /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java

chirino-2
Author: chirino
Date: Fri Jul 27 08:42:31 2007
New Revision: 560282

URL: http://svn.apache.org/viewvc?view=rev&rev=560282
Log:
fix for AMQ-1346.. moved handling the not full event into the queue's task runner to avoid deadlocks and the recursiveness of the pagIn call that was
causing the Illeagal state exception.


Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java?view=diff&rev=560282&r1=560281&r2=560282
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/Queue.java Fri Jul 27 08:42:31 2007
@@ -19,12 +19,10 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.jms.InvalidSelectorException;
 import javax.jms.JMSException;
@@ -340,17 +338,10 @@
     private final LinkedList<Runnable> messagesWaitingForSpace = new LinkedList<Runnable>();
     private final Runnable sendMessagesWaitingForSpaceTask = new Runnable() {
      public void run() {
-    
-     // We may need to do this in async thread since this is run for within a synchronization
-     // that the UsageManager is holding.
-    
-     synchronized( messagesWaitingForSpace ) {
-     while( !usageManager.isFull() && !messagesWaitingForSpace.isEmpty()) {
-     Runnable op = messagesWaitingForSpace.removeFirst();
-     op.run();
-     }
-     }
-    
+ try {
+ taskRunner.wakeup();
+ } catch (InterruptedException e) {
+ }
      };
     };
 
@@ -928,6 +919,12 @@
      * @see org.apache.activemq.thread.Task#iterate()
      */
     public boolean iterate(){
+    
+ while( !usageManager.isFull() && !messagesWaitingForSpace.isEmpty()) {
+ Runnable op = messagesWaitingForSpace.removeFirst();
+ op.run();
+ }
+
         try{
             pageInMessages(false);
          }catch(Exception e){