Hardening stuff a little bit .. following sugestions by @pcan 

Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7ee0977c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7ee0977c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7ee0977c

Branch: refs/heads/master
Commit: 7ee0977c9f5c327a95122f5b80202dc5dd872e40
Parents: 6c69384
Author: miti <pric...@textkernel.nl>
Authored: Tue Aug 16 10:03:39 2016 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Tue Aug 16 16:23:20 2016 +0200

----------------------------------------------------------------------
 .../component/rabbitmq/RabbitConsumer.java      | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7ee0977c/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitConsumer.java
 
b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitConsumer.java
index d143d9b..93e2499 100644
--- 
a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitConsumer.java
+++ 
b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitConsumer.java
@@ -65,10 +65,16 @@ class RabbitConsumer implements 
com.rabbitmq.client.Consumer {
             if (!consumer.getEndpoint().isAutoAck()) {
                lock.acquire();
             }
-            doHandleDelivery(consumerTag, envelope, properties, body);
-            if (!consumer.getEndpoint().isAutoAck()) {
-               lock.release();
-            }
+            //Channel might be open because while we were waiting for the 
lock, stop() has been succesfully called.
+            if (!channel.isOpen()) return;
+            
+            try {
+                doHandleDelivery(consumerTag, envelope, properties, body);
+            } finally {
+                if (!consumer.getEndpoint().isAutoAck()) {
+                       lock.release();
+                }
+                       }
                
        } catch (InterruptedException e) {
                log.error("Thread Interrupted!");
@@ -184,13 +190,15 @@ class RabbitConsumer implements 
com.rabbitmq.client.Consumer {
             if (isChannelOpen()) {
                 channel.close();
             }
-            lock.release();
                } catch (TimeoutException e) {
             log.error("Timeout occured");
             throw e;
         } catch (InterruptedException e1) {
                log.error("Thread Interrupted!");
-        }
+        } finally {
+            lock.release();
+                       
+               }
     }
 
     /**

Reply via email to