Merge
This commit is contained in:
commit
d1cf52c16a
@ -1102,6 +1102,18 @@ public final class System {
|
||||
* Initialize the system class. Called after thread initialization.
|
||||
*/
|
||||
private static void initializeSystemClass() {
|
||||
|
||||
// VM might invoke JNU_NewStringPlatform() to set those encoding
|
||||
// sensitive properties (user.home, user.name, boot.class.path, etc.)
|
||||
// during "props" initialization, in which it may need access, via
|
||||
// System.getProperty(), to the related system encoding property that
|
||||
// have been initialized (put into "props") at early stage of the
|
||||
// initialization. So make sure the "props" is available at the
|
||||
// very beginning of the initialization and all system properties to
|
||||
// be put into it directly.
|
||||
props = new Properties();
|
||||
initProperties(props); // initialized by the VM
|
||||
|
||||
// There are certain system configurations that may be controlled by
|
||||
// VM options such as the maximum amount of direct memory and
|
||||
// Integer cache size used to support the object identity semantics
|
||||
@ -1112,7 +1124,12 @@ public final class System {
|
||||
//
|
||||
// See java.lang.Integer.IntegerCache and the
|
||||
// sun.misc.VM.saveAndRemoveProperties method for example.
|
||||
props = initSystemProperties();
|
||||
//
|
||||
// Save a private copy of the system properties object that
|
||||
// can only be accessed by the internal implementation. Remove
|
||||
// certain system properties that are not intended for public access.
|
||||
sun.misc.VM.saveAndRemoveProperties(props);
|
||||
|
||||
|
||||
lineSeparator = props.getProperty("line.separator");
|
||||
sun.misc.Version.init();
|
||||
@ -1123,7 +1140,6 @@ public final class System {
|
||||
setIn0(new BufferedInputStream(fdIn));
|
||||
setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
|
||||
setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));
|
||||
|
||||
// Load the zip library now in order to keep java.util.zip.ZipFile
|
||||
// from trying to use itself to load this library later.
|
||||
loadLibrary("zip");
|
||||
@ -1151,18 +1167,6 @@ public final class System {
|
||||
setJavaLangAccess();
|
||||
}
|
||||
|
||||
private static Properties initSystemProperties() {
|
||||
Properties props = new Properties();
|
||||
initProperties(props); // initialized by the VM
|
||||
|
||||
// Save a private copy of the system properties object that
|
||||
// can only be accessed by the internal implementation. Remove
|
||||
// certain system properties that are not intended for public access.
|
||||
sun.misc.VM.saveAndRemoveProperties(props);
|
||||
|
||||
return props;
|
||||
}
|
||||
|
||||
private static void setJavaLangAccess() {
|
||||
// Allow privileged classes outside of java.lang
|
||||
sun.misc.SharedSecrets.setJavaLangAccess(new sun.misc.JavaLangAccess(){
|
||||
|
@ -27,6 +27,9 @@ package sun.net.www.protocol.jar;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.*;
|
||||
import java.util.jar.*;
|
||||
import java.util.zip.ZipFile;
|
||||
@ -208,38 +211,23 @@ public class URLJarFile extends JarFile {
|
||||
JarFile result = null;
|
||||
|
||||
/* get the stream before asserting privileges */
|
||||
final InputStream in = url.openConnection().getInputStream();
|
||||
|
||||
try {
|
||||
try (final InputStream in = url.openConnection().getInputStream()) {
|
||||
result = AccessController.doPrivileged(
|
||||
new PrivilegedExceptionAction<JarFile>() {
|
||||
public JarFile run() throws IOException {
|
||||
OutputStream out = null;
|
||||
File tmpFile = null;
|
||||
Path tmpFile = Files.createTempFile("jar_cache", null);
|
||||
try {
|
||||
tmpFile = File.createTempFile("jar_cache", null);
|
||||
tmpFile.deleteOnExit();
|
||||
out = new FileOutputStream(tmpFile);
|
||||
int read = 0;
|
||||
byte[] buf = new byte[BUF_SIZE];
|
||||
while ((read = in.read(buf)) != -1) {
|
||||
out.write(buf, 0, read);
|
||||
}
|
||||
out.close();
|
||||
out = null;
|
||||
return new URLJarFile(tmpFile, closeController);
|
||||
} catch (IOException e) {
|
||||
if (tmpFile != null) {
|
||||
tmpFile.delete();
|
||||
}
|
||||
throw e;
|
||||
} finally {
|
||||
if (in != null) {
|
||||
in.close();
|
||||
}
|
||||
if (out != null) {
|
||||
out.close();
|
||||
Files.copy(in, tmpFile, StandardCopyOption.REPLACE_EXISTING);
|
||||
JarFile jarFile = new URLJarFile(tmpFile.toFile(), closeController);
|
||||
tmpFile.toFile().deleteOnExit();
|
||||
return jarFile;
|
||||
} catch (Throwable thr) {
|
||||
try {
|
||||
Files.delete(tmpFile);
|
||||
} catch (IOException ioe) {
|
||||
thr.addSuppressed(ioe);
|
||||
}
|
||||
throw thr;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -124,11 +124,11 @@ public class CancelledProducerConsumerLoops {
|
||||
oneRun(new ArrayBlockingQueue<Integer>(CAPACITY), pairs, iters);
|
||||
oneRun(new LinkedBlockingQueue<Integer>(CAPACITY), pairs, iters);
|
||||
oneRun(new LinkedBlockingDeque<Integer>(CAPACITY), pairs, iters);
|
||||
oneRun(new LinkedTransferQueue<Integer>(), pairs, iters);
|
||||
oneRun(new SynchronousQueue<Integer>(), pairs, iters / 8);
|
||||
|
||||
/* PriorityBlockingQueue is unbounded
|
||||
/* unbounded queue implementations are prone to OOME
|
||||
oneRun(new PriorityBlockingQueue<Integer>(iters / 2 * pairs), pairs, iters / 4);
|
||||
oneRun(new LinkedTransferQueue<Integer>(), pairs, iters);
|
||||
*/
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user