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; } }