diff -r 2c3cc4b01880 -r c16ac7a2eba4 src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java Wed Oct 30 16:14:56 2019 +0100 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java Wed Oct 30 19:43:52 2019 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,6 +43,7 @@ public final static DateTimeFormatter REPO_DATE_FORMAT = DateTimeFormatter .ofPattern("yyyy_MM_dd_HH_mm_ss"); + private static final String JFR_REPOSITORY_LOCATION_PROPERTY = "jdk.jfr.repository"; private final Set cleanupDirectories = new HashSet<>(); private SafePath baseLocation; @@ -55,8 +56,7 @@ return instance; } - public synchronized void setBasePath(SafePath baseLocation) throws Exception { - + public synchronized void setBasePath(SafePath baseLocation) throws IOException { if(baseLocation.equals(this.baseLocation)) { Logger.log(LogTag.JFR, LogLevel.INFO, "Same base repository path " + baseLocation.toString() + " is set"); return; @@ -74,7 +74,7 @@ this.baseLocation = baseLocation; } - synchronized void ensureRepository() throws Exception { + public synchronized void ensureRepository() throws IOException { if (baseLocation == null) { setBasePath(SecuritySupport.JAVA_IO_TMPDIR); } @@ -96,7 +96,7 @@ } } - private static SafePath createRepository(SafePath basePath) throws Exception { + private static SafePath createRepository(SafePath basePath) throws IOException { SafePath canonicalBaseRepositoryPath = createRealBasePath(basePath); SafePath f = null; @@ -113,13 +113,14 @@ } if (i == MAX_REPO_CREATION_RETRIES) { - throw new Exception("Unable to create JFR repository directory using base location (" + basePath + ")"); + throw new IOException("Unable to create JFR repository directory using base location (" + basePath + ")"); } SafePath canonicalRepositoryPath = SecuritySupport.toRealPath(f); + SecuritySupport.setProperty(JFR_REPOSITORY_LOCATION_PROPERTY, canonicalRepositoryPath.toString()); return canonicalRepositoryPath; } - private static SafePath createRealBasePath(SafePath safePath) throws Exception { + private static SafePath createRealBasePath(SafePath safePath) throws IOException { if (SecuritySupport.exists(safePath)) { if (!SecuritySupport.isWritable(safePath)) { throw new IOException("JFR repository directory (" + safePath.toString() + ") exists, but isn't writable"); @@ -159,7 +160,7 @@ SecuritySupport.clearDirectory(p); Logger.log(LogTag.JFR, LogLevel.INFO, "Removed repository " + p); } catch (IOException e) { - Logger.log(LogTag.JFR, LogLevel.ERROR, "Repository " + p + " could not be removed at shutdown: " + e.getMessage()); + Logger.log(LogTag.JFR, LogLevel.INFO, "Repository " + p + " could not be removed at shutdown: " + e.getMessage()); } } }