Repository: karaf
Updated Branches:
  refs/heads/karaf-2.3.x 3160b7c0e -> 19442ce1c


[KARAF-1561] Restart Framework from Web Console's System Information tab 
results in Karaf dying


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

Branch: refs/heads/karaf-2.3.x
Commit: 19442ce1c737375056df636e10bb01fd2dbada5f
Parents: 3160b7c
Author: Guillaume Nodet <[email protected]>
Authored: Fri Jul 11 16:21:56 2014 +0200
Committer: Guillaume Nodet <[email protected]>
Committed: Fri Jul 11 16:23:27 2014 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/karaf/main/Main.java   | 23 +++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/19442ce1/main/src/main/java/org/apache/karaf/main/Main.java
----------------------------------------------------------------------
diff --git a/main/src/main/java/org/apache/karaf/main/Main.java 
b/main/src/main/java/org/apache/karaf/main/Main.java
index 65e9ae0..ffd8344 100644
--- a/main/src/main/java/org/apache/karaf/main/Main.java
+++ b/main/src/main/java/org/apache/karaf/main/Main.java
@@ -363,7 +363,18 @@ public class Main {
         }
         while (true) {
             FrameworkEvent event = framework.waitForStop(0);
-            if (event.getType() != FrameworkEvent.STOPPED_UPDATE) {
+            if (event.getType() == FrameworkEvent.STOPPED_UPDATE) {
+                unlock();
+                while (framework.getState() != Bundle.STARTING && 
framework.getState() != Bundle.ACTIVE) {
+                    Thread.sleep(10);
+                }
+                new Thread() {
+                    @Override
+                    public void run() {
+                        lock(configProps);
+                    }
+                }.start();
+            } else {
                 return;
             }
         }
@@ -1395,7 +1406,6 @@ public class Main {
         String clz = props.getProperty(PROPERTY_LOCK_CLASS, 
PROPERTY_LOCK_CLASS_DEFAULT);
         lock = (Lock) 
Class.forName(clz).getConstructor(Properties.class).newInstance(props);
         boolean lockLogged = false;
-        setStartLevel(lockStartLevel);
         while (!exiting) {
             if (lock.lock()) {
                 if (lockLogged) {
@@ -1427,9 +1437,12 @@ public class Main {
                         startLevelLock.wait(shutdownTimeout);
                     }
                 }
-            } else if (!lockLogged) {
-                LOG.info("Waiting for the lock ...");
-                lockLogged = true;
+            } else {
+                setStartLevel(lockStartLevel);
+                if (!lockLogged) {
+                    LOG.info("Waiting for the lock ...");
+                    lockLogged = true;
+                }
             }
             Thread.sleep(lockDelay);
         }

Reply via email to