You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2017/09/20 09:03:39 UTC

karaf git commit: [KARAF-5315] Avoid race condition during SIGTERM

Repository: karaf
Updated Branches:
  refs/heads/karaf-4.0.x e9f338dee -> 00c1d82f9


[KARAF-5315] Avoid race condition during SIGTERM


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/00c1d82f
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/00c1d82f
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/00c1d82f

Branch: refs/heads/karaf-4.0.x
Commit: 00c1d82f9cc3fa567396146318d44736db8112ff
Parents: e9f338d
Author: Jean-Baptiste Onofré <jb...@apache.org>
Authored: Wed Sep 20 11:03:11 2017 +0200
Committer: Jean-Baptiste Onofré <jb...@apache.org>
Committed: Wed Sep 20 11:03:11 2017 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/karaf/main/Main.java   | 24 +++++++++++++-------
 .../apache/karaf/main/lock/SimpleFileLock.java  |  6 ++---
 2 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/00c1d82f/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 48dcb5b..e8f67c7 100644
--- a/main/src/main/java/org/apache/karaf/main/Main.java
+++ b/main/src/main/java/org/apache/karaf/main/Main.java
@@ -75,18 +75,17 @@ public class Main {
      */
     public static final String STARTUP_PROPERTIES_FILE_NAME = "startup.properties";
 
-
-    Logger LOG = Logger.getLogger(this.getClass().getName());
+    private static final Logger LOG = Logger.getLogger(Main.class.getName());
 
     private ConfigProperties config;
-    private Framework framework = null;
+    private Framework framework;
     private final String[] args;
     private int exitCode;
     private ShutdownCallback shutdownCallback;
     private KarafActivatorManager activatorManager;
-    private Lock lock;
-    private KarafLockCallback lockCallback;
-    private boolean exiting;
+    private volatile Lock lock;
+    private final KarafLockCallback lockCallback = new KarafLockCallback();
+    private volatile boolean exiting;
     
     /**
      * <p>
@@ -238,7 +237,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);
         LOG.addHandler(BootstrapLogManager.getDefaultHandler());
 
@@ -342,7 +340,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/00c1d82f/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 7004f7f..831aae2 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
@@ -59,7 +59,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();
@@ -72,7 +72,7 @@ public class SimpleFileLock implements Lock {
         return lock != null;
     }
 
-    public void release() throws Exception {
+    public synchronized void release() throws Exception {
         if (lock != null && lock.isValid()) {
             LOG.info("Releasing lock " + lockPath.getPath());
             lock.release();
@@ -81,7 +81,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();
     }