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é <[email protected]>
Authored: Tue Apr 29 14:12:38 2014 +0200
Committer: Jean-Baptiste Onofré <[email protected]>
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();
+                        }
+                    }
+                }
             }
         }
     }

Reply via email to