Repository: karaf
Updated Branches:
  refs/heads/karaf-3.0.x b0e38903f -> ee79b9751


[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/ee79b975
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/ee79b975
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/ee79b975

Branch: refs/heads/karaf-3.0.x
Commit: ee79b9751da6435d8a8c523d309e3c7699fb8b6d
Parents: b0e3890
Author: Guillaume Nodet <[email protected]>
Authored: Fri Jul 11 18:41:38 2014 +0200
Committer: Guillaume Nodet <[email protected]>
Committed: Fri Jul 11 18:41:38 2014 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/karaf/main/Main.java   | 60 +++++++++++---------
 1 file changed, 33 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/ee79b975/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 2ebd2ff..c1e36a8 100644
--- a/main/src/main/java/org/apache/karaf/main/Main.java
+++ b/main/src/main/java/org/apache/karaf/main/Main.java
@@ -218,7 +218,6 @@ public class Main {
         }
         String log4jConfigPath = System.getProperty("karaf.etc") + 
"/org.ops4j.pax.logging.cfg";
         BootstrapLogManager.setProperties(config.props, log4jConfigPath);
-        lock = createLock();
         lockCallback = new KarafLockCallback();
         InstanceHelper.updateInstancePid(config.karafHome, config.karafBase);
         LOG.addHandler(BootstrapLogManager.getDefaultHandler());
@@ -268,41 +267,40 @@ public class Main {
     private void monitor() {
         new Thread() {
             public void run() {
-                doMonitor();
+                try {
+                    doMonitor();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
             }
         }.start();
     }
 
-    private void doMonitor() {
+    private void doMonitor() throws Exception {
+        lock = createLock();
         File dataDir = new 
File(System.getProperty(ConfigProperties.PROP_KARAF_DATA));
         while (!exiting) {
-            try {
-                if (lock.lock()) {
-                    lockCallback.lockAquired();
-                    for (;;) {
-                        if (!dataDir.isDirectory()) {
-                            LOG.info("Data directory does not exist anymore, 
halting");
-                            framework.stop();
-                            System.exit(-1);
-                            return;
-                        }
-                        if (!lock.isAlive() || exiting) {
-                            break;
-                        }
-                        Thread.sleep(config.lockDelay);
+            if (lock.lock()) {
+                lockCallback.lockAquired();
+                for (;;) {
+                    if (!dataDir.isDirectory()) {
+                        LOG.info("Data directory does not exist anymore, 
halting");
+                        framework.stop();
+                        System.exit(-1);
+                        return;
                     }
-                    if (!exiting) {
-                        lockCallback.lockLost();
+                    if (!lock.isAlive() || exiting) {
+                        break;
                     }
-                } else {
-                    lockCallback.waitingForLock();
+                    Thread.sleep(config.lockDelay);
                 }
-                Thread.sleep(config.lockDelay);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            } catch (Exception e) {
-                e.printStackTrace();
+                if (!exiting) {
+                    lockCallback.lockLost();
+                }
+            } else {
+                lockCallback.waitingForLock();
             }
+            Thread.sleep(config.lockDelay);
         }
     }
 
@@ -469,7 +467,15 @@ public class Main {
         }
         while (true) {
             FrameworkEvent event = framework.waitForStop(0);
-            if (event.getType() != FrameworkEvent.STOPPED_UPDATE) {
+            if (event.getType() == FrameworkEvent.STOPPED_UPDATE) {
+                if (lock != null) {
+                    lock.release();
+                }
+                while (framework.getState() != Bundle.STARTING && 
framework.getState() != Bundle.ACTIVE) {
+                    Thread.sleep(10);
+                }
+                monitor();
+            } else {
                 return;
             }
         }

Reply via email to