You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2014/04/29 14:13:13 UTC

git commit: [KARAF-2812] Correct order of acquired locks to avoid possible deadlock

Repository: karaf
Updated Branches:
  refs/heads/karaf-2.3.x ed0e915db -> b8b5a2bf6


[KARAF-2812] Correct order of acquired locks to avoid possible deadlock


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

Branch: refs/heads/karaf-2.3.x
Commit: b8b5a2bf6df1c76d34381958b6aeccd4e9bd4680
Parents: ed0e915
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Tue Apr 29 14:12:38 2014 +0200
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Tue Apr 29 14:12:38 2014 +0200

----------------------------------------------------------------------
 .../container/internal/runner/InternalRunner.java | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/b8b5a2bf/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/InternalRunner.java
----------------------------------------------------------------------
diff --git a/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/InternalRunner.java b/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/InternalRunner.java
index 814493b..2030def 100644
--- a/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/InternalRunner.java
+++ b/tooling/exam/container/src/main/java/org/apache/karaf/tooling/exam/container/internal/runner/InternalRunner.java
@@ -86,12 +86,18 @@ public class InternalRunner {
      * Wait till the framework process exits.
      */
     public void waitForExit() {
-        synchronized (m_frameworkProcess) {
-            try {
-                m_frameworkProcess.waitFor();
-                shutdown();
-            } catch (Throwable e) {
-                shutdown();
+        if (m_shutdownHook != null) {
+            synchronized (m_shutdownHook) {
+                if (m_shutdownHook != null) {
+                    synchronized (m_frameworkProcess) {
+                        try {
+                            m_frameworkProcess.waitFor();
+                            shutdown();
+                        } catch (Throwable e) {
+                            shutdown();
+                        }
+                    }
+                }
             }
         }
     }