Repository: karaf Updated Branches: refs/heads/karaf-4.1.x 16bdd6446 -> b02e7eb56
[KARAF-5315] Synchronize lock methods Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/b02e7eb5 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/b02e7eb5 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/b02e7eb5 Branch: refs/heads/karaf-4.1.x Commit: b02e7eb569c889b0c6e6f2f4ff360b25dab1cbcb Parents: 16bdd64 Author: Jean-Baptiste Onofré <[email protected]> Authored: Mon Sep 18 10:51:37 2017 +0200 Committer: Jean-Baptiste Onofré <[email protected]> Committed: Wed Sep 20 09:11:42 2017 +0200 ---------------------------------------------------------------------- .../main/java/org/apache/karaf/main/Main.java | 26 ++++++++++++++------ .../apache/karaf/main/lock/SimpleFileLock.java | 5 ++-- 2 files changed, 21 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/b02e7eb5/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 e5375b5..66b6a81 100644 --- a/main/src/main/java/org/apache/karaf/main/Main.java +++ b/main/src/main/java/org/apache/karaf/main/Main.java @@ -78,18 +78,19 @@ public class Main { */ public static final String STARTUP_PROPERTIES_FILE_NAME = "startup.properties"; + private static final Logger LOG = Logger.getLogger(Main.class.getName()); - Logger LOG = Logger.getLogger(this.getClass().getName()); + private final String[] args; + + private final KarafLockCallback lockCallback = new KarafLockCallback(); private ConfigProperties config; - private Framework framework = null; - private final String[] args; + private Framework framework; private int exitCode; private ShutdownCallback shutdownCallback; private KarafActivatorManager activatorManager; - private Lock lock; - private KarafLockCallback lockCallback; - private boolean exiting; + private volatile Lock lock; + private volatile boolean exiting; /** * <p> @@ -239,7 +240,6 @@ public class Main { } String log4jConfigPath = System.getProperty("karaf.etc") + "/org.ops4j.pax.logging.cfg"; BootstrapLogManager.setProperties(config.props, log4jConfigPath); - lockCallback = new KarafLockCallback(); InstanceHelper.updateInstancePid(config.karafHome, config.karafBase, true); BootstrapLogManager.configureLogger(LOG); @@ -347,7 +347,17 @@ public class Main { }, new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - Main.this.destroy(); + new Thread() { + @Override + public void run() { + try { + exiting = true; + framework.stop(); + } catch (BundleException e) { + e.printStackTrace(); + } + } + }.start(); return null; } } http://git-wip-us.apache.org/repos/asf/karaf/blob/b02e7eb5/main/src/main/java/org/apache/karaf/main/lock/SimpleFileLock.java ---------------------------------------------------------------------- diff --git a/main/src/main/java/org/apache/karaf/main/lock/SimpleFileLock.java b/main/src/main/java/org/apache/karaf/main/lock/SimpleFileLock.java index cc9cd3e..162d488 100644 --- a/main/src/main/java/org/apache/karaf/main/lock/SimpleFileLock.java +++ b/main/src/main/java/org/apache/karaf/main/lock/SimpleFileLock.java @@ -58,7 +58,7 @@ public class SimpleFileLock implements Lock { } } - public boolean lock() throws Exception { + public synchronized boolean lock() throws Exception { LOG.info("Trying to lock " + lockPath.getPath()); if (lock == null) { lock = lockFile.getChannel().tryLock(); @@ -80,7 +80,7 @@ public class SimpleFileLock implements Lock { lock = null; } - public boolean isAlive() throws Exception { + public synchronized boolean isAlive() throws Exception { return lock != null && lock.isValid() && lockPath.exists(); } @@ -102,6 +102,7 @@ public class SimpleFileLock implements Lock { if (rc == null) { rc = lock; } + return rc; }
