--- a/jdk/src/share/classes/java/lang/System.java Thu Feb 17 20:50:22 2011 +0000
+++ b/jdk/src/share/classes/java/lang/System.java Thu Feb 17 20:53:26 2011 +0000
@@ -1102,6 +1102,18 @@
* 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 @@
//
// 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 @@
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 @@
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(){
--- a/jdk/src/share/classes/sun/net/www/protocol/jar/URLJarFile.java Thu Feb 17 20:50:22 2011 +0000
+++ b/jdk/src/share/classes/sun/net/www/protocol/jar/URLJarFile.java Thu Feb 17 20:53:26 2011 +0000
@@ -27,6 +27,9 @@
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 @@
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);
+ 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);
}
- 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();
- }
+ throw thr;
}
}
});
--- a/jdk/test/java/util/concurrent/BlockingQueue/CancelledProducerConsumerLoops.java Thu Feb 17 20:50:22 2011 +0000
+++ b/jdk/test/java/util/concurrent/BlockingQueue/CancelledProducerConsumerLoops.java Thu Feb 17 20:53:26 2011 +0000
@@ -124,11 +124,11 @@
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);
*/
}