Repository: karaf Updated Branches: refs/heads/karaf-3.0.x 4ae2a896f -> 5b5697d02
[KARAF-3648] Don't update instance.properties on shutdown, when stopped by root container Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/5b5697d0 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/5b5697d0 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/5b5697d0 Branch: refs/heads/karaf-3.0.x Commit: 5b5697d024c2a5fc08258e564a47434bd6831fed Parents: 4ae2a89 Author: Grzegorz Grzybek <[email protected]> Authored: Wed Jun 17 17:12:45 2015 +0200 Committer: Grzegorz Grzybek <[email protected]> Committed: Wed Jun 17 17:12:45 2015 +0200 ---------------------------------------------------------------------- .../org/apache/karaf/main/InstanceHelper.java | 24 ++++++++++++++++++++ 1 file changed, 24 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/5b5697d0/main/src/main/java/org/apache/karaf/main/InstanceHelper.java ---------------------------------------------------------------------- diff --git a/main/src/main/java/org/apache/karaf/main/InstanceHelper.java b/main/src/main/java/org/apache/karaf/main/InstanceHelper.java index f78c127..dcbc369 100644 --- a/main/src/main/java/org/apache/karaf/main/InstanceHelper.java +++ b/main/src/main/java/org/apache/karaf/main/InstanceHelper.java @@ -22,11 +22,13 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; +import java.io.RandomAccessFile; import java.io.Writer; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; import java.net.InetAddress; import java.net.ServerSocket; +import java.nio.channels.FileLock; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -60,6 +62,28 @@ public class InstanceHelper { throw new Exception(se.getMessage()); } } + // don't instance.properties if we're stopping and can't acquire lock + if (!isStartingInstance) { + RandomAccessFile raf = new RandomAccessFile(propertiesFile, "rw"); + boolean proceed = true; + try { + FileLock lock = raf.getChannel().tryLock(); + if (lock == null) { + proceed = false; + } else { + lock.release(); + } + } finally { + // if proceed is true than we got the lock or OverlappingFileLockException + // but we may proceed in either case + raf.close(); + } + if (!proceed) { + // we didn't acquire lock, it may mean that root container is holding the lock when + // stopping the child + return; + } + } FileLockUtils.execute(propertiesFile, new FileLockUtils.RunnableWithProperties() { public void run(Properties props) throws IOException { if (props.isEmpty()) {
