You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by ff...@apache.org on 2015/01/12 08:34:16 UTC

karaf git commit: [KARAF-3441]The admin:stop Command Does Not Zero Out Root Container PID (cherry picked from commit 1561cb8c838ded48da5884193d99a47fd97eea70)

Repository: karaf
Updated Branches:
  refs/heads/karaf-2.x 910fedee7 -> 9ede5e4e7


[KARAF-3441]The admin:stop Command Does Not Zero Out Root Container PID
(cherry picked from commit 1561cb8c838ded48da5884193d99a47fd97eea70)


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

Branch: refs/heads/karaf-2.x
Commit: 9ede5e4e7c7f8ade3ac4be1050bf48b32c5a0e7b
Parents: 910fede
Author: Freeman Fang <fr...@gmail.com>
Authored: Mon Jan 12 15:32:48 2015 +0800
Committer: Freeman Fang <fr...@gmail.com>
Committed: Mon Jan 12 15:33:26 2015 +0800

----------------------------------------------------------------------
 .../karaf/admin/internal/AdminServiceImpl.java  | 30 +++++++++++++++++---
 1 file changed, 26 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/9ede5e4e/admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java
----------------------------------------------------------------------
diff --git a/admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java b/admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java
index ba78395..850a9d9 100644
--- a/admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java
+++ b/admin/core/src/main/java/org/apache/karaf/admin/internal/AdminServiceImpl.java
@@ -468,8 +468,11 @@ public class AdminServiceImpl implements AdminService {
     }
 
     public void stopInstance(final String name) {
-        execute(new Task<Object>() {
+        
+        Integer pid = (Integer)execute(new Task<Object>() {
+            
             public Object call(State state) throws IOException {
+                int rootInstancePID = 0;
                 InstanceState instance = state.instances.get(name);
                 if (instance == null) {
                     throw new IllegalArgumentException("Instance " + name + " not found");
@@ -480,12 +483,31 @@ public class AdminServiceImpl implements AdminService {
                 }
                 cleanShutdown(instance);
                 if (instance.pid > 0) {
-                    Process process = ProcessBuilderFactory.newInstance().newBuilder().attach(instance.pid);
-                    process.destroy();
+                    if (!instance.root) {
+                        Process process = ProcessBuilderFactory.newInstance().newBuilder().attach(instance.pid);
+                        process.destroy();
+                    } else {
+                        //can't simply destroy root instance here
+                        //as it will lose the update in instances.properties
+                        //because of no chance to run the saveData
+                        rootInstancePID = instance.pid;
+                    }
+                    instance.pid = 0;
+                    
                 }
-                return null;
+                return rootInstancePID;
             }
         }, true);
+        if (pid.intValue() != 0 && isInstanceRoot(name)) {
+            Process process;
+            try {
+                process = ProcessBuilderFactory.newInstance().newBuilder().attach(pid.intValue());
+                process.destroy(); 
+            } catch (IOException e) {
+                LOGGER.debug("Unable to cleanly shutdown root instance ", e);
+            }
+                     
+        }
     }
 
     public void destroyInstance(final String name) {