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