Repository: karaf
Updated Branches:
  refs/heads/master fef61ea60 -> d3036736e


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

Branch: refs/heads/master
Commit: d3036736eaf4a78ad736a03aaafc0c7aab1a7235
Parents: fef61ea
Author: Guillaume Nodet <gno...@gmail.com>
Authored: Fri Jul 11 18:41:38 2014 +0200
Committer: Guillaume Nodet <gno...@gmail.com>
Committed: Fri Jul 11 18:42:10 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/d3036736/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 0ebfb04..e0305ff 100644
--- a/main/src/main/java/org/apache/karaf/main/Main.java
+++ b/main/src/main/java/org/apache/karaf/main/Main.java
@@ -221,7 +221,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());
@@ -308,41 +307,40 @@ public class Main {
     private void monitor() {
         new Thread("Karaf Lock Monitor 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);
         }
     }
 
@@ -509,7 +507,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