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) {