Author: chirino
Date: Fri Jun 30 08:06:05 2006
New Revision: 418306

URL: http://svn.apache.org/viewvc?rev=418306&view=rev
Log:
If the server and client are configured to disable async dispatch, the servlet 
could cause a deadlock due to the way
it was syncing on the WebClient     

Modified:
    
incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java

Modified: 
incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java?rev=418306&r1=418305&r2=418306&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
 (original)
+++ 
incubator/activemq/trunk/activemq-web/src/main/java/org/apache/activemq/web/MessageListenerServlet.java
 Fri Jun 30 08:06:05 2006
@@ -435,25 +435,25 @@
             lastAccess=System.currentTimeMillis();
         }
         
-        public void setContinuation(Continuation continuation) {
-            synchronized (client) {
-                this.continuation = continuation;
-            }
+        synchronized public void setContinuation(Continuation continuation) {
+            this.continuation = continuation;
         }
 
-        public void onMessageAvailable(MessageConsumer consumer) {
-            synchronized (client) {
-                if (log.isDebugEnabled()) {
-                    log.debug("message for 
"+consumer+"continuation="+continuation);
-                }
-                if (continuation != null)
-                    continuation.resume();
-                else if 
(System.currentTimeMillis()-lastAccess>2*maximumReadTimeout)
-                {
-                    client.closeConsumers();
-                }
-                continuation = null;
+        synchronized public void onMessageAvailable(MessageConsumer consumer) {
+            if (log.isDebugEnabled()) {
+                log.debug("message for 
"+consumer+"continuation="+continuation);
+            }
+            if (continuation != null)
+                continuation.resume();
+            else if 
(System.currentTimeMillis()-lastAccess>2*maximumReadTimeout)
+            {
+                new Thread() {
+                    public void run() {
+                        client.closeConsumers();
+                    };
+                }.start();
             }
+            continuation = null;
         }
 
     }


Reply via email to