You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ke...@apache.org on 2014/03/28 23:29:08 UTC

git commit: updated refs/heads/4.4 to 6e09351

Repository: cloudstack
Updated Branches:
  refs/heads/4.4 024efbfbd -> 6e093514e


CLOUDSTACK-6305: protect lock leaking from unhandled exception


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/6e093514
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/6e093514
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/6e093514

Branch: refs/heads/4.4
Commit: 6e093514e463fde23fe7d9dcf15996cbbbce5a21
Parents: 024efbf
Author: Kelven Yang <ke...@gmail.com>
Authored: Fri Mar 28 15:28:39 2014 -0700
Committer: Kelven Yang <ke...@gmail.com>
Committed: Fri Mar 28 15:28:39 2014 -0700

----------------------------------------------------------------------
 .../framework/messagebus/MessageBusBase.java    | 65 ++++++++++++--------
 1 file changed, 39 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6e093514/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java
----------------------------------------------------------------------
diff --git a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java b/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java
index a9c433c..9432da0 100644
--- a/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java
+++ b/framework/ipc/src/org/apache/cloudstack/framework/messagebus/MessageBusBase.java
@@ -58,10 +58,13 @@ public class MessageBusBase implements MessageBus {
         assert (subject != null);
         assert (subscriber != null);
         if (_gate.enter()) {
-            SubscriptionNode current = locate(subject, null, true);
-            assert (current != null);
-            current.addSubscriber(subscriber);
-            _gate.leave();
+            try {
+                SubscriptionNode current = locate(subject, null, true);
+                assert (current != null);
+                current.addSubscriber(subscriber);
+            } finally {
+                _gate.leave();
+            }
         } else {
             synchronized (_pendingActions) {
                 _pendingActions.add(new ActionRecord(ActionType.Subscribe, subject, subscriber));
@@ -72,14 +75,17 @@ public class MessageBusBase implements MessageBus {
     @Override
     public void unsubscribe(String subject, MessageSubscriber subscriber) {
         if (_gate.enter()) {
-            if (subject != null) {
-                SubscriptionNode current = locate(subject, null, false);
-                if (current != null)
-                    current.removeSubscriber(subscriber, false);
-            } else {
-                _subscriberRoot.removeSubscriber(subscriber, true);
+            try {
+                if (subject != null) {
+                    SubscriptionNode current = locate(subject, null, false);
+                    if (current != null)
+                        current.removeSubscriber(subscriber, false);
+                } else {
+                    _subscriberRoot.removeSubscriber(subscriber, true);
+                }
+            } finally {
+                _gate.leave();
             }
-            _gate.leave();
         } else {
             synchronized (_pendingActions) {
                 _pendingActions.add(new ActionRecord(ActionType.Unsubscribe, subject, subscriber));
@@ -90,9 +96,12 @@ public class MessageBusBase implements MessageBus {
     @Override
     public void clearAll() {
         if (_gate.enter()) {
-            _subscriberRoot.clearAll();
-            doPrune();
-            _gate.leave();
+            try {
+                _subscriberRoot.clearAll();
+                doPrune();
+            } finally {
+                _gate.leave();
+            }
         } else {
             synchronized (_pendingActions) {
                 _pendingActions.add(new ActionRecord(ActionType.ClearAll, null, null));
@@ -103,8 +112,11 @@ public class MessageBusBase implements MessageBus {
     @Override
     public void prune() {
         if (_gate.enter()) {
-            doPrune();
-            _gate.leave();
+            try {
+                doPrune();
+            } finally {
+                _gate.leave();
+            }
         } else {
             synchronized (_pendingActions) {
                 _pendingActions.add(new ActionRecord(ActionType.Prune, null, null));
@@ -132,18 +144,19 @@ public class MessageBusBase implements MessageBus {
     public void publish(String senderAddress, String subject, PublishScope scope, Object args) {
 
         if (_gate.enter(true)) {
+            try {
+                List<SubscriptionNode> chainFromTop = new ArrayList<SubscriptionNode>();
+                SubscriptionNode current = locate(subject, chainFromTop, false);
 
-            List<SubscriptionNode> chainFromTop = new ArrayList<SubscriptionNode>();
-            SubscriptionNode current = locate(subject, chainFromTop, false);
-
-            if (current != null)
-                current.notifySubscribers(senderAddress, subject, args);
-
-            Collections.reverse(chainFromTop);
-            for (SubscriptionNode node : chainFromTop)
-                node.notifySubscribers(senderAddress, subject, args);
+                if (current != null)
+                    current.notifySubscribers(senderAddress, subject, args);
 
-            _gate.leave();
+                Collections.reverse(chainFromTop);
+                for (SubscriptionNode node : chainFromTop)
+                    node.notifySubscribers(senderAddress, subject, args);
+            } finally {
+                _gate.leave();
+            }
         }
     }