summaryrefslogtreecommitdiff
path: root/java/openjdk7/files/patch-7u60-b30
diff options
context:
space:
mode:
Diffstat (limited to 'java/openjdk7/files/patch-7u60-b30')
-rw-r--r--java/openjdk7/files/patch-7u60-b3052678
1 files changed, 0 insertions, 52678 deletions
diff --git a/java/openjdk7/files/patch-7u60-b30 b/java/openjdk7/files/patch-7u60-b30
deleted file mode 100644
index 2431e158feba..000000000000
--- a/java/openjdk7/files/patch-7u60-b30
+++ /dev/null
@@ -1,52678 +0,0 @@
---- ./.hgtags Tue Mar 18 12:29:21 2014 -0700
-+++ ./.hgtags Wed May 07 19:25:50 2014 -0700
-@@ -357,6 +357,7 @@
- 3af81bfe320c12758234233da6fa27c3c0ffcdc4 jdk7u40-b42
- 1d53bd8fd2a62bcf336727ebec377ef7498dd4a6 jdk7u40-b43
- dc1e099cd62d250b4a997ce694b47fe2f50d2905 jdk7u40-b60
-+11147a12bd8c6b02f98016a8d1151e56f42a43b6 jdk7u60-b00
- 6359fa34199c9619dfec0f41d2eb22a4083ce610 jdk7u40-b61
- a2605cf03226ce2fef7a899ce41521c654300975 jdk7u40-b62
- 07e41ff8674c9438cb1124cf78eed8636ed5d4fa jdk7u45-b02
-@@ -414,3 +415,26 @@
- f4ace62029de00d2497058c3c0e1d26e019cde30 jdk7u55-b11
- de268da51b54a4f36bcc1a9af60faea285e94330 jdk7u55-b12
- d972a2d9e4f3f864d26c33ccfdacd8269e0f29a8 jdk7u55-b13
-+0820b4707cfa75f8211b88b0daa67bba8475f498 jdk7u55-b30
-+997ab3897d6ede80b0decdda94b569e57dd7dd90 jdk7u55-b14
-+1f52edec29fd44c8bacce11ba7440287b37d04d1 jdk7u55-b31
-+11147a12bd8c6b02f98016a8d1151e56f42a43b6 jdk7u60-b00
-+88113cabda386320a087b288d43e792f523cc0ba jdk7u60-b01
-+6bdacebbc97f0a03be45be48a6d5b5cf2f7fe77d jdk7u60-b02
-+87f2193da40d3a2eedca95108ae78403c7bdcd49 jdk7u60-b03
-+d4397128f8b65eb96287128575dd1a3da6a7825b jdk7u60-b04
-+ea798405286d97f643ef809abcb1e13024b4f951 jdk7u60-b05
-+b0940b205cab942512b5bca1338ab96a45a67832 jdk7u60-b06
-+cae7bacaa13bb8c42a42fa35b156a7660874e907 jdk7u60-b07
-+1af0560611469ad2a068a03774ecd0d7790db7b7 jdk7u60-b08
-+662dc3b6467488b8c175a4423ba7a4991ad87d94 jdk7u60-b09
-+023f8eb40d371d5cb761f7e60ba7b396b3fdf886 jdk7u60-b10
-+798468b91bcbb81684aea8620dbb31eaceb24c6c jdk7u60-b11
-+e40360c10b2ce5b24b1eea63160b78e112aa5d3f jdk7u60-b12
-+5e540a4d55916519f5604a422bfbb7a0967d0594 jdk7u60-b13
-+1ca6a368aec38ee91a41dc03899d7dc1037de44d jdk7u60-b14
-+a95b821a2627295b90fb4ae8f3b8bc2ff9c64acc jdk7u60-b15
-+19a3f6f48c541a8cf144eedffa0e52e108052e82 jdk7u60-b16
-+472f5930e6cc8f307b5508995ee2edcf9913a852 jdk7u60-b18
-+472f5930e6cc8f307b5508995ee2edcf9913a852 jdk7u60-b17
-+2a7a5e774023944f291ee27ca5b3ad89e0e62aaf jdk7u60-b19
---- ./make/scripts/webrev.ksh Tue Mar 18 12:29:21 2014 -0700
-+++ ./make/scripts/webrev.ksh Wed May 07 19:25:50 2014 -0700
-@@ -2695,11 +2695,11 @@
- rm -f $WDIR/$DIR/$F.html
-
- its_a_jar=
-- if expr $F : '.*\.jar' >/dev/null; then
-+ if expr $F : '.*\.jar' \| $F : '.*\.zip' >/dev/null; then
- its_a_jar=1
-- # It's a JAR file, let's do it differntly
-+ # It's a JAR or ZIP file, let's do it differently
- if [[ -z $JAR ]]; then
-- print "No access to jar, so can't produce diffs for jar files"
-+ print "No access to jar, so can't produce diffs for jar or zip files"
- else
- if [ -f $ofile ]; then
- $JAR -tvf $ofile >"$ofile".lst
---- ./corba/.hgtags Tue Mar 18 12:29:47 2014 -0700
-+++ ./corba/.hgtags Wed May 07 19:25:52 2014 -0700
-@@ -417,3 +417,26 @@
- cbd5b4b07e0c8a5f61eff396b7622e7b04d2a164 jdk7u55-b11
- 3cce2a49d18d93dfca2634db32368486ebbb1590 jdk7u55-b12
- 8efa6e66c13a5329c312d1a521ffab75d9a330e3 jdk7u55-b13
-+e041c52fe69128ec3439d26afef9b0fcba00684c jdk7u55-b30
-+a0bfd0e80ae0ae6e3a29bf527b5911c83163b3f5 jdk7u55-b14
-+55ff6957449cf6c79f5d5bb159df27f51ece1659 jdk7u55-b31
-+c5b5886004e6446b8b27ccdc1fd073354c1dc614 jdk7u60-b00
-+a531112cc6d0b0a1e7d4ffdaa3ba53addcd25cf4 jdk7u60-b01
-+d81370c5b863acc19e8fb07315b1ec687ac1136a jdk7u60-b02
-+d7e98ed925a3885380226f8375fe109a9a25397f jdk7u60-b03
-+1a3aa4637b80fabbd069ae88c241efcb3520fc49 jdk7u60-b04
-+753698a910167cc29c01490648a2adbcea1314cc jdk7u60-b05
-+9852efe6d6b992b73fdbf59e36fb3547a9535051 jdk7u60-b06
-+84a18429f247774fc7f1bc81de271da20b40845b jdk7u60-b07
-+8469bc00ddca4de366b20b32d42548c882656cd8 jdk7u60-b08
-+7abca119f9543489280d560dc11256d439004f0f jdk7u60-b09
-+1861f1f599728c4f15a85a5980edef916552747b jdk7u60-b10
-+a429ff635395688ded6c52cd21c0b4ce75e62168 jdk7u60-b11
-+d581875525aaf618afe901da31d679195ee35f4b jdk7u60-b12
-+2c8ba5f9487b0ac085874afd38f4c10a4127f62c jdk7u60-b13
-+02bdeb33754315f589bd650dde656d2c9947976d jdk7u60-b14
-+e5946b2cf82bdea3a4b85917e903168e65a543a7 jdk7u60-b15
-+e424fb8452851b56db202488a4e9a283934c4887 jdk7u60-b16
-+b96d90694be873372cc417b38b01afed6ac1b239 jdk7u60-b18
-+b96d90694be873372cc417b38b01afed6ac1b239 jdk7u60-b17
-+5d1b39fe68944cff6380db56fbe2fbaa28091bf6 jdk7u60-b19
---- ./corba/src/share/classes/com/sun/corba/se/impl/copyobject/JavaInputStream.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,528 +0,0 @@
--/*
-- * Copyright (c) 2004, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--package com.sun.corba.se.impl.encoding;
--
--import java.io.IOException;
--import java.io.Serializable;
--import java.math.BigDecimal;
--import java.nio.ByteBuffer;
--
--import org.omg.CORBA.TypeCode;
--import org.omg.CORBA.Principal;
--import org.omg.CORBA.Any;
--
--import com.sun.org.omg.SendingContext.CodeBase;
--
--import com.sun.corba.se.pept.protocol.MessageMediator;
--
--import com.sun.corba.se.spi.logging.CORBALogDomains;
--import com.sun.corba.se.spi.orb.ORB;
--import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
--import com.sun.corba.se.spi.protocol.CorbaMessageMediator;
--
--import com.sun.corba.se.impl.logging.ORBUtilSystemException;
--import com.sun.corba.se.impl.encoding.CodeSetConversion;
--import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry;
--
--/**
-- * This is delegates to the real implementation.
-- *
-- * NOTE:
-- *
-- * Before using the stream for valuetype unmarshaling, one must call
-- * performORBVersionSpecificInit().
-- */
--public abstract class CDRInputStream
-- extends org.omg.CORBA_2_3.portable.InputStream
-- implements com.sun.corba.se.impl.encoding.MarshalInputStream,
-- org.omg.CORBA.DataInputStream, org.omg.CORBA.portable.ValueInputStream
--{
-- protected CorbaMessageMediator messageMediator;
-- private CDRInputStreamBase impl;
--
-- // We can move this out somewhere later. For now, it serves its purpose
-- // to create a concrete CDR delegate based on the GIOP version.
-- private static class InputStreamFactory {
--
-- public static CDRInputStreamBase newInputStream(ORB orb, GIOPVersion version)
-- {
-- switch(version.intValue()) {
-- case GIOPVersion.VERSION_1_0:
-- return new CDRInputStream_1_0();
-- case GIOPVersion.VERSION_1_1:
-- return new CDRInputStream_1_1();
-- case GIOPVersion.VERSION_1_2:
-- return new CDRInputStream_1_2();
-- default:
-- ORBUtilSystemException wrapper = ORBUtilSystemException.get( orb,
-- CORBALogDomains.RPC_ENCODING ) ;
-- throw wrapper.unsupportedGiopVersion( version ) ;
-- }
-- }
-- }
--
-- // Required for the case when a ClientResponseImpl is
-- // created with a SystemException due to a dead server/closed
-- // connection with no warning. Note that the stream will
-- // not be initialized in this case.
-- //
-- // Probably also required by ServerRequestImpl.
-- //
-- // REVISIT.
-- public CDRInputStream() {
-- }
--
-- public CDRInputStream(CDRInputStream is) {
-- impl = is.impl.dup();
-- impl.setParent(this);
-- }
--
-- public CDRInputStream(org.omg.CORBA.ORB orb,
-- ByteBuffer byteBuffer,
-- int size,
-- boolean littleEndian,
-- GIOPVersion version,
-- BufferManagerRead bufMgr)
-- {
-- impl = InputStreamFactory.newInputStream( (ORB)orb, version);
--
-- impl.init(orb, byteBuffer, size, littleEndian, bufMgr);
--
-- impl.setParent(this);
-- }
--
-- // org.omg.CORBA.portable.InputStream
-- public final boolean read_boolean() {
-- return impl.read_boolean();
-- }
--
-- public final char read_char() {
-- return impl.read_char();
-- }
--
-- public final char read_wchar() {
-- return impl.read_wchar();
-- }
--
-- public final byte read_octet() {
-- return impl.read_octet();
-- }
--
-- public final short read_short() {
-- return impl.read_short();
-- }
--
-- public final short read_ushort() {
-- return impl.read_ushort();
-- }
--
-- public final int read_long() {
-- return impl.read_long();
-- }
--
-- public final int read_ulong() {
-- return impl.read_ulong();
-- }
--
-- public final long read_longlong() {
-- return impl.read_longlong();
-- }
--
-- public final long read_ulonglong() {
-- return impl.read_ulonglong();
-- }
--
-- public final float read_float() {
-- return impl.read_float();
-- }
--
-- public final double read_double() {
-- return impl.read_double();
-- }
--
-- public final String read_string() {
-- return impl.read_string();
-- }
--
-- public final String read_wstring() {
-- return impl.read_wstring();
-- }
--
-- public final void read_boolean_array(boolean[] value, int offset, int length) {
-- impl.read_boolean_array(value, offset, length);
-- }
--
-- public final void read_char_array(char[] value, int offset, int length) {
-- impl.read_char_array(value, offset, length);
-- }
--
-- public final void read_wchar_array(char[] value, int offset, int length) {
-- impl.read_wchar_array(value, offset, length);
-- }
--
-- public final void read_octet_array(byte[] value, int offset, int length) {
-- impl.read_octet_array(value, offset, length);
-- }
--
-- public final void read_short_array(short[] value, int offset, int length) {
-- impl.read_short_array(value, offset, length);
-- }
--
-- public final void read_ushort_array(short[] value, int offset, int length) {
-- impl.read_ushort_array(value, offset, length);
-- }
--
-- public final void read_long_array(int[] value, int offset, int length) {
-- impl.read_long_array(value, offset, length);
-- }
--
-- public final void read_ulong_array(int[] value, int offset, int length) {
-- impl.read_ulong_array(value, offset, length);
-- }
--
-- public final void read_longlong_array(long[] value, int offset, int length) {
-- impl.read_longlong_array(value, offset, length);
-- }
--
-- public final void read_ulonglong_array(long[] value, int offset, int length) {
-- impl.read_ulonglong_array(value, offset, length);
-- }
--
-- public final void read_float_array(float[] value, int offset, int length) {
-- impl.read_float_array(value, offset, length);
-- }
--
-- public final void read_double_array(double[] value, int offset, int length) {
-- impl.read_double_array(value, offset, length);
-- }
--
-- public final org.omg.CORBA.Object read_Object() {
-- return impl.read_Object();
-- }
--
-- public final TypeCode read_TypeCode() {
-- return impl.read_TypeCode();
-- }
-- public final Any read_any() {
-- return impl.read_any();
-- }
--
-- public final Principal read_Principal() {
-- return impl.read_Principal();
-- }
--
-- public final int read() throws java.io.IOException {
-- return impl.read();
-- }
--
-- public final java.math.BigDecimal read_fixed() {
-- return impl.read_fixed();
-- }
--
-- public final org.omg.CORBA.Context read_Context() {
-- return impl.read_Context();
-- }
--
-- public final org.omg.CORBA.Object read_Object(java.lang.Class clz) {
-- return impl.read_Object(clz);
-- }
--
-- public final org.omg.CORBA.ORB orb() {
-- return impl.orb();
-- }
--
-- // org.omg.CORBA_2_3.portable.InputStream
-- public final java.io.Serializable read_value() {
-- return impl.read_value();
-- }
--
-- public final java.io.Serializable read_value(java.lang.Class clz) {
-- return impl.read_value(clz);
-- }
--
-- public final java.io.Serializable read_value(org.omg.CORBA.portable.BoxedValueHelper factory) {
-- return impl.read_value(factory);
-- }
--
-- public final java.io.Serializable read_value(java.lang.String rep_id) {
-- return impl.read_value(rep_id);
-- }
--
-- public final java.io.Serializable read_value(java.io.Serializable value) {
-- return impl.read_value(value);
-- }
--
-- public final java.lang.Object read_abstract_interface() {
-- return impl.read_abstract_interface();
-- }
--
-- public final java.lang.Object read_abstract_interface(java.lang.Class clz) {
-- return impl.read_abstract_interface(clz);
-- }
-- // com.sun.corba.se.impl.encoding.MarshalInputStream
--
-- public final void consumeEndian() {
-- impl.consumeEndian();
-- }
--
-- public final int getPosition() {
-- return impl.getPosition();
-- }
--
-- // org.omg.CORBA.DataInputStream
--
-- public final java.lang.Object read_Abstract () {
-- return impl.read_Abstract();
-- }
--
-- public final java.io.Serializable read_Value () {
-- return impl.read_Value();
-- }
--
-- public final void read_any_array (org.omg.CORBA.AnySeqHolder seq, int offset, int length) {
-- impl.read_any_array(seq, offset, length);
-- }
--
-- public final void read_boolean_array (org.omg.CORBA.BooleanSeqHolder seq, int offset, int length) {
-- impl.read_boolean_array(seq, offset, length);
-- }
--
-- public final void read_char_array (org.omg.CORBA.CharSeqHolder seq, int offset, int length) {
-- impl.read_char_array(seq, offset, length);
-- }
--
-- public final void read_wchar_array (org.omg.CORBA.WCharSeqHolder seq, int offset, int length) {
-- impl.read_wchar_array(seq, offset, length);
-- }
--
-- public final void read_octet_array (org.omg.CORBA.OctetSeqHolder seq, int offset, int length) {
-- impl.read_octet_array(seq, offset, length);
-- }
--
-- public final void read_short_array (org.omg.CORBA.ShortSeqHolder seq, int offset, int length) {
-- impl.read_short_array(seq, offset, length);
-- }
--
-- public final void read_ushort_array (org.omg.CORBA.UShortSeqHolder seq, int offset, int length) {
-- impl.read_ushort_array(seq, offset, length);
-- }
--
-- public final void read_long_array (org.omg.CORBA.LongSeqHolder seq, int offset, int length) {
-- impl.read_long_array(seq, offset, length);
-- }
--
-- public final void read_ulong_array (org.omg.CORBA.ULongSeqHolder seq, int offset, int length) {
-- impl.read_ulong_array(seq, offset, length);
-- }
--
-- public final void read_ulonglong_array (org.omg.CORBA.ULongLongSeqHolder seq, int offset, int length) {
-- impl.read_ulonglong_array(seq, offset, length);
-- }
--
-- public final void read_longlong_array (org.omg.CORBA.LongLongSeqHolder seq, int offset, int length) {
-- impl.read_longlong_array(seq, offset, length);
-- }
--
-- public final void read_float_array (org.omg.CORBA.FloatSeqHolder seq, int offset, int length) {
-- impl.read_float_array(seq, offset, length);
-- }
--
-- public final void read_double_array (org.omg.CORBA.DoubleSeqHolder seq, int offset, int length) {
-- impl.read_double_array(seq, offset, length);
-- }
--
-- // org.omg.CORBA.portable.ValueBase
-- public final String[] _truncatable_ids() {
-- return impl._truncatable_ids();
-- }
--
-- // java.io.InputStream
-- public final int read(byte b[]) throws IOException {
-- return impl.read(b);
-- }
--
-- public final int read(byte b[], int off, int len) throws IOException {
-- return impl.read(b, off, len);
-- }
--
-- public final long skip(long n) throws IOException {
-- return impl.skip(n);
-- }
--
-- public final int available() throws IOException {
-- return impl.available();
-- }
--
-- public final void close() throws IOException {
-- impl.close();
-- }
--
-- public final void mark(int readlimit) {
-- impl.mark(readlimit);
-- }
--
-- public final void reset() {
-- impl.reset();
-- }
--
-- public final boolean markSupported() {
-- return impl.markSupported();
-- }
--
-- public abstract CDRInputStream dup();
--
-- // Needed by TCUtility
-- public final java.math.BigDecimal read_fixed(short digits, short scale) {
-- return impl.read_fixed(digits, scale);
-- }
--
-- public final boolean isLittleEndian() {
-- return impl.isLittleEndian();
-- }
--
-- protected final ByteBuffer getByteBuffer() {
-- return impl.getByteBuffer();
-- }
--
-- protected final void setByteBuffer(ByteBuffer byteBuffer) {
-- impl.setByteBuffer(byteBuffer);
-- }
--
-- protected final void setByteBufferWithInfo(ByteBufferWithInfo bbwi) {
-- impl.setByteBufferWithInfo(bbwi);
-- }
--
-- public final int getBufferLength() {
-- return impl.getBufferLength();
-- }
--
-- protected final void setBufferLength(int value) {
-- impl.setBufferLength(value);
-- }
--
-- protected final int getIndex() {
-- return impl.getIndex();
-- }
--
-- protected final void setIndex(int value) {
-- impl.setIndex(value);
-- }
--
-- public final void orb(org.omg.CORBA.ORB orb) {
-- impl.orb(orb);
-- }
--
-- public final GIOPVersion getGIOPVersion() {
-- return impl.getGIOPVersion();
-- }
--
-- public final BufferManagerRead getBufferManager() {
-- return impl.getBufferManager();
-- }
--
-- // This should be overridden by any stream (ex: IIOPInputStream)
-- // which wants to read values. Thus, TypeCodeInputStream doesn't
-- // have to do this.
-- public CodeBase getCodeBase() {
-- return null;
-- }
--
-- // Use Latin-1 for GIOP 1.0 or when code set negotiation was not
-- // performed.
-- protected CodeSetConversion.BTCConverter createCharBTCConverter() {
-- return CodeSetConversion.impl().getBTCConverter(OSFCodeSetRegistry.ISO_8859_1,
-- impl.isLittleEndian());
-- }
--
-- // Subclasses must decide what to do here. It's inconvenient to
-- // make the class and this method abstract because of dup().
-- protected abstract CodeSetConversion.BTCConverter createWCharBTCConverter();
--
-- // Prints the current buffer in a human readable form
-- void printBuffer() {
-- impl.printBuffer();
-- }
--
-- /**
-- * Aligns the current position on the given octet boundary
-- * if there are enough bytes available to do so. Otherwise,
-- * it just returns. This is used for some (but not all)
-- * GIOP 1.2 message headers.
-- */
-- public void alignOnBoundary(int octetBoundary) {
-- impl.alignOnBoundary(octetBoundary);
-- }
--
-- // Needed by request and reply messages for GIOP versions >= 1.2 only.
-- public void setHeaderPadding(boolean headerPadding) {
-- impl.setHeaderPadding(headerPadding);
-- }
--
-- /**
-- * This must be called after determining the proper ORB version,
-- * and setting it on the stream's ORB instance. It can be called
-- * after reading the service contexts, since that is the only place
-- * we can get the ORB version info.
-- *
-- * Trying to unmarshal things requiring repository IDs before calling
-- * this will result in NullPtrExceptions.
-- */
-- public void performORBVersionSpecificInit() {
-- // In the case of SystemExceptions, a stream is created
-- // with its default constructor (and thus no impl is set).
-- if (impl != null)
-- impl.performORBVersionSpecificInit();
-- }
--
-- /**
-- * Resets any internal references to code set converters.
-- * This is useful for forcing the CDR stream to reacquire
-- * converters (probably from its subclasses) when state
-- * has changed.
-- */
-- public void resetCodeSetConverters() {
-- impl.resetCodeSetConverters();
-- }
--
-- public void setMessageMediator(MessageMediator messageMediator)
-- {
-- this.messageMediator = (CorbaMessageMediator) messageMediator;
-- }
--
-- public MessageMediator getMessageMediator()
-- {
-- return messageMediator;
-- }
--
-- // ValueInputStream -----------------------------
--
-- public void start_value() {
-- impl.start_value();
-- }
--
-- public void end_value() {
-- impl.end_value();
-- }
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/copyobject/JavaOutputStream.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,435 +0,0 @@
--/*
-- * Copyright (c) 2004, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--package com.sun.corba.se.impl.encoding;
--
--import java.io.IOException;
--import java.io.Serializable;
--import java.math.BigDecimal;
--import java.nio.ByteBuffer;
--
--import org.omg.CORBA.TypeCode;
--import org.omg.CORBA.Principal;
--import org.omg.CORBA.Any;
--
--import com.sun.corba.se.pept.protocol.MessageMediator;
--
--import com.sun.corba.se.spi.orb.ORB;
--import com.sun.corba.se.spi.logging.CORBALogDomains;
--import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
--import com.sun.corba.se.spi.protocol.CorbaMessageMediator;
--
--import com.sun.corba.se.impl.encoding.CodeSetConversion;
--import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry;
--import com.sun.corba.se.impl.orbutil.ORBConstants;
--import com.sun.corba.se.impl.logging.ORBUtilSystemException;
--
--/**
-- * This is delegates to the real implementation.
-- */
--public abstract class CDROutputStream
-- extends org.omg.CORBA_2_3.portable.OutputStream
-- implements com.sun.corba.se.impl.encoding.MarshalOutputStream,
-- org.omg.CORBA.DataOutputStream, org.omg.CORBA.portable.ValueOutputStream
--{
--/*
-- private CDROutputStreamBase impl;
-- protected ORB orb ;
-- protected ORBUtilSystemException wrapper ;
-- protected CorbaMessageMediator corbaMessageMediator;
--
--
-- // We can move this out somewhere later. For now, it serves its purpose
-- // to create a concrete CDR delegate based on the GIOP version.
-- private static class OutputStreamFactory {
--
-- public static CDROutputStreamBase newOutputStream(ORB orb, GIOPVersion version)
-- {
-- switch(version.intValue()) {
-- case GIOPVersion.VERSION_1_0:
-- return new CDROutputStream_1_0();
-- case GIOPVersion.VERSION_1_1:
-- return new CDROutputStream_1_1();
-- case GIOPVersion.VERSION_1_2:
-- return new CDROutputStream_1_2();
-- default:
-- ORBUtilSystemException wrapper = ORBUtilSystemException.get( orb,
-- CORBALogDomains.RPC_ENCODING ) ;
-- // REVISIT - what is appropriate? INTERNAL exceptions
-- // are really hard to track later.
-- throw wrapper.unsupportedGiopVersion( version ) ;
-- }
-- }
-- }
--
-- // REVISIT - These two constructors should be re-factored to better hide
-- // the fact that someone extending this class 'can' construct a CDROutputStream
-- // that does not use pooled ByteBuffers. Right now, only EncapsOutputStream
-- // does _not_ use pooled ByteBuffers, see EncapsOutputStream.
--
-- // NOTE: When a stream is constructed for non-channel-backed sockets
-- // it notifies the constructor not to use pooled (i.e, direct)
-- // ByteBuffers.
--
-- public CDROutputStream(ORB orb,
-- GIOPVersion version,
-- boolean littleEndian,
-- BufferManagerWrite bufferManager,
-- byte streamFormatVersion,
-- boolean usePooledByteBuffers)
-- {
-- impl = OutputStreamFactory.newOutputStream(orb, version);
-- impl.init(orb, littleEndian, bufferManager, streamFormatVersion, usePooledByteBuffers);
--
-- impl.setParent(this);
-- this.orb = orb ;
-- this.wrapper = ORBUtilSystemException.get( orb,
-- CORBALogDomains.RPC_ENCODING ) ;
-- }
--
-- public CDROutputStream(ORB orb,
-- GIOPVersion version,
-- boolean littleEndian,
-- BufferManagerWrite bufferManager,
-- byte streamFormatVersion)
-- {
-- this(orb, version, littleEndian, bufferManager, streamFormatVersion, true);
-- }
--*/
--
-- private ByteArrayOutputStream bos ;
-- private ObjectOutputStream oos ;
--
-- public JavaOutputStream()
-- {
-- bos = new ByteArrayOutputStream() ;
-- oos = new ObjectOutputStream( bos ) ;
-- }
--
-- // Provided by IIOPOutputStream and EncapsOutputStream
-- public org.omg.CORBA.portable.InputStream create_input_stream()
-- {
-- ObjectInputStream ois = new ByteArrayInputStream( bos.toByteArray() ) ;
--
-- return new JavaInputStream( ois ) ;
-- }
--
-- public final void write_boolean(boolean value) {
-- impl.write_boolean(value);
-- }
-- public final void write_char(char value) {
-- impl.write_char(value);
-- }
-- public final void write_wchar(char value) {
-- impl.write_wchar(value);
-- }
-- public final void write_octet(byte value) {
-- impl.write_octet(value);
-- }
-- public final void write_short(short value) {
-- impl.write_short(value);
-- }
-- public final void write_ushort(short value) {
-- impl.write_ushort(value);
-- }
-- public final void write_long(int value) {
-- impl.write_long(value);
-- }
-- public final void write_ulong(int value) {
-- impl.write_ulong(value);
-- }
-- public final void write_longlong(long value) {
-- impl.write_longlong(value);
-- }
-- public final void write_ulonglong(long value) {
-- impl.write_ulonglong(value);
-- }
-- public final void write_float(float value) {
-- impl.write_float(value);
-- }
-- public final void write_double(double value) {
-- impl.write_double(value);
-- }
-- public final void write_string(String value) {
-- impl.write_string(value);
-- }
-- public final void write_wstring(String value) {
-- impl.write_wstring(value);
-- }
--
-- public final void write_boolean_array(boolean[] value, int offset, int length) {
-- impl.write_boolean_array(value, offset, length);
-- }
-- public final void write_char_array(char[] value, int offset, int length) {
-- impl.write_char_array(value, offset, length);
-- }
-- public final void write_wchar_array(char[] value, int offset, int length) {
-- impl.write_wchar_array(value, offset, length);
-- }
-- public final void write_octet_array(byte[] value, int offset, int length) {
-- impl.write_octet_array(value, offset, length);
-- }
-- public final void write_short_array(short[] value, int offset, int length) {
-- impl.write_short_array(value, offset, length);
-- }
-- public final void write_ushort_array(short[] value, int offset, int length){
-- impl.write_ushort_array(value, offset, length);
-- }
-- public final void write_long_array(int[] value, int offset, int length) {
-- impl.write_long_array(value, offset, length);
-- }
-- public final void write_ulong_array(int[] value, int offset, int length) {
-- impl.write_ulong_array(value, offset, length);
-- }
-- public final void write_longlong_array(long[] value, int offset, int length) {
-- impl.write_longlong_array(value, offset, length);
-- }
-- public final void write_ulonglong_array(long[] value, int offset,int length) {
-- impl.write_ulonglong_array(value, offset, length);
-- }
-- public final void write_float_array(float[] value, int offset, int length) {
-- impl.write_float_array(value, offset, length);
-- }
-- public final void write_double_array(double[] value, int offset, int length) {
-- impl.write_double_array(value, offset, length);
-- }
-- public final void write_Object(org.omg.CORBA.Object value) {
-- impl.write_Object(value);
-- }
-- public final void write_TypeCode(TypeCode value) {
-- impl.write_TypeCode(value);
-- }
-- public final void write_any(Any value) {
-- impl.write_any(value);
-- }
--
-- public final void write_Principal(Principal value) {
-- impl.write_Principal(value);
-- }
--
-- public final void write(int b) throws java.io.IOException {
-- impl.write(b);
-- }
--
-- public final void write_fixed(java.math.BigDecimal value) {
-- impl.write_fixed(value);
-- }
--
-- public final void write_Context(org.omg.CORBA.Context ctx,
-- org.omg.CORBA.ContextList contexts) {
-- impl.write_Context(ctx, contexts);
-- }
--
-- public final org.omg.CORBA.ORB orb() {
-- return impl.orb();
-- }
--
-- // org.omg.CORBA_2_3.portable.OutputStream
-- public final void write_value(java.io.Serializable value) {
-- impl.write_value(value);
-- }
--
-- public final void write_value(java.io.Serializable value, java.lang.Class clz) {
-- impl.write_value(value, clz);
-- }
--
-- public final void write_value(java.io.Serializable value, String repository_id) {
-- impl.write_value(value, repository_id);
-- }
--
-- public final void write_value(java.io.Serializable value,
-- org.omg.CORBA.portable.BoxedValueHelper factory) {
-- impl.write_value(value, factory);
-- }
--
-- public final void write_abstract_interface(java.lang.Object obj) {
-- impl.write_abstract_interface(obj);
-- }
--
-- // java.io.OutputStream
-- public final void write(byte b[]) throws IOException {
-- impl.write(b);
-- }
--
-- public final void write(byte b[], int off, int len) throws IOException {
-- impl.write(b, off, len);
-- }
--
-- public final void flush() throws IOException {
-- impl.flush();
-- }
--
-- public final void close() throws IOException {
-- impl.close();
-- }
--
-- // com.sun.corba.se.impl.encoding.MarshalOutputStream
-- public final void start_block() {
-- impl.start_block();
-- }
--
-- public final void end_block() {
-- impl.end_block();
-- }
--
-- public final void putEndian() {
-- impl.putEndian();
-- }
--
-- public void writeTo(java.io.OutputStream s)
-- throws IOException
-- {
-- impl.writeTo(s);
-- }
--
-- public final byte[] toByteArray() {
-- return impl.toByteArray();
-- }
--
-- // org.omg.CORBA.DataOutputStream
-- public final void write_Abstract (java.lang.Object value) {
-- impl.write_Abstract(value);
-- }
--
-- public final void write_Value (java.io.Serializable value) {
-- impl.write_Value(value);
-- }
--
-- public final void write_any_array(org.omg.CORBA.Any[] seq, int offset, int length) {
-- impl.write_any_array(seq, offset, length);
-- }
--
-- public void setMessageMediator(MessageMediator messageMediator)
-- {
-- this.corbaMessageMediator = (CorbaMessageMediator) messageMediator;
-- }
--
-- public MessageMediator getMessageMediator()
-- {
-- return corbaMessageMediator;
-- }
--
-- // org.omg.CORBA.portable.ValueBase
-- public final String[] _truncatable_ids() {
-- return impl._truncatable_ids();
-- }
--
-- // Other
-- protected final int getSize() {
-- return impl.getSize();
-- }
--
-- protected final int getIndex() {
-- return impl.getIndex();
-- }
--
-- protected int getRealIndex(int index) {
-- // Used in indirections. Overridden by TypeCodeOutputStream.
-- return index;
-- }
--
-- protected final void setIndex(int value) {
-- impl.setIndex(value);
-- }
--
-- protected final ByteBuffer getByteBuffer() {
-- return impl.getByteBuffer();
-- }
--
-- protected final void setByteBuffer(ByteBuffer byteBuffer) {
-- impl.setByteBuffer(byteBuffer);
-- }
--
-- public final boolean isLittleEndian() {
-- return impl.isLittleEndian();
-- }
--
-- // XREVISIT - return to final if possible
-- // REVISIT - was protected - need access from msgtypes test.
-- public ByteBufferWithInfo getByteBufferWithInfo() {
-- return impl.getByteBufferWithInfo();
-- }
--
-- protected void setByteBufferWithInfo(ByteBufferWithInfo bbwi) {
-- impl.setByteBufferWithInfo(bbwi);
-- }
--
-- // REVISIT: was protected - but need to access from xgiop.
-- public final BufferManagerWrite getBufferManager() {
-- return impl.getBufferManager();
-- }
--
-- public final void write_fixed(java.math.BigDecimal bigDecimal, short digits, short scale) {
-- impl.write_fixed(bigDecimal, digits, scale);
-- }
--
-- public final void writeOctetSequenceTo(org.omg.CORBA.portable.OutputStream s) {
-- impl.writeOctetSequenceTo(s);
-- }
--
-- public final GIOPVersion getGIOPVersion() {
-- return impl.getGIOPVersion();
-- }
--
-- public final void writeIndirection(int tag, int posIndirectedTo) {
-- impl.writeIndirection(tag, posIndirectedTo);
-- }
--
-- // Use Latin-1 for GIOP 1.0 or when code set negotiation was not
-- // performed.
-- protected CodeSetConversion.CTBConverter createCharCTBConverter() {
-- return CodeSetConversion.impl().getCTBConverter(OSFCodeSetRegistry.ISO_8859_1);
-- }
--
-- // Subclasses must decide what to do here. It's inconvenient to
-- // make the class and this method abstract because of dup().
-- protected abstract CodeSetConversion.CTBConverter createWCharCTBConverter();
--
-- protected final void freeInternalCaches() {
-- impl.freeInternalCaches();
-- }
--
-- void printBuffer() {
-- impl.printBuffer();
-- }
--
-- public void alignOnBoundary(int octetBoundary) {
-- impl.alignOnBoundary(octetBoundary);
-- }
--
-- // Needed by request and reply messages for GIOP versions >= 1.2 only.
-- public void setHeaderPadding(boolean headerPadding) {
-- impl.setHeaderPadding(headerPadding);
-- }
--
-- // ValueOutputStream -----------------------------
--
-- public void start_value(String rep_id) {
-- impl.start_value(rep_id);
-- }
--
-- public void end_value() {
-- impl.end_value();
-- }
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/interceptors/ThreadCurrentStack.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,164 +0,0 @@
--/*
-- * Copyright (c) 2000, 2002, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--package com.sun.corba.se.impl.interceptors;
--
--import com.sun.corba.se.impl.corba.AnyImpl;
--import org.omg.PortableInterceptor.Current;
--import org.omg.PortableInterceptor.InvalidSlot;
--
--import com.sun.corba.se.impl.util.MinorCodes;
--import com.sun.corba.se.impl.core.ORB;
--
--/**
-- * ThreadCurrentStack is the container of PICurrent instances for each thread
-- */
--public class ThreadCurrentStack
--{
-- // PICurrentPool is the container for reusable PICurrents
-- private class PICurrentPool {
--
-- // Contains a list of reusable PICurrents
-- private java.util.ArrayList pool;
--
-- // High water mark for the pool
-- // If the pool size reaches this limit then putPICurrent will
-- // not put PICurrent to the pool.
-- private static final int HIGH_WATER_MARK = 5;
--
-- // currentIndex points to the last PICurrent in the list
-- private int currentIndex;
--
-- PICurrentPool( ) {
-- pool = new java.util.ArrayList( HIGH_WATER_MARK );
-- currentIndex = 0;
-- }
--
-- /**
-- * Puts PICurrent to the re-usable pool.
-- */
-- void putPICurrent( PICurrent current ) {
-- // If there are enough PICurrents in the pool, then don't add
-- // this current to the pool.
-- if( currentIndex >= HIGH_WATER_MARK ) {
-- return;
-- }
-- pool.add(currentIndex , current);
-- currentIndex++;
-- }
--
-- /**
-- * Gets PICurrent from the re-usable pool.
-- */
-- PICurrent getPICurrent( ) {
-- // If there are no entries in the pool then return null
-- if( currentIndex == 0 ) {
-- return null;
-- }
-- // Works like a stack, Gets the last one added first
-- currentIndex--;
-- return (PICurrent) pool.get(currentIndex);
-- }
-- }
--
-- // Contains all the active PICurrents for each thread.
-- // The ArrayList is made to behave like a stack.
-- private java.util.ArrayList currentContainer;
--
-- // Keeps track of number of PICurrents in the stack.
-- private int currentIndex;
--
-- // For Every Thread there will be a pool of re-usable ThreadCurrent's
-- // stored in PICurrentPool
-- private PICurrentPool currentPool;
--
-- // The orb associated with this ThreadCurrentStack
-- private ORB piOrb;
--
-- /**
-- * Constructs the stack and and PICurrentPool
-- */
-- ThreadCurrentStack( ORB piOrb, PICurrent current ) {
-- this.piOrb = piOrb;
-- currentIndex = 0;
-- currentContainer = new java.util.ArrayList( );
-- currentPool = new PICurrentPool( );
-- currentContainer.add( currentIndex, current );
-- currentIndex++;
-- }
--
--
-- /**
-- * pushPICurrent goes through the following steps
-- * 1: Checks to see if there is any PICurrent in PICurrentPool
-- * If present then use that instance to push into the ThreadCurrentStack
-- *
-- * 2:If there is no PICurrent in the pool, then creates a new one and pushes
-- * that into the ThreadCurrentStack
-- */
-- void pushPICurrent( ) {
-- PICurrent current = currentPool.getPICurrent( );
-- if( current == null ) {
-- // get an existing PICurrent to get the slotSize
-- PICurrent currentTemp = peekPICurrent();
-- current = new PICurrent( piOrb, currentTemp.getSlotSize( ));
-- }
-- currentContainer.add( currentIndex, current );
-- currentIndex++;
-- }
--
-- /**
-- * popPICurrent does the following
-- * 1: pops the top PICurrent in the ThreadCurrentStack
-- *
-- * 2: resets the slots in the PICurrent which resets the slotvalues to
-- * null if there are any previous sets.
-- *
-- * 3: pushes the reset PICurrent into the PICurrentPool to reuse
-- */
-- void popPICurrent( ) {
-- // Do not pop the PICurrent, If there is only one.
-- // This should not happen, But an extra check for safety.
-- if( currentIndex <= 1 ) {
-- throw new org.omg.CORBA.INTERNAL(
-- "Cannot pop the only PICurrent in the stack",
-- MinorCodes.CANT_POP_ONLY_CURRENT_2,
-- CompletionStatus.COMPLETED_NO );
-- }
-- currentIndex--;
-- PICurrent current = (PICurrent)currentContainer.get( currentIndex );
-- current.resetSlots( );
-- currentPool.putPICurrent( current );
-- }
--
-- /**
-- * peekPICurrent gets the top PICurrent in the ThreadCurrentStack without
-- * popping.
-- */
-- PICurrent peekPICurrent( ) {
-- return (PICurrent) currentContainer.get( currentIndex - 1);
-- }
--
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/DefineWrapper.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,120 +0,0 @@
--package com.sun.corba.se.impl.orbutil ;
--
--import java.lang.reflect.Method;
--import java.lang.reflect.Modifier;
--
--/** This class provides just a main method. Its purpose is to allow -D arguments to
--* set up the system properties when starting programs with tools like OptimizeIt that
--* make this difficult or impossible.
--*
--* Invocation: {java launcher of some kind} DefineClass -Dxxx=yyy -Dxxx=yyy ... {class name} arg0, arg1, ...
--* Result: updates system properties with -D args, then uses reflection to invoke {class name}.main with the args
--*/
--
--class DefineWrapper {
-- public static void main( String[] args )
-- {
-- int numberDefines = args.length ;
-- String className = null ;
--
-- for (int ctr=0; ctr<args.length; ctr++ ) {
-- String arg = args[ctr] ;
--
-- if ((arg.charAt(0) == '-') && (arg.charAt(1) == 'D')) {
-- int eqIndex = arg.indexOf( '=' ) ;
-- if (eqIndex < 0)
-- throw new Exception( arg + " is not a valid property assignment" ) ;
--
-- final String key = arg.subString( 2, eqIndex ) ;
-- final String value = arg.subStrung( eqIndex + 1 ) ;
--
-- AccessController.doPrivileged( new PrivilegedAction() {
-- public Object run() {
-- System.setProperty( key, value ) ;
-- return null ;
-- }
-- } ) ;
-- } else {
-- numberDefines = ctr ;
-- className = arg ;
-- break ;
-- }
-- }
--
-- if (numberDefines < args.length) {
-- Class cls = getMainClass( className ) ;
-- Method mainMethod = getMainMethod( cls ) ;
--
-- String[] newArgs = new String[ args.length - numberDefines ] ;
-- for (int ctr = numberDefines+1; ctr<args.length; ctr++ ) {
-- newArgs[ ctr-numberDefines-1 ] = args[ ctr ] ;
-- }
--
-- // build args to the main and call it
-- Object params [] = new Object [1];
-- params[0] = newArgs;
-- mainMethod.invoke(null, params);
-- } else {
-- throw new Exception( "No class name given" ) ;
-- }
-- }
--
-- private static Class getMainClass( String name )
-- {
-- // determine the class loader to be used for loading the class
-- // since ServerMain is going to be in JDK and we need to have this
-- // class to load application classes, this is required here.
-- ClassLoader cl = Thread.currentThread().getContextClassLoader();
--
-- if (cl == null)
-- cl = ClassLoader.getSystemClassLoader();
--
-- try {
-- // determine the main class, try loading with current class loader
-- cls = Class.forName( className ) ;
-- } catch (ClassNotFoundException ex) {
-- // eat the exception and try to load using SystemClassLoader
-- cls = Class.forName( className, true, cl);
-- }
-- }
--
-- private static Method getMainMethod( Class serverClass )
-- {
-- Class argTypes[] = new Class[] { String[].class } ;
-- Method method = null ;
--
-- try {
-- method = serverClass.getDeclaredMethod( "main", argTypes ) ;
-- } catch (Exception exc) {
-- throw new Exception( "Could not get main() method: " + exc ) ;
-- }
--
-- if (!isPublicStaticVoid( method ))
-- throw new Exception( "Main method is not public static void" ) ;
--
-- return method ;
-- }
--
-- private static boolean isPublicStaticVoid( Method method )
-- {
-- // check modifiers: public static
-- int modifiers = method.getModifiers ();
-- if (!Modifier.isPublic (modifiers) || !Modifier.isStatic (modifiers)) {
-- logError( method.getName() + " is not public static" ) ;
-- return false ;
-- }
--
-- // check return type and exceptions
-- if (method.getExceptionTypes ().length != 0) {
-- logError( method.getName() + " declares exceptions" ) ;
-- return false ;
-- }
--
-- if (!method.getReturnType().equals (Void.TYPE)) {
-- logError( method.getName() + " does not have a void return type" ) ;
-- return false ;
-- }
--
-- return true ;
-- }
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/resources/sunorb_pt_BR.properties Tue Mar 18 12:29:47 2014 -0700
-+++ ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/resources/sunorb_pt_BR.properties Wed May 07 19:25:52 2014 -0700
-@@ -23,7 +23,7 @@
- # questions.
- #
-
--orbd.usage=Uso: {0} <op\u00E7\u00F5es> \n\nem que <op\u00E7\u00F5es> inclui:\n -port porta de ativa\u00E7\u00E3o na qual o ORBD deve ser iniciado, default 1049 (opcional)\n -defaultdb diret\u00F3rio dos arquivos ORBD, default "./orb.db" (opcional)\n -serverid id do servidor para ORBD, default 1 (opcional)\n -ORBInitialPort porta inicial (obrigat\u00F3rio)\n -ORBInitialHost nome de host inicial (obrigat\u00F3rio)\n
-+orbd.usage=Uso: {0} <op\u00E7\u00F5es> \n\nem que <op\u00E7\u00F5es> inclui:\n -port porta de ativa\u00E7\u00E3o na qual o ORBD deve ser iniciado, padr\u00E3o 1049 (opcional)\n -defaultdb diret\u00F3rio dos arquivos ORBD, padr\u00E3o "./orb.db" (opcional)\n -serverid id do servidor para ORBD, padr\u00E3o 1 (opcional)\n -ORBInitialPort porta inicial (obrigat\u00F3rio)\n -ORBInitialHost nome de host inicial (obrigat\u00F3rio)\n
-
- servertool.usage=Uso: {0} <op\u00E7\u00F5es> \n\nem que <op\u00E7\u00F5es> inclui:\n -ORBInitialPort porta inicial (obrigat\u00F3rio)\n -ORBInitialHost nome de host inicial (obrigat\u00F3rio)\n
- servertool.banner=\n\nBem-vindo \u00E0 Ferramenta de Servidor IDL Java \ninsira os comandos no prompt \n
---- ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl_save.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,909 +0,0 @@
--/*
-- * Copyright (c) 2004, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--package com.sun.corba.se.impl.presentation.rmi ;
--
--import java.lang.reflect.Method;
--
--import java.math.BigInteger;
--
--import java.util.Map;
--import java.util.Set;
--import java.util.HashSet;
--import java.util.Iterator;
--import java.util.HashMap;
--import java.util.StringTokenizer;
--
--import com.sun.corba.se.spi.presentation.rmi.IDLNameTranslator ;
--
--import com.sun.corba.se.impl.presentation.rmi.IDLType ;
--import com.sun.corba.se.impl.presentation.rmi.IDLTypeException ;
--import com.sun.corba.se.impl.presentation.rmi.IDLTypesUtil ;
--import com.sun.corba.se.impl.orbutil.ObjectUtility ;
--
--/**
-- * Bidirectional translator between RMI-IIOP interface methods and
-- * and IDL Names.
-- */
--public class IDLNameTranslatorImpl implements IDLNameTranslator {
--
-- // From CORBA Spec, Table 6 Keywords.
-- // Note that since all IDL identifiers are case
-- // insensitive, java identifier comparisons to these
-- // will be case insensitive also.
-- private static String[] IDL_KEYWORDS = {
--
-- "abstract", "any", "attribute", "boolean", "case", "char",
-- "const", "context", "custom", "default", "double", "enum",
-- "exception", "factory", "FALSE", "fixed", "float", "in", "inout",
-- "interface", "long", "module", "native", "Object", "octet",
-- "oneway", "out", "private", "public", "raises", "readonly", "sequence",
-- "short", "string", "struct", "supports", "switch", "TRUE", "truncatable",
-- "typedef", "unsigned", "union", "ValueBase", "valuetype", "void",
-- "wchar", "wstring"
--
-- };
--
-- private static char[] HEX_DIGITS = {
-- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
-- 'A', 'B', 'C', 'D', 'E', 'F'
-- };
--
-- private static final String UNDERSCORE = "_";
--
-- // used to mangle java inner class names
-- private static final String INNER_CLASS_SEPARATOR =
-- UNDERSCORE + UNDERSCORE;
--
-- // used to form IDL array type names
-- private static final String[] BASE_IDL_ARRAY_MODULE_TYPE=
-- new String[] { "org", "omg", "boxedRMI" } ;
--
-- private static final String BASE_IDL_ARRAY_ELEMENT_TYPE = "seq";
--
-- // used to mangling java identifiers that have a leading underscore
-- private static final String LEADING_UNDERSCORE_CHAR = "J";
-- private static final String ID_CONTAINER_CLASH_CHAR = UNDERSCORE;
--
-- // separator used between types in a mangled overloaded method name
-- private static final String OVERLOADED_TYPE_SEPARATOR =
-- UNDERSCORE + UNDERSCORE;
--
-- // string appended to attribute if it clashes with a method name
-- private static final String ATTRIBUTE_METHOD_CLASH_MANGLE_CHARS =
-- UNDERSCORE + UNDERSCORE;
--
-- private static Set idlKeywords_;
--
-- static {
--
-- idlKeywords_ = new HashSet();
-- for(int i = 0; i < IDL_KEYWORDS.length; i++) {
-- String next = (String) IDL_KEYWORDS[i];
-- // Convert keyword to all caps to ease equality
-- // check.
-- String keywordAllCaps = next.toUpperCase();
-- idlKeywords_.add(keywordAllCaps);
-- }
--
-- }
--
-- //
-- // Instance state
-- //
--
-- // Remote interface for name translation.
-- private Class[] interf_;
--
-- // Maps used to hold name translations. These do not need to be
-- // synchronized since the translation is never modified after
-- // initialization.
-- private Map methodToIDLNameMap_;
-- private Map IDLNameToMethodMap_;
-- private Method[] methods_;
--
-- /**
-- * Return an IDLNameTranslator for the given interface.
-- *
-- * @throws IllegalStateException if given class is not a valid
-- * RMI/IIOP Remote Interface
-- */
-- public static IDLNameTranslator get( Class interf )
-- {
--
-- return new IDLNameTranslatorImpl(new Class[] { interf } );
--
-- }
--
-- /**
-- * Return an IDLNameTranslator for the given interfacex.
-- *
-- * @throws IllegalStateException if given classes are not valid
-- * RMI/IIOP Remote Interfaces
-- */
-- public static IDLNameTranslator get( Class[] interfaces )
-- {
--
-- return new IDLNameTranslatorImpl(interfaces );
--
-- }
--
-- public static String getExceptionId( Class cls )
-- {
-- // Requirements for this method:
-- // 1. cls must be an exception but not a RemoteException.
-- // 2. If cls has an IDL keyword name, an underscore is prepended (1.3.2.2).
-- // 3. If cls jas a leading underscore, J is prepended (1.3.2.3).
-- // 4. If cls has an illegal IDL ident char, it is mapped to UXXXX where
-- // XXXX is the unicode value in hex of the char (1.3.2.4).
-- // 5. double underscore for inner class (1.3.2.5).
-- // 6. The ID is "IDL:" + name with / separators + ":1.0".
-- IDLType itype = classToIDLType( cls ) ;
-- return itype.getExceptionName() ;
-- }
--
-- public Class[] getInterfaces()
-- {
-- return interf_;
-- }
--
-- public Method[] getMethods()
-- {
-- return methods_ ;
-- }
--
-- public Method getMethod( String idlName )
-- {
-- return (Method) IDLNameToMethodMap_.get(idlName);
-- }
--
-- public String getIDLName( Method method )
-- {
-- return (String) methodToIDLNameMap_.get(method);
-- }
--
-- /**
-- * Initialize an IDLNameTranslator for the given interface.
-- *
-- * @throws IllegalStateException if given class is not a valid
-- * RMI/IIOP Remote Interface
-- */
-- private IDLNameTranslatorImpl(Class[] interfaces)
-- {
--
-- try {
-- IDLTypesUtil idlTypesUtil = new IDLTypesUtil();
-- for (int ctr=0; ctr<interfaces.length; ctr++)
-- idlTypesUtil.validateRemoteInterface(interfaces[ctr]);
-- interf_ = interfaces;
-- buildNameTranslation();
-- } catch( IDLTypeException ite) {
-- String msg = ite.getMessage();
-- IllegalStateException ise = new IllegalStateException(msg);
-- ise.initCause(ite);
-- throw ise;
-- }
-- }
--
-- private void buildNameTranslation()
-- {
-- // holds method info, keyed by method
-- Map allMethodInfo = new HashMap() ;
--
-- for (int ctr=0; ctr<interf_.length; ctr++) {
-- Class interf = interf_[ctr] ;
--
-- IDLTypesUtil idlTypesUtil = new IDLTypesUtil();
-- Method[] methods = interf.getMethods();
--
-- // Take an initial pass through all the methods and create some
-- // information that will be used to track the IDL name
-- // transformation.
-- for(int i = 0; i < methods.length; i++) {
--
-- Method nextMethod = methods[i];
--
-- IDLMethodInfo methodInfo = new IDLMethodInfo();
--
-- methodInfo.method = nextMethod;
--
-- methodInfo.propertyType =
-- idlTypesUtil.propertyAccessorMethodType(
-- nextMethod, interf ) ;
--
-- if (methodInfo.propertyType != null) {
-- String attributeName = idlTypesUtil.
-- getAttributeNameForProperty(nextMethod.getName());
-- methodInfo.originalName = attributeName;
-- methodInfo.mangledName = attributeName;
-- } else {
-- methodInfo.originalName = nextMethod.getName();
-- methodInfo.mangledName = nextMethod.getName();
-- }
--
-- allMethodInfo.put(nextMethod, methodInfo);
-- }
-- }
--
-- // Check for having both is<NAME> and get<NAME> methods.
--
--
-- //
-- // Perform case sensitivity test first. This applies to all
-- // method names AND attributes. Compare each method name and
-- // attribute to all other method names and attributes. If names
-- // differ only in case, apply mangling as defined in section 1.3.2.7
-- // of Java2IDL spec. Note that we compare using the original names.
-- //
-- for(Iterator outerIter=allMethodInfo.values().iterator();
-- outerIter.hasNext();) {
-- IDLMethodInfo outer = (IDLMethodInfo) outerIter.next();
-- for(Iterator innerIter = allMethodInfo.values().iterator();
-- innerIter.hasNext();) {
-- IDLMethodInfo inner = (IDLMethodInfo) innerIter.next();
--
-- if( (outer != inner) &&
-- (!outer.originalName.equals(inner.originalName)) &&
-- outer.originalName.equalsIgnoreCase(inner.originalName) ) {
-- outer.mangledName =
-- mangleCaseSensitiveCollision(outer.originalName);
-- break;
-- }
--
-- }
-- }
--
-- for(Iterator iter = allMethodInfo.values().iterator();
-- iter.hasNext();) {
-- IDLMethodInfo next = (IDLMethodcurrentInfo) iter.next();
-- next.mangledName =
-- mangleIdentifier(next.mangledName,
-- next.propertyType != null);
-- }
--
-- //
-- // Now check for overloaded method names and apply 1.3.2.6.
-- //
-- for(Iterator outerIter=allMethodInfo.values().iterator();
-- outerIter.hasNext();) {
-- IDLMethodInfo outer = (IDLMethodInfo) outerIter.next();
-- if (outer.propertyType != null) {
-- continue;
-- }
-- for(Iterator innerIter = allMethodInfo.values().iterator();
-- innerIter.hasNext();) {
-- IDLMethodInfo inner = (IDLMethodInfo) innerIter.next();
--
-- if( (outer != inner) &&
-- (inner.propertyType == null) &&
-- outer.originalName.equals(inner.originalName) ) {
-- outer.mangledName = mangleOverloadedMethod
-- (outer.mangledName, outer.method);
-- break;
-- }
-- }
-- }
--
-- //
-- // Now mangle any properties that clash with method names.
-- //
-- for(Iterator outerIter=allMethodInfo.values().iterator();
-- outerIter.hasNext();) {
-- IDLMethodInfo outer = (IDLMethodInfo) outerIter.next();
-- if(outer.propertyType == null) {
-- continue;
-- }
-- for(Iterator innerIter = allMethodInfo.values().iterator();
-- innerIter.hasNext();) {
-- IDLMethodInfo inner = (IDLMethodInfo) innerIter.next();
-- if( (outer != inner) &&
-- (inner.propertyType == null) &&
-- outer.mangledName.equals(inner.mangledName) ) {
-- outer.mangledName = outer.mangledName +
-- ATTRIBUTE_METHOD_CLASH_MANGLE_CHARS;
-- break;
-- }
-- }
-- }
--
-- //
-- // Ensure that no mapped method names clash with mapped name
-- // of container(1.3.2.9). This is a case insensitive comparison.
-- //
-- for (int ctr=0; ctr<interf_.length; ctr++ ) {
-- Class interf = interf_[ctr] ;
-- String mappedContainerName = getMappedContainerName(interf);
-- for(Iterator iter = allMethodInfo.values().iterator();
-- iter.hasNext();) {
-- IDLMethodInfo next = (IDLMethodInfo) iter.next();
-- if( (next.propertyType == null) &&
-- identifierClashesWithContainer(mappedContainerName,
-- next.mangledName)) {
-- next.mangledName = mangleContainerClash(next.mangledName);
-- }
-- }
-- }
--
-- //
-- // Populate name translation maps.
-- //
-- methodToIDLNameMap_ = new HashMap();
-- IDLNameToMethodMap_ = new HashMap();
-- methods_ = (Method[])allMethodInfo.keySet().toArray(
-- new Method[0] ) ;
--
-- for(Iterator iter = allMethodInfo.values().iterator();
-- iter.hasNext();) {
-- IDLMethodInfo next = (IDLMethodInfo) iter.next();
-- String idlName = next.mangledName;
-- if (next.propertyType != null) {
-- idlName = javaPropertyPrefixToIDL( next.propertyType ) +
-- next.mangledName ;
-- }
--
-- methodToIDLNameMap_.put(next.method, idlName);
--
-- // Final check to see if there are any clashes after all the
-- // manglings have been applied. If so, this is treated as an
-- // invalid interface. Currently, we do a CASE-SENSITIVE
-- // comparison since that matches the rmic behavior.
-- // @@@ Shouldn't this be a case-insensitive check?
-- // If there is a collision between is<TYPE> and get<TYPE>,
-- // map only is<TYPE> to an attribute, and leave the
-- // get<TYPE> method alone.
-- if( IDLNameToMethodMap_.containsKey(idlName) ) {
-- // @@@ I18N
-- Method clash = (Method) IDLNameToMethodMap_.get(idlName);
-- MethodInfo clashMethodInfo =
-- (MethodInfo)allMethodInfo.get( clash ) ;
-- if (clashMethodInfo.isBooleanProperty() &&
-- next.isReadProperty()) {
-- // fix idlName
-- } else if (clashMethodInfo.isReadProperty() &&
-- next.isBooleanProperty()) {
-- // Remove entry under idlName
-- // put entry into table under correct name
-- } else {
-- throw new IllegalStateException("Error : methods " +
-- clash + " and " + next.method +
-- " both result in IDL name '" + idlName + "'");
-- }
-- }
--
-- IDLNameToMethodMap_.put(idlName, next.method);
-- }
--
-- return;
--
-- }
--
--
-- /**
-- * Perform all necessary stand-alone identifier mangling operations
-- * on a java identifier that is being transformed into an IDL name.
-- * That is, mangling operations that don't require looking at anything
-- * else but the identifier itself. This covers sections 1.3.2.2, 1.3.2.3,
-- * and 1.3.2.4 of the Java2IDL spec. Method overloading and
-- * case-sensitivity checks are handled elsewhere.
-- */
--
-- private static String mangleIdentifier(String identifier) {
-- return mangleIdentifier(identifier, false);
-- }
--
-- private static String mangleIdentifier(String identifier, boolean attribute) {
--
-- String mangledName = identifier;
--
-- //
-- // Apply leading underscore test (1.3.2.3)
-- // This should be done before IDL Keyword clash test, since clashing
-- // IDL keywords are mangled by adding a leading underscore.
-- //
-- if( hasLeadingUnderscore(mangledName) ) {
-- mangledName = mangleLeadingUnderscore(mangledName);
-- }
--
-- //
-- // Apply IDL keyword clash test (1.3.2.2).
-- // This is not needed for attributes since when the full property
-- // name is composed it cannot clash with an IDL keyword.
-- // (Also, rmic doesn't do it.)
-- //
--
-- if( !attribute && isIDLKeyword(mangledName) ) {
-- mangledName = mangleIDLKeywordClash(mangledName);
-- }
--
-- //
-- // Replace illegal IDL identifier characters (1.3.2.4)
-- // for all method names and attributes.
-- //
-- if( !isIDLIdentifier(mangledName) ) {
-- mangledName = mangleUnicodeChars(mangledName);
-- }
--
-- return mangledName;
-- }
--
-- /**
-- * Checks whether a java identifier clashes with an
-- * IDL keyword. Note that this is a case-insensitive
-- * comparison.
-- *
-- * Used to implement section 1.3.2.2 of Java2IDL spec.
-- */
-- private static boolean isIDLKeyword(String identifier) {
--
-- String identifierAllCaps = identifier.toUpperCase();
--
-- return idlKeywords_.contains(identifierAllCaps);
-- }
--
-- private static String mangleIDLKeywordClash(String identifier) {
-- return UNDERSCORE + identifier;
-- }
--
-- private static String mangleLeadingUnderscore(String identifier) {
-- return LEADING_UNDERSCORE_CHAR + identifier;
-- }
--
-- /**
-- * Checks whether a java identifier starts with an underscore.
-- * Used to implement section 1.3.2.3 of Java2IDL spec.
-- */
-- private static boolean hasLeadingUnderscore(String identifier) {
-- return identifier.startsWith(UNDERSCORE);
-- }
--
-- /**
-- * Implements Section 1.3.2.4 of Java2IDL Mapping.
-- * All non-IDL identifier characters must be replaced
-- * with their Unicode representation.
-- */
-- static String mangleUnicodeChars(String identifier) {
-- StringBuffer mangledIdentifier = new StringBuffer();
--
-- for(int i = 0; i < identifier.length(); i++) {
-- char nextChar = identifier.charAt(i);
-- if( isIDLIdentifierChar(nextChar) ) {
-- mangledIdentifier.append(nextChar);
-- } else {
-- String unicode = charToUnicodeRepresentation(nextChar);
-- mangledIdentifier.append(unicode);
-- }
-- }
--
-- return mangledIdentifier.toString();
-- }
--
-- /**
-- * Implements mangling portion of Section 1.3.2.7 of Java2IDL spec.
-- * This method only deals with the actual mangling. Decision about
-- * whether case-sensitive collision mangling is required is made
-- * elsewhere.
-- *
-- *
-- * "...a mangled name is generated consisting of the original name
-- * followed by an underscore separated list of decimal indices
-- * into the string, where the indices identify all the upper case
-- * characters in the original string. Indices are zero based."
-- *
-- */
-- String mangleCaseSensitiveCollision(String identifier) {
--
-- StringBuffer mangledIdentifier = new StringBuffer(identifier);
--
-- // There is always at least one trailing underscore, whether or
-- // not the identifier has uppercase letters.
-- mangledIdentifier.append(UNDERSCORE);
--
-- boolean needUnderscore = false;
-- for(int i = 0; i < identifier.length(); i++) {
-- char next = identifier.charAt(i);
-- if( Character.isUpperCase(next) ) {
-- // This bit of logic is needed to ensure that we have
-- // an underscore separated list of indices but no
-- // trailing underscores. Basically, after we have at least
-- // one uppercase letter, we always put an undercore before
-- // printing the next one.
-- if( needUnderscore ) {
-- mangledIdentifier.append(UNDERSCORE);
-- }
-- mangledIdentifier.append(i);
-- needUnderscore = true;
-- }
-- }
--
-- return mangledIdentifier.toString();
-- }
--
-- private static String mangleContainerClash(String identifier) {
-- return identifier + ID_CONTAINER_CLASH_CHAR;
-- }
--
-- /**
-- * Implements Section 1.3.2.9 of Java2IDL Mapping. Container in this
-- * context means the name of the java Class(excluding package) in which
-- * the identifier is defined. Comparison is case-insensitive.
-- */
-- private static boolean identifierClashesWithContainer
-- (String mappedContainerName, String identifier) {
--
-- return identifier.equalsIgnoreCase(mappedContainerName);
-- }
--
-- /**
-- * Returns Unicode mangling as defined in Section 1.3.2.4 of
-- * Java2IDL spec.
-- *
-- * "For Java identifiers that contain illegal OMG IDL identifier
-- * characters such as '$' or Unicode characters outside of ISO Latin 1,
-- * any such illegal characters are replaced by "U" followed by the
-- * 4 hexadecimal characters(in upper case) representing the Unicode
-- * value. So, the Java name a$b is mapped to aU0024b and
-- * x\u03bCy is mapped to xU03BCy."
-- */
-- public static String charToUnicodeRepresentation(char c) {
--
-- int orig = (int) c;
-- StringBuffer hexString = new StringBuffer();
--
-- int value = orig;
--
-- while( value > 0 ) {
-- int div = value / 16;
-- int mod = value % 16;
-- hexString.insert(0, HEX_DIGITS[mod]);
-- value = div;
-- }
--
-- int numZerosToAdd = 4 - hexString.length();
-- for(int i = 0; i < numZerosToAdd; i++) {
-- hexString.insert(0, "0");
-- }
--
-- hexString.insert(0, "U");
-- return hexString.toString();
-- }
--
-- private static boolean isIDLIdentifier(String identifier) {
--
-- boolean isIdentifier = true;
--
-- for(int i = 0; i < identifier.length(); i++) {
-- char nextChar = identifier.charAt(i);
-- // 1st char must be alphbetic.
-- isIdentifier = (i == 0) ?
-- isIDLAlphabeticChar(nextChar) :
-- isIDLIdentifierChar(nextChar);
-- if( !isIdentifier ) {
-- break;
-- }
-- }
--
-- return isIdentifier;
--
-- }
--
-- private static boolean isIDLIdentifierChar(char c) {
-- return (isIDLAlphabeticChar(c) ||
-- isIDLDecimalDigit(c) ||
-- isUnderscore(c));
-- }
--
-- /**
-- * True if character is one of 114 Alphabetic characters as
-- * specified in Table 2 of Chapter 3 in CORBA spec.
-- */
-- private static boolean isIDLAlphabeticChar(char c) {
--
-- // NOTE that we can't use the java.lang.Character
-- // isUpperCase, isLowerCase, etc. methods since they
-- // include many characters other than the Alphabetic list in
-- // the CORBA spec. Instead, we test for inclusion in the
-- // Unicode value ranges for the corresponding legal characters.
--
-- boolean alphaChar =
-- (
-- // A - Z
-- ((c >= 0x0041) && (c <= 0x005A))
--
-- ||
--
-- // a - z
-- ((c >= 0x0061) && (c <= 0x007A))
--
-- ||
--
-- // other letter uppercase, other letter lowercase, which is
-- // the entire upper half of C1 Controls except X and /
-- ((c >= 0x00C0) && (c <= 0x00FF)
-- && (c != 0x00D7) && (c != 0x00F7)));
--
-- return alphaChar;
-- }
--
-- /**
-- * True if character is one of 10 Decimal Digits
-- * specified in Table 3 of Chapter 3 in CORBA spec.
-- */
-- private static boolean isIDLDecimalDigit(char c) {
-- return ( (c >= 0x0030) && (c <= 0x0039) );
-- }
--
-- private static boolean isUnderscore(char c) {
-- return ( c == 0x005F );
-- }
--
-- /**
-- * Mangle an overloaded method name as defined in Section 1.3.2.6 of
-- * Java2IDL spec. Current value of method name is passed in as argument.
-- * We can't start from original method name since the name might have
-- * been partially mangled as a result of the other rules.
-- */
-- private static String mangleOverloadedMethod(String mangledName, Method m) {
--
-- IDLTypesUtil idlTypesUtil = new IDLTypesUtil();
--
-- // Start by appending the separator string
-- String newMangledName = mangledName + OVERLOADED_TYPE_SEPARATOR;
--
-- Class[] parameterTypes = m.getParameterTypes();
--
-- for(int i = 0; i < parameterTypes.length; i++) {
-- Class nextParamType = parameterTypes[i];
--
-- if( i > 0 ) {
-- newMangledName = newMangledName + OVERLOADED_TYPE_SEPARATOR;
-- }
-- IDLType idlType = classToIDLType(nextParamType);
--
-- String moduleName = idlType.getModuleName();
-- String memberName = idlType.getMemberName();
--
-- String typeName = (moduleName.length() > 0) ?
-- moduleName + UNDERSCORE + memberName : memberName;
--
-- if( !idlTypesUtil.isPrimitive(nextParamType) &&
-- (idlTypesUtil.getSpecialCaseIDLTypeMapping(nextParamType)
-- == null) &&
-- isIDLKeyword(typeName) ) {
-- typeName = mangleIDLKeywordClash(typeName);
-- }
--
-- typeName = mangleUnicodeChars(typeName);
--
-- newMangledName = newMangledName + typeName;
-- }
--
-- return newMangledName;
-- }
--
--
-- private static IDLType classToIDLType(Class c) {
--
-- IDLType idlType = null;
-- IDLTypesUtil idlTypesUtil = new IDLTypesUtil();
--
-- if( idlTypesUtil.isPrimitive(c) ) {
--
-- idlType = idlTypesUtil.getPrimitiveIDLTypeMapping(c);
--
-- } else if( c.isArray() ) {
--
-- // Calculate array depth, as well as base element type.
-- Class componentType = c.getComponentType();
-- int numArrayDimensions = 1;
-- while(componentType.isArray()) {
-- componentType = componentType.getComponentType();
-- numArrayDimensions++;
-- }
-- IDLType componentIdlType = classToIDLType(componentType);
--
-- String[] modules = BASE_IDL_ARRAY_MODULE_TYPE;
-- if( componentIdlType.hasModule() ) {
-- modules = (String[])ObjectUtility.concatenateArrays( modules,
-- componentIdlType.getModules() ) ;
-- }
--
-- String memberName = BASE_IDL_ARRAY_ELEMENT_TYPE +
-- numArrayDimensions + UNDERSCORE +
-- componentIdlType.getMemberName();
--
-- idlType = new IDLType(c, modules, memberName);
--
-- } else {
-- idlType = idlTypesUtil.getSpecialCaseIDLTypeMapping(c);
--
-- if (idlType == null) {
-- // Section 1.3.2.5 of Java2IDL spec defines mangling rules for
-- // inner classes.
-- String memberName = getUnmappedContainerName(c);
--
-- // replace inner class separator with double underscore
-- memberName = memberName.replaceAll("\\$",
-- INNER_CLASS_SEPARATOR);
--
-- if( hasLeadingUnderscore(memberName) ) {
-- memberName = mangleLeadingUnderscore(memberName);
-- }
--
-- // Get raw package name. If there is a package, it
-- // will still have the "." separators and none of the
-- // mangling rules will have been applied.
-- String packageName = getPackageName(c);
--
-- if (packageName == null) {
-- idlType = new IDLType( c, memberName ) ;
-- } else {
-- // If this is a generated IDL Entity Type we need to
-- // prepend org_omg_boxedIDL per sections 1.3.5 and 1.3.9
-- if (idlTypesUtil.isEntity(c)) {
-- packageName = "org.omg.boxedIDL." + packageName ;
-- }
--
-- // Section 1.3.2.1 and 1.3.2.6 of Java2IDL spec defines
-- // rules for mapping java packages to IDL modules and for
-- // mangling module name portion of type name. NOTE that
-- // of the individual identifier mangling rules,
-- // only the leading underscore test is done here.
-- // The other two(IDL Keyword, Illegal Unicode chars) are
-- // done in mangleOverloadedMethodName.
-- StringTokenizer tokenizer =
-- new StringTokenizer(packageName, ".");
--
-- String[] modules = new String[ tokenizer.countTokens() ] ;
-- int index = 0 ;
-- while (tokenizer.hasMoreElements()) {
-- String next = tokenizer.nextToken();
-- String nextMangled = hasLeadingUnderscore(next) ?
-- mangleLeadingUnderscore(next) : next;
--
-- modules[index++] = nextMangled ;
-- }
--
-- idlType = new IDLType(c, modules, memberName);
-- }
-- }
-- }
--
-- return idlType;
-- }
--
-- /**
-- * Return Class' package name or null if there is no package.
-- */
-- private static String getPackageName(Class c) {
-- Package thePackage = c.getPackage();
-- String packageName = null;
--
-- // Try to get package name by introspection. Some classloaders might
-- // not provide this information, so check for null.
-- if( thePackage != null ) {
-- packageName = thePackage.getName();
-- } else {
-- // brute force method
-- String fullyQualifiedClassName = c.getName();
-- int lastDot = fullyQualifiedClassName.indexOf('.');
-- packageName = (lastDot == -1) ? null :
-- fullyQualifiedClassName.substring(0, lastDot);
-- }
-- return packageName;
-- }
--
-- private static String getMappedContainerName(Class c) {
-- String unmappedName = getUnmappedContainerName(c);
--
-- return mangleIdentifier(unmappedName);
-- }
--
-- /**
-- * Return portion of class name excluding package name.
-- */
-- private static String getUnmappedContainerName(Class c) {
--
-- String memberName = null;
-- String packageName = getPackageName(c);
--
-- String fullyQualifiedClassName = c.getName();
--
-- if( packageName != null ) {
-- int packageLength = packageName.length();
-- memberName = fullyQualifiedClassName.substring(packageLength + 1);
-- } else {
-- memberName = fullyQualifiedClassName;
--
-- }
--
-- return memberName;
-- }
--
-- /**
-- * Internal helper class for tracking information related to each
-- * interface method while we're building the name translation table.
-- */
-- private static class IDLMethodInfo
-- {
-- public Method method;
-- public String propertyType;
--
-- // If this is a property, originalName holds the original
-- // attribute name. Otherwise, it holds the original method name.
-- public String originalName;
--
-- // If this is a property, mangledName holds the mangled attribute
-- // name. Otherwise, it holds the mangled method name.
-- public String mangledName;
--
-- }
--
-- public String toString() {
--
-- StringBuffer contents = new StringBuffer();
-- contents.append("IDLNameTranslator[" );
-- for( int ctr=0; ctr<interf_.length; ctr++) {
-- if (ctr != 0)
-- contents.append( " " ) ;
-- contents.append( interf_[ctr].getName() ) ;
-- }
-- contents.append("]\n");
-- for(Iterator iter = methodToIDLNameMap_.keySet().iterator();
-- iter.hasNext();) {
--
-- Method method = (Method) iter.next();
-- String idlName = (String) methodToIDLNameMap_.get(method);
--
-- contents.append(idlName + ":" + method + "\n");
--
-- }
--
-- return contents.toString();
-- }
--
-- public static void main(String[] args) {
--
-- Class remoteInterface = java.rmi.Remote.class;
--
-- if( args.length > 0 ) {
-- String className = args[0];
-- try {
-- remoteInterface = Class.forName(className);
-- } catch(Exception e) {
-- e.printStackTrace();
-- System.exit(-1);
-- }
-- }
--
-- System.out.println("Building name translation for " + remoteInterface);
-- try {
-- IDLNameTranslator nameTranslator =
-- IDLNameTranslatorImpl.get(remoteInterface);
-- System.out.println(nameTranslator);
-- } catch(IllegalStateException ise) {
-- ise.printStackTrace();
-- }
-- }
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLTypesUtil_save.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,520 +0,0 @@
--
--package com.sun.corba.se.impl.presentation.rmi ;
--
--import java.lang.reflect.Method;
--import java.lang.reflect.Field;
--import java.util.Set;
--import java.util.HashSet;
--import java.util.Iterator;
--
--/**
-- * Utility class for testing RMI/IDL Types as defined in
-- * Section 1.2 of The Java Language to IDL Mapping. Note that
-- * these are static checks only. Runtime checks, such as those
-- * described in Section 1.2.3, #3, are not covered.
-- */
--public class IDLTypesUtil {
--
-- public static final String JAVA_GET_PROPERTY_PREFIX = "get";
-- public static final String JAVA_SET_PROPERTY_PREFIX = "set";
-- public static final String JAVA_IS_PROPERTY_PREFIX = "is";
--
-- public static final int VALID_TYPE = 0;
-- public static final int INVALID_TYPE = 1;
--
-- /**
-- * Validate a class to ensure it conforms to the rules for a
-- * Java RMI/IIOP interface.
-- *
-- * @throws IDLTypeException if not a valid RMI/IIOP interface.
-- */
-- public void validateRemoteInterface(Class c) throws IDLTypeException
-- {
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- if( !c.isInterface() ) {
-- String msg = "Class " + c + " must be a java interface.";
-- throw new IDLTypeException(msg);
-- }
--
-- if( !java.rmi.Remote.class.isAssignableFrom(c) ) {
-- String msg = "Class " + c + " must extend java.rmi.Remote, " +
-- "either directly or indirectly.";
-- throw new IDLTypeException(msg);
-- }
--
-- // Get all methods, including super-interface methods.
-- Method[] methods = c.getMethods();
--
-- for(int i = 0; i < methods.length; i++) {
-- Method next = methods[i];
-- validateExceptions(next);
-- }
--
-- // Removed because of bug 4989053
-- // validateDirectInterfaces(c);
-- validateConstants(c);
--
-- return;
-- }
--
-- public boolean isRemoteInterface(Class c)
-- {
-- boolean remoteInterface = true;
-- try {
-- validateRemoteInterface(c);
-- } catch(IDLTypeException ite) {
-- remoteInterface = false;
-- }
--
-- return remoteInterface;
-- }
--
-- /**
-- * Section 1.2.2 Primitive Types
-- */
-- public boolean isPrimitive(Class c)
-- {
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- return c.isPrimitive();
-- }
--
-- /**
-- * Section 1.2.4
-- */
-- public boolean isValue(Class c)
-- {
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- return
-- (!c.isInterface() &&
-- java.io.Serializable.class.isAssignableFrom(c) &&
-- !java.rmi.Remote.class.isAssignableFrom(c));
-- }
--
-- /**
-- * Section 1.2.5
-- */
-- public boolean isArray(Class c)
-- {
-- boolean arrayType = false;
--
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- if( c.isArray() ) {
-- Class componentType = c.getComponentType();
-- arrayType =
-- (isPrimitive(componentType) || isRemoteInterface(componentType) ||
-- isEntity(componentType) || isException(componentType) ||
-- isValue(componentType) || isObjectReference(componentType) );
-- }
--
-- return arrayType;
-- }
--
-- /**
-- * Section 1.2.6
-- */
-- public boolean isException(Class c)
-- {
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- // Must be a checked exception, not including RemoteException or
-- // its subclasses.
-- return isCheckedException(c) && !isRemoteException(c) && isValue(c);
-- }
--
-- public boolean isRemoteException(Class c)
-- {
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- return java.rmi.RemoteException.class.isAssignableFrom(c) ;
-- }
--
-- public boolean isCheckedException(Class c)
-- {
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- return Throwable.class.isAssignableFrom(c) &&
-- !RuntimeException.class.isAssignableFrom(c) &&
-- !Error.class.isAssignableFrom(c) ;
-- }
--
-- /**
-- * Section 1.2.7
-- */
-- public boolean isObjectReference(Class c)
-- {
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- return (c.isInterface() &&
-- org.omg.CORBA.Object.class.isAssignableFrom(c));
-- }
--
-- /**
-- * Section 1.2.8
-- */
-- public boolean isEntity(Class c)
-- {
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- Class superClass = c.getSuperclass();
-- return (!c.isInterface() &&
-- (superClass != null) &&
-- (org.omg.CORBA.portable.IDLEntity.class.isAssignableFrom(c)));
-- }
--
-- public String javaPropertyPrefixToIDL( String javaPrefix )
-- {
-- return "_" + javaPrefix + "_" ;
-- }
--
-- /**
-- * Return the property type if given method is legal property accessor as defined in
-- * Section 1.3.4.3 of Java2IDL spec. Result is one of: JAVA_GET_PROPERTY_PREFIX,
-- * JAVA_SET_PROPERTY_PREFIX, JAVA_IS_PROPERTY_PREFIX.
-- */
-- public String propertyAccessorMethodType(Method m, Class c) {
--
-- String methodName = m.getName();
-- Class returnType = m.getReturnType();
-- Class[] parameters = m.getParameterTypes();
-- Class[] exceptionTypes = m.getExceptionTypes();
-- String propertyType = null;
--
-- if( methodName.startsWith(JAVA_GET_PROPERTY_PREFIX) ) {
--
-- if((parameters.length == 0) && (returnType != Void.TYPE) &&
-- !hasCorrespondingReadProperty(m, c, JAVA_IS_PROPERTY_PREFIX) {
-- propertyType = JAVA_GET_PROPERTY_PREFIX;
-- }
--
-- } else if( methodName.startsWith(JAVA_SET_PROPERTY_PREFIX) ) {
--
-- if((returnType == Void.TYPE) && (parameters.length == 1)) {
-- if (hasCorrespondingReadProperty(m, c, JAVA_GET_PROPERTY_PREFIX) ||
-- hasCorrespondingReadProperty(m, c, JAVA_IS_PROPERTY_PREFIX)) {
-- propertyType = JAVA_SET_PROPERTY_PREFIX;
-- }
-- }
--
-- } else if( methodName.startsWith(JAVA_IS_PROPERTY_PREFIX) ) {
-- if((parameters.length == 0) && (returnType == Boolean.TYPE)) {
-- propertyType = JAVA_IS_PROPERTY_PREFIX;
-- }
-- }
--
-- // Some final checks that apply to all properties.
-- if( propertyType != null ) {
-- if(!validPropertyExceptions(m) ||
-- (methodName.length() <= propertyType.length())) {
-- propertyType = null;
-- }
-- }
--
-- return propertyType ;
-- }
--
-- private boolean hasCorrespondingReadProperty
-- (Method writeProperty, Class c, String readPropertyPrefix) {
--
-- String writePropertyMethodName = writeProperty.getName();
-- Class[] writePropertyParameters = writeProperty.getParameterTypes();
-- boolean foundReadProperty = false;
--
-- try {
-- // Look for a valid corresponding Read property
-- String readPropertyMethodName =
-- writePropertyMethodName.replaceFirst
-- (JAVA_SET_PROPERTY_PREFIX, readPropertyPrefix);
-- Method readPropertyMethod = c.getMethod(readPropertyMethodName,
-- new Class[] {});
-- foundReadProperty =
-- ((propertyAccessorMethodType(readPropertyMethod, c) != null) &&
-- (readPropertyMethod.getReturnType() ==
-- writePropertyParameters[0]));
-- } catch(Exception e) {
-- // ignore. this means we didn't find a corresponding get property.
-- }
--
-- return foundReadProperty;
-- }
--
-- public String getAttributeNameForProperty(String propertyName) {
-- String attributeName = null;
-- String prefix = null;
--
-- if( propertyName.startsWith(JAVA_GET_PROPERTY_PREFIX) ) {
-- prefix = JAVA_GET_PROPERTY_PREFIX;
-- } else if( propertyName.startsWith(JAVA_SET_PROPERTY_PREFIX) ) {
-- prefix = JAVA_SET_PROPERTY_PREFIX;
-- } else if( propertyName.startsWith(JAVA_IS_PROPERTY_PREFIX) ) {
-- prefix = JAVA_IS_PROPERTY_PREFIX;
-- }
--
-- if( (prefix != null) && (prefix.length() < propertyName.length()) ) {
-- String remainder = propertyName.substring(prefix.length());
-- if( (remainder.length() >= 2) &&
-- Character.isUpperCase(remainder.charAt(0)) &&
-- Character.isUpperCase(remainder.charAt(1)) ) {
-- // don't set the first letter to lower-case if the
-- // first two are upper-case
-- attributeName = remainder;
-- } else {
-- attributeName = Character.toLowerCase(remainder.charAt(0)) +
-- remainder.substring(1);
-- }
-- }
--
-- return attributeName;
-- }
--
-- /**
-- * Return IDL Type name for primitive types as defined in
-- * Section 1.3.3 of Java2IDL spec or null if not a primitive type.
-- */
-- public IDLType getPrimitiveIDLTypeMapping(Class c) {
--
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- if( c.isPrimitive() ) {
-- if( c == Void.TYPE ) {
-- return new IDLType( c, "void" ) ;
-- } else if( c == Boolean.TYPE ) {
-- return new IDLType( c, "boolean" ) ;
-- } else if( c == Character.TYPE ) {
-- return new IDLType( c, "wchar" ) ;
-- } else if( c == Byte.TYPE ) {
-- return new IDLType( c, "octet" ) ;
-- } else if( c == Short.TYPE ) {
-- return new IDLType( c, "short" ) ;
-- } else if( c == Integer.TYPE ) {
-- return new IDLType( c, "long" ) ;
-- } else if( c == Long.TYPE ) {
-- return new IDLType( c, "long_long" ) ;
-- } else if( c == Float.TYPE ) {
-- return new IDLType( c, "float" ) ;
-- } else if( c == Double.TYPE ) {
-- return new IDLType( c, "double" ) ;
-- }
-- }
--
-- return null;
-- }
--
-- /**
-- * Return IDL Type name for special case type mappings as defined in
-- * Table 1-1 of Java2IDL spec or null if given class is not a special
-- * type.
-- */
-- public IDLType getSpecialCaseIDLTypeMapping(Class c) {
--
-- if( c == null ) {
-- throw new IllegalArgumentException();
-- }
--
-- if( c == java.lang.Object.class ) {
-- return new IDLType( c, new String[] { "java", "lang" },
-- "Object" ) ;
-- } else if( c == java.lang.String.class ) {
-- return new IDLType( c, new String[] { "CORBA" },
-- "WStringValue" ) ;
-- } else if( c == java.lang.Class.class ) {
-- return new IDLType( c, new String[] { "javax", "rmi", "CORBA" },
-- "ClassDesc" ) ;
-- } else if( c == java.io.Serializable.class ) {
-- return new IDLType( c, new String[] { "java", "io" },
-- "Serializable" ) ;
-- } else if( c == java.io.Externalizable.class ) {
-- return new IDLType( c, new String[] { "java", "io" },
-- "Externalizable" ) ;
-- } else if( c == java.rmi.Remote.class ) {
-- return new IDLType( c, new String[] { "java", "rmi" },
-- "Remote" ) ;
-- } else if( c == org.omg.CORBA.Object.class ) {
-- return new IDLType( c, "Object" ) ;
-- } else {
-- return null;
-- }
-- }
--
-- /**
-- * Implements 1.2.3 #2 and #4
-- */
-- private void validateExceptions(Method method) throws IDLTypeException {
--
-- Class[] exceptions = method.getExceptionTypes();
--
-- boolean declaresRemoteExceptionOrSuperClass = false;
--
-- // Section 1.2.3, #2
-- for(int eIndex = 0; eIndex < exceptions.length; eIndex++) {
-- Class exception = exceptions[eIndex];
-- if( isRemoteExceptionOrSuperClass(exception) ) {
-- declaresRemoteExceptionOrSuperClass = true;
-- break;
-- }
-- }
--
-- if( !declaresRemoteExceptionOrSuperClass ) {
-- String msg = "Method '" + method + "' must throw at least one " +
-- "exception of type java.rmi.RemoteException or one of its " +
-- "super-classes";
-- throw new IDLTypeException(msg);
-- }
--
-- // Section 1.2.3, #4
-- // See also bug 4972402
-- // For all exceptions E in exceptions,
-- // (isCheckedException(E) => (isValue(E) || RemoteException.isAssignableFrom( E ) )
-- for(int eIndex = 0; eIndex < exceptions.length; eIndex++) {
-- Class exception = exceptions[eIndex];
--
-- if (isCheckedException(exception) && !isValue(exception) &&
-- !isRemoteException(exception))
-- {
-- String msg = "Exception '" + exception + "' on method '" +
-- method + "' is not a allowed RMI/IIOP exception type";
-- throw new IDLTypeException(msg);
-- }
-- }
--
-- return;
-- }
--
-- /**
-- * Returns true if the method's throw clause conforms to the exception
-- * restrictions for properties as defined in Section 1.3.4.3 of
-- * Java2IDL spec. This means that for all exceptions E declared on the
-- * method, E isChecked => RemoteException.isAssignableFrom( E ).
-- */
-- private boolean validPropertyExceptions(Method method)
-- {
-- Class[] exceptions = method.getExceptionTypes();
--
-- for(int eIndex = 0; eIndex < exceptions.length; eIndex++) {
-- Class exception = exceptions[eIndex];
--
-- if (isCheckedException(exception) && !isRemoteException(exception))
-- return false ;
-- }
--
-- return true;
-- }
--
-- /**
-- * Implements Section 1.2.3, #2.
-- */
-- private boolean isRemoteExceptionOrSuperClass(Class c) {
-- return
-- ((c == java.rmi.RemoteException.class) ||
-- (c == java.io.IOException.class) ||
-- (c == java.lang.Exception.class) ||
-- (c == java.lang.Throwable.class));
-- }
--
-- /**
-- * Implements Section 1.2.3, #5.
-- */
-- private void validateDirectInterfaces(Class c) throws IDLTypeException {
--
-- Class[] directInterfaces = c.getInterfaces();
--
-- if( directInterfaces.length < 2 ) {
-- return;
-- }
--
-- Set allMethodNames = new HashSet();
-- Set currentMethodNames = new HashSet();
--
-- for(int i = 0; i < directInterfaces.length; i++) {
-- Class next = directInterfaces[i];
-- Method[] methods = next.getMethods();
--
-- // Comparison is based on method names only. First collect
-- // all methods from current interface, eliminating duplicate
-- // names.
-- currentMethodNames.clear();
-- for(int m = 0; m < methods.length; m++) {
-- currentMethodNames.add(methods[m].getName());
-- }
--
-- // Now check each method against list of all unique method
-- // names processed so far.
-- for(Iterator iter=currentMethodNames.iterator(); iter.hasNext();) {
-- String methodName = (String) iter.next();
-- if( allMethodNames.contains(methodName) ) {
-- String msg = "Class " + c + " inherits method " +
-- methodName + " from multiple direct interfaces.";
-- throw new IDLTypeException(msg);
-- } else {
-- allMethodNames.add(methodName);
-- }
-- }
-- }
--
-- return;
-- }
--
-- /**
-- * Implements 1.2.3 #6
-- */
-- private void validateConstants(final Class c)
-- throws IDLTypeException {
--
-- Field[] fields = null;
--
-- try {
-- fields = (Field[])
-- java.security.AccessController.doPrivileged
-- (new java.security.PrivilegedExceptionAction() {
-- public java.lang.Object run() throws Exception {
-- return c.getFields();
-- }
-- });
-- } catch(java.security.PrivilegedActionException pae) {
-- IDLTypeException ite = new IDLTypeException();
-- ite.initCause(pae);
-- throw ite;
-- }
--
-- for(int i = 0; i < fields.length; i++) {
-- Field next = fields[i];
-- Class fieldType = next.getType();
-- if( (fieldType != java.lang.String.class) &&
-- !isPrimitive(fieldType) ) {
-- String msg = "Constant field '" + next.getName() +
-- "' in class '" + next.getDeclaringClass().getName() +
-- "' has invalid type' " + next.getType() + "'. Constants" +
-- " in RMI/IIOP interfaces can only have primitive" +
-- " types and java.lang.String types.";
-- throw new IDLTypeException(msg);
-- }
-- }
--
--
-- return;
-- }
--
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalClientRequestImpl.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,138 +0,0 @@
--/*
-- * Copyright (c) 1999, 2003, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--package com.sun.corba.se.impl.iiop;
--
--import com.sun.corba.se.impl.protocol.Request;
--import com.sun.corba.se.impl.core.ClientRequest;
--import com.sun.corba.se.impl.core.ServiceContext;
--import com.sun.corba.se.impl.core.ServiceContexts;
--import com.sun.corba.se.impl.core.ClientResponse;
--import com.sun.corba.se.impl.core.ServerRequest;
--import com.sun.corba.se.impl.core.ServerResponse;
--import com.sun.corba.se.impl.corba.IOR;
--import com.sun.corba.se.impl.corba.GIOPVersion;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage;
--import com.sun.corba.se.impl.orbutil.ORBConstants;
--import com.sun.corba.se.impl.core.ORBVersion;
--import com.sun.corba.se.impl.core.ORB;
--import com.sun.corba.se.impl.orbutil.ORBUtility;
--import com.sun.corba.se.impl.ior.ObjectKeyFactory ;
--import com.sun.corba.se.impl.ior.ObjectKey ;
--import com.sun.corba.se.impl.ior.ObjectKeyTemplate ;
--import com.sun.corba.se.impl.ior.IIOPProfile;
--
--public class LocalClientRequestImpl extends IIOPOutputStream
-- implements ClientRequest
--{
-- public LocalClientRequestImpl( GIOPVersion gv,
-- ORB orb, IOR ior, short addrDisposition,
-- String operationName, boolean oneway, ServiceContexts svc,
-- int requestId, byte streamFormatVersion)
-- {
-- super(gv,
-- orb,
-- null,
-- BufferManagerFactory.newBufferManagerWrite(BufferManagerFactory.GROW),
-- streamFormatVersion);
--
-- this.isOneway = oneway;
-- boolean responseExpected = !isOneway;
--
-- IIOPProfile iop = ior.getProfile();
-- ObjectKey okey = iop.getObjectKey();
-- ObjectKeyTemplate oktemp = okey.getTemplate() ;
-- ORBVersion version = oktemp.getORBVersion() ;
-- orb.setORBVersion( version ) ;
--
-- this.request = MessageBase.createRequest(orb, gv, requestId,
-- responseExpected, ior, addrDisposition, operationName, svc, null);
-- setMessage(request);
-- request.write(this);
--
-- // mark beginning of msg body for possible later use
-- bodyBegin = getSize();
-- }
--
-- public int getRequestId() {
-- return request.getRequestId();
-- }
--
-- public boolean isOneWay() {
-- return isOneway;
-- }
--
-- public ServiceContexts getServiceContexts() {
-- return request.getServiceContexts();
-- }
--
-- public String getOperationName() {
-- return request.getOperation();
-- }
--
-- public ObjectKey getObjectKey() {
-- return request.getObjectKey();
-- }
--
-- public ServerRequest getServerRequest()
-- {
-- // Set the size of the marshalled data in the message header.
-- getMessage().setSize( getByteBuffer(), getSize() ) ;
--
-- // Construct a new ServerRequest out of the buffer in this ClientRequest
-- LocalServerRequestImpl serverRequest = new LocalServerRequestImpl(
-- (ORB)orb(), toByteArray(), request ) ;
--
-- // Skip over all of the GIOP header information. This positions
-- // the offset in the buffer so that the skeleton can correctly read
-- // the marshalled arguments.
-- serverRequest.setIndex( bodyBegin ) ;
--
-- return serverRequest ;
-- }
--
-- public ClientResponse invoke()
-- {
-- ORB myORB = (ORB)orb() ;
--
-- ServerResponse serverResponse = myORB.process( getServerRequest() ) ;
--
-- LocalServerResponseImpl lsr = (LocalServerResponseImpl)serverResponse ;
--
-- return lsr.getClientResponse() ;
-- }
--
-- /**
-- * Check to see if the request is local.
-- */
-- public boolean isLocal(){
-- return true;
-- }
--
-- private RequestMessage request;
-- private int bodyBegin;
-- private boolean isOneway;
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalClientResponseImpl.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,162 +0,0 @@
--/*
-- * Copyright (c) 1999, 2003, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--package com.sun.corba.se.impl.iiop;
--
--import java.io.IOException;
--
--import org.omg.CORBA.SystemException;
--import org.omg.CORBA.CompletionStatus;
--
--import com.sun.corba.se.impl.core.Response;
--import com.sun.corba.se.impl.core.ClientResponse;
--import com.sun.corba.se.impl.corba.IOR;
--import com.sun.corba.se.impl.core.ORB;
--import com.sun.corba.se.impl.core.ServiceContext;
--import com.sun.corba.se.impl.core.ServiceContexts;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.Message;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage;
--import com.sun.corba.se.impl.orbutil.MinorCodes;
--
--class LocalClientResponseImpl extends IIOPInputStream implements ClientResponse
--{
-- LocalClientResponseImpl(ORB orb, byte[] buf, ReplyMessage header)
-- {
-- super(orb, buf, header.getSize(), header.isLittleEndian(), header, null);
--
-- this.reply = header;
--
-- // NOTE (Ram J) (06/02/2000) if we set result.setIndex(bodyBegin)
-- // in LocalServerResponse.getClientResponse(), then we do not need
-- // to read the headers (done below) anymore.
-- // This will be an optimisation which is can be done to speed up the
-- // local invocation by avoiding reading the headers in the local cases.
--
-- // BUGFIX(Ram Jeyaraman) This has been moved from
-- // LocalServerResponse.getClientResponse()
-- // Skip over all of the GIOP header information. This positions
-- // the offset in the buffer so that the skeleton can correctly read
-- // the marshalled arguments.
-- this.setIndex(Message.GIOPMessageHeaderLength);
--
-- // BUGFIX(Ram Jeyaraman) For local invocations, the reply mesg fields
-- // needs to be set, by reading the response buffer contents
-- // to correctly set the exception type and other info.
-- this.reply.read(this);
-- }
--
-- LocalClientResponseImpl(SystemException ex)
-- {
-- this.systemException = ex;
-- }
--
-- public boolean isSystemException() {
-- if ( reply != null )
-- return reply.getReplyStatus() == ReplyMessage.SYSTEM_EXCEPTION;
-- else
-- return (systemException != null);
-- }
--
-- public boolean isUserException() {
-- if ( reply != null )
-- return reply.getReplyStatus() == ReplyMessage.USER_EXCEPTION;
-- else
-- return false;
-- }
--
-- public boolean isLocationForward() {
-- if ( reply != null ) {
-- return ( (reply.getReplyStatus() == ReplyMessage.LOCATION_FORWARD) ||
-- (reply.getReplyStatus() == ReplyMessage.LOCATION_FORWARD_PERM) );
-- //return reply.getReplyStatus() == ReplyMessage.LOCATION_FORWARD;
-- } else {
-- return false;
-- }
-- }
--
-- public boolean isDifferentAddrDispositionRequested() {
-- if (reply != null) {
-- return reply.getReplyStatus() == ReplyMessage.NEEDS_ADDRESSING_MODE;
-- }
--
-- return false;
-- }
--
-- public short getAddrDisposition() {
-- if (reply != null) {
-- return reply.getAddrDisposition();
-- }
--
-- throw new org.omg.CORBA.INTERNAL(
-- "Null reply in getAddrDisposition",
-- MinorCodes.NULL_REPLY_IN_GET_ADDR_DISPOSITION,
-- CompletionStatus.COMPLETED_MAYBE);
-- }
--
-- public IOR getForwardedIOR() {
-- if ( reply != null )
-- return reply.getIOR();
-- else
-- return null;
-- }
--
-- public int getRequestId() {
-- if ( reply != null )
-- return reply.getRequestId();
-- else
-- throw new org.omg.CORBA.INTERNAL("Error in getRequestId");
-- }
--
-- public ServiceContexts getServiceContexts() {
-- if ( reply != null )
-- return reply.getServiceContexts();
-- else
-- return null;
-- }
--
-- public SystemException getSystemException() {
-- if ( reply != null )
-- return reply.getSystemException();
-- else
-- return systemException;
-- }
--
-- public java.lang.String peekUserExceptionId() {
-- mark(Integer.MAX_VALUE);
-- String result = read_string();
-- reset();
-- return result;
-- }
--
-- /**
-- * Check to see if the response is local.
-- */
-- public boolean isLocal(){
-- return true;
-- }
--
-- private ReplyMessage reply;
-- private SystemException systemException;
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalServerRequestImpl.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,208 +0,0 @@
--/*
-- * Copyright (c) 1999, 2003, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--package com.sun.corba.se.impl.iiop;
--
--import org.omg.CORBA.SystemException;
--
--import com.sun.corba.se.impl.core.ServerRequest;
--import com.sun.corba.se.impl.core.ServiceContext;
--import com.sun.corba.se.impl.core.DuplicateServiceContext;
--import com.sun.corba.se.impl.core.UEInfoServiceContext;
--import com.sun.corba.se.impl.core.ServiceContexts;
--import com.sun.corba.se.impl.core.ServerResponse;
--import com.sun.corba.se.impl.corba.IOR;
--import com.sun.corba.se.impl.core.ORB;
--import com.sun.corba.se.impl.orbutil.ORBUtility; //d11638
--import org.omg.CORBA.portable.UnknownException;
--import org.omg.CORBA.UNKNOWN;
--import org.omg.CORBA.CompletionStatus;
--import com.sun.corba.se.impl.ior.ObjectKey;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.RequestMessage;
--
--class LocalServerRequestImpl extends IIOPInputStream implements ServerRequest {
-- org.omg.CORBA.portable.OutputStream replyStream;
-- org.omg.CORBA.portable.OutputStream exceptionReplyStream;
--
-- LocalServerRequestImpl(ORB orb, byte[] buf, RequestMessage header)
-- {
-- super(orb, buf, header.getSize(), header.isLittleEndian(), header, null );
--
-- this.request = header;
-- }
--
-- public int getRequestId() {
-- return request.getRequestId();
-- }
--
-- public boolean isOneWay() {
-- return !request.isResponseExpected();
-- }
--
-- public ServiceContexts getServiceContexts() {
-- return request.getServiceContexts();
-- }
--
-- public String getOperationName() {
-- return request.getOperation();
-- }
--
-- public ObjectKey getObjectKey() {
-- return request.getObjectKey();
-- }
--
-- public ServerResponse createResponse(ServiceContexts svc)
-- {
-- return new LocalServerResponseImpl(this, svc);
-- }
--
-- public org.omg.CORBA.portable.OutputStream createReply() {
-- if (replyStream == null) {
-- replyStream = (org.omg.CORBA.portable.OutputStream)
-- createResponse(null);
-- }
-- return replyStream;
-- }
--
-- public org.omg.CORBA.portable.OutputStream createExceptionReply() {
-- if (exceptionReplyStream == null) {
-- exceptionReplyStream = (org.omg.CORBA.portable.OutputStream)
-- createUserExceptionResponse(null);
-- }
-- return exceptionReplyStream;
-- }
--
-- public ServerResponse createUserExceptionResponse(
-- ServiceContexts svc)
-- {
-- return new LocalServerResponseImpl(this, svc, true);
-- }
--
-- public ServerResponse createUnknownExceptionResponse(
-- UnknownException ex) {
-- ServiceContexts contexts = null;
-- SystemException sys = new UNKNOWN( 0,
-- CompletionStatus.COMPLETED_MAYBE);
--
-- try {
-- contexts = new ServiceContexts( (ORB)orb() );
-- UEInfoServiceContext uei = new UEInfoServiceContext(sys);
-- contexts.put(uei) ;
-- } catch (DuplicateServiceContext d) {
-- // can't happen
-- }
--
-- return createSystemExceptionResponse(sys,contexts);
-- }
--
-- public ServerResponse createSystemExceptionResponse(
-- SystemException ex, ServiceContexts svc) {
--
-- // Only do this if interceptors have been initialized on this request
-- // and have not completed their lifecycle (otherwise the info stack
-- // may be empty or have a different request's entry on top).
-- if (executePIInResponseConstructor()) {
-- // Inform Portable Interceptors of the SystemException. This is
-- // required to be done here because the ending interception point
-- // is called in the ServerResponseImpl constructor called below
-- // but we do not currently write the SystemException into the
-- // response until after the ending point is called.
-- ORB orb = (ORB)orb();
-- orb.getPIHandler().setServerPIInfo( ex );
-- }
--
-- if (orb() != null && ((ORB)orb()).subcontractDebugFlag && ex != null)
-- ORBUtility.dprint(this, "Sending SystemException:", ex);
--
-- LocalServerResponseImpl response =
-- new LocalServerResponseImpl(this, svc, false);
-- ORBUtility.writeSystemException(ex, response);
-- return response;
-- }
--
-- public ServerResponse createLocationForward(
-- IOR ior, ServiceContexts svc) {
-- ReplyMessage reply = MessageBase.createReply( (ORB)orb(),
-- request.getGIOPVersion(), request.getRequestId(),
-- ReplyMessage.LOCATION_FORWARD, svc, ior);
-- LocalServerResponseImpl response =
-- new LocalServerResponseImpl(this, reply, ior);
--
-- return response;
-- }
--
-- private RequestMessage request;
--
-- /**
-- * Check to see if the request is local.
-- */
-- public boolean isLocal(){
-- return true;
-- }
--
-- private boolean _executeReturnServantInResponseConstructor = false;
--
-- public boolean executeReturnServantInResponseConstructor()
-- {
-- return _executeReturnServantInResponseConstructor;
-- }
--
-- public void setExecuteReturnServantInResponseConstructor(boolean b)
-- {
-- _executeReturnServantInResponseConstructor = b;
-- }
--
--
-- private boolean _executeRemoveThreadInfoInResponseConstructor = false;
--
-- public boolean executeRemoveThreadInfoInResponseConstructor()
-- {
-- return _executeRemoveThreadInfoInResponseConstructor;
-- }
--
-- public void setExecuteRemoveThreadInfoInResponseConstructor(boolean b)
-- {
-- _executeRemoveThreadInfoInResponseConstructor = b;
-- }
--
--
-- private boolean _executePIInResponseConstructor = false;
--
-- public boolean executePIInResponseConstructor() {
-- return _executePIInResponseConstructor;
-- }
--
-- public void setExecutePIInResponseConstructor( boolean b ) {
-- _executePIInResponseConstructor = b;
-- }
--
-- // We know that we're talking to the same ValueHandler, so
-- // use the maximum version it supports.
-- public byte getStreamFormatVersionForReply() {
-- return ORBUtility.getMaxStreamFormatVersion();
-- }
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalServerResponseImpl.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,192 +0,0 @@
--/*
-- * Copyright (c) 1999, 2003, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--package com.sun.corba.se.impl.iiop;
--
--import org.omg.CORBA.SystemException;
--
--import com.sun.corba.se.impl.core.ServerResponse;
--import com.sun.corba.se.impl.core.ORB;
--import com.sun.corba.se.impl.corba.IOR;
--import com.sun.corba.se.impl.core.ServiceContext;
--import com.sun.corba.se.impl.core.ServiceContexts;
--import com.sun.corba.se.impl.core.ClientResponse;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.ReplyMessage;
--
--class LocalServerResponseImpl
-- extends IIOPOutputStream
-- implements ServerResponse
--{
-- LocalServerResponseImpl(LocalServerRequestImpl request, ServiceContexts svc)
-- {
-- this(request,
-- MessageBase.createReply(
-- (ORB)request.orb(),
-- request.getGIOPVersion(),
-- request.getRequestId(), ReplyMessage.NO_EXCEPTION,
-- svc, null),
-- null);
-- }
--
-- LocalServerResponseImpl(LocalServerRequestImpl request, ServiceContexts svc,
-- boolean user)
-- {
-- this(request,
-- MessageBase.createReply(
-- (ORB)request.orb(),
-- request.getGIOPVersion(), request.getRequestId(),
-- user ? ReplyMessage.USER_EXCEPTION :
-- ReplyMessage.SYSTEM_EXCEPTION,
-- svc, null),
-- null);
-- }
--
-- LocalServerResponseImpl( LocalServerRequestImpl request, ReplyMessage reply,
-- IOR ior)
-- {
-- super(request.getGIOPVersion(),
-- (ORB)request.orb(),
-- null,
-- BufferManagerFactory.newBufferManagerWrite(BufferManagerFactory.GROW),
-- request.getStreamFormatVersionForReply());
--
-- setMessage(reply);
--
-- ORB orb = (ORB)request.orb();
--
-- ServerResponseImpl.runServantPostInvoke(orb, request);
--
-- if( request.executePIInResponseConstructor() ) {
-- // Invoke server request ending interception points (send_*):
-- // Note: this may end up with a SystemException or an internal
-- // Runtime ForwardRequest.
-- orb.getPIHandler().invokeServerPIEndingPoint( reply );
--
-- // Note this will be executed even if a ForwardRequest or
-- // SystemException is thrown by a Portable Interceptors ending
-- // point since we end up in this constructor again anyway.
-- orb.getPIHandler().cleanupServerPIRequest();
--
-- // See (Local)ServerRequestImpl.createSystemExceptionResponse
-- // for why this is necesary.
-- request.setExecutePIInResponseConstructor(false);
-- }
--
-- // Once you get here then the final reply is available (i.e.,
-- // postinvoke and interceptors have completed.
-- if (request.executeRemoveThreadInfoInResponseConstructor()) {
-- ServerResponseImpl.removeThreadInfo(orb, request);
-- }
--
-- reply.write(this);
-- if (reply.getIOR() != null)
-- reply.getIOR().write(this);
--
-- this.reply = reply;
-- this.ior = reply.getIOR();
-- }
--
-- public boolean isSystemException() {
-- if (reply != null)
-- return reply.getReplyStatus() == ReplyMessage.SYSTEM_EXCEPTION;
-- return false;
-- }
--
-- public boolean isUserException() {
-- if (reply != null)
-- return reply.getReplyStatus() == ReplyMessage.USER_EXCEPTION;
-- return false;
-- }
--
-- public boolean isLocationForward() {
-- if (ior != null)
-- return true;
-- return false;
-- }
--
-- public IOR getForwardedIOR() {
-- return ior;
-- }
--
-- public int getRequestId() {
-- if (reply != null)
-- return reply.getRequestId();
-- return -1;
-- }
--
-- public ServiceContexts getServiceContexts() {
-- if (reply != null)
-- return reply.getServiceContexts();
-- return null;
-- }
--
-- public SystemException getSystemException() {
-- if (reply != null)
-- return reply.getSystemException();
-- return null;
-- }
--
-- public ReplyMessage getReply()
-- {
-- return reply ;
-- }
--
-- public ClientResponse getClientResponse()
-- {
-- // set the size of the marshalled data in the message header
-- getMessage().setSize(getByteBuffer(), getSize());
--
-- // Construct a new ClientResponse out of the buffer in this ClientRequest
-- LocalClientResponseImpl result =
-- new LocalClientResponseImpl( (ORB)orb(), toByteArray(), reply);
--
-- // NOTE (Ram J) (06/02/2000) if we set result.setIndex(bodyBegin) here
-- // then the LocalClientResponse does not need to read the headers anymore.
-- // This will be an optimisation which is can be done to speed up the
-- // local invocation by avoiding reading the headers in the local cases.
--
-- // BUGFIX(Ram Jeyaraman) result.setOffset is now done in
-- // LocalClientResponseImpl constructor.
-- /*
-- // Skip over all of the GIOP header information. This positions
-- // the offset in the buffer so that the skeleton can correctly read
-- // the marshalled arguments.
-- result.setOffset( bodyBegin ) ;
-- */
--
-- return result ;
-- }
--
-- /**
-- * Check to see if the response is local.
-- */
-- public boolean isLocal(){
-- return true;
-- }
--
-- private ReplyMessage reply;
-- private IOR ior; // forwarded IOR
--}
---- ./corba/src/share/classes/com/sun/corba/se/impl/transport/BufferConnectionImpl.sjava Tue Mar 18 12:29:47 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,710 +0,0 @@
--/*
-- * Copyright (c) 2004, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--package com.sun.corba.se.impl.transport;
--
--import java.io.IOException;
--import java.net.InetSocketAddress;
--import java.net.Socket;
--import java.nio.ByteBuffer;
--import java.nio.channels.SelectableChannel;
--import java.nio.channels.SelectionKey;
--import java.nio.channels.SocketChannel;
--import java.security.AccessController;
--import java.security.PrivilegedAction;
--import java.util.Collections;
--import java.util.Hashtable;
--import java.util.HashMap;
--import java.util.Map;
--
--import org.omg.CORBA.COMM_FAILURE;
--import org.omg.CORBA.CompletionStatus;
--import org.omg.CORBA.DATA_CONVERSION;
--import org.omg.CORBA.INTERNAL;
--import org.omg.CORBA.MARSHAL;
--import org.omg.CORBA.OBJECT_NOT_EXIST;
--import org.omg.CORBA.SystemException;
--
--import com.sun.org.omg.SendingContext.CodeBase;
--
--import com.sun.corba.se.pept.broker.Broker;
--import com.sun.corba.se.pept.encoding.InputObject;
--import com.sun.corba.se.pept.encoding.OutputObject;
--import com.sun.corba.se.pept.protocol.MessageMediator;
--import com.sun.corba.se.pept.transport.Acceptor;
--import com.sun.corba.se.pept.transport.Connection;
--import com.sun.corba.se.pept.transport.ConnectionCache;
--import com.sun.corba.se.pept.transport.ContactInfo;
--import com.sun.corba.se.pept.transport.EventHandler;
--import com.sun.corba.se.pept.transport.InboundConnectionCache;
--import com.sun.corba.se.pept.transport.OutboundConnectionCache;
--import com.sun.corba.se.pept.transport.ResponseWaitingRoom;
--import com.sun.corba.se.pept.transport.Selector;
--
--import com.sun.corba.se.spi.ior.IOR;
--import com.sun.corba.se.spi.ior.iiop.GIOPVersion;
--import com.sun.corba.se.spi.logging.CORBALogDomains;
--import com.sun.corba.se.spi.orb.ORB ;
--import com.sun.corba.se.spi.orbutil.threadpool.Work;
--import com.sun.corba.se.spi.protocol.CorbaMessageMediator;
--import com.sun.corba.se.spi.transport.CorbaContactInfo;
--import com.sun.corba.se.spi.transport.CorbaConnection;
--import com.sun.corba.se.spi.transport.CorbaResponseWaitingRoom;
--
--import com.sun.corba.se.impl.encoding.CachedCodeBase;
--import com.sun.corba.se.impl.encoding.CDRInputStream_1_0;
--import com.sun.corba.se.impl.encoding.CDROutputObject;
--import com.sun.corba.se.impl.encoding.CDROutputStream_1_0;
--import com.sun.corba.se.impl.encoding.CodeSetComponentInfo;
--import com.sun.corba.se.impl.encoding.OSFCodeSetRegistry;
--import com.sun.corba.se.impl.logging.ORBUtilSystemException;
--import com.sun.corba.se.impl.orbutil.ORBConstants;
--import com.sun.corba.se.impl.orbutil.ORBUtility;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.Message;
--import com.sun.corba.se.impl.protocol.giopmsgheaders.MessageBase;
--import com.sun.corba.se.impl.transport.CorbaResponseWaitingRoomImpl;
--
--/**
-- * @author Ken Cavanaugh
-- */
--public class BufferConnectionImpl
-- extends
-- EventHandlerBase
-- implements
-- CorbaConnection,
-- Work
--{
-- //
-- // New transport.
-- //
--
-- protected long enqueueTime;
--
-- public SocketChannel getSocketChannel()
-- {
-- return null;
-- }
--
-- // REVISIT:
-- // protected for test: genericRPCMSGFramework.IIOPConnection constructor.
--
-- //
-- // From iiop.Connection.java
-- //
--
-- protected long timeStamp = 0;
-- protected boolean isServer = false;
--
-- // Start at some value other than zero since this is a magic
-- // value in some protocols.
-- protected int requestId = 5;
-- protected CorbaResponseWaitingRoom responseWaitingRoom;
-- protected int state;
-- protected java.lang.Object stateEvent = new java.lang.Object();
-- protected java.lang.Object writeEvent = new java.lang.Object();
-- protected boolean writeLocked;
-- protected int serverRequestCount = 0;
--
-- // Server request map: used on the server side of Connection
-- // Maps request ID to IIOPInputStream.
-- Map serverRequestMap = new HashMap() ;
--
-- // This is a flag associated per connection telling us if the
-- // initial set of sending contexts were sent to the receiver
-- // already...
-- protected boolean postInitialContexts = false;
--
-- // Remote reference to CodeBase server (supplies
-- // FullValueDescription, among other things)
-- protected IOR codeBaseServerIOR;
--
-- // CodeBase cache for this connection. This will cache remote operations,
-- // handle connecting, and ensure we don't do any remote operations until
-- // necessary.
-- protected CachedCodeBase cachedCodeBase = new CachedCodeBase(this);
--
-- protected ORBUtilSystemException wrapper ;
--
-- List buffers ;
--
-- public BufferConnectionImpl(ORB orb, byte[][] data )
-- {
-- this.orb = orb;
-- wrapper = ORBUtilSystemException.get( orb,
-- CORBALogDomains.RPC_TRANSPORT ) ;
-- buffers = new ArrayList() ;
-- }
--
-- ////////////////////////////////////////////////////
-- //
-- // framework.transport.Connection
-- //
--
-- public boolean shouldRegisterReadEvent()
-- {
-- return false;
-- }
--
-- public boolean shouldRegisterServerReadEvent()
-- {
-- return false;
-- }
--
-- public boolean read()
-- {
-- return true ;
-- }
--
-- protected CorbaMessageMediator readBits()
-- {
-- return null ;
-- }
--
-- protected boolean dispatch(CorbaMessageMediator messageMediator)
-- {
-- }
--
-- public boolean shouldUseDirectByteBuffers()
-- {
-- return false ;
-- }
--
-- // Only called from readGIOPMessage with (12, 0, 12) as arguments
-- // size is size of buffer to create
-- // offset is offset from start of message in buffer
-- // length is length to read
-- public ByteBuffer read(int size, int offset, int length)
-- throws IOException
-- {
-- byte[] buf = new byte[size];
-- readFully( buf, offset, length);
-- ByteBuffer byteBuffer = ByteBuffer.wrap(buf);
-- byteBuffer.limit(size);
-- return byteBuffer;
-- }
--
-- // Only called as read( buf, 12, msgsize-12 ) in readGIOPMessage
-- // We can ignore the byteBuffer parameter
-- // offset is the starting position to place data in the result
-- // length is the length of the data to read
-- public ByteBuffer read(ByteBuffer byteBuffer, int offset, int length)
-- throws IOException
-- {
-- int size = offset + length;
-- byte[] buf = new byte[size];
-- readFully(buf, offset, length);
-- return ByteBuffer.wrap(buf);
-- }
--
-- // Read size bytes from buffer list and place the data
-- // starting at offset in buf.
-- public void readFully(byte[] buf, int offset, int size)
-- throws IOException
-- {
-- int remaining = size ;
-- int position = offset ;
-- while (remaining > 0) {
-- ByteBuffer buff = (ByteBuffer)buffers.get(0) ;
-- int dataSize = buff.remaining() ;
-- int xferSize = dataSize ;
-- if (dataSize >= remaining) :
-- xferSize = remaining ;
-- buffers.remove(0) ;
-- }
--
-- buff.get( buf, offset, xferSize ) ;
--
-- offset += xferSize ;
-- remaining -= xferSize ;
-- }
-- }
--
-- public void write(ByteBuffer byteBuffer)
-- throws IOException
-- {
-- buffers.add( byteBuffer ) ;
-- }
--
-- /**
-- * Note:it is possible for this to be called more than once
-- */
-- public synchronized void close()
-- {
-- }
--
-- public Acceptor getAcceptor()
-- {
-- return null;
-- }
--
-- public ContactInfo getContactInfo()
-- {
-- return null;
-- }
--
-- public EventHandler getEventHandler()
-- {
-- return this;
-- }
--
-- public OutputObject createOutputObject(MessageMediator messageMediator)
-- {
-- // REVISIT - remove this method from Connection and all it subclasses.
-- throw new RuntimeException("*****SocketOrChannelConnectionImpl.createOutputObject - should not be called.");
-- }
--
-- // This is used by the GIOPOutputObject in order to
-- // throw the correct error when handling code sets.
-- // Can we determine if we are on the server side by
-- // other means? XREVISIT
-- public boolean isServer()
-- {
-- return isServer;
-- }
--
-- public boolean isBusy()
-- {
-- return false ;
-- }
--
-- public long getTimeStamp()
-- {
-- return timeStamp;
-- }
--
-- public void setTimeStamp(long time)
-- {
-- timeStamp = time;
-- }
--
-- public void setState(String stateString)
-- {
-- synchronized (stateEvent) {
-- if (stateString.equals("ESTABLISHED")) {
-- state = ESTABLISHED;
-- stateEvent.notifyAll();
-- } else {
-- // REVISIT: ASSERT
-- }
-- }
-- }
--
-- public void writeLock()
-- {
-- }
--
-- public void writeUnlock()
-- {
-- }
--
-- public void sendWithoutLock(OutputObject outputObject)
-- {
-- }
--
-- public void registerWaiter(MessageMediator messageMediator)
-- {
-- }
--
-- public void unregisterWaiter(MessageMediator messageMediator)
-- {
-- }
--
-- public InputObject waitForResponse(MessageMediator messageMediator)
-- {
-- return null ;
-- }
--
-- public void setConnectionCache(ConnectionCache connectionCache)
-- {
-- }
--
-- public ConnectionCache getConnectionCache()
-- {
-- return null;
-- }
--
-- ////////////////////////////////////////////////////
-- //
-- // EventHandler methods
-- //
--
-- public SelectableChannel getChannel()
-- {
-- return null;
-- }
--
-- public int getInterestOps()
-- {
-- return null;
-- }
--
-- // public Acceptor getAcceptor() - already defined above.
--
-- public Connection getConnection()
-- {
-- return this;
-- }
--
-- ////////////////////////////////////////////////////
-- //
-- // Work methods.
-- //
--
-- public String getName()
-- {
-- return this.toString();
-- }
--
-- public void doWork()
-- {
-- }
--
-- public void setEnqueueTime(long timeInMillis)
-- {
-- enqueueTime = timeInMillis;
-- }
--
-- public long getEnqueueTime()
-- {
-- return enqueueTime;
-- }
--
-- ////////////////////////////////////////////////////
-- //
-- // spi.transport.CorbaConnection.
-- //
--
-- public ResponseWaitingRoom getResponseWaitingRoom()
-- {
-- return null ;
-- }
--
-- // REVISIT - inteface defines isServer but already defined in
-- // higher interface.
--
--
-- public void serverRequestMapPut(int requestId,
-- CorbaMessageMediator messageMediator)
-- {
-- serverRequestMap.put(new Integer(requestId), messageMediator);
-- }
--
-- public CorbaMessageMediator serverRequestMapGet(int requestId)
-- {
-- return (CorbaMessageMediator)
-- serverRequestMap.get(new Integer(requestId));
-- }
--
-- public void serverRequestMapRemove(int requestId)
-- {
-- serverRequestMap.remove(new Integer(requestId));
-- }
--
--
-- // REVISIT: this is also defined in:
-- // com.sun.corba.se.spi.legacy.connection.Connection
-- public java.net.Socket getSocket()
-- {
-- return null;
-- }
--
-- /** It is possible for a Close Connection to have been
-- ** sent here, but we will not check for this. A "lazy"
-- ** Exception will be thrown in the Worker thread after the
-- ** incoming request has been processed even though the connection
-- ** is closed before the request is processed. This is o.k because
-- ** it is a boundary condition. To prevent it we would have to add
-- ** more locks which would reduce performance in the normal case.
-- **/
-- public synchronized void serverRequestProcessingBegins()
-- {
-- serverRequestCount++;
-- }
--
-- public synchronized void serverRequestProcessingEnds()
-- {
-- serverRequestCount--;
-- }
--
-- //
-- //
-- //
--
-- public synchronized int getNextRequestId()
-- {
-- return requestId++;
-- }
--
-- // Negotiated code sets for char and wchar data
-- protected CodeSetComponentInfo.CodeSetContext codeSetContext = null;
--
-- public ORB getBroker()
-- {
-- return orb;
-- }
--
-- public CodeSetComponentInfo.CodeSetContext getCodeSetContext()
-- {
-- // Needs to be synchronized for the following case when the client
-- // doesn't send the code set context twice, and we have two threads
-- // in ServerRequestDispatcher processCodeSetContext.
-- //
-- // Thread A checks to see if there is a context, there is none, so
-- // it calls setCodeSetContext, getting the synch lock.
-- // Thread B checks to see if there is a context. If we didn't synch,
-- // it might decide to outlaw wchar/wstring.
-- if (codeSetContext == null) {
-- synchronized(this) {
-- return codeSetContext;
-- }
-- }
--
-- return codeSetContext;
-- }
--
-- public synchronized void setCodeSetContext(CodeSetComponentInfo.CodeSetContext csc) {
-- // Double check whether or not we need to do this
-- if (codeSetContext == null) {
--
-- if (OSFCodeSetRegistry.lookupEntry(csc.getCharCodeSet()) == null ||
-- OSFCodeSetRegistry.lookupEntry(csc.getWCharCodeSet()) == null) {
-- // If the client says it's negotiated a code set that
-- // isn't a fallback and we never said we support, then
-- // it has a bug.
-- throw wrapper.badCodesetsFromClient() ;
-- }
--
-- codeSetContext = csc;
-- }
-- }
--
-- //
-- // from iiop.IIOPConnection.java
-- //
--
-- // Map request ID to an InputObject.
-- // This is so the client thread can start unmarshaling
-- // the reply and remove it from the out_calls map while the
-- // ReaderThread can still obtain the input stream to give
-- // new fragments. Only the ReaderThread touches the clientReplyMap,
-- // so it doesn't incur synchronization overhead.
--
-- public MessageMediator clientRequestMapGet(int requestId)
-- {
-- return null ;
-- }
--
-- protected MessageMediator clientReply_1_1;
--
-- public void clientReply_1_1_Put(MessageMediator x)
-- {
-- clientReply_1_1 = x;
-- }
--
-- public MessageMediator clientReply_1_1_Get()
-- {
-- return clientReply_1_1;
-- }
--
-- public void clientReply_1_1_Remove()
-- {
-- clientReply_1_1 = null;
-- }
--
-- protected MessageMediator serverRequest_1_1;
--
-- public void serverRequest_1_1_Put(MessageMediator x)
-- {
-- serverRequest_1_1 = x;
-- }
--
-- public MessageMediator serverRequest_1_1_Get()
-- {
-- return serverRequest_1_1;
-- }
--
-- public void serverRequest_1_1_Remove()
-- {
-- serverRequest_1_1 = null;
-- }
--
-- protected String getStateString( int state )
-- {
-- synchronized ( stateEvent ){
-- switch (state) {
-- case OPENING : return "OPENING" ;
-- case ESTABLISHED : return "ESTABLISHED" ;
-- case CLOSE_SENT : return "CLOSE_SENT" ;
-- case CLOSE_RECVD : return "CLOSE_RECVD" ;
-- case ABORT : return "ABORT" ;
-- default : return "???" ;
-- }
-- }
-- }
--
-- public synchronized boolean isPostInitialContexts() {
-- return postInitialContexts;
-- }
--
-- // Can never be unset...
-- public synchronized void setPostInitialContexts(){
-- postInitialContexts = true;
-- }
--
-- /**
-- * Wake up the outstanding requests on the connection, and hand them
-- * COMM_FAILURE exception with a given minor code.
-- *
-- * Also, delete connection from connection table and
-- * stop the reader thread.
--
-- * Note that this should only ever be called by the Reader thread for
-- * this connection.
-- *
-- * @param minor_code The minor code for the COMM_FAILURE major code.
-- * @param die Kill the reader thread (this thread) before exiting.
-- */
-- public void purgeCalls(SystemException systemException,
-- boolean die, boolean lockHeld)
-- {
-- }
--
-- /*************************************************************************
-- * The following methods are for dealing with Connection cleaning for
-- * better scalability of servers in high network load conditions.
-- **************************************************************************/
--
-- public void sendCloseConnection(GIOPVersion giopVersion)
-- throws IOException
-- {
-- Message msg = MessageBase.createCloseConnection(giopVersion);
-- sendHelper(giopVersion, msg);
-- }
--
-- public void sendMessageError(GIOPVersion giopVersion)
-- throws IOException
-- {
-- Message msg = MessageBase.createMessageError(giopVersion);
-- sendHelper(giopVersion, msg);
-- }
--
-- /**
-- * Send a CancelRequest message. This does not lock the connection, so the
-- * caller needs to ensure this method is called appropriately.
-- * @exception IOException - could be due to abortive connection closure.
-- */
-- public void sendCancelRequest(GIOPVersion giopVersion, int requestId)
-- throws IOException
-- {
--
-- Message msg = MessageBase.createCancelRequest(giopVersion, requestId);
-- sendHelper(giopVersion, msg);
-- }
--
-- protected void sendHelper(GIOPVersion giopVersion, Message msg)
-- throws IOException
-- {
-- // REVISIT: See comments in CDROutputObject constructor.
-- CDROutputObject outputObject =
-- new CDROutputObject((ORB)orb, null, giopVersion, this, msg,
-- ORBConstants.STREAM_FORMAT_VERSION_1);
-- msg.write(outputObject);
--
-- outputObject.writeTo(this);
-- }
--
-- public void sendCancelRequestWithLock(GIOPVersion giopVersion,
-- int requestId)
-- throws IOException
-- {
-- writeLock();
-- try {
-- sendCancelRequest(giopVersion, requestId);
-- } finally {
-- writeUnlock();
-- }
-- }
--
-- // Begin Code Base methods ---------------------------------------
-- //
-- // Set this connection's code base IOR. The IOR comes from the
-- // SendingContext. This is an optional service context, but all
-- // JavaSoft ORBs send it.
-- //
-- // The set and get methods don't need to be synchronized since the
-- // first possible get would occur during reading a valuetype, and
-- // that would be after the set.
--
-- // Sets this connection's code base IOR. This is done after
-- // getting the IOR out of the SendingContext service context.
-- // Our ORBs always send this, but it's optional in CORBA.
--
-- public final void setCodeBaseIOR(IOR ior) {
-- codeBaseServerIOR = ior;
-- }
--
-- public final IOR getCodeBaseIOR() {
-- return codeBaseServerIOR;
-- }
--
-- // Get a CodeBase stub to use in unmarshaling. The CachedCodeBase
-- // won't connect to the remote codebase unless it's necessary.
-- public final CodeBase getCodeBase() {
-- return cachedCodeBase;
-- }
--
-- // End Code Base methods -----------------------------------------
--
-- // Can be overridden in subclass for different options.
-- protected void setSocketOptions(Socket socket)
-- {
-- }
--
-- public String toString()
-- {
-- synchronized ( stateEvent ){
-- return
-- "BufferConnectionImpl[" + " "
-- + getStateString( state ) + " "
-- + shouldUseSelectThreadToWait() + " "
-- + shouldUseWorkerThreadForEvent()
-- + "]" ;
-- }
-- }
--
-- // Must be public - used in encoding.
-- public void dprint(String msg)
-- {
-- ORBUtility.dprint("SocketOrChannelConnectionImpl", msg);
-- }
--
-- protected void dprint(String msg, Throwable t)
-- {
-- dprint(msg);
-- t.printStackTrace(System.out);
-- }
--}
--
--// End of file.
---- ./corba/src/share/classes/com/sun/corba/se/impl/transport/DefaultSocketFactoryImpl.java Tue Mar 18 12:29:47 2014 -0700
-+++ ./corba/src/share/classes/com/sun/corba/se/impl/transport/DefaultSocketFactoryImpl.java Wed May 07 19:25:52 2014 -0700
-@@ -32,6 +32,7 @@
- import java.net.ServerSocket;
- import java.nio.channels.SocketChannel;
- import java.nio.channels.ServerSocketChannel;
-+import java.security.PrivilegedAction;
-
- import com.sun.corba.se.pept.transport.Acceptor;
-
-@@ -44,6 +45,22 @@
- implements ORBSocketFactory
- {
- private ORB orb;
-+ private static final boolean keepAlive;
-+
-+ static {
-+ keepAlive = java.security.AccessController.doPrivileged(
-+ new PrivilegedAction<Boolean>() {
-+ @Override
-+ public Boolean run () {
-+ String value =
-+ System.getProperty("com.sun.CORBA.transport.enableTcpKeepAlive");
-+ if (value != null)
-+ return new Boolean(!"false".equalsIgnoreCase(value));
-+
-+ return Boolean.FALSE;
-+ }
-+ });
-+ }
-
- public void setORB(ORB orb)
- {
-@@ -85,6 +102,9 @@
- // Disable Nagle's algorithm (i.e., always send immediately).
- socket.setTcpNoDelay(true);
-
-+ if (keepAlive)
-+ socket.setKeepAlive(true);
-+
- return socket;
- }
-
-@@ -95,6 +115,8 @@
- {
- // Disable Nagle's algorithm (i.e., always send immediately).
- socket.setTcpNoDelay(true);
-+ if (keepAlive)
-+ socket.setKeepAlive(true);
- }
- }
-
---- ./hotspot/.hgtags Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/.hgtags Wed May 07 19:26:16 2014 -0700
-@@ -626,3 +626,35 @@
- 49cada8e39b9215b9fd8b9183743f92625587cfc jdk7u55-b11
- aadc864abd1ced3049bf59ce32786a07997ba190 jdk7u55-b12
- b021fd817a0177b31d1e3d65127a27458e85801e jdk7u55-b13
-+d27b468d5f3be3329ff1ff342f3347e6b2e0303b jdk7u55-b30
-+dff9147a781672f20bb0577a94233264ea4a95d1 jdk7u55-b14
-+8175599864880938d68d0a515fa561043d7d5fd0 jdk7u55-b31
-+ae4adc1492d1c90a70bd2d139a939fc0c8329be9 jdk7u60-b00
-+af1fc2868a2b919727bfbb0858449bd991bbee4a jdk7u40-b60
-+cc83359f5e5eb46dd9176b0a272390b1a0a51fdc hs24.60-b01
-+b7d44793cd267b22352c688b0185466741bb7a89 hs24.60-b02
-+90cfd4ad3c9263886d876792d72cb24ac0e03a85 hs24.60-b03
-+8fd0e931efa57d1579fb1bc8a68ba3924244b99e jdk7u60-b01
-+99e96aaac8afc14ce6f9f3d92ef7004cf505b35d hs24.60-b04
-+0025a2a965c8f21376278245c2493d8861386fba jdk7u60-b02
-+fa59add77d1a8f601a695f137248462fdc68cc2f hs24.60-b05
-+a59134ccb1b704b2cd05e157970d425af43e5437 hs24.60-b06
-+2c971ed884cec0a9293ccff3def696da81823225 jdk7u60-b03
-+1afbeb8cb558429156d432f35e7582716053a9cb hs24.60-b07
-+05fe7a87d14908eb3f21a0d29fc72cee2f996b7f jdk7u60-b04
-+f52b5452d424545e3b101d808e6d7da763d6f0f3 hs24.60-b08
-+462db155547e9bdd7ba26bead42808deb0b10d44 jdk7u60-b05
-+0cc4550bd9c57ba3be343bfbfcaf46b9060d5e7d jdk7u60-b06
-+2d053c4fd767155b2ac5e3e0a60b08a1bcc73cab jdk7u60-b07
-+a198787e7b9bc7b831ad210b67732cdb2be9e46e jdk7u60-b08
-+22cae361773d14b467328e8f90cf893550d1d610 jdk7u60-b09
-+6f74afd8577eb4b6a0e6f7b25cfef7d6f7d92e5f jdk7u60-b10
-+a2ac67a2c1cc867a8d6b525ab1df17204186e636 jdk7u60-b11
-+cae50351dcece6e5bf215eabf958c5d669ffff1f jdk7u60-b12
-+5853131ba4b448c5d89a3f0aa501fdf07f3b473c jdk7u60-b13
-+b226be2040f971855626f5b88cb41a7d5299fea0 jdk7u60-b14
-+2871f345b7e5585e20dc7aa91035967fe774cfba jdk7u60-b15
-+ec76bacbb5b90efc7988dee5345c656126b97561 jdk7u60-b16
-+617a6338e0c4f7699eed5061d7e8f576c3ace029 jdk7u60-b18
-+617a6338e0c4f7699eed5061d7e8f576c3ace029 jdk7u60-b17
-+361493c7cdb5f75b28efc63389d6cebaaaa43a2c jdk7u60-b19
---- ./hotspot/agent/src/os/linux/ps_core.c Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/agent/src/os/linux/ps_core.c Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -700,29 +700,61 @@
-
- // read segments of a shared object
- static bool read_lib_segments(struct ps_prochandle* ph, int lib_fd, ELF_EHDR* lib_ehdr, uintptr_t lib_base) {
-- int i = 0;
-- ELF_PHDR* phbuf;
-- ELF_PHDR* lib_php = NULL;
-+ int i = 0;
-+ ELF_PHDR* phbuf;
-+ ELF_PHDR* lib_php = NULL;
-
-- if ((phbuf = read_program_header_table(lib_fd, lib_ehdr)) == NULL)
-- return false;
-+ int page_size = sysconf(_SC_PAGE_SIZE);
-
-- // we want to process only PT_LOAD segments that are not writable.
-- // i.e., text segments. The read/write/exec (data) segments would
-- // have been already added from core file segments.
-- for (lib_php = phbuf, i = 0; i < lib_ehdr->e_phnum; i++) {
-- if ((lib_php->p_type == PT_LOAD) && !(lib_php->p_flags & PF_W) && (lib_php->p_filesz != 0)) {
-- if (add_map_info(ph, lib_fd, lib_php->p_offset, lib_php->p_vaddr + lib_base, lib_php->p_filesz) == NULL)
-- goto err;
-+ if ((phbuf = read_program_header_table(lib_fd, lib_ehdr)) == NULL) {
-+ return false;
-+ }
-+
-+ // we want to process only PT_LOAD segments that are not writable.
-+ // i.e., text segments. The read/write/exec (data) segments would
-+ // have been already added from core file segments.
-+ for (lib_php = phbuf, i = 0; i < lib_ehdr->e_phnum; i++) {
-+ if ((lib_php->p_type == PT_LOAD) && !(lib_php->p_flags & PF_W) && (lib_php->p_filesz != 0)) {
-+
-+ uintptr_t target_vaddr = lib_php->p_vaddr + lib_base;
-+ map_info *existing_map = core_lookup(ph, target_vaddr);
-+
-+ if (existing_map == NULL){
-+ if (add_map_info(ph, lib_fd, lib_php->p_offset,
-+ target_vaddr, lib_php->p_memsz) == NULL) {
-+ goto err;
-+ }
-+ } else {
-+ // Coredump stores value of p_memsz elf field
-+ // rounded up to page boundary.
-+
-+ if ((existing_map->memsz != page_size) &&
-+ (existing_map->fd != lib_fd) &&
-+ (ROUNDUP(existing_map->memsz, page_size) != ROUNDUP(lib_php->p_memsz, page_size))) {
-+
-+ print_debug("address conflict @ 0x%lx (existing map size = %ld, size = %ld, flags = %d)\n",
-+ target_vaddr, existing_map->memsz, lib_php->p_memsz, lib_php->p_flags);
-+ goto err;
-+ }
-+
-+ /* replace PT_LOAD segment with library segment */
-+ print_debug("overwrote with new address mapping (memsz %ld -> %ld)\n",
-+ existing_map->memsz, ROUNDUP(lib_php->p_memsz, page_size));
-+
-+ existing_map->fd = lib_fd;
-+ existing_map->offset = lib_php->p_offset;
-+ existing_map->memsz = ROUNDUP(lib_php->p_memsz, page_size);
- }
-- lib_php++;
-- }
-+ }
-
-- free(phbuf);
-- return true;
-+ lib_php++;
-+ }
-+
-+ free(phbuf);
-+ return true;
- err:
-- free(phbuf);
-- return false;
-+ free(phbuf);
-+ return false;
- }
-
- // process segments from interpreter (ld.so or ld-linux.so)
---- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2001, 2014, 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
-@@ -272,9 +272,10 @@
- public static final int _fast_aldc = 229;
- public static final int _fast_aldc_w = 230;
- public static final int _return_register_finalizer = 231;
-- public static final int _shouldnotreachhere = 232; // For debugging
-+ public static final int _invokehandle = 232;
-+ public static final int _shouldnotreachhere = 233; // For debugging
-
-- public static final int number_of_codes = 233;
-+ public static final int number_of_codes = 234;
-
- // Flag bits derived from format strings, can_trap, can_rewrite, etc.:
- // semantic flags:
-@@ -798,6 +799,9 @@
-
- def(_return_register_finalizer, "return_register_finalizer", "b" , null , BasicType.getTVoid() , 0, true, _return );
-
-+ def(_invokehandle , "invokehandle" , "bJJ" , null , BasicType.getTIllegal(), -1, true, _invokevirtual );
-+
-+
- def(_fast_aldc , "fast_aldc" , "bj" , null , BasicType.getTObject(), 1, true, _ldc );
- def(_fast_aldc_w , "fast_aldc_w" , "bJJ" , null , BasicType.getTObject(), 1, true, _ldc_w );
-
---- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/JVMTIThreadState.java Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/JVMTIThreadState.java Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2013 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
-@@ -29,11 +29,10 @@
- public static final int JVMTI_THREAD_STATE_ALIVE = 0x0001;
- public static final int JVMTI_THREAD_STATE_TERMINATED = 0x0002;
- public static final int JVMTI_THREAD_STATE_RUNNABLE = 0x0004;
-- public static final int JVMTI_THREAD_STATE_WAITING = 0x0008;
-+ public static final int JVMTI_THREAD_STATE_WAITING = 0x0080;
- public static final int JVMTI_THREAD_STATE_WAITING_INDEFINITELY = 0x0010;
- public static final int JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT = 0x0020;
- public static final int JVMTI_THREAD_STATE_SLEEPING = 0x0040;
-- public static final int JVMTI_THREAD_STATE_WAITING_FOR_NOTIFICATION = 0x0080;
- public static final int JVMTI_THREAD_STATE_IN_OBJECT_WAIT = 0x0100;
- public static final int JVMTI_THREAD_STATE_PARKED = 0x0200;
- public static final int JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER = 0x0400;
---- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/OSThread.java Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/OSThread.java Wed May 07 19:26:16 2014 -0700
-@@ -32,7 +32,7 @@
- // to the sys_thread_t structure of the classic JVM implementation.
- public class OSThread extends VMObject {
- private static JIntField interruptedField;
-- private static JIntField threadIdField;
-+ private static Field threadIdField;
- static {
- VM.registerVMInitializedObserver(new Observer() {
- public void update(Observable o, Object data) {
-@@ -44,7 +44,7 @@
- private static synchronized void initialize(TypeDataBase db) {
- Type type = db.lookupType("OSThread");
- interruptedField = type.getJIntField("_interrupted");
-- threadIdField = type.getJIntField("_thread_id");
-+ threadIdField = type.getField("_thread_id");
- }
-
- public OSThread(Address addr) {
-@@ -56,7 +56,7 @@
- }
-
- public int threadId() {
-- return (int)threadIdField.getValue(addr);
-+ return threadIdField.getJInt(addr);
- }
-
- }
---- ./hotspot/make/bsd/makefiles/buildtree.make Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/make/bsd/makefiles/buildtree.make Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,6 @@
- #
- # Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2013 Red Hat, Inc.
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- #
- # This code is free software; you can redistribute it and/or modify it
-@@ -59,7 +60,7 @@
- # needs to be set here since this Makefile doesn't include defs.make
- OS_VENDOR:=$(shell uname -s)
-
---include $(SPEC)
-+include $(GAMMADIR)/make/defs.make
- include $(GAMMADIR)/make/scm.make
- include $(GAMMADIR)/make/altsrc.make
-
-@@ -215,6 +216,7 @@
- echo "HOTSPOT_BUILD_USER = $(HOTSPOT_BUILD_USER)"; \
- echo "HOTSPOT_VM_DISTRO = $(HOTSPOT_VM_DISTRO)"; \
- echo "OPENJDK = $(OPENJDK)"; \
-+ echo "ZERO_BUILD = $(ZERO_BUILD)"; \
- echo; \
- echo "# Used for platform dispatching"; \
- echo "TARGET_DEFINES = -DTARGET_OS_FAMILY_\$$(Platform_os_family)"; \
---- ./hotspot/make/bsd/makefiles/gcc.make Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/make/bsd/makefiles/gcc.make Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,6 @@
- #
- # Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2013 Red Hat, Inc.
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- #
- # This code is free software; you can redistribute it and/or modify it
-@@ -105,10 +106,10 @@
- VM_PICFLAG/AOUT =
- VM_PICFLAG = $(VM_PICFLAG/$(LINK_INTO))
-
--ifeq ($(JVM_VARIANT_ZERO), true)
-+ifeq ($(TYPE),ZERO)
- CFLAGS += $(LIBFFI_CFLAGS)
- endif
--ifeq ($(JVM_VARIANT_ZEROSHARK), true)
-+ifeq ($(TYPE),SHARK)
- CFLAGS += $(LIBFFI_CFLAGS)
- CFLAGS += $(LLVM_CFLAGS)
- endif
---- ./hotspot/make/bsd/makefiles/vm.make Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/make/bsd/makefiles/vm.make Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,6 @@
- #
- # Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2013 Red Hat, Inc.
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- #
- # This code is free software; you can redistribute it and/or modify it
-@@ -42,7 +43,9 @@
- -include $(DEP_DIR)/*.d
-
- # read machine-specific adjustments (%%% should do this via buildtree.make?)
--ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
-+ifeq ($(TYPE),ZERO)
-+ include $(MAKEFILES_DIR)/zeroshark.make
-+else ifeq ($(TYPE),SHARK)
- include $(MAKEFILES_DIR)/zeroshark.make
- else
- include $(MAKEFILES_DIR)/$(BUILDARCH).make
-@@ -271,10 +274,10 @@
-
- LIBS_VM += $(LIBS)
- endif
--ifeq ($(JVM_VARIANT_ZERO), true)
-+ifeq ($(TYPE),ZERO)
- LIBS_VM += $(LIBFFI_LIBS)
- endif
--ifeq ($(JVM_VARIANT_ZEROSHARK), true)
-+ifeq ($(TYPE),SHARK)
- LIBS_VM += $(LIBFFI_LIBS) $(LLVM_LIBS)
- LFLAGS_VM += $(LLVM_LDFLAGS)
- endif
---- ./hotspot/make/hotspot_version Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/make/hotspot_version Wed May 07 19:26:16 2014 -0700
-@@ -34,8 +34,8 @@
- HOTSPOT_VM_COPYRIGHT=Copyright 2014
-
- HS_MAJOR_VER=24
--HS_MINOR_VER=55
--HS_BUILD_NUMBER=03
-+HS_MINOR_VER=60
-+HS_BUILD_NUMBER=09
-
- JDK_MAJOR_VER=1
- JDK_MINOR_VER=7
---- ./hotspot/make/linux/makefiles/buildtree.make Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/make/linux/makefiles/buildtree.make Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,6 @@
- #
- # Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2013 Red Hat, Inc.
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- #
- # This code is free software; you can redistribute it and/or modify it
-@@ -56,7 +57,7 @@
- # The makefiles are split this way so that "make foo" will run faster by not
- # having to read the dependency files for the vm.
-
---include $(SPEC)
-+include $(GAMMADIR)/make/defs.make
- include $(GAMMADIR)/make/scm.make
- include $(GAMMADIR)/make/altsrc.make
-
-@@ -208,6 +209,7 @@
- echo "HOTSPOT_BUILD_USER = $(HOTSPOT_BUILD_USER)"; \
- echo "HOTSPOT_VM_DISTRO = $(HOTSPOT_VM_DISTRO)"; \
- echo "OPENJDK = $(OPENJDK)"; \
-+ echo "ZERO_BUILD = $(ZERO_BUILD)"; \
- echo; \
- echo "# Used for platform dispatching"; \
- echo "TARGET_DEFINES = -DTARGET_OS_FAMILY_\$$(Platform_os_family)"; \
---- ./hotspot/make/linux/makefiles/gcc.make Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/make/linux/makefiles/gcc.make Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,6 @@
- #
- # Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2013 Red Hat, Inc.
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- #
- # This code is free software; you can redistribute it and/or modify it
-@@ -72,10 +73,10 @@
- VM_PICFLAG/AOUT =
- VM_PICFLAG = $(VM_PICFLAG/$(LINK_INTO))
-
--ifeq ($(JVM_VARIANT_ZERO), true)
-+ifeq ($(TYPE),ZERO)
- CFLAGS += $(LIBFFI_CFLAGS)
- endif
--ifeq ($(JVM_VARIANT_ZEROSHARK), true)
-+ifeq ($(TYPE),SHARK)
- CFLAGS += $(LIBFFI_CFLAGS)
- CFLAGS += $(LLVM_CFLAGS)
- endif
---- ./hotspot/make/linux/makefiles/vm.make Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/make/linux/makefiles/vm.make Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,6 @@
- #
- # Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2013 Red Hat, Inc.
- # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- #
- # This code is free software; you can redistribute it and/or modify it
-@@ -42,7 +43,9 @@
- -include $(DEP_DIR)/*.d
-
- # read machine-specific adjustments (%%% should do this via buildtree.make?)
--ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
-+ifeq ($(TYPE),ZERO)
-+ include $(MAKEFILES_DIR)/zeroshark.make
-+else ifeq ($(TYPE),SHARK)
- include $(MAKEFILES_DIR)/zeroshark.make
- else
- include $(MAKEFILES_DIR)/$(BUILDARCH).make
-@@ -244,7 +247,7 @@
- vm.def: $(Res_Files) $(Obj_Files)
- sh $(GAMMADIR)/make/linux/makefiles/build_vm_def.sh *.o > $@
-
--ifeq ($(JVM_VARIANT_ZEROSHARK), true)
-+ifeq ($(TYPE),SHARK)
- STATIC_CXX = false
- else
- ifeq ($(ZERO_LIBARCH), ppc64)
-@@ -276,10 +279,10 @@
-
- LIBS_VM += $(LIBS)
- endif
--ifeq ($(JVM_VARIANT_ZERO), true)
-+ifeq ($(TYPE),ZERO)
- LIBS_VM += $(LIBFFI_LIBS)
- endif
--ifeq ($(JVM_VARIANT_ZEROSHARK), true)
-+ifeq ($(TYPE),SHARK)
- LIBS_VM += $(LIBFFI_LIBS) $(LLVM_LIBS)
- LFLAGS_VM += $(LLVM_LDFLAGS)
- endif
---- ./hotspot/src/cpu/sparc/vm/assembler_sparc.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/sparc/vm/assembler_sparc.cpp Wed May 07 19:26:16 2014 -0700
-@@ -4512,7 +4512,7 @@
- #define __ masm.
- address start = __ pc();
-
-- Label not_already_dirty, restart, refill;
-+ Label not_already_dirty, restart, refill, young_card;
-
- #ifdef _LP64
- __ srlx(O0, CardTableModRefBS::card_shift, O0);
-@@ -4523,9 +4523,15 @@
- __ set(addrlit, O1); // O1 := <card table base>
- __ ldub(O0, O1, O2); // O2 := [O0 + O1]
-
-+ __ cmp_and_br_short(O2, G1SATBCardTableModRefBS::g1_young_card_val(), Assembler::equal, Assembler::pt, young_card);
-+
-+ __ membar(Assembler::Membar_mask_bits(Assembler::StoreLoad));
-+ __ ldub(O0, O1, O2); // O2 := [O0 + O1]
-+
- assert(CardTableModRefBS::dirty_card_val() == 0, "otherwise check this code");
- __ cmp_and_br_short(O2, G0, Assembler::notEqual, Assembler::pt, not_already_dirty);
-
-+ __ bind(young_card);
- // We didn't take the branch, so we're already dirty: return.
- // Use return-from-leaf
- __ retl();
---- ./hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp Wed May 07 19:26:16 2014 -0700
-@@ -36,6 +36,9 @@
- #include "runtime/signature.hpp"
- #include "runtime/vframeArray.hpp"
- #include "vmreg_sparc.inline.hpp"
-+#ifndef SERIALGC
-+#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
-+#endif
-
- // Implementation of StubAssembler
-
-@@ -898,7 +901,7 @@
- Register tmp2 = G3_scratch;
- jbyte* byte_map_base = ((CardTableModRefBS*)bs)->byte_map_base;
-
-- Label not_already_dirty, restart, refill;
-+ Label not_already_dirty, restart, refill, young_card;
-
- #ifdef _LP64
- __ srlx(addr, CardTableModRefBS::card_shift, addr);
-@@ -910,9 +913,15 @@
- __ set(rs, cardtable); // cardtable := <card table base>
- __ ldub(addr, cardtable, tmp); // tmp := [addr + cardtable]
-
-+ __ cmp_and_br_short(tmp, G1SATBCardTableModRefBS::g1_young_card_val(), Assembler::equal, Assembler::pt, young_card);
-+
-+ __ membar(Assembler::Membar_mask_bits(Assembler::StoreLoad));
-+ __ ldub(addr, cardtable, tmp); // tmp := [addr + cardtable]
-+
- assert(CardTableModRefBS::dirty_card_val() == 0, "otherwise check this code");
- __ cmp_and_br_short(tmp, G0, Assembler::notEqual, Assembler::pt, not_already_dirty);
-
-+ __ bind(young_card);
- // We didn't take the branch, so we're already dirty: return.
- // Use return-from-leaf
- __ retl();
---- ./hotspot/src/cpu/sparc/vm/sparc.ad Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/sparc/vm/sparc.ad Wed May 07 19:26:16 2014 -0700
-@@ -3399,8 +3399,8 @@
- interface(CONST_INTER);
- %}
-
--// Unsigned (positive) Integer Immediate: 13-bit
--operand immU13() %{
-+// Unsigned Integer Immediate: 12-bit (non-negative that fits in simm13)
-+operand immU12() %{
- predicate((0 <= n->get_int()) && Assembler::is_simm13(n->get_int()));
- match(ConI);
- op_cost(0);
-@@ -3436,6 +3436,17 @@
- interface(CONST_INTER);
- %}
-
-+// Int Immediate non-negative
-+operand immU31()
-+%{
-+ predicate(n->get_int() >= 0);
-+ match(ConI);
-+
-+ op_cost(0);
-+ format %{ %}
-+ interface(CONST_INTER);
-+%}
-+
- // Integer Immediate: 0-bit
- operand immI0() %{
- predicate(n->get_int() == 0);
-@@ -5732,7 +5743,6 @@
- effect(TEMP dst, TEMP tmp);
- ins_cost(MEMORY_REF_COST + 2*DEFAULT_COST);
-
-- size((3+1)*4); // set may use two instructions.
- format %{ "LDUH $mem,$dst\t! ushort/char & 16-bit mask -> long\n\t"
- "SET $mask,$tmp\n\t"
- "AND $dst,$tmp,$dst" %}
-@@ -5854,13 +5864,13 @@
- ins_pipe(iload_mem);
- %}
-
--// Load Integer with a 13-bit mask into a Long Register
--instruct loadI2L_immI13(iRegL dst, memory mem, immI13 mask) %{
-+// Load Integer with a 12-bit mask into a Long Register
-+instruct loadI2L_immU12(iRegL dst, memory mem, immU12 mask) %{
- match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
- ins_cost(MEMORY_REF_COST + DEFAULT_COST);
-
- size(2*4);
-- format %{ "LDUW $mem,$dst\t! int & 13-bit mask -> long\n\t"
-+ format %{ "LDUW $mem,$dst\t! int & 12-bit mask -> long\n\t"
- "AND $dst,$mask,$dst" %}
- ins_encode %{
- Register Rdst = $dst$$Register;
-@@ -5870,14 +5880,13 @@
- ins_pipe(iload_mem);
- %}
-
--// Load Integer with a 32-bit mask into a Long Register
--instruct loadI2L_immI(iRegL dst, memory mem, immI mask, iRegL tmp) %{
-+// Load Integer with a 31-bit mask into a Long Register
-+instruct loadI2L_immU31(iRegL dst, memory mem, immU31 mask, iRegL tmp) %{
- match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
- effect(TEMP dst, TEMP tmp);
- ins_cost(MEMORY_REF_COST + 2*DEFAULT_COST);
-
-- size((3+1)*4); // set may use two instructions.
-- format %{ "LDUW $mem,$dst\t! int & 32-bit mask -> long\n\t"
-+ format %{ "LDUW $mem,$dst\t! int & 31-bit mask -> long\n\t"
- "SET $mask,$tmp\n\t"
- "AND $dst,$tmp,$dst" %}
- ins_encode %{
-@@ -8919,7 +8928,7 @@
- ins_pipe(ialu_cconly_reg_reg);
- %}
-
--instruct compU_iReg_imm13(flagsRegU icc, iRegI op1, immU13 op2 ) %{
-+instruct compU_iReg_imm13(flagsRegU icc, iRegI op1, immU12 op2 ) %{
- match(Set icc (CmpU op1 op2));
-
- size(4);
---- ./hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -1873,6 +1873,25 @@
- if (ProfileInterpreter) {
- __ set_method_data_pointer_for_bcp();
- }
-+
-+ if (EnableInvokeDynamic) {
-+ Label L_done;
-+
-+ __ ldub(Address(Lbcp, 0), G1_scratch); // Load current bytecode
-+ __ cmp_and_br_short(G1_scratch, Bytecodes::_invokestatic, Assembler::notEqual, Assembler::pn, L_done);
-+
-+ // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
-+ // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
-+
-+ __ call_VM(G1_scratch, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), I0, Lmethod, Lbcp);
-+
-+ __ br_null(G1_scratch, false, Assembler::pn, L_done);
-+ __ delayed()->nop();
-+
-+ __ st_ptr(G1_scratch, Lesp, wordSize);
-+ __ bind(L_done);
-+ }
-+
- // Resume bytecode interpretation at the current bcp
- __ dispatch_next(vtos);
- // end of JVMTI PopFrame support
---- ./hotspot/src/cpu/x86/vm/assembler_x86.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/assembler_x86.cpp Wed May 07 19:26:16 2014 -0700
-@@ -8754,13 +8754,18 @@
- const Register card_addr = tmp;
- lea(card_addr, as_Address(ArrayAddress(cardtable, index)));
- #endif
-- cmpb(Address(card_addr, 0), 0);
-+ cmpb(Address(card_addr, 0), (int)G1SATBCardTableModRefBS::g1_young_card_val());
- jcc(Assembler::equal, done);
-
-+ membar(Assembler::Membar_mask_bits(Assembler::StoreLoad));
-+ cmpb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val());
-+ jcc(Assembler::equal, done);
-+
-+
- // storing a region crossing, non-NULL oop, card is clean.
- // dirty card and log.
-
-- movb(Address(card_addr, 0), 0);
-+ movb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val());
-
- cmpl(queue_index, 0);
- jcc(Assembler::equal, runtime);
---- ./hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1686,14 +1686,6 @@
- }
-
- assert_different_registers(obj, k_RInfo, klass_RInfo);
-- if (!k->is_loaded()) {
-- jobject2reg_with_patching(k_RInfo, op->info_for_patch());
-- } else {
--#ifdef _LP64
-- __ movoop(k_RInfo, k->constant_encoding());
--#endif // _LP64
-- }
-- assert(obj != k_RInfo, "must be different");
-
- __ cmpptr(obj, (int32_t)NULL_WORD);
- if (op->should_profile()) {
-@@ -1710,6 +1702,14 @@
- } else {
- __ jcc(Assembler::equal, *obj_is_null);
- }
-+
-+ if (!k->is_loaded()) {
-+ jobject2reg_with_patching(k_RInfo, op->info_for_patch());
-+ } else {
-+#ifdef _LP64
-+ __ movoop(k_RInfo, k->constant_encoding());
-+#endif // _LP64
-+ }
- __ verify_oop(obj);
-
- if (op->fast_check()) {
---- ./hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1395,19 +1395,18 @@
- addr = new LIR_Address(src.result(), offset, type);
- }
-
-- if (data != dst) {
-- __ move(data, dst);
-- data = dst;
-- }
-+ // Because we want a 2-arg form of xchg and xadd
-+ __ move(data, dst);
-+
- if (x->is_add()) {
-- __ xadd(LIR_OprFact::address(addr), data, dst, LIR_OprFact::illegalOpr);
-+ __ xadd(LIR_OprFact::address(addr), dst, dst, LIR_OprFact::illegalOpr);
- } else {
- if (is_obj) {
- // Do the pre-write barrier, if any.
- pre_barrier(LIR_OprFact::address(addr), LIR_OprFact::illegalOpr /* pre_val */,
- true /* do_load */, false /* patch */, NULL);
- }
-- __ xchg(LIR_OprFact::address(addr), data, dst, LIR_OprFact::illegalOpr);
-+ __ xchg(LIR_OprFact::address(addr), dst, dst, LIR_OprFact::illegalOpr);
- if (is_obj) {
- // Seems to be a precise address
- post_barrier(LIR_OprFact::address(addr), data);
---- ./hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp Wed May 07 19:26:16 2014 -0700
-@@ -37,6 +37,9 @@
- #include "runtime/signature.hpp"
- #include "runtime/vframeArray.hpp"
- #include "vmreg_x86.inline.hpp"
-+#ifndef SERIALGC
-+#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
-+#endif
-
-
- // Implementation of StubAssembler
-@@ -1743,13 +1746,17 @@
- __ leal(card_addr, __ as_Address(ArrayAddress(cardtable, index)));
- #endif
-
-- __ cmpb(Address(card_addr, 0), 0);
-+ __ cmpb(Address(card_addr, 0), (int)G1SATBCardTableModRefBS::g1_young_card_val());
-+ __ jcc(Assembler::equal, done);
-+
-+ __ membar(Assembler::Membar_mask_bits(Assembler::StoreLoad));
-+ __ cmpb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val());
- __ jcc(Assembler::equal, done);
-
- // storing region crossing non-NULL, card is clean.
- // dirty card and log.
-
-- __ movb(Address(card_addr, 0), 0);
-+ __ movb(Address(card_addr, 0), (int)CardTableModRefBS::dirty_card_val());
-
- __ cmpl(queue_index, 0);
- __ jcc(Assembler::equal, runtime);
---- ./hotspot/src/cpu/x86/vm/frame_x86.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/frame_x86.cpp Wed May 07 19:26:16 2014 -0700
-@@ -94,12 +94,6 @@
- // other generic buffer blobs are more problematic so we just assume they are
- // ok. adapter blobs never have a frame complete and are never ok.
-
-- // check for a valid frame_size, otherwise we are unlikely to get a valid sender_pc
--
-- if (!Interpreter::contains(_pc) && _cb->frame_size() <= 0) {
-- return false;
-- }
--
- if (!_cb->is_frame_complete_at(_pc)) {
- if (_cb->is_nmethod() || _cb->is_adapter_blob() || _cb->is_runtime_stub()) {
- return false;
-@@ -139,6 +133,11 @@
- // must be some sort of compiled/runtime frame
- // fp does not have to be safe (although it could be check for c1?)
-
-+ // check for a valid frame_size, otherwise we are unlikely to get a valid sender_pc
-+ if (_cb->frame_size() <= 0) {
-+ return false;
-+ }
-+
- sender_sp = _unextended_sp + _cb->frame_size();
- // On Intel the return_address is always the word on the stack
- sender_pc = (address) *(sender_sp-1);
---- ./hotspot/src/cpu/x86/vm/globals_x86.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/globals_x86.hpp Wed May 07 19:26:16 2014 -0700
-@@ -62,7 +62,7 @@
- // due to lack of optimization caused by C++ compiler bugs
- define_pd_global(intx, StackShadowPages, NOT_WIN64(20) WIN64_ONLY(6) DEBUG_ONLY(+2));
- #else
--define_pd_global(intx, StackShadowPages, 4 DEBUG_ONLY(+5));
-+define_pd_global(intx, StackShadowPages, 6 DEBUG_ONLY(+5));
- #endif // AMD64
-
- define_pd_global(intx, PreInflateSpin, 10);
---- ./hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -1789,6 +1789,27 @@
- __ get_thread(thread);
- __ movl(Address(thread, JavaThread::popframe_condition_offset()), JavaThread::popframe_inactive);
-
-+ if (EnableInvokeDynamic) {
-+ Label L_done;
-+ const Register local0 = rdi;
-+
-+ __ cmpb(Address(rsi, 0), Bytecodes::_invokestatic);
-+ __ jcc(Assembler::notEqual, L_done);
-+
-+ // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
-+ // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
-+
-+ __ get_method(rdx);
-+ __ movptr(rax, Address(local0, 0));
-+ __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), rax, rdx, rsi);
-+
-+ __ testptr(rax, rax);
-+ __ jcc(Assembler::zero, L_done);
-+
-+ __ movptr(Address(rbx, 0), rax);
-+ __ bind(L_done);
-+ }
-+
- __ dispatch_next(vtos);
- // end of PopFrame support
-
---- ./hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2014, 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
-@@ -1815,6 +1815,27 @@
- __ movl(Address(r15_thread, JavaThread::popframe_condition_offset()),
- JavaThread::popframe_inactive);
-
-+ if (EnableInvokeDynamic) {
-+ Label L_done;
-+ const Register local0 = r14;
-+
-+ __ cmpb(Address(r13, 0), Bytecodes::_invokestatic);
-+ __ jcc(Assembler::notEqual, L_done);
-+
-+ // The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
-+ // Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
-+
-+ __ get_method(rdx);
-+ __ movptr(rax, Address(local0, 0));
-+ __ call_VM(rax, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null), rax, rdx, r13);
-+
-+ __ testptr(rax, rax);
-+ __ jcc(Assembler::zero, L_done);
-+
-+ __ movptr(Address(rbx, 0), rax);
-+ __ bind(L_done);
-+ }
-+
- __ dispatch_next(vtos);
- // end of PopFrame support
-
---- ./hotspot/src/cpu/x86/vm/x86_32.ad Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/x86_32.ad Wed May 07 19:26:16 2014 -0700
-@@ -3919,6 +3919,17 @@
- interface(CONST_INTER);
- %}
-
-+// Int Immediate non-negative
-+operand immU31()
-+%{
-+ predicate(n->get_int() >= 0);
-+ match(ConI);
-+
-+ op_cost(0);
-+ format %{ %}
-+ interface(CONST_INTER);
-+%}
-+
- // Constant for long shifts
- operand immI_32() %{
- predicate( n->get_int() == 32 );
-@@ -6135,12 +6146,12 @@
- ins_pipe(ialu_reg_mem);
- %}
-
--// Load Integer with 32-bit mask into Long Register
--instruct loadI2L_immI(eRegL dst, memory mem, immI mask, eFlagsReg cr) %{
-+// Load Integer with 31-bit mask into Long Register
-+instruct loadI2L_immU31(eRegL dst, memory mem, immU31 mask, eFlagsReg cr) %{
- match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
- effect(KILL cr);
-
-- format %{ "MOV $dst.lo,$mem\t# int & 32-bit mask -> long\n\t"
-+ format %{ "MOV $dst.lo,$mem\t# int & 31-bit mask -> long\n\t"
- "XOR $dst.hi,$dst.hi\n\t"
- "AND $dst.lo,$mask" %}
- ins_encode %{
---- ./hotspot/src/cpu/x86/vm/x86_64.ad Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/x86/vm/x86_64.ad Wed May 07 19:26:16 2014 -0700
-@@ -3142,6 +3142,17 @@
- interface(CONST_INTER);
- %}
-
-+// Int Immediate non-negative
-+operand immU31()
-+%{
-+ predicate(n->get_int() >= 0);
-+ match(ConI);
-+
-+ op_cost(0);
-+ format %{ %}
-+ interface(CONST_INTER);
-+%}
-+
- // Constant for long shifts
- operand immI_32()
- %{
-@@ -5083,12 +5094,12 @@
- ins_pipe(ialu_reg_mem);
- %}
-
--// Load Integer with a 32-bit mask into Long Register
--instruct loadI2L_immI(rRegL dst, memory mem, immI mask, rFlagsReg cr) %{
-+// Load Integer with a 31-bit mask into Long Register
-+instruct loadI2L_immU31(rRegL dst, memory mem, immU31 mask, rFlagsReg cr) %{
- match(Set dst (ConvI2L (AndI (LoadI mem) mask)));
- effect(KILL cr);
-
-- format %{ "movl $dst, $mem\t# int & 32-bit mask -> long\n\t"
-+ format %{ "movl $dst, $mem\t# int & 31-bit mask -> long\n\t"
- "andl $dst, $mask" %}
- ins_encode %{
- Register Rdst = $dst$$Register;
---- ./hotspot/src/cpu/zero/vm/entryFrame_zero.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/zero/vm/entryFrame_zero.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,6 +1,6 @@
- /*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
-- * Copyright 2008, 2010 Red Hat, Inc.
-+ * Copyright (c) 2013 Red Hat, Inc.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
-@@ -58,8 +58,8 @@
- JavaCallWrapper* call_wrapper,
- TRAPS);
- public:
-- JavaCallWrapper *call_wrapper() const {
-- return (JavaCallWrapper *) value_of_word(call_wrapper_off);
-+ JavaCallWrapper **call_wrapper() const {
-+ return (JavaCallWrapper **) addr_of_word(call_wrapper_off);
- }
-
- public:
---- ./hotspot/src/cpu/zero/vm/frame_zero.inline.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/cpu/zero/vm/frame_zero.inline.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,6 +1,6 @@
- /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
-- * Copyright (c) 2007, 2013, Red Hat, Inc.
-+ * Copyright (c) 2013 Red Hat, Inc.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
-@@ -132,7 +132,7 @@
- return fp();
- }
-
--inline JavaCallWrapper* frame::entry_frame_call_wrapper() const {
-+inline JavaCallWrapper** frame::entry_frame_call_wrapper_addr() const {
- return zero_entryframe()->call_wrapper();
- }
-
---- ./hotspot/src/os/bsd/vm/attachListener_bsd.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os/bsd/vm/attachListener_bsd.cpp Wed May 07 19:26:16 2014 -0700
-@@ -460,14 +460,14 @@
-
- void AttachListener::vm_start() {
- char fn[UNIX_PATH_MAX];
-- struct stat64 st;
-+ struct stat st;
- int ret;
-
- int n = snprintf(fn, UNIX_PATH_MAX, "%s/.java_pid%d",
- os::get_temp_directory(), os::current_process_id());
- assert(n < (int)UNIX_PATH_MAX, "java_pid file name buffer overflow");
-
-- RESTARTABLE(::stat64(fn, &st), ret);
-+ RESTARTABLE(::stat(fn, &st), ret);
- if (ret == 0) {
- ret = ::unlink(fn);
- if (ret == -1) {
---- ./hotspot/src/os/bsd/vm/os_bsd.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os/bsd/vm/os_bsd.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1582,10 +1582,10 @@
- return (1000 * 1000);
- }
-
--// XXX: For now, code this as if BSD does not support vtime.
--bool os::supports_vtime() { return false; }
-+bool os::supports_vtime() { return true; }
- bool os::enable_vtime() { return false; }
- bool os::vtime_enabled() { return false; }
-+
- double os::elapsedVTime() {
- // better than nothing, but not much
- return elapsedTime();
-@@ -3434,7 +3434,9 @@
- #endif
- #endif
-
--char* os::reserve_memory_special(size_t bytes, char* req_addr, bool exec) {
-+char* os::reserve_memory_special(size_t bytes, size_t alignment, char* req_addr, bool exec) {
-+ fatal("This code is not used or maintained.");
-+
- // "exec" is passed in but not used. Creating the shared image for
- // the code cache doesn't have an SHM_X executable permission to check.
- assert(UseLargePages && UseSHM, "only for SHM large pages");
-@@ -6105,3 +6107,9 @@
- return n;
- }
-
-+#ifndef PRODUCT
-+void TestReserveMemorySpecial_test() {
-+ // No tests available for this platform
-+}
-+#endif
-+
---- ./hotspot/src/os/linux/vm/globals_linux.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os/linux/vm/globals_linux.hpp Wed May 07 19:26:16 2014 -0700
-@@ -40,6 +40,9 @@
- product(bool, UseHugeTLBFS, false, \
- "Use MAP_HUGETLB for large pages") \
- \
-+ product(bool, UseTransparentHugePages, false, \
-+ "Use MADV_HUGEPAGE for large pages") \
-+ \
- product(bool, LoadExecStackDllInVMThread, true, \
- "Load DLLs with executable-stack attribute in the VM Thread") \
- \
-@@ -50,7 +53,7 @@
- // Defines Linux-specific default values. The flags are available on all
- // platforms, but they may have different default values on other platforms.
- //
--define_pd_global(bool, UseLargePages, true);
-+define_pd_global(bool, UseLargePages, false);
- define_pd_global(bool, UseLargePagesIndividualAllocation, false);
- define_pd_global(bool, UseOSErrorReporting, false);
- define_pd_global(bool, UseThreadPriorities, true) ;
---- ./hotspot/src/os/linux/vm/jsig.c Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os/linux/vm/jsig.c Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2001, 2013, 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
-@@ -107,7 +107,7 @@
-
- signal_lock();
-
-- sigused = (MASK(sig) & jvmsigs) != 0;
-+ sigused = (sig < MAXSIGNUM) && ((MASK(sig) & jvmsigs) != 0);
- if (jvm_signal_installed && sigused) {
- /* jvm has installed its signal handler for this signal. */
- /* Save the handler. Don't really install it. */
-@@ -116,7 +116,7 @@
-
- signal_unlock();
- return oldhandler;
-- } else if (jvm_signal_installing) {
-+ } else if (sig < MAXSIGNUM && jvm_signal_installing) {
- /* jvm is installing its signal handlers. Install the new
- * handlers and save the old ones. jvm uses sigaction().
- * Leave the piece here just in case. */
-@@ -165,7 +165,7 @@
-
- signal_lock();
-
-- sigused = (MASK(sig) & jvmsigs) != 0;
-+ sigused = (sig < MAXSIGNUM) && ((MASK(sig) & jvmsigs) != 0);
- if (jvm_signal_installed && sigused) {
- /* jvm has installed its signal handler for this signal. */
- /* Save the handler. Don't really install it. */
-@@ -178,7 +178,7 @@
-
- signal_unlock();
- return 0;
-- } else if (jvm_signal_installing) {
-+ } else if (sig < MAXSIGNUM && jvm_signal_installing) {
- /* jvm is installing its signal handlers. Install the new
- * handlers and save the old ones. */
- res = call_os_sigaction(sig, act, &oldAct);
---- ./hotspot/src/os/linux/vm/os_linux.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os/linux/vm/os_linux.cpp Wed May 07 19:26:16 2014 -0700
-@@ -120,8 +120,16 @@
- # include <inttypes.h>
- # include <sys/ioctl.h>
-
-+// if RUSAGE_THREAD for getrusage() has not been defined, do it here. The code calling
-+// getrusage() is prepared to handle the associated failure.
-+#ifndef RUSAGE_THREAD
-+#define RUSAGE_THREAD (1) /* only the calling thread */
-+#endif
-+
- #define MAX_PATH (2 * K)
-
-+#define MAX_SECS 100000000
-+
- // for timer info max values which include all bits
- #define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF)
-
-@@ -144,6 +152,7 @@
- bool os::Linux::_supports_fast_thread_cpu_time = false;
- const char * os::Linux::_glibc_version = NULL;
- const char * os::Linux::_libpthread_version = NULL;
-+pthread_condattr_t os::Linux::_condattr[1];
-
- static jlong initial_time_count=0;
-
-@@ -1377,15 +1386,19 @@
- return (1000 * 1000);
- }
-
--// For now, we say that linux does not support vtime. I have no idea
--// whether it can actually be made to (DLD, 9/13/05).
--
--bool os::supports_vtime() { return false; }
-+bool os::supports_vtime() { return true; }
- bool os::enable_vtime() { return false; }
- bool os::vtime_enabled() { return false; }
-+
- double os::elapsedVTime() {
-- // better than nothing, but not much
-- return elapsedTime();
-+ struct rusage usage;
-+ int retval = getrusage(RUSAGE_THREAD, &usage);
-+ if (retval == 0) {
-+ return (double) (usage.ru_utime.tv_sec + usage.ru_stime.tv_sec) + (double) (usage.ru_utime.tv_usec + usage.ru_stime.tv_usec) / (1000 * 1000);
-+ } else {
-+ // better than nothing, but not much
-+ return elapsedTime();
-+ }
- }
-
- jlong os::javaTimeMillis() {
-@@ -1427,12 +1440,15 @@
- clock_gettime_func(CLOCK_MONOTONIC, &tp) == 0) {
- // yes, monotonic clock is supported
- _clock_gettime = clock_gettime_func;
-+ return;
- } else {
- // close librt if there is no monotonic clock
- dlclose(handle);
- }
- }
- }
-+ warning("No monotonic clock was available - timed services may " \
-+ "be adversely affected if the time-of-day clock changes");
- }
-
- #ifndef SYS_clock_getres
-@@ -2468,7 +2484,6 @@
- sem_t _semaphore;
- };
-
--
- Semaphore::Semaphore() {
- sem_init(&_semaphore, 0, 0);
- }
-@@ -2490,8 +2505,22 @@
- }
-
- bool Semaphore::timedwait(unsigned int sec, int nsec) {
-+
- struct timespec ts;
-- unpackTime(&ts, false, (sec * NANOSECS_PER_SEC) + nsec);
-+ // Semaphore's are always associated with CLOCK_REALTIME
-+ os::Linux::clock_gettime(CLOCK_REALTIME, &ts);
-+ // see unpackTime for discussion on overflow checking
-+ if (sec >= MAX_SECS) {
-+ ts.tv_sec += MAX_SECS;
-+ ts.tv_nsec = 0;
-+ } else {
-+ ts.tv_sec += sec;
-+ ts.tv_nsec += nsec;
-+ if (ts.tv_nsec >= NANOSECS_PER_SEC) {
-+ ts.tv_nsec -= NANOSECS_PER_SEC;
-+ ++ts.tv_sec; // note: this must be <= max_secs
-+ }
-+ }
-
- while (1) {
- int result = sem_timedwait(&_semaphore, &ts);
-@@ -2696,14 +2725,6 @@
- alignment_hint, exec, strerror(err), err);
- }
-
--static void warn_fail_commit_memory(char* addr, size_t size,
-- size_t alignment_hint, bool exec,
-- int err, const char* msg) {
-- warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
-- ", " SIZE_FORMAT ", %d) failed; error='%s' (errno=%d); %s", addr, size,
-- alignment_hint, exec, strerror(err), err, msg);
--}
--
- // NOTE: Linux kernel does not really reserve the pages for us.
- // All it does is to check if there are enough free pages
- // left at the time of mmap(). This could be a potential
-@@ -2754,41 +2775,9 @@
- #define MADV_HUGEPAGE 14
- #endif
-
--volatile jint os::Linux::num_largepage_commit_fails = 0;
--
- int os::Linux::commit_memory_impl(char* addr, size_t size,
- size_t alignment_hint, bool exec) {
-- int err;
-- if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) {
-- int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE;
-- uintptr_t res =
-- (uintptr_t) ::mmap(addr, size, prot,
-- MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_HUGETLB,
-- -1, 0);
-- if (res != (uintptr_t) MAP_FAILED) {
-- if (UseNUMAInterleaving) {
-- numa_make_global(addr, size);
-- }
-- return 0;
-- }
--
-- err = errno; // save errno from mmap() call above
--
-- if (!recoverable_mmap_error(err)) {
-- // However, it is not clear that this loss of our reserved mapping
-- // happens with large pages on Linux or that we cannot recover
-- // from the loss. For now, we just issue a warning and we don't
-- // call vm_exit_out_of_memory(). This issue is being tracked by
-- // JBS-8007074.
-- Atomic::inc(&os::Linux::num_largepage_commit_fails);
-- warn_fail_commit_memory(addr, size, alignment_hint, exec, err,
-- "Cannot allocate large pages, falling back to regular pages");
--// vm_exit_out_of_memory(size, "committing reserved memory.");
-- }
-- // Fall through and try to use small pages
-- }
--
-- err = os::Linux::commit_memory_impl(addr, size, exec);
-+ int err = os::Linux::commit_memory_impl(addr, size, exec);
- if (err == 0) {
- realign_memory(addr, size, alignment_hint);
- }
-@@ -2813,7 +2802,7 @@
- }
-
- void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) {
-- if (UseHugeTLBFS && alignment_hint > (size_t)vm_page_size()) {
-+ if (UseTransparentHugePages && alignment_hint > (size_t)vm_page_size()) {
- // We don't check the return value: madvise(MADV_HUGEPAGE) may not
- // be supported or the memory may already be backed by huge pages.
- ::madvise(addr, bytes, MADV_HUGEPAGE);
-@@ -2826,7 +2815,7 @@
- // uncommitted at all. We don't do anything in this case to avoid creating a segment with
- // small pages on top of the SHM segment. This method always works for small pages, so we
- // allow that in any case.
-- if (alignment_hint <= (size_t)os::vm_page_size() || !UseSHM) {
-+ if (alignment_hint <= (size_t)os::vm_page_size() || can_commit_large_page_memory()) {
- commit_memory(addr, bytes, alignment_hint, !ExecMem);
- }
- }
-@@ -3195,11 +3184,31 @@
- return linux_mprotect(addr, size, PROT_READ|PROT_WRITE);
- }
-
-+bool os::Linux::transparent_huge_pages_sanity_check(bool warn, size_t page_size) {
-+ bool result = false;
-+ void *p = mmap(NULL, page_size * 2, PROT_READ|PROT_WRITE,
-+ MAP_ANONYMOUS|MAP_PRIVATE,
-+ -1, 0);
-+ if (p != MAP_FAILED) {
-+ void *aligned_p = align_ptr_up(p, page_size);
-+
-+ result = madvise(aligned_p, page_size, MADV_HUGEPAGE) == 0;
-+
-+ munmap(p, page_size * 2);
-+ }
-+
-+ if (warn && !result) {
-+ warning("TransparentHugePages is not supported by the operating system.");
-+ }
-+
-+ return result;
-+}
-+
- bool os::Linux::hugetlbfs_sanity_check(bool warn, size_t page_size) {
- bool result = false;
-- void *p = mmap (NULL, page_size, PROT_READ|PROT_WRITE,
-- MAP_ANONYMOUS|MAP_PRIVATE|MAP_HUGETLB,
-- -1, 0);
-+ void *p = mmap(NULL, page_size, PROT_READ|PROT_WRITE,
-+ MAP_ANONYMOUS|MAP_PRIVATE|MAP_HUGETLB,
-+ -1, 0);
-
- if (p != MAP_FAILED) {
- // We don't know if this really is a huge page or not.
-@@ -3220,12 +3229,10 @@
- }
- fclose(fp);
- }
-- munmap (p, page_size);
-- if (result)
-- return true;
-- }
--
-- if (warn) {
-+ munmap(p, page_size);
-+ }
-+
-+ if (warn && !result) {
- warning("HugeTLBFS is not supported by the operating system.");
- }
-
-@@ -3273,82 +3280,126 @@
-
- static size_t _large_page_size = 0;
-
--void os::large_page_init() {
-- if (!UseLargePages) {
-- UseHugeTLBFS = false;
-- UseSHM = false;
-- return;
-- }
--
-- if (FLAG_IS_DEFAULT(UseHugeTLBFS) && FLAG_IS_DEFAULT(UseSHM)) {
-- // If UseLargePages is specified on the command line try both methods,
-- // if it's default, then try only HugeTLBFS.
-- if (FLAG_IS_DEFAULT(UseLargePages)) {
-- UseHugeTLBFS = true;
-- } else {
-- UseHugeTLBFS = UseSHM = true;
-- }
-- }
--
-- if (LargePageSizeInBytes) {
-- _large_page_size = LargePageSizeInBytes;
-- } else {
-- // large_page_size on Linux is used to round up heap size. x86 uses either
-- // 2M or 4M page, depending on whether PAE (Physical Address Extensions)
-- // mode is enabled. AMD64/EM64T uses 2M page in 64bit mode. IA64 can use
-- // page as large as 256M.
-- //
-- // Here we try to figure out page size by parsing /proc/meminfo and looking
-- // for a line with the following format:
-- // Hugepagesize: 2048 kB
-- //
-- // If we can't determine the value (e.g. /proc is not mounted, or the text
-- // format has been changed), we'll use the largest page size supported by
-- // the processor.
-+size_t os::Linux::find_large_page_size() {
-+ size_t large_page_size = 0;
-+
-+ // large_page_size on Linux is used to round up heap size. x86 uses either
-+ // 2M or 4M page, depending on whether PAE (Physical Address Extensions)
-+ // mode is enabled. AMD64/EM64T uses 2M page in 64bit mode. IA64 can use
-+ // page as large as 256M.
-+ //
-+ // Here we try to figure out page size by parsing /proc/meminfo and looking
-+ // for a line with the following format:
-+ // Hugepagesize: 2048 kB
-+ //
-+ // If we can't determine the value (e.g. /proc is not mounted, or the text
-+ // format has been changed), we'll use the largest page size supported by
-+ // the processor.
-
- #ifndef ZERO
-- _large_page_size = IA32_ONLY(4 * M) AMD64_ONLY(2 * M) IA64_ONLY(256 * M) SPARC_ONLY(4 * M)
-- ARM_ONLY(2 * M) PPC_ONLY(4 * M);
-+ large_page_size = IA32_ONLY(4 * M) AMD64_ONLY(2 * M) IA64_ONLY(256 * M) SPARC_ONLY(4 * M)
-+ ARM_ONLY(2 * M) PPC_ONLY(4 * M);
- #endif // ZERO
-
-- FILE *fp = fopen("/proc/meminfo", "r");
-- if (fp) {
-- while (!feof(fp)) {
-- int x = 0;
-- char buf[16];
-- if (fscanf(fp, "Hugepagesize: %d", &x) == 1) {
-- if (x && fgets(buf, sizeof(buf), fp) && strcmp(buf, " kB\n") == 0) {
-- _large_page_size = x * K;
-- break;
-- }
-- } else {
-- // skip to next line
-- for (;;) {
-- int ch = fgetc(fp);
-- if (ch == EOF || ch == (int)'\n') break;
-- }
-+ FILE *fp = fopen("/proc/meminfo", "r");
-+ if (fp) {
-+ while (!feof(fp)) {
-+ int x = 0;
-+ char buf[16];
-+ if (fscanf(fp, "Hugepagesize: %d", &x) == 1) {
-+ if (x && fgets(buf, sizeof(buf), fp) && strcmp(buf, " kB\n") == 0) {
-+ large_page_size = x * K;
-+ break;
-+ }
-+ } else {
-+ // skip to next line
-+ for (;;) {
-+ int ch = fgetc(fp);
-+ if (ch == EOF || ch == (int)'\n') break;
- }
- }
-- fclose(fp);
- }
-- }
--
-- // print a warning if any large page related flag is specified on command line
-- bool warn_on_failure = !FLAG_IS_DEFAULT(UseHugeTLBFS);
--
-+ fclose(fp);
-+ }
-+
-+ if (!FLAG_IS_DEFAULT(LargePageSizeInBytes) && LargePageSizeInBytes != large_page_size) {
-+ warning("Setting LargePageSizeInBytes has no effect on this OS. Large page size is "
-+ SIZE_FORMAT "%s.", byte_size_in_proper_unit(large_page_size),
-+ proper_unit_for_byte_size(large_page_size));
-+ }
-+
-+ return large_page_size;
-+}
-+
-+size_t os::Linux::setup_large_page_size() {
-+ _large_page_size = Linux::find_large_page_size();
- const size_t default_page_size = (size_t)Linux::page_size();
- if (_large_page_size > default_page_size) {
- _page_sizes[0] = _large_page_size;
- _page_sizes[1] = default_page_size;
- _page_sizes[2] = 0;
- }
-- UseHugeTLBFS = UseHugeTLBFS &&
-- Linux::hugetlbfs_sanity_check(warn_on_failure, _large_page_size);
--
-- if (UseHugeTLBFS)
-+
-+ return _large_page_size;
-+}
-+
-+bool os::Linux::setup_large_page_type(size_t page_size) {
-+ if (FLAG_IS_DEFAULT(UseHugeTLBFS) &&
-+ FLAG_IS_DEFAULT(UseSHM) &&
-+ FLAG_IS_DEFAULT(UseTransparentHugePages)) {
-+
-+ // The type of large pages has not been specified by the user.
-+
-+ // Try UseHugeTLBFS and then UseSHM.
-+ UseHugeTLBFS = UseSHM = true;
-+
-+ // Don't try UseTransparentHugePages since there are known
-+ // performance issues with it turned on. This might change in the future.
-+ UseTransparentHugePages = false;
-+ }
-+
-+ if (UseTransparentHugePages) {
-+ bool warn_on_failure = !FLAG_IS_DEFAULT(UseTransparentHugePages);
-+ if (transparent_huge_pages_sanity_check(warn_on_failure, page_size)) {
-+ UseHugeTLBFS = false;
-+ UseSHM = false;
-+ return true;
-+ }
-+ UseTransparentHugePages = false;
-+ }
-+
-+ if (UseHugeTLBFS) {
-+ bool warn_on_failure = !FLAG_IS_DEFAULT(UseHugeTLBFS);
-+ if (hugetlbfs_sanity_check(warn_on_failure, page_size)) {
-+ UseSHM = false;
-+ return true;
-+ }
-+ UseHugeTLBFS = false;
-+ }
-+
-+ return UseSHM;
-+}
-+
-+void os::large_page_init() {
-+ if (!UseLargePages &&
-+ !UseTransparentHugePages &&
-+ !UseHugeTLBFS &&
-+ !UseSHM) {
-+ // Not using large pages.
-+ return;
-+ }
-+
-+ if (!FLAG_IS_DEFAULT(UseLargePages) && !UseLargePages) {
-+ // The user explicitly turned off large pages.
-+ // Ignore the rest of the large pages flags.
-+ UseTransparentHugePages = false;
-+ UseHugeTLBFS = false;
- UseSHM = false;
--
-- UseLargePages = UseHugeTLBFS || UseSHM;
-+ return;
-+ }
-+
-+ size_t large_page_size = Linux::setup_large_page_size();
-+ UseLargePages = Linux::setup_large_page_type(large_page_size);
-
- set_coredump_filter();
- }
-@@ -3357,16 +3408,22 @@
- #define SHM_HUGETLB 04000
- #endif
-
--char* os::reserve_memory_special(size_t bytes, char* req_addr, bool exec) {
-+char* os::Linux::reserve_memory_special_shm(size_t bytes, size_t alignment, char* req_addr, bool exec) {
- // "exec" is passed in but not used. Creating the shared image for
- // the code cache doesn't have an SHM_X executable permission to check.
- assert(UseLargePages && UseSHM, "only for SHM large pages");
-+ assert(is_ptr_aligned(req_addr, os::large_page_size()), "Unaligned address");
-+
-+ if (!is_size_aligned(bytes, os::large_page_size()) || alignment > os::large_page_size()) {
-+ return NULL; // Fallback to small pages.
-+ }
-
- key_t key = IPC_PRIVATE;
- char *addr;
-
- bool warn_on_failure = UseLargePages &&
- (!FLAG_IS_DEFAULT(UseLargePages) ||
-+ !FLAG_IS_DEFAULT(UseSHM) ||
- !FLAG_IS_DEFAULT(LargePageSizeInBytes)
- );
- char msg[128];
-@@ -3414,42 +3471,220 @@
- return NULL;
- }
-
-- if ((addr != NULL) && UseNUMAInterleaving) {
-- numa_make_global(addr, bytes);
-- }
--
-- // The memory is committed
-- MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, mtNone, CALLER_PC);
--
- return addr;
- }
-
-+static void warn_on_large_pages_failure(char* req_addr, size_t bytes, int error) {
-+ assert(error == ENOMEM, "Only expect to fail if no memory is available");
-+
-+ bool warn_on_failure = UseLargePages &&
-+ (!FLAG_IS_DEFAULT(UseLargePages) ||
-+ !FLAG_IS_DEFAULT(UseHugeTLBFS) ||
-+ !FLAG_IS_DEFAULT(LargePageSizeInBytes));
-+
-+ if (warn_on_failure) {
-+ char msg[128];
-+ jio_snprintf(msg, sizeof(msg), "Failed to reserve large pages memory req_addr: "
-+ PTR_FORMAT " bytes: " SIZE_FORMAT " (errno = %d).", req_addr, bytes, error);
-+ warning(msg);
-+ }
-+}
-+
-+char* os::Linux::reserve_memory_special_huge_tlbfs_only(size_t bytes, char* req_addr, bool exec) {
-+ assert(UseLargePages && UseHugeTLBFS, "only for Huge TLBFS large pages");
-+ assert(is_size_aligned(bytes, os::large_page_size()), "Unaligned size");
-+ assert(is_ptr_aligned(req_addr, os::large_page_size()), "Unaligned address");
-+
-+ int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE;
-+ char* addr = (char*)::mmap(req_addr, bytes, prot,
-+ MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB,
-+ -1, 0);
-+
-+ if (addr == MAP_FAILED) {
-+ warn_on_large_pages_failure(req_addr, bytes, errno);
-+ return NULL;
-+ }
-+
-+ assert(is_ptr_aligned(addr, os::large_page_size()), "Must be");
-+
-+ return addr;
-+}
-+
-+char* os::Linux::reserve_memory_special_huge_tlbfs_mixed(size_t bytes, size_t alignment, char* req_addr, bool exec) {
-+ size_t large_page_size = os::large_page_size();
-+
-+ assert(bytes >= large_page_size, "Shouldn't allocate large pages for small sizes");
-+
-+ // Allocate small pages.
-+
-+ char* start;
-+ if (req_addr != NULL) {
-+ assert(is_ptr_aligned(req_addr, alignment), "Must be");
-+ assert(is_size_aligned(bytes, alignment), "Must be");
-+ start = os::reserve_memory(bytes, req_addr);
-+ assert(start == NULL || start == req_addr, "Must be");
-+ } else {
-+ start = os::reserve_memory_aligned(bytes, alignment);
-+ }
-+
-+ if (start == NULL) {
-+ return NULL;
-+ }
-+
-+ assert(is_ptr_aligned(start, alignment), "Must be");
-+
-+ // os::reserve_memory_special will record this memory area.
-+ // Need to release it here to prevent overlapping reservations.
-+ MemTracker::record_virtual_memory_release((address)start, bytes);
-+
-+ char* end = start + bytes;
-+
-+ // Find the regions of the allocated chunk that can be promoted to large pages.
-+ char* lp_start = (char*)align_ptr_up(start, large_page_size);
-+ char* lp_end = (char*)align_ptr_down(end, large_page_size);
-+
-+ size_t lp_bytes = lp_end - lp_start;
-+
-+ assert(is_size_aligned(lp_bytes, large_page_size), "Must be");
-+
-+ if (lp_bytes == 0) {
-+ // The mapped region doesn't even span the start and the end of a large page.
-+ // Fall back to allocate a non-special area.
-+ ::munmap(start, end - start);
-+ return NULL;
-+ }
-+
-+ int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE;
-+
-+
-+ void* result;
-+
-+ if (start != lp_start) {
-+ result = ::mmap(start, lp_start - start, prot,
-+ MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,
-+ -1, 0);
-+ if (result == MAP_FAILED) {
-+ ::munmap(lp_start, end - lp_start);
-+ return NULL;
-+ }
-+ }
-+
-+ result = ::mmap(lp_start, lp_bytes, prot,
-+ MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED|MAP_HUGETLB,
-+ -1, 0);
-+ if (result == MAP_FAILED) {
-+ warn_on_large_pages_failure(req_addr, bytes, errno);
-+ // If the mmap above fails, the large pages region will be unmapped and we
-+ // have regions before and after with small pages. Release these regions.
-+ //
-+ // | mapped | unmapped | mapped |
-+ // ^ ^ ^ ^
-+ // start lp_start lp_end end
-+ //
-+ ::munmap(start, lp_start - start);
-+ ::munmap(lp_end, end - lp_end);
-+ return NULL;
-+ }
-+
-+ if (lp_end != end) {
-+ result = ::mmap(lp_end, end - lp_end, prot,
-+ MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,
-+ -1, 0);
-+ if (result == MAP_FAILED) {
-+ ::munmap(start, lp_end - start);
-+ return NULL;
-+ }
-+ }
-+
-+ return start;
-+}
-+
-+char* os::Linux::reserve_memory_special_huge_tlbfs(size_t bytes, size_t alignment, char* req_addr, bool exec) {
-+ assert(UseLargePages && UseHugeTLBFS, "only for Huge TLBFS large pages");
-+ assert(is_ptr_aligned(req_addr, alignment), "Must be");
-+ assert(is_power_of_2(alignment), "Must be");
-+ assert(is_power_of_2(os::large_page_size()), "Must be");
-+ assert(bytes >= os::large_page_size(), "Shouldn't allocate large pages for small sizes");
-+
-+ if (is_size_aligned(bytes, os::large_page_size()) && alignment <= os::large_page_size()) {
-+ return reserve_memory_special_huge_tlbfs_only(bytes, req_addr, exec);
-+ } else {
-+ return reserve_memory_special_huge_tlbfs_mixed(bytes, alignment, req_addr, exec);
-+ }
-+}
-+
-+char* os::reserve_memory_special(size_t bytes, size_t alignment, char* req_addr, bool exec) {
-+ assert(UseLargePages, "only for large pages");
-+
-+ char* addr;
-+ if (UseSHM) {
-+ addr = os::Linux::reserve_memory_special_shm(bytes, alignment, req_addr, exec);
-+ } else {
-+ assert(UseHugeTLBFS, "must be");
-+ addr = os::Linux::reserve_memory_special_huge_tlbfs(bytes, alignment, req_addr, exec);
-+ }
-+
-+ if (addr != NULL) {
-+ if (UseNUMAInterleaving) {
-+ numa_make_global(addr, bytes);
-+ }
-+
-+ // The memory is committed
-+ MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, mtNone, CALLER_PC);
-+ }
-+
-+ return addr;
-+}
-+
-+bool os::Linux::release_memory_special_shm(char* base, size_t bytes) {
-+ // detaching the SHM segment will also delete it, see reserve_memory_special_shm()
-+ return shmdt(base) == 0;
-+}
-+
-+bool os::Linux::release_memory_special_huge_tlbfs(char* base, size_t bytes) {
-+ return pd_release_memory(base, bytes);
-+}
-+
- bool os::release_memory_special(char* base, size_t bytes) {
-+ assert(UseLargePages, "only for large pages");
-+
- MemTracker::Tracker tkr = MemTracker::get_virtual_memory_release_tracker();
-- // detaching the SHM segment will also delete it, see reserve_memory_special()
-- int rslt = shmdt(base);
-- if (rslt == 0) {
-+
-+ bool res;
-+ if (UseSHM) {
-+ res = os::Linux::release_memory_special_shm(base, bytes);
-+ } else {
-+ assert(UseHugeTLBFS, "must be");
-+ res = os::Linux::release_memory_special_huge_tlbfs(base, bytes);
-+ }
-+
-+ if (res) {
- tkr.record((address)base, bytes);
-- return true;
- } else {
- tkr.discard();
-- return false;
-- }
--}
-+ }
-+
-+ return res;
-+}
-+
-
- size_t os::large_page_size() {
- return _large_page_size;
- }
-
--// HugeTLBFS allows application to commit large page memory on demand;
--// with SysV SHM the entire memory region must be allocated as shared
-+// With SysV SHM the entire memory region must be allocated as shared
- // memory.
-+// HugeTLBFS allows application to commit large page memory on demand.
-+// However, when committing memory with HugeTLBFS fails, the region
-+// that was supposed to be committed will lose the old reservation
-+// and allow other threads to steal that memory region. Because of this
-+// behavior we can't commit HugeTLBFS memory.
- bool os::can_commit_large_page_memory() {
-- return UseHugeTLBFS;
-+ return UseTransparentHugePages;
- }
-
- bool os::can_execute_large_page_memory() {
-- return UseHugeTLBFS;
-+ return UseTransparentHugePages || UseHugeTLBFS;
- }
-
- // Reserve memory at an arbitrary address, only if that area is
-@@ -4505,6 +4740,26 @@
-
- Linux::clock_init();
- initial_time_count = os::elapsed_counter();
-+
-+ // pthread_condattr initialization for monotonic clock
-+ int status;
-+ pthread_condattr_t* _condattr = os::Linux::condAttr();
-+ if ((status = pthread_condattr_init(_condattr)) != 0) {
-+ fatal(err_msg("pthread_condattr_init: %s", strerror(status)));
-+ }
-+ // Only set the clock if CLOCK_MONOTONIC is available
-+ if (Linux::supports_monotonic_clock()) {
-+ if ((status = pthread_condattr_setclock(_condattr, CLOCK_MONOTONIC)) != 0) {
-+ if (status == EINVAL) {
-+ warning("Unable to use monotonic clock with relative timed-waits" \
-+ " - changes to the time-of-day clock may have adverse affects");
-+ } else {
-+ fatal(err_msg("pthread_condattr_setclock: %s", strerror(status)));
-+ }
-+ }
-+ }
-+ // else it defaults to CLOCK_REALTIME
-+
- pthread_mutex_init(&dl_mutex, NULL);
-
- // If the pagesize of the VM is greater than 8K determine the appropriate
-@@ -4587,6 +4842,10 @@
-
- Linux::capture_initial_stack(JavaThread::stack_size_at_create());
-
-+#if defined(IA32)
-+ workaround_expand_exec_shield_cs_limit();
-+#endif
-+
- Linux::libpthread_init();
- if (PrintMiscellaneous && (Verbose || WizardMode)) {
- tty->print_cr("[HotSpot is running with %s, %s(%s)]\n",
-@@ -4603,21 +4862,23 @@
- UseNUMA = false;
- }
- }
-- // With SHM large pages we cannot uncommit a page, so there's not way
-+ // With SHM and HugeTLBFS large pages we cannot uncommit a page, so there's no way
- // we can make the adaptive lgrp chunk resizing work. If the user specified
-- // both UseNUMA and UseLargePages (or UseSHM) on the command line - warn and
-+ // both UseNUMA and UseLargePages (or UseSHM/UseHugeTLBFS) on the command line - warn and
- // disable adaptive resizing.
-- if (UseNUMA && UseLargePages && UseSHM) {
-- if (!FLAG_IS_DEFAULT(UseNUMA)) {
-- if (FLAG_IS_DEFAULT(UseLargePages) && FLAG_IS_DEFAULT(UseSHM)) {
-+ if (UseNUMA && UseLargePages && !can_commit_large_page_memory()) {
-+ if (FLAG_IS_DEFAULT(UseNUMA)) {
-+ UseNUMA = false;
-+ } else {
-+ if (FLAG_IS_DEFAULT(UseLargePages) &&
-+ FLAG_IS_DEFAULT(UseSHM) &&
-+ FLAG_IS_DEFAULT(UseHugeTLBFS)) {
- UseLargePages = false;
- } else {
-- warning("UseNUMA is not fully compatible with SHM large pages, disabling adaptive resizing");
-+ warning("UseNUMA is not fully compatible with SHM/HugeTLBFS large pages, disabling adaptive resizing");
- UseAdaptiveSizePolicy = false;
- UseAdaptiveNUMAChunkSizing = false;
- }
-- } else {
-- UseNUMA = false;
- }
- }
- if (!UseNUMA && ForceNUMA) {
-@@ -5351,21 +5612,36 @@
-
- static struct timespec* compute_abstime(timespec* abstime, jlong millis) {
- if (millis < 0) millis = 0;
-- struct timeval now;
-- int status = gettimeofday(&now, NULL);
-- assert(status == 0, "gettimeofday");
-+
- jlong seconds = millis / 1000;
- millis %= 1000;
- if (seconds > 50000000) { // see man cond_timedwait(3T)
- seconds = 50000000;
- }
-- abstime->tv_sec = now.tv_sec + seconds;
-- long usec = now.tv_usec + millis * 1000;
-- if (usec >= 1000000) {
-- abstime->tv_sec += 1;
-- usec -= 1000000;
-- }
-- abstime->tv_nsec = usec * 1000;
-+
-+ if (os::Linux::supports_monotonic_clock()) {
-+ struct timespec now;
-+ int status = os::Linux::clock_gettime(CLOCK_MONOTONIC, &now);
-+ assert_status(status == 0, status, "clock_gettime");
-+ abstime->tv_sec = now.tv_sec + seconds;
-+ long nanos = now.tv_nsec + millis * NANOSECS_PER_MILLISEC;
-+ if (nanos >= NANOSECS_PER_SEC) {
-+ abstime->tv_sec += 1;
-+ nanos -= NANOSECS_PER_SEC;
-+ }
-+ abstime->tv_nsec = nanos;
-+ } else {
-+ struct timeval now;
-+ int status = gettimeofday(&now, NULL);
-+ assert(status == 0, "gettimeofday");
-+ abstime->tv_sec = now.tv_sec + seconds;
-+ long usec = now.tv_usec + millis * 1000;
-+ if (usec >= 1000000) {
-+ abstime->tv_sec += 1;
-+ usec -= 1000000;
-+ }
-+ abstime->tv_nsec = usec * 1000;
-+ }
- return abstime;
- }
-
-@@ -5457,7 +5733,7 @@
- status = os::Linux::safe_cond_timedwait(_cond, _mutex, &abst);
- if (status != 0 && WorkAroundNPTLTimedWaitHang) {
- pthread_cond_destroy (_cond);
-- pthread_cond_init (_cond, NULL) ;
-+ pthread_cond_init (_cond, os::Linux::condAttr()) ;
- }
- assert_status(status == 0 || status == EINTR ||
- status == ETIME || status == ETIMEDOUT,
-@@ -5536,7 +5812,6 @@
- * is no need to track notifications.
- */
-
--#define MAX_SECS 100000000
- /*
- * This code is common to linux and solaris and will be moved to a
- * common place in dolphin.
-@@ -5558,32 +5833,50 @@
-
- static void unpackTime(timespec* absTime, bool isAbsolute, jlong time) {
- assert (time > 0, "convertTime");
--
-- struct timeval now;
-- int status = gettimeofday(&now, NULL);
-- assert(status == 0, "gettimeofday");
--
-- time_t max_secs = now.tv_sec + MAX_SECS;
--
-- if (isAbsolute) {
-- jlong secs = time / 1000;
-- if (secs > max_secs) {
-- absTime->tv_sec = max_secs;
-+ time_t max_secs = 0;
-+
-+ if (!os::Linux::supports_monotonic_clock() || isAbsolute) {
-+ struct timeval now;
-+ int status = gettimeofday(&now, NULL);
-+ assert(status == 0, "gettimeofday");
-+
-+ max_secs = now.tv_sec + MAX_SECS;
-+
-+ if (isAbsolute) {
-+ jlong secs = time / 1000;
-+ if (secs > max_secs) {
-+ absTime->tv_sec = max_secs;
-+ } else {
-+ absTime->tv_sec = secs;
-+ }
-+ absTime->tv_nsec = (time % 1000) * NANOSECS_PER_MILLISEC;
-+ } else {
-+ jlong secs = time / NANOSECS_PER_SEC;
-+ if (secs >= MAX_SECS) {
-+ absTime->tv_sec = max_secs;
-+ absTime->tv_nsec = 0;
-+ } else {
-+ absTime->tv_sec = now.tv_sec + secs;
-+ absTime->tv_nsec = (time % NANOSECS_PER_SEC) + now.tv_usec*1000;
-+ if (absTime->tv_nsec >= NANOSECS_PER_SEC) {
-+ absTime->tv_nsec -= NANOSECS_PER_SEC;
-+ ++absTime->tv_sec; // note: this must be <= max_secs
-+ }
-+ }
- }
-- else {
-- absTime->tv_sec = secs;
-- }
-- absTime->tv_nsec = (time % 1000) * NANOSECS_PER_MILLISEC;
-- }
-- else {
-+ } else {
-+ // must be relative using monotonic clock
-+ struct timespec now;
-+ int status = os::Linux::clock_gettime(CLOCK_MONOTONIC, &now);
-+ assert_status(status == 0, status, "clock_gettime");
-+ max_secs = now.tv_sec + MAX_SECS;
- jlong secs = time / NANOSECS_PER_SEC;
- if (secs >= MAX_SECS) {
- absTime->tv_sec = max_secs;
- absTime->tv_nsec = 0;
-- }
-- else {
-+ } else {
- absTime->tv_sec = now.tv_sec + secs;
-- absTime->tv_nsec = (time % NANOSECS_PER_SEC) + now.tv_usec*1000;
-+ absTime->tv_nsec = (time % NANOSECS_PER_SEC) + now.tv_nsec;
- if (absTime->tv_nsec >= NANOSECS_PER_SEC) {
- absTime->tv_nsec -= NANOSECS_PER_SEC;
- ++absTime->tv_sec; // note: this must be <= max_secs
-@@ -5662,16 +5955,20 @@
- OSThreadWaitState osts(thread->osthread(), false /* not Object.wait() */);
- jt->set_suspend_equivalent();
- // cleared by handle_special_suspend_equivalent_condition() or java_suspend_self()
--
-+ assert(_cur_index == -1, "invariant");
- if (time == 0) {
-- status = pthread_cond_wait (_cond, _mutex) ;
-+ _cur_index = REL_INDEX; // arbitrary choice when not timed
-+ status = pthread_cond_wait (&_cond[_cur_index], _mutex) ;
- } else {
-- status = os::Linux::safe_cond_timedwait (_cond, _mutex, &absTime) ;
-+ _cur_index = isAbsolute ? ABS_INDEX : REL_INDEX;
-+ status = os::Linux::safe_cond_timedwait (&_cond[_cur_index], _mutex, &absTime) ;
- if (status != 0 && WorkAroundNPTLTimedWaitHang) {
-- pthread_cond_destroy (_cond) ;
-- pthread_cond_init (_cond, NULL);
-+ pthread_cond_destroy (&_cond[_cur_index]) ;
-+ pthread_cond_init (&_cond[_cur_index], isAbsolute ? NULL : os::Linux::condAttr());
- }
- }
-+ _cur_index = -1;
-+
- assert_status(status == 0 || status == EINTR ||
- status == ETIME || status == ETIMEDOUT,
- status, "cond_timedwait");
-@@ -5700,17 +5997,24 @@
- s = _counter;
- _counter = 1;
- if (s < 1) {
-- if (WorkAroundNPTLTimedWaitHang) {
-- status = pthread_cond_signal (_cond) ;
-- assert (status == 0, "invariant") ;
-+ // thread might be parked
-+ if (_cur_index != -1) {
-+ // thread is definitely parked
-+ if (WorkAroundNPTLTimedWaitHang) {
-+ status = pthread_cond_signal (&_cond[_cur_index]);
-+ assert (status == 0, "invariant");
- status = pthread_mutex_unlock(_mutex);
-- assert (status == 0, "invariant") ;
-- } else {
-+ assert (status == 0, "invariant");
-+ } else {
- status = pthread_mutex_unlock(_mutex);
-- assert (status == 0, "invariant") ;
-- status = pthread_cond_signal (_cond) ;
-- assert (status == 0, "invariant") ;
-- }
-+ assert (status == 0, "invariant");
-+ status = pthread_cond_signal (&_cond[_cur_index]);
-+ assert (status == 0, "invariant");
-+ }
-+ } else {
-+ pthread_mutex_unlock(_mutex);
-+ assert (status == 0, "invariant") ;
-+ }
- } else {
- pthread_mutex_unlock(_mutex);
- assert (status == 0, "invariant") ;
-@@ -5926,3 +6230,149 @@
- }
-
- #endif // JAVASE_EMBEDDED
-+
-+
-+/////////////// Unit tests ///////////////
-+
-+#ifndef PRODUCT
-+
-+#define test_log(...) \
-+ do {\
-+ if (VerboseInternalVMTests) { \
-+ tty->print_cr(__VA_ARGS__); \
-+ tty->flush(); \
-+ }\
-+ } while (false)
-+
-+class TestReserveMemorySpecial : AllStatic {
-+ public:
-+ static void small_page_write(void* addr, size_t size) {
-+ size_t page_size = os::vm_page_size();
-+
-+ char* end = (char*)addr + size;
-+ for (char* p = (char*)addr; p < end; p += page_size) {
-+ *p = 1;
-+ }
-+ }
-+
-+ static void test_reserve_memory_special_huge_tlbfs_only(size_t size) {
-+ if (!UseHugeTLBFS) {
-+ return;
-+ }
-+
-+ test_log("test_reserve_memory_special_huge_tlbfs_only(" SIZE_FORMAT ")", size);
-+
-+ char* addr = os::Linux::reserve_memory_special_huge_tlbfs_only(size, NULL, false);
-+
-+ if (addr != NULL) {
-+ small_page_write(addr, size);
-+
-+ os::Linux::release_memory_special_huge_tlbfs(addr, size);
-+ }
-+ }
-+
-+ static void test_reserve_memory_special_huge_tlbfs_only() {
-+ if (!UseHugeTLBFS) {
-+ return;
-+ }
-+
-+ size_t lp = os::large_page_size();
-+
-+ for (size_t size = lp; size <= lp * 10; size += lp) {
-+ test_reserve_memory_special_huge_tlbfs_only(size);
-+ }
-+ }
-+
-+ static void test_reserve_memory_special_huge_tlbfs_mixed(size_t size, size_t alignment) {
-+ if (!UseHugeTLBFS) {
-+ return;
-+ }
-+
-+ test_log("test_reserve_memory_special_huge_tlbfs_mixed(" SIZE_FORMAT ", " SIZE_FORMAT ")",
-+ size, alignment);
-+
-+ assert(size >= os::large_page_size(), "Incorrect input to test");
-+
-+ char* addr = os::Linux::reserve_memory_special_huge_tlbfs_mixed(size, alignment, NULL, false);
-+
-+ if (addr != NULL) {
-+ small_page_write(addr, size);
-+
-+ os::Linux::release_memory_special_huge_tlbfs(addr, size);
-+ }
-+ }
-+
-+ static void test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(size_t size) {
-+ size_t lp = os::large_page_size();
-+ size_t ag = os::vm_allocation_granularity();
-+
-+ for (size_t alignment = ag; is_size_aligned(size, alignment); alignment *= 2) {
-+ test_reserve_memory_special_huge_tlbfs_mixed(size, alignment);
-+ }
-+ }
-+
-+ static void test_reserve_memory_special_huge_tlbfs_mixed() {
-+ size_t lp = os::large_page_size();
-+ size_t ag = os::vm_allocation_granularity();
-+
-+ test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(lp);
-+ test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(lp + ag);
-+ test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(lp + lp / 2);
-+ test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(lp * 2);
-+ test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(lp * 2 + ag);
-+ test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(lp * 2 - ag);
-+ test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(lp * 2 + lp / 2);
-+ test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(lp * 10);
-+ test_reserve_memory_special_huge_tlbfs_mixed_all_alignments(lp * 10 + lp / 2);
-+ }
-+
-+ static void test_reserve_memory_special_huge_tlbfs() {
-+ if (!UseHugeTLBFS) {
-+ return;
-+ }
-+
-+ test_reserve_memory_special_huge_tlbfs_only();
-+ test_reserve_memory_special_huge_tlbfs_mixed();
-+ }
-+
-+ static void test_reserve_memory_special_shm(size_t size, size_t alignment) {
-+ if (!UseSHM) {
-+ return;
-+ }
-+
-+ test_log("test_reserve_memory_special_shm(" SIZE_FORMAT ", " SIZE_FORMAT ")", size, alignment);
-+
-+ char* addr = os::Linux::reserve_memory_special_shm(size, alignment, NULL, false);
-+
-+ if (addr != NULL) {
-+ assert(is_ptr_aligned(addr, alignment), "Check");
-+ assert(is_ptr_aligned(addr, os::large_page_size()), "Check");
-+
-+ small_page_write(addr, size);
-+
-+ os::Linux::release_memory_special_shm(addr, size);
-+ }
-+ }
-+
-+ static void test_reserve_memory_special_shm() {
-+ size_t lp = os::large_page_size();
-+ size_t ag = os::vm_allocation_granularity();
-+
-+ for (size_t size = ag; size < lp * 3; size += ag) {
-+ for (size_t alignment = ag; is_size_aligned(size, alignment); alignment *= 2) {
-+ test_reserve_memory_special_shm(size, alignment);
-+ }
-+ }
-+ }
-+
-+ static void test() {
-+ test_reserve_memory_special_huge_tlbfs();
-+ test_reserve_memory_special_shm();
-+ }
-+};
-+
-+void TestReserveMemorySpecial_test() {
-+ TestReserveMemorySpecial::test();
-+}
-+
-+#endif
---- ./hotspot/src/os/linux/vm/os_linux.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os/linux/vm/os_linux.hpp Wed May 07 19:26:16 2014 -0700
-@@ -32,6 +32,7 @@
-
- class Linux {
- friend class os;
-+ friend class TestReserveMemorySpecial;
-
- // For signal-chaining
- #define MAXSIGNUM 32
-@@ -92,15 +93,27 @@
- static void rebuild_cpu_to_node_map();
- static GrowableArray<int>* cpu_to_node() { return _cpu_to_node; }
-
-+ static size_t find_large_page_size();
-+ static size_t setup_large_page_size();
-+
-+ static bool setup_large_page_type(size_t page_size);
-+ static bool transparent_huge_pages_sanity_check(bool warn, size_t pages_size);
- static bool hugetlbfs_sanity_check(bool warn, size_t page_size);
-
-+ static char* reserve_memory_special_shm(size_t bytes, size_t alignment, char* req_addr, bool exec);
-+ static char* reserve_memory_special_huge_tlbfs(size_t bytes, size_t alignment, char* req_addr, bool exec);
-+ static char* reserve_memory_special_huge_tlbfs_only(size_t bytes, char* req_addr, bool exec);
-+ static char* reserve_memory_special_huge_tlbfs_mixed(size_t bytes, size_t alignment, char* req_addr, bool exec);
-+
-+ static bool release_memory_special_shm(char* base, size_t bytes);
-+ static bool release_memory_special_huge_tlbfs(char* base, size_t bytes);
-+
- static void print_full_memory_info(outputStream* st);
- static void print_distro_info(outputStream* st);
- static void print_libversion_info(outputStream* st);
-
- public:
- static bool _stack_is_executable;
-- static volatile jint num_largepage_commit_fails;
- static void *dlopen_helper(const char *name, char *ebuf, int ebuflen);
- static void *dll_load_in_vmthread(const char *name, char *ebuf, int ebuflen);
-
-@@ -208,6 +221,13 @@
-
- static jlong fast_thread_cpu_time(clockid_t clockid);
-
-+ // pthread_cond clock suppport
-+ private:
-+ static pthread_condattr_t _condattr[1];
-+
-+ public:
-+ static pthread_condattr_t* condAttr() { return _condattr; }
-+
- // Stack repair handling
-
- // none present
-@@ -274,7 +294,7 @@
- public:
- PlatformEvent() {
- int status;
-- status = pthread_cond_init (_cond, NULL);
-+ status = pthread_cond_init (_cond, os::Linux::condAttr());
- assert_status(status == 0, status, "cond_init");
- status = pthread_mutex_init (_mutex, NULL);
- assert_status(status == 0, status, "mutex_init");
-@@ -289,14 +309,19 @@
- void park () ;
- void unpark () ;
- int TryPark () ;
-- int park (jlong millis) ;
-+ int park (jlong millis) ; // relative timed-wait only
- void SetAssociation (Thread * a) { _Assoc = a ; }
- } ;
-
- class PlatformParker : public CHeapObj<mtInternal> {
- protected:
-+ enum {
-+ REL_INDEX = 0,
-+ ABS_INDEX = 1
-+ };
-+ int _cur_index; // which cond is in use: -1, 0, 1
- pthread_mutex_t _mutex [1] ;
-- pthread_cond_t _cond [1] ;
-+ pthread_cond_t _cond [2] ; // one for relative times and one for abs.
-
- public: // TODO-FIXME: make dtor private
- ~PlatformParker() { guarantee (0, "invariant") ; }
-@@ -304,10 +329,13 @@
- public:
- PlatformParker() {
- int status;
-- status = pthread_cond_init (_cond, NULL);
-- assert_status(status == 0, status, "cond_init");
-+ status = pthread_cond_init (&_cond[REL_INDEX], os::Linux::condAttr());
-+ assert_status(status == 0, status, "cond_init rel");
-+ status = pthread_cond_init (&_cond[ABS_INDEX], NULL);
-+ assert_status(status == 0, status, "cond_init abs");
- status = pthread_mutex_init (_mutex, NULL);
- assert_status(status == 0, status, "mutex_init");
-+ _cur_index = -1; // mark as unused
- }
- };
-
---- ./hotspot/src/os/posix/vm/os_posix.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os/posix/vm/os_posix.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
--* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
-+* Copyright (c) 1999, 2013, 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
-@@ -30,6 +30,8 @@
- #include <unistd.h>
- #include <sys/resource.h>
- #include <sys/utsname.h>
-+#include <pthread.h>
-+#include <signal.h>
-
-
- // Check core dump limit and report possible place where core can be found
-@@ -203,11 +205,17 @@
- * The callback is supposed to provide the method that should be protected.
- */
- bool os::WatcherThreadCrashProtection::call(os::CrashProtectionCallback& cb) {
-+ sigset_t saved_sig_mask;
-+
- assert(Thread::current()->is_Watcher_thread(), "Only for WatcherThread");
- assert(!WatcherThread::watcher_thread()->has_crash_protection(),
- "crash_protection already set?");
-
-- if (sigsetjmp(_jmpbuf, 1) == 0) {
-+ // we cannot rely on sigsetjmp/siglongjmp to save/restore the signal mask
-+ // since on at least some systems (OS X) siglongjmp will restore the mask
-+ // for the process, not the thread
-+ pthread_sigmask(0, NULL, &saved_sig_mask);
-+ if (sigsetjmp(_jmpbuf, 0) == 0) {
- // make sure we can see in the signal handler that we have crash protection
- // installed
- WatcherThread::watcher_thread()->set_crash_protection(this);
-@@ -217,6 +225,7 @@
- return true;
- }
- // this happens when we siglongjmp() back
-+ pthread_sigmask(SIG_SETMASK, &saved_sig_mask, NULL);
- WatcherThread::watcher_thread()->set_crash_protection(NULL);
- return false;
- }
---- ./hotspot/src/os/solaris/vm/os_solaris.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os/solaris/vm/os_solaris.cpp Wed May 07 19:26:16 2014 -0700
-@@ -3530,11 +3530,15 @@
- return true;
- }
-
--char* os::reserve_memory_special(size_t size, char* addr, bool exec) {
-+char* os::reserve_memory_special(size_t size, size_t alignment, char* addr, bool exec) {
- // "exec" is passed in but not used. Creating the shared image for
- // the code cache doesn't have an SHM_X executable permission to check.
- assert(UseLargePages && UseISM, "only for ISM large pages");
-
-+ if (!is_size_aligned(size, os::large_page_size()) || alignment > os::large_page_size()) {
-+ return NULL; // Fallback to small pages.
-+ }
-+
- char* retAddr = NULL;
- int shmid;
- key_t ismKey;
-@@ -6862,3 +6866,9 @@
-
- return strlen(buffer);
- }
-+
-+#ifndef PRODUCT
-+void TestReserveMemorySpecial_test() {
-+ // No tests available for this platform
-+}
-+#endif
---- ./hotspot/src/os/windows/vm/os_windows.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os/windows/vm/os_windows.cpp Wed May 07 19:26:16 2014 -0700
-@@ -800,15 +800,21 @@
- return result;
- }
-
--// For now, we say that Windows does not support vtime. I have no idea
--// whether it can actually be made to (DLD, 9/13/05).
--
--bool os::supports_vtime() { return false; }
-+bool os::supports_vtime() { return true; }
- bool os::enable_vtime() { return false; }
- bool os::vtime_enabled() { return false; }
-+
- double os::elapsedVTime() {
-- // better than nothing, but not much
-- return elapsedTime();
-+ FILETIME created;
-+ FILETIME exited;
-+ FILETIME kernel;
-+ FILETIME user;
-+ if (GetThreadTimes(GetCurrentThread(), &created, &exited, &kernel, &user) != 0) {
-+ // the resolution of windows_to_java_time() should be sufficient (ms)
-+ return (double) (windows_to_java_time(kernel) + windows_to_java_time(user)) / MILLIUNITS;
-+ } else {
-+ return elapsedTime();
-+ }
- }
-
- jlong os::javaTimeMillis() {
-@@ -3088,7 +3094,12 @@
- return true;
- }
-
--char* os::reserve_memory_special(size_t bytes, char* addr, bool exec) {
-+char* os::reserve_memory_special(size_t bytes, size_t alignment, char* addr, bool exec) {
-+ assert(UseLargePages, "only for large pages");
-+
-+ if (!is_size_aligned(bytes, os::large_page_size()) || alignment > os::large_page_size()) {
-+ return NULL; // Fallback to small pages.
-+ }
-
- const DWORD prot = exec ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE;
- const DWORD flags = MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES;
-@@ -5593,3 +5604,9 @@
- }
-
- #endif
-+
-+#ifndef PRODUCT
-+void TestReserveMemorySpecial_test() {
-+ // No tests available for this platform
-+}
-+#endif
---- ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Wed May 07 19:26:16 2014 -0700
-@@ -873,3 +873,46 @@
- #endif
- }
- #endif
-+
-+
-+/*
-+ * IA32 only: execute code at a high address in case buggy NX emulation is present. I.e. avoid CS limit
-+ * updates (JDK-8023956).
-+ */
-+void os::workaround_expand_exec_shield_cs_limit() {
-+#if defined(IA32)
-+ size_t page_size = os::vm_page_size();
-+ /*
-+ * Take the highest VA the OS will give us and exec
-+ *
-+ * Although using -(pagesz) as mmap hint works on newer kernel as you would
-+ * think, older variants affected by this work-around don't (search forward only).
-+ *
-+ * On the affected distributions, we understand the memory layout to be:
-+ *
-+ * TASK_LIMIT= 3G, main stack base close to TASK_LIMT.
-+ *
-+ * A few pages south main stack will do it.
-+ *
-+ * If we are embedded in an app other than launcher (initial != main stack),
-+ * we don't have much control or understanding of the address space, just let it slide.
-+ */
-+ char* hint = (char*) (Linux::initial_thread_stack_bottom() -
-+ ((StackYellowPages + StackRedPages + 1) * page_size));
-+ char* codebuf = os::reserve_memory(page_size, hint);
-+ if ( (codebuf == NULL) || (!os::commit_memory(codebuf, page_size, true)) ) {
-+ return; // No matter, we tried, best effort.
-+ }
-+ if (PrintMiscellaneous && (Verbose || WizardMode)) {
-+ tty->print_cr("[CS limit NX emulation work-around, exec code at: %p]", codebuf);
-+ }
-+
-+ // Some code to exec: the 'ret' instruction
-+ codebuf[0] = 0xC3;
-+
-+ // Call the code in the codebuf
-+ __asm__ volatile("call *%0" : : "r"(codebuf));
-+
-+ // keep the page mapped so CS limit isn't reduced.
-+#endif
-+}
---- ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.hpp Wed May 07 19:26:16 2014 -0700
-@@ -36,4 +36,17 @@
- // Note: Currently only used in 64 bit Windows implementations
- static bool register_code_area(char *low, char *high) { return true; }
-
-+ /*
-+ * Work-around for broken NX emulation using CS limit, Red Hat patch "Exec-Shield"
-+ * (IA32 only).
-+ *
-+ * Map and execute at a high VA to prevent CS lazy updates race with SMP MM
-+ * invalidation.Further code generation by the JVM will no longer cause CS limit
-+ * updates.
-+ *
-+ * Affects IA32: RHEL 5 & 6, Ubuntu 10.04 (LTS), 10.10, 11.04, 11.10, 12.04.
-+ * @see JDK-8023956
-+ */
-+ static void workaround_expand_exec_shield_cs_limit();
-+
- #endif // OS_CPU_LINUX_X86_VM_OS_LINUX_X86_HPP
---- ./hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Wed May 07 19:26:16 2014 -0700
-@@ -4178,7 +4178,9 @@
- }
- }
-
-- if (!PrintInlining) return;
-+ if (!PrintInlining && !compilation()->method()->has_option("PrintInlining")) {
-+ return;
-+ }
- CompileTask::print_inlining(callee, scope()->level(), bci(), msg);
- if (success && CIPrintMethodCodes) {
- callee->print_codes();
---- ./hotspot/src/share/vm/c1/c1_LIR.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/c1/c1_LIR.hpp Wed May 07 19:26:16 2014 -0700
-@@ -2221,7 +2221,7 @@
- typedef enum { inputMode, firstMode = inputMode, tempMode, outputMode, numModes, invalidMode = -1 } OprMode;
-
- enum {
-- maxNumberOfOperands = 16,
-+ maxNumberOfOperands = 20,
- maxNumberOfInfos = 4
- };
-
---- ./hotspot/src/share/vm/c1/c1_LinearScan.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/c1/c1_LinearScan.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1138,8 +1138,10 @@
- }
- }
- }
--
-- } else if (opr_type != T_LONG) {
-+ // We want to sometimes use logical operations on pointers, in particular in GC barriers.
-+ // Since 64bit logical operations do not current support operands on stack, we have to make sure
-+ // T_OBJECT doesn't get spilled along with T_LONG.
-+ } else if (opr_type != T_LONG LP64_ONLY(&& opr_type != T_OBJECT)) {
- // integer instruction (note: long operands must always be in register)
- switch (op->code()) {
- case lir_cmp:
---- ./hotspot/src/share/vm/c1/c1_Runtime1.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/c1/c1_Runtime1.cpp Wed May 07 19:26:16 2014 -0700
-@@ -911,16 +911,6 @@
- // Return to the now deoptimized frame.
- }
-
-- // If we are patching in a non-perm oop, make sure the nmethod
-- // is on the right list.
-- if (ScavengeRootsInCode && load_klass.not_null() && load_klass->is_scavengable()) {
-- MutexLockerEx ml_code (CodeCache_lock, Mutex::_no_safepoint_check_flag);
-- nmethod* nm = CodeCache::find_nmethod(caller_frame.pc());
-- guarantee(nm != NULL, "only nmethods can contain non-perm oops");
-- if (!nm->on_scavenge_root_list())
-- CodeCache::add_scavenge_root_nmethod(nm);
-- }
--
- // Now copy code back
-
- {
-@@ -1096,6 +1086,22 @@
- }
- }
- }
-+
-+
-+ // If we are patching in a non-perm oop, make sure the nmethod
-+ // is on the right list.
-+ if (ScavengeRootsInCode && load_klass.not_null() && load_klass->is_scavengable()) {
-+ MutexLockerEx ml_code (CodeCache_lock, Mutex::_no_safepoint_check_flag);
-+ nmethod* nm = CodeCache::find_nmethod(caller_frame.pc());
-+ guarantee(nm != NULL, "only nmethods can contain non-perm oops");
-+ if (!nm->on_scavenge_root_list()) {
-+ CodeCache::add_scavenge_root_nmethod(nm);
-+ }
-+
-+ // Since we've patched some oops in the nmethod,
-+ // (re)register it with the heap.
-+ Universe::heap()->register_nmethod(nm);
-+ }
- JRT_END
-
- //
---- ./hotspot/src/share/vm/classfile/classFileParser.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/classfile/classFileParser.cpp Wed May 07 19:26:16 2014 -0700
-@@ -4056,8 +4056,8 @@
- for (int index = 0; index < num_methods; index++) {
- methodOop m = (methodOop)methods->obj_at(index);
-
-- // skip static and <init> methods
-- if ((!m->is_static()) &&
-+ // skip private, static, and <init> methods
-+ if ((!m->is_private() && !m->is_static()) &&
- (m->name() != vmSymbols::object_initializer_name())) {
-
- Symbol* name = m->name();
---- ./hotspot/src/share/vm/classfile/javaClasses.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/classfile/javaClasses.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -2388,6 +2388,26 @@
- *offset = value;
- }
-
-+// Support for java_lang_invoke_DirectMethodHandle
-+
-+int java_lang_invoke_DirectMethodHandle::_member_offset;
-+
-+oop java_lang_invoke_DirectMethodHandle::member(oop dmh) {
-+ oop member_name = NULL;
-+ bool is_dmh = dmh->is_oop() && java_lang_invoke_DirectMethodHandle::is_instance(dmh);
-+ assert(is_dmh, "a DirectMethodHandle oop is expected");
-+ if (is_dmh) {
-+ member_name = dmh->obj_field(member_offset_in_bytes());
-+ }
-+ return member_name;
-+}
-+
-+void java_lang_invoke_DirectMethodHandle::compute_offsets() {
-+ klassOop klass_oop = SystemDictionary::DirectMethodHandle_klass();
-+ if (klass_oop != NULL && EnableInvokeDynamic) {
-+ compute_offset(_member_offset, klass_oop, vmSymbols::member_name(), vmSymbols::java_lang_invoke_MemberName_signature());
-+ }
-+}
-
- // Support for java_lang_invoke_MethodHandle
-
-@@ -2497,6 +2517,13 @@
- return mname->obj_field(_vmtarget_offset);
- }
-
-+// Can be executed on VM thread only
-+void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, oop ref) {
-+ assert((is_instance(mname) && (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0), "wrong type");
-+ assert(Thread::current()->is_VM_thread(), "not VM thread");
-+ mname->address_field_put(_vmtarget_offset, (address)ref);
-+}
-+
- void java_lang_invoke_MemberName::set_vmtarget(oop mname, oop ref) {
- assert(is_instance(mname), "wrong type");
- #ifdef ASSERT
-@@ -3000,6 +3027,7 @@
- java_lang_ThreadGroup::compute_offsets();
- if (EnableInvokeDynamic) {
- java_lang_invoke_MethodHandle::compute_offsets();
-+ java_lang_invoke_DirectMethodHandle::compute_offsets();
- java_lang_invoke_MemberName::compute_offsets();
- java_lang_invoke_LambdaForm::compute_offsets();
- java_lang_invoke_MethodType::compute_offsets();
---- ./hotspot/src/share/vm/classfile/javaClasses.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/classfile/javaClasses.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -915,6 +915,32 @@
- static int form_offset_in_bytes() { return _form_offset; }
- };
-
-+// Interface to java.lang.invoke.DirectMethodHandle objects
-+
-+class java_lang_invoke_DirectMethodHandle: AllStatic {
-+ friend class JavaClasses;
-+
-+ private:
-+ static int _member_offset; // the MemberName of this DMH
-+
-+ static void compute_offsets();
-+
-+ public:
-+ // Accessors
-+ static oop member(oop mh);
-+
-+ // Testers
-+ static bool is_subclass(klassOop klass) {
-+ return Klass::cast(klass)->is_subclass_of(SystemDictionary::DirectMethodHandle_klass());
-+ }
-+ static bool is_instance(oop obj) {
-+ return obj != NULL && is_subclass(obj->klass());
-+ }
-+
-+ // Accessors for code generation:
-+ static int member_offset_in_bytes() { return _member_offset; }
-+};
-+
- // Interface to java.lang.invoke.LambdaForm objects
- // (These are a private interface for managing adapter code generation.)
-
-@@ -988,6 +1014,7 @@
-
- static oop vmtarget(oop mname);
- static void set_vmtarget(oop mname, oop target);
-+ static void adjust_vmtarget(oop mname, oop target);
-
- static intptr_t vmindex(oop mname);
- static void set_vmindex(oop mname, intptr_t index);
---- ./hotspot/src/share/vm/classfile/symbolTable.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/classfile/symbolTable.cpp Wed May 07 19:26:16 2014 -0700
-@@ -39,6 +39,9 @@
-
- // --------------------------------------------------------------------------
-
-+// the number of buckets a thread claims
-+const int ClaimChunkSize = 32;
-+
- SymbolTable* SymbolTable::_the_table = NULL;
- // Static arena for symbols that are not deallocated
- Arena* SymbolTable::_arena = NULL;
-@@ -81,16 +84,12 @@
- }
- }
-
--int SymbolTable::symbols_removed = 0;
--int SymbolTable::symbols_counted = 0;
-+int SymbolTable::_symbols_removed = 0;
-+int SymbolTable::_symbols_counted = 0;
-+volatile int SymbolTable::_parallel_claimed_idx = 0;
-
--// Remove unreferenced symbols from the symbol table
--// This is done late during GC.
--void SymbolTable::unlink() {
-- int removed = 0;
-- int total = 0;
-- size_t memory_total = 0;
-- for (int i = 0; i < the_table()->table_size(); ++i) {
-+void SymbolTable::buckets_unlink(int start_idx, int end_idx, int* processed, int* removed, size_t* memory_total) {
-+ for (int i = start_idx; i < end_idx; ++i) {
- HashtableEntry<Symbol*, mtSymbol>** p = the_table()->bucket_addr(i);
- HashtableEntry<Symbol*, mtSymbol>* entry = the_table()->bucket(i);
- while (entry != NULL) {
-@@ -102,14 +101,14 @@
- break;
- }
- Symbol* s = entry->literal();
-- memory_total += s->object_size();
-- total++;
-+ (*memory_total) += s->object_size();
-+ (*processed)++;
- assert(s != NULL, "just checking");
- // If reference count is zero, remove.
- if (s->refcount() == 0) {
- assert(!entry->is_shared(), "shared entries should be kept live");
- delete s;
-- removed++;
-+ (*removed)++;
- *p = entry->next();
- the_table()->free_entry(entry);
- } else {
-@@ -119,12 +118,45 @@
- entry = (HashtableEntry<Symbol*, mtSymbol>*)HashtableEntry<Symbol*, mtSymbol>::make_ptr(*p);
- }
- }
-- symbols_removed += removed;
-- symbols_counted += total;
-+}
-+
-+// Remove unreferenced symbols from the symbol table
-+// This is done late during GC.
-+void SymbolTable::unlink(int* processed, int* removed) {
-+ size_t memory_total = 0;
-+ buckets_unlink(0, the_table()->table_size(), processed, removed, &memory_total);
-+ _symbols_removed += *removed;
-+ _symbols_counted += *processed;
- // Exclude printing for normal PrintGCDetails because people parse
- // this output.
- if (PrintGCDetails && Verbose && WizardMode) {
-- gclog_or_tty->print(" [Symbols=%d size=" SIZE_FORMAT "K] ", total,
-+ gclog_or_tty->print(" [Symbols=%d size=" SIZE_FORMAT "K] ", *processed,
-+ (memory_total*HeapWordSize)/1024);
-+ }
-+}
-+
-+void SymbolTable::possibly_parallel_unlink(int* processed, int* removed) {
-+ const int limit = the_table()->table_size();
-+
-+ size_t memory_total = 0;
-+
-+ for (;;) {
-+ // Grab next set of buckets to scan
-+ int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
-+ if (start_idx >= limit) {
-+ // End of table
-+ break;
-+ }
-+
-+ int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
-+ buckets_unlink(start_idx, end_idx, processed, removed, &memory_total);
-+ }
-+ Atomic::add(*processed, &_symbols_counted);
-+ Atomic::add(*removed, &_symbols_removed);
-+ // Exclude printing for normal PrintGCDetails because people parse
-+ // this output.
-+ if (PrintGCDetails && Verbose && WizardMode) {
-+ gclog_or_tty->print(" [Symbols: scanned=%d removed=%d size=" SIZE_FORMAT "K] ", *processed, *removed,
- (memory_total*HeapWordSize)/1024);
- }
- }
-@@ -503,21 +535,21 @@
- }
- }
- tty->print_cr("Symbol Table:");
-- tty->print_cr("Total number of symbols %5d", count);
-- tty->print_cr("Total size in memory %5dK",
-+ tty->print_cr("Total number of symbols "INT32_FORMAT, count);
-+ tty->print_cr("Total size in memory "INT32_FORMAT"K",
- (memory_total*HeapWordSize)/1024);
-- tty->print_cr("Total counted %5d", symbols_counted);
-- tty->print_cr("Total removed %5d", symbols_removed);
-- if (symbols_counted > 0) {
-+ tty->print_cr("Total counted "INT32_FORMAT, _symbols_counted);
-+ tty->print_cr("Total removed "INT32_FORMAT, _symbols_removed);
-+ if (_symbols_counted > 0) {
- tty->print_cr("Percent removed %3.2f",
-- ((float)symbols_removed/(float)symbols_counted)* 100);
-+ ((float)_symbols_removed/(float)_symbols_counted)* 100);
- }
-- tty->print_cr("Reference counts %5d", Symbol::_total_count);
-- tty->print_cr("Symbol arena size %5d used %5d",
-+ tty->print_cr("Reference counts "INT32_FORMAT, Symbol::_total_count);
-+ tty->print_cr("Symbol arena size "SIZE_FORMAT" used "SIZE_FORMAT,
- arena()->size_in_bytes(), arena()->used());
- tty->print_cr("Histogram of symbol length:");
-- tty->print_cr("%8s %5d", "Total ", total);
-- tty->print_cr("%8s %5d", "Maximum", max_symbols);
-+ tty->print_cr("%8s "INT32_FORMAT, "Total ", total);
-+ tty->print_cr("%8s "INT32_FORMAT, "Maximum", max_symbols);
- tty->print_cr("%8s %3.2f", "Average",
- ((float) total / (float) the_table()->table_size()));
- tty->print_cr("%s", "Histogram:");
-@@ -746,11 +778,41 @@
- return result;
- }
-
--void StringTable::unlink(BoolObjectClosure* is_alive) {
-+void StringTable::unlink(BoolObjectClosure* is_alive, int* processed, int* removed) {
-+ buckets_unlink(is_alive, 0, the_table()->table_size(), processed, removed);
-+}
-+
-+void StringTable::possibly_parallel_unlink(BoolObjectClosure* is_alive, int* processed, int* removed) {
- // Readers of the table are unlocked, so we should only be removing
- // entries at a safepoint.
- assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
-- for (int i = 0; i < the_table()->table_size(); ++i) {
-+ const int limit = the_table()->table_size();
-+
-+ for (;;) {
-+ // Grab next set of buckets to scan
-+ int start_idx = Atomic::add(ClaimChunkSize, &_parallel_claimed_idx) - ClaimChunkSize;
-+ if (start_idx >= limit) {
-+ // End of table
-+ break;
-+ }
-+
-+ int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
-+ buckets_unlink(is_alive, start_idx, end_idx, processed, removed);
-+ }
-+}
-+
-+void StringTable::buckets_unlink(BoolObjectClosure* is_alive, int start_idx, int end_idx, int* processed, int* removed) {
-+ const int limit = the_table()->table_size();
-+
-+ assert(0 <= start_idx && start_idx <= limit,
-+ err_msg("start_idx (" INT32_FORMAT ") is out of bounds", start_idx));
-+ assert(0 <= end_idx && end_idx <= limit,
-+ err_msg("end_idx (" INT32_FORMAT ") is out of bounds", end_idx));
-+ assert(start_idx <= end_idx,
-+ err_msg("Index ordering: start_idx=" INT32_FORMAT", end_idx=" INT32_FORMAT,
-+ start_idx, end_idx));
-+
-+ for (int i = start_idx; i < end_idx; ++i) {
- HashtableEntry<oop, mtSymbol>** p = the_table()->bucket_addr(i);
- HashtableEntry<oop, mtSymbol>* entry = the_table()->bucket(i);
- while (entry != NULL) {
-@@ -767,24 +829,26 @@
- } else {
- *p = entry->next();
- the_table()->free_entry(entry);
-+ (*removed)++;
- }
-+ (*processed)++;
- entry = (HashtableEntry<oop, mtSymbol>*)HashtableEntry<oop, mtSymbol>::make_ptr(*p);
- }
- }
- }
-
--void StringTable::buckets_do(OopClosure* f, int start_idx, int end_idx) {
-+void StringTable::buckets_oops_do(OopClosure* f, int start_idx, int end_idx) {
- const int limit = the_table()->table_size();
-
- assert(0 <= start_idx && start_idx <= limit,
-- err_msg("start_idx (" INT32_FORMAT ") oob?", start_idx));
-+ err_msg("start_idx (" INT32_FORMAT ") is out of bounds", start_idx));
- assert(0 <= end_idx && end_idx <= limit,
-- err_msg("end_idx (" INT32_FORMAT ") oob?", end_idx));
-+ err_msg("end_idx (" INT32_FORMAT ") is out of bounds", end_idx));
- assert(start_idx <= end_idx,
-- err_msg("Ordering: start_idx=" INT32_FORMAT", end_idx=" INT32_FORMAT,
-+ err_msg("Index ordering: start_idx=" INT32_FORMAT", end_idx=" INT32_FORMAT,
- start_idx, end_idx));
-
-- for (int i = start_idx; i < end_idx; i += 1) {
-+ for (int i = start_idx; i < end_idx; i++) {
- HashtableEntry<oop, mtSymbol>** p = the_table()->bucket_addr(i);
- HashtableEntry<oop, mtSymbol>* entry = the_table()->bucket(i);
- while (entry != NULL) {
-@@ -804,11 +868,10 @@
- }
-
- void StringTable::oops_do(OopClosure* f) {
-- buckets_do(f, 0, the_table()->table_size());
-+ buckets_oops_do(f, 0, the_table()->table_size());
- }
-
- void StringTable::possibly_parallel_oops_do(OopClosure* f) {
-- const int ClaimChunkSize = 32;
- const int limit = the_table()->table_size();
-
- for (;;) {
-@@ -820,7 +883,7 @@
- }
-
- int end_idx = MIN2(limit, start_idx + ClaimChunkSize);
-- buckets_do(f, start_idx, end_idx);
-+ buckets_oops_do(f, start_idx, end_idx);
- }
- }
-
---- ./hotspot/src/share/vm/classfile/symbolTable.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/classfile/symbolTable.hpp Wed May 07 19:26:16 2014 -0700
-@@ -86,8 +86,8 @@
- static bool _needs_rehashing;
-
- // For statistics
-- static int symbols_removed;
-- static int symbols_counted;
-+ static int _symbols_removed;
-+ static int _symbols_counted;
-
- Symbol* allocate_symbol(const u1* name, int len, bool c_heap, TRAPS); // Assumes no characters larger than 0x7F
-
-@@ -126,6 +126,11 @@
- static Arena* arena() { return _arena; } // called for statistics
-
- static void initialize_symbols(int arena_alloc_size = 0);
-+
-+ static volatile int _parallel_claimed_idx;
-+
-+ // Release any dead symbols
-+ static void buckets_unlink(int start_idx, int end_idx, int* processed, int* removed, size_t* memory_total);
- public:
- enum {
- symbol_alloc_batch_size = 8,
-@@ -175,7 +180,19 @@
- unsigned int* hashValues, TRAPS);
-
- // Release any dead symbols
-- static void unlink();
-+ static void unlink() {
-+ int processed = 0;
-+ int removed = 0;
-+ unlink(&processed, &removed);
-+ }
-+ static void unlink(int* processed, int* removed);
-+ // Release any dead symbols, possibly parallel version
-+ static void possibly_parallel_unlink() {
-+ int processed = 0;
-+ int removed = 0;
-+ possibly_parallel_unlink(&processed, &removed);
-+ }
-+ static void possibly_parallel_unlink(int* processed, int* removed);
-
- // iterate over symbols
- static void symbols_do(SymbolClosure *cl);
-@@ -233,6 +250,9 @@
- // Rehash the symbol table if it gets out of balance
- static void rehash_table();
- static bool needs_rehashing() { return _needs_rehashing; }
-+ // Parallel chunked scanning
-+ static void clear_parallel_claimed_index() { _parallel_claimed_idx = 0; }
-+ static int parallel_claimed_index() { return _parallel_claimed_idx; }
- };
-
- class StringTable : public Hashtable<oop, mtSymbol> {
-@@ -256,7 +276,9 @@
-
- // Apply the give oop closure to the entries to the buckets
- // in the range [start_idx, end_idx).
-- static void buckets_do(OopClosure* f, int start_idx, int end_idx);
-+ static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx);
-+ // Unlink the entries to the buckets in the range [start_idx, end_idx).
-+ static void buckets_unlink(BoolObjectClosure* is_alive, int start_idx, int end_idx, int* processed, int* removed);
-
- StringTable() : Hashtable<oop, mtSymbol>((int)StringTableSize,
- sizeof (HashtableEntry<oop, mtSymbol>)) {}
-@@ -283,7 +305,13 @@
-
- // GC support
- // Delete pointers to otherwise-unreachable objects.
-- static void unlink(BoolObjectClosure* cl);
-+ static void unlink(BoolObjectClosure* cl) {
-+ int processed = 0;
-+ int removed = 0;
-+ unlink(cl, &processed, &removed);
-+ }
-+
-+ static void unlink(BoolObjectClosure* cl, int* processed, int* removed);
-
- // Serially invoke "f->do_oop" on the locations of all oops in the table.
- static void oops_do(OopClosure* f);
-@@ -291,6 +319,8 @@
- // Possibly parallel version of the above
- static void possibly_parallel_oops_do(OopClosure* f);
-
-+ static void possibly_parallel_unlink(BoolObjectClosure* cl, int* processed, int* removed);
-+
- // Hashing algorithm, used as the hash value used by the
- // StringTable for bucket selection and comparison (stored in the
- // HashtableEntry structures). This is used in the String.intern() method.
-@@ -328,5 +358,6 @@
-
- // Parallel chunked scanning
- static void clear_parallel_claimed_index() { _parallel_claimed_idx = 0; }
-+ static int parallel_claimed_index() { return _parallel_claimed_idx; }
- };
- #endif // SHARE_VM_CLASSFILE_SYMBOLTABLE_HPP
---- ./hotspot/src/share/vm/classfile/systemDictionary.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/classfile/systemDictionary.cpp Wed May 07 19:26:16 2014 -0700
-@@ -585,7 +585,7 @@
- assert(name != NULL && !FieldType::is_array(name) &&
- !FieldType::is_obj(name), "invalid class name");
-
-- TracingTime class_load_start_time = Tracing::time();
-+ const Ticks class_load_start_time = Ticks::now();
-
- // UseNewReflection
- // Fix for 4474172; see evaluation for more details
-@@ -946,7 +946,7 @@
- TRAPS) {
- TempNewSymbol parsed_name = NULL;
-
-- TracingTime class_load_start_time = Tracing::time();
-+ const Ticks class_load_start_time = Ticks::now();
-
- // Parse the stream. Note that we do this even though this klass might
- // already be present in the SystemDictionary, otherwise we would not
-@@ -1572,9 +1572,10 @@
- // Used for assertions and verification only
- klassOop SystemDictionary::find_class(Symbol* class_name, Handle class_loader) {
- #ifndef ASSERT
-- guarantee(VerifyBeforeGC ||
-- VerifyDuringGC ||
-- VerifyBeforeExit ||
-+ guarantee(VerifyBeforeGC ||
-+ VerifyDuringGC ||
-+ VerifyBeforeExit ||
-+ VerifyDuringStartup ||
- VerifyAfterGC, "too expensive");
- #endif
- assert_locked_or_safepoint(SystemDictionary_lock);
-@@ -2314,6 +2315,11 @@
- objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty));
- assert(appendix_box->obj_at(0) == NULL, "");
-
-+ // This should not happen. JDK code should take care of that.
-+ if (accessing_klass.is_null() || method_type.is_null()) {
-+ THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad invokehandle", empty);
-+ }
-+
- // call java.lang.invoke.MethodHandleNatives::linkMethod(... String, MethodType) -> MemberName
- JavaCallArguments args;
- args.push_oop(accessing_klass()->java_mirror());
-@@ -2439,6 +2445,9 @@
- Handle type;
- if (signature->utf8_length() > 0 && signature->byte_at(0) == '(') {
- type = find_method_handle_type(signature, caller, CHECK_(empty));
-+ } else if (caller.is_null()) {
-+ // This should not happen. JDK code should take care of that.
-+ THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad MH constant", empty);
- } else {
- ResourceMark rm(THREAD);
- SignatureStream ss(signature, false);
-@@ -2502,6 +2511,11 @@
- Handle method_name = java_lang_String::create_from_symbol(name, CHECK_(empty));
- Handle method_type = find_method_handle_type(type, caller, CHECK_(empty));
-
-+ // This should not happen. JDK code should take care of that.
-+ if (caller.is_null() || method_type.is_null()) {
-+ THROW_MSG_(vmSymbols::java_lang_InternalError(), "bad invokedynamic", empty);
-+ }
-+
- objArrayHandle appendix_box = oopFactory::new_objArray(SystemDictionary::Object_klass(), 1, CHECK_(empty));
- assert(appendix_box->obj_at(0) == NULL, "");
-
-@@ -2607,13 +2621,12 @@
- }
-
- // utility function for posting class load event
--void SystemDictionary::post_class_load_event(TracingTime start_time,
-+void SystemDictionary::post_class_load_event(const Ticks& start_time,
- instanceKlassHandle k,
- Handle initiating_loader) {
- #if INCLUDE_TRACE
- EventClassLoad event(UNTIMED);
- if (event.should_commit()) {
-- event.set_endtime(Tracing::time());
- event.set_starttime(start_time);
- event.set_loadedClass(k());
- oop defining_class_loader = k->class_loader();
-@@ -2632,7 +2645,7 @@
- assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
- if (Tracing::enabled()) {
- _should_write_unload_events = Tracing::is_event_enabled(TraceClassUnloadEvent);
-- _class_unload_time = Tracing::time();
-+ _class_unload_time = Ticks::now();
- _is_alive = is_alive;
- classes_do(&class_unload_event);
-
-@@ -2648,7 +2661,7 @@
-
- #if INCLUDE_TRACE
-
--TracingTime SystemDictionary::_class_unload_time;
-+Ticks SystemDictionary::_class_unload_time;
- BoolObjectClosure* SystemDictionary::_is_alive = NULL;
- int SystemDictionary::_no_of_classes_unloading = 0;
- bool SystemDictionary::_should_write_unload_events = false;
---- ./hotspot/src/share/vm/classfile/systemDictionary.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/classfile/systemDictionary.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -33,7 +33,7 @@
- #include "runtime/reflectionUtils.hpp"
- #include "utilities/hashtable.hpp"
- #include "utilities/hashtable.inline.hpp"
--#include "trace/traceTime.hpp"
-+#include "utilities/ticks.hpp"
-
- // The system dictionary stores all loaded classes and maps:
- //
-@@ -151,6 +151,7 @@
- do_klass(MemberName_klass, java_lang_invoke_MemberName, Pre_JSR292 ) \
- do_klass(MethodHandleNatives_klass, java_lang_invoke_MethodHandleNatives, Pre_JSR292 ) \
- do_klass(LambdaForm_klass, java_lang_invoke_LambdaForm, Opt ) \
-+ do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle, Opt ) \
- do_klass(MethodType_klass, java_lang_invoke_MethodType, Pre_JSR292 ) \
- do_klass(BootstrapMethodError_klass, java_lang_BootstrapMethodError, Pre_JSR292 ) \
- do_klass(CallSite_klass, java_lang_invoke_CallSite, Pre_JSR292 ) \
-@@ -616,7 +617,7 @@
- static void add_to_hierarchy(instanceKlassHandle k, TRAPS);
-
- // event based tracing
-- static void post_class_load_event(TracingTime start_time, instanceKlassHandle k,
-+ static void post_class_load_event(const Ticks& start_time, instanceKlassHandle k,
- Handle initiating_loader);
- static void post_class_unload_events(BoolObjectClosure* is_alive);
-
-@@ -678,7 +679,7 @@
- static bool _has_checkPackageAccess;
-
- #if INCLUDE_TRACE
-- static TracingTime _class_unload_time;
-+ static Ticks _class_unload_time;
- static BoolObjectClosure* _is_alive;
- static int _no_of_classes_unloading;
- static bool _should_write_unload_events;
---- ./hotspot/src/share/vm/classfile/vmSymbols.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/classfile/vmSymbols.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -243,6 +243,7 @@
- /* Support for JSR 292 & invokedynamic (JDK 1.7 and above) */ \
- template(java_lang_invoke_CallSite, "java/lang/invoke/CallSite") \
- template(java_lang_invoke_ConstantCallSite, "java/lang/invoke/ConstantCallSite") \
-+ template(java_lang_invoke_DirectMethodHandle, "java/lang/invoke/DirectMethodHandle") \
- template(java_lang_invoke_MutableCallSite, "java/lang/invoke/MutableCallSite") \
- template(java_lang_invoke_VolatileCallSite, "java/lang/invoke/VolatileCallSite") \
- template(java_lang_invoke_MethodHandle, "java/lang/invoke/MethodHandle") \
-@@ -338,6 +339,7 @@
- template(thread_id_name, "tid") \
- template(newInstance0_name, "newInstance0") \
- template(limit_name, "limit") \
-+ template(member_name, "member") \
- template(forName_name, "forName") \
- template(forName0_name, "forName0") \
- template(isJavaIdentifierStart_name, "isJavaIdentifierStart") \
---- ./hotspot/src/share/vm/code/nmethod.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/code/nmethod.cpp Wed May 07 19:26:16 2014 -0700
-@@ -676,6 +676,7 @@
- code_buffer->copy_oops_to(this);
- if (ScavengeRootsInCode && detect_scavenge_root_oops()) {
- CodeCache::add_scavenge_root_nmethod(this);
-+ Universe::heap()->register_nmethod(this);
- }
- debug_only(verify_scavenge_root_oops());
- CodeCache::commit(this);
-@@ -869,6 +870,7 @@
- dependencies->copy_to(this);
- if (ScavengeRootsInCode && detect_scavenge_root_oops()) {
- CodeCache::add_scavenge_root_nmethod(this);
-+ Universe::heap()->register_nmethod(this);
- }
- debug_only(verify_scavenge_root_oops());
-
-@@ -1282,6 +1284,13 @@
- methodHandle the_method(method());
- No_Safepoint_Verifier nsv;
-
-+ // during patching, depending on the nmethod state we must notify the GC that
-+ // code has been unloaded, unregistering it. We cannot do this right while
-+ // holding the Patching_lock because we need to use the CodeCache_lock. This
-+ // would be prone to deadlocks.
-+ // This flag is used to remember whether we need to later lock and unregister.
-+ bool nmethod_needs_unregister = false;
-+
- {
- // invalidate osr nmethod before acquiring the patching lock since
- // they both acquire leaf locks and we don't want a deadlock.
-@@ -1314,6 +1323,13 @@
- inc_decompile_count();
- }
-
-+ // If the state is becoming a zombie, signal to unregister the nmethod with
-+ // the heap.
-+ // This nmethod may have already been unloaded during a full GC.
-+ if ((state == zombie) && !is_unloaded()) {
-+ nmethod_needs_unregister = true;
-+ }
-+
- // Change state
- _state = state;
-
-@@ -1349,6 +1365,9 @@
- // safepoint can sneak in, otherwise the oops used by the
- // dependency logic could have become stale.
- MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
-+ if (nmethod_needs_unregister) {
-+ Universe::heap()->unregister_nmethod(this);
-+ }
- flush_dependencies(NULL);
- }
-
-@@ -1696,20 +1715,10 @@
- #endif // !PRODUCT
- }
-
--// This method is called twice during GC -- once while
--// tracing the "active" nmethods on thread stacks during
--// the (strong) marking phase, and then again when walking
--// the code cache contents during the weak roots processing
--// phase. The two uses are distinguished by means of the
--// 'do_strong_roots_only' flag, which is true in the first
--// case. We want to walk the weak roots in the nmethod
--// only in the second case. The weak roots in the nmethod
--// are the oops in the ExceptionCache and the InlineCache
--// oops.
--void nmethod::oops_do(OopClosure* f, bool do_strong_roots_only) {
-- // make sure the oops ready to receive visitors
-- assert(!is_zombie() && !is_unloaded(),
-- "should not call follow on zombie or unloaded nmethod");
-+void nmethod::oops_do(OopClosure* f, bool do_strong_roots_only, bool allow_zombie) {
-+ // make sure the oops ready to receive visitors
-+ assert(allow_zombie || !is_zombie(), "should not call follow on zombie nmethod");
-+ assert(!is_unloaded(), "should not call follow on unloaded nmethod");
-
- // If the method is not entrant or zombie then a JMP is plastered over the
- // first few bytes. If an oop in the old code was there, that oop
---- ./hotspot/src/share/vm/code/nmethod.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/code/nmethod.hpp Wed May 07 19:26:16 2014 -0700
-@@ -548,8 +548,8 @@
-
- void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map,
- OopClosure* f);
-- void oops_do(OopClosure* f) { oops_do(f, false); }
-- void oops_do(OopClosure* f, bool do_strong_roots_only);
-+ void oops_do(OopClosure* f) { oops_do(f, false, false); }
-+ void oops_do(OopClosure* f, bool do_strong_roots_only, bool allow_zombie);
- bool detect_scavenge_root_oops();
- void verify_scavenge_root_oops() PRODUCT_RETURN;
-
---- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp Wed May 07 19:26:16 2014 -0700
-@@ -58,8 +58,22 @@
- MarkRefsIntoClosure(MemRegion span, CMSBitMap* bitMap);
- virtual void do_oop(oop* p);
- virtual void do_oop(narrowOop* p);
-- inline void do_oop_nv(oop* p) { MarkRefsIntoClosure::do_oop_work(p); }
-- inline void do_oop_nv(narrowOop* p) { MarkRefsIntoClosure::do_oop_work(p); }
-+
-+ Prefetch::style prefetch_style() {
-+ return Prefetch::do_read;
-+ }
-+};
-+
-+class Par_MarkRefsIntoClosure: public OopsInGenClosure {
-+ private:
-+ const MemRegion _span;
-+ CMSBitMap* _bitMap;
-+ protected:
-+ DO_OOP_WORK_DEFN
-+ public:
-+ Par_MarkRefsIntoClosure(MemRegion span, CMSBitMap* bitMap);
-+ virtual void do_oop(oop* p);
-+ virtual void do_oop(narrowOop* p);
- bool do_header() { return true; }
- Prefetch::style prefetch_style() {
- return Prefetch::do_read;
---- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed May 07 19:26:16 2014 -0700
-@@ -575,6 +575,7 @@
- _restart_addr(NULL),
- _overflow_list(NULL),
- _stats(cmsGen),
-+ _eden_chunk_lock(new Mutex(Mutex::leaf + 1, "CMS_eden_chunk_lock", true)),
- _eden_chunk_array(NULL), // may be set in ctor body
- _eden_chunk_capacity(0), // -- ditto --
- _eden_chunk_index(0), // -- ditto --
-@@ -754,7 +755,7 @@
- assert(_eden_chunk_array != NULL || _eden_chunk_capacity == 0, "Error");
-
- // Support for parallelizing survivor space rescan
-- if (CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) {
-+ if ((CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) || CMSParallelInitialMarkEnabled) {
- const size_t max_plab_samples =
- ((DefNewGeneration*)_young_gen)->max_survivor_size()/MinTLABSize;
-
-@@ -1997,7 +1998,7 @@
- GenCollectedHeap* gch = GenCollectedHeap::heap();
-
- STWGCTimer* gc_timer = GenMarkSweep::gc_timer();
-- gc_timer->register_gc_start(os::elapsed_counter());
-+ gc_timer->register_gc_start();
-
- SerialOldTracer* gc_tracer = GenMarkSweep::gc_tracer();
- gc_tracer->report_gc_start(gch->gc_cause(), gc_timer->gc_start());
-@@ -2094,7 +2095,7 @@
- size_policy()->msc_collection_end(gch->gc_cause());
- }
-
-- gc_timer->register_gc_end(os::elapsed_counter());
-+ gc_timer->register_gc_end();
-
- gc_tracer->report_gc_end(gc_timer->gc_end(), gc_timer->time_partitions());
-
-@@ -2136,6 +2137,39 @@
- }
-
-
-+void CMSCollector::print_eden_and_survivor_chunk_arrays() {
-+ DefNewGeneration* dng = _young_gen->as_DefNewGeneration();
-+ EdenSpace* eden_space = dng->eden();
-+ ContiguousSpace* from_space = dng->from();
-+ ContiguousSpace* to_space = dng->to();
-+ // Eden
-+ if (_eden_chunk_array != NULL) {
-+ gclog_or_tty->print_cr("eden " PTR_FORMAT "-" PTR_FORMAT "-" PTR_FORMAT "(" SIZE_FORMAT ")",
-+ eden_space->bottom(), eden_space->top(),
-+ eden_space->end(), eden_space->capacity());
-+ gclog_or_tty->print_cr("_eden_chunk_index=" SIZE_FORMAT ", "
-+ "_eden_chunk_capacity=" SIZE_FORMAT,
-+ _eden_chunk_index, _eden_chunk_capacity);
-+ for (size_t i = 0; i < _eden_chunk_index; i++) {
-+ gclog_or_tty->print_cr("_eden_chunk_array[" SIZE_FORMAT "]=" PTR_FORMAT,
-+ i, _eden_chunk_array[i]);
-+ }
-+ }
-+ // Survivor
-+ if (_survivor_chunk_array != NULL) {
-+ gclog_or_tty->print_cr("survivor " PTR_FORMAT "-" PTR_FORMAT "-" PTR_FORMAT "(" SIZE_FORMAT ")",
-+ from_space->bottom(), from_space->top(),
-+ from_space->end(), from_space->capacity());
-+ gclog_or_tty->print_cr("_survivor_chunk_index=" SIZE_FORMAT ", "
-+ "_survivor_chunk_capacity=" SIZE_FORMAT,
-+ _survivor_chunk_index, _survivor_chunk_capacity);
-+ for (size_t i = 0; i < _survivor_chunk_index; i++) {
-+ gclog_or_tty->print_cr("_survivor_chunk_array[" SIZE_FORMAT "]=" PTR_FORMAT,
-+ i, _survivor_chunk_array[i]);
-+ }
-+ }
-+}
-+
- void CMSCollector::getFreelistLocks() const {
- // Get locks for all free lists in all generations that this
- // collector is responsible for
-@@ -2443,7 +2477,7 @@
-
- void CMSCollector::register_gc_start(GCCause::Cause cause) {
- _cms_start_registered = true;
-- _gc_timer_cm->register_gc_start(os::elapsed_counter());
-+ _gc_timer_cm->register_gc_start();
- _gc_tracer_cm->report_gc_start(cause, _gc_timer_cm->gc_start());
- }
-
-@@ -2451,7 +2485,7 @@
- if (_cms_start_registered) {
- report_heap_summary(GCWhen::AfterGC);
-
-- _gc_timer_cm->register_gc_end(os::elapsed_counter());
-+ _gc_timer_cm->register_gc_end();
- _gc_tracer_cm->report_gc_end(_gc_timer_cm->gc_end(), _gc_timer_cm->time_partitions());
- _cms_start_registered = false;
- }
-@@ -2510,8 +2544,7 @@
- // initial marking in checkpointRootsInitialWork has been completed
- if (VerifyDuringGC &&
- GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
-- gclog_or_tty->print("Verify before initial mark: ");
-- Universe::verify();
-+ Universe::verify("Verify before initial mark: ");
- }
- {
- bool res = markFromRoots(false);
-@@ -2522,8 +2555,7 @@
- case FinalMarking:
- if (VerifyDuringGC &&
- GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
-- gclog_or_tty->print("Verify before re-mark: ");
-- Universe::verify();
-+ Universe::verify("Verify before re-mark: ");
- }
- checkpointRootsFinal(false, clear_all_soft_refs,
- init_mark_was_synchronous);
-@@ -2534,8 +2566,7 @@
- // final marking in checkpointRootsFinal has been completed
- if (VerifyDuringGC &&
- GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
-- gclog_or_tty->print("Verify before sweep: ");
-- Universe::verify();
-+ Universe::verify("Verify before sweep: ");
- }
- sweep(false);
- assert(_collectorState == Resizing, "Incorrect state");
-@@ -2550,8 +2581,7 @@
- // The heap has been resized.
- if (VerifyDuringGC &&
- GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
-- gclog_or_tty->print("Verify before reset: ");
-- Universe::verify();
-+ Universe::verify("Verify before reset: ");
- }
- save_heap_summary();
- reset(false);
-@@ -2890,8 +2920,8 @@
- bool failed() { return _failed; }
- };
-
--bool CMSCollector::verify_after_remark() {
-- gclog_or_tty->print(" [Verifying CMS Marking... ");
-+bool CMSCollector::verify_after_remark(bool silent) {
-+ if (!silent) gclog_or_tty->print(" [Verifying CMS Marking... ");
- MutexLockerEx ml(verification_mark_bm()->lock(), Mutex::_no_safepoint_check_flag);
- static bool init = false;
-
-@@ -2952,7 +2982,7 @@
- warning("Unrecognized value %d for CMSRemarkVerifyVariant",
- CMSRemarkVerifyVariant);
- }
-- gclog_or_tty->print(" done] ");
-+ if (!silent) gclog_or_tty->print(" done] ");
- return true;
- }
-
-@@ -3530,6 +3560,31 @@
-
- // CMS work
-
-+// The common parts of CMSParInitialMarkTask and CMSParRemarkTask.
-+class CMSParMarkTask : public AbstractGangTask {
-+ protected:
-+ CMSCollector* _collector;
-+ int _n_workers;
-+ CMSParMarkTask(const char* name, CMSCollector* collector, int n_workers) :
-+ AbstractGangTask(name),
-+ _collector(collector),
-+ _n_workers(n_workers) {}
-+ // Work method in support of parallel rescan ... of young gen spaces
-+ void do_young_space_rescan(uint worker_id, OopsInGenClosure* cl,
-+ ContiguousSpace* space,
-+ HeapWord** chunk_array, size_t chunk_top);
-+ void work_on_young_gen_roots(uint worker_id, OopsInGenClosure* cl);
-+};
-+
-+// Parallel initial mark task
-+class CMSParInitialMarkTask: public CMSParMarkTask {
-+ public:
-+ CMSParInitialMarkTask(CMSCollector* collector, int n_workers) :
-+ CMSParMarkTask("Scan roots and young gen for initial mark in parallel",
-+ collector, n_workers) {}
-+ void work(uint worker_id);
-+};
-+
- // Checkpoint the roots into this generation from outside
- // this generation. [Note this initial checkpoint need only
- // be approximate -- we'll do a catch up phase subsequently.]
-@@ -3619,20 +3674,42 @@
- // weak reference processing has not started yet.
- ref_processor()->set_enqueuing_is_done(false);
-
-+ if (CMSPrintEdenSurvivorChunks) {
-+ print_eden_and_survivor_chunk_arrays();
-+ }
-+
- {
- // This is not needed. DEBUG_ONLY(RememberKlassesChecker imx(true);)
- COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact;)
-- gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel.
-- gch->gen_process_strong_roots(_cmsGen->level(),
-- true, // younger gens are roots
-- true, // activate StrongRootsScope
-- true, // collecting perm gen
-- SharedHeap::ScanningOption(roots_scanning_options()),
-- &notOlder,
-- true, // walk all of code cache if (so & SO_CodeCache)
-- NULL);
-- }
--
-+ if (CMSParallelInitialMarkEnabled && CollectedHeap::use_parallel_gc_threads()) {
-+ // The parallel version.
-+ FlexibleWorkGang* workers = gch->workers();
-+ assert(workers != NULL, "Need parallel worker threads.");
-+ int n_workers = workers->active_workers();
-+ CMSParInitialMarkTask tsk(this, n_workers);
-+ gch->set_par_threads(n_workers);
-+ initialize_sequential_subtasks_for_young_gen_rescan(n_workers);
-+ if (n_workers > 1) {
-+ GenCollectedHeap::StrongRootsScope srs(gch);
-+ workers->run_task(&tsk);
-+ } else {
-+ GenCollectedHeap::StrongRootsScope srs(gch);
-+ tsk.work(0);
-+ }
-+ gch->set_par_threads(0);
-+ } else {
-+ // The serial version.
-+ gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel.
-+ gch->gen_process_strong_roots(_cmsGen->level(),
-+ true, // younger gens are roots
-+ true, // activate StrongRootsScope
-+ true, // collecting perm gen
-+ SharedHeap::ScanningOption(roots_scanning_options()),
-+ &notOlder,
-+ true, // walk all of code cache if (so & SO_CodeCache)
-+ NULL);
-+ }
-+ }
- // Clear mod-union table; it will be dirtied in the prologue of
- // CMS generation per each younger generation collection.
-
-@@ -4414,7 +4491,9 @@
- verify_overflow_empty();
- _abort_preclean = false;
- if (CMSPrecleaningEnabled) {
-- _eden_chunk_index = 0;
-+ if (!CMSEdenChunksRecordAlways) {
-+ _eden_chunk_index = 0;
-+ }
- size_t used = get_eden_used();
- size_t capacity = get_eden_capacity();
- // Don't start sampling unless we will get sufficiently
-@@ -4523,7 +4602,9 @@
- if (!_start_sampling) {
- return;
- }
-- if (_eden_chunk_array) {
-+ // When CMSEdenChunksRecordAlways is true, the eden chunk array
-+ // is populated by the young generation.
-+ if (_eden_chunk_array != NULL && !CMSEdenChunksRecordAlways) {
- if (_eden_chunk_index < _eden_chunk_capacity) {
- _eden_chunk_array[_eden_chunk_index] = *_top_addr; // take sample
- assert(_eden_chunk_array[_eden_chunk_index] <= *_end_addr,
-@@ -5000,6 +5081,10 @@
- // Update the saved marks which may affect the root scans.
- gch->save_marks();
-
-+ if (CMSPrintEdenSurvivorChunks) {
-+ print_eden_and_survivor_chunk_arrays();
-+ }
-+
- {
- COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact;)
-
-@@ -5107,10 +5192,51 @@
- }
- }
-
-+void CMSParInitialMarkTask::work(uint worker_id) {
-+ elapsedTimer _timer;
-+ ResourceMark rm;
-+ HandleMark hm;
-+
-+ // ---------- scan from roots --------------
-+ _timer.start();
-+ GenCollectedHeap* gch = GenCollectedHeap::heap();
-+ Par_MarkRefsIntoClosure par_mri_cl(_collector->_span, &(_collector->_markBitMap));
-+
-+ // ---------- young gen roots --------------
-+ {
-+ work_on_young_gen_roots(worker_id, &par_mri_cl);
-+ _timer.stop();
-+ if (PrintCMSStatistics != 0) {
-+ gclog_or_tty->print_cr(
-+ "Finished young gen initial mark scan work in %dth thread: %3.3f sec",
-+ worker_id, _timer.seconds());
-+ }
-+ }
-+
-+ // ---------- remaining roots --------------
-+ _timer.reset();
-+ _timer.start();
-+ gch->gen_process_strong_roots(_collector->_cmsGen->level(),
-+ false, // yg was scanned above
-+ false, // this is parallel code
-+ true, // collecting perm gen
-+ SharedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()),
-+ &par_mri_cl,
-+ true, // walk all of code cache if (so & SO_CodeCache)
-+ NULL);
-+ assert(_collector->should_unload_classes()
-+ || (_collector->CMSCollector::roots_scanning_options() & SharedHeap::SO_CodeCache),
-+ "if we didn't scan the code cache, we have to be ready to drop nmethods with expired weak oops");
-+ _timer.stop();
-+ if (PrintCMSStatistics != 0) {
-+ gclog_or_tty->print_cr(
-+ "Finished remaining root initial mark scan work in %dth thread: %3.3f sec",
-+ worker_id, _timer.seconds());
-+ }
-+}
-+
- // Parallel remark task
--class CMSParRemarkTask: public AbstractGangTask {
-- CMSCollector* _collector;
-- int _n_workers;
-+class CMSParRemarkTask: public CMSParMarkTask {
- CompactibleFreeListSpace* _cms_space;
- CompactibleFreeListSpace* _perm_space;
-
-@@ -5126,10 +5252,9 @@
- CompactibleFreeListSpace* perm_space,
- int n_workers, FlexibleWorkGang* workers,
- OopTaskQueueSet* task_queues):
-- AbstractGangTask("Rescan roots and grey objects in parallel"),
-- _collector(collector),
-+ CMSParMarkTask("Rescan roots and grey objects in parallel",
-+ collector, n_workers),
- _cms_space(cms_space), _perm_space(perm_space),
-- _n_workers(n_workers),
- _task_queues(task_queues),
- _term(n_workers, task_queues) { }
-
-@@ -5143,11 +5268,6 @@
- void work(uint worker_id);
-
- private:
-- // Work method in support of parallel rescan ... of young gen spaces
-- void do_young_space_rescan(int i, Par_MarkRefsIntoAndScanClosure* cl,
-- ContiguousSpace* space,
-- HeapWord** chunk_array, size_t chunk_top);
--
- // ... of dirty cards in old space
- void do_dirty_card_rescan_tasks(CompactibleFreeListSpace* sp, int i,
- Par_MarkRefsIntoAndScanClosure* cl);
-@@ -5156,6 +5276,25 @@
- void do_work_steal(int i, Par_MarkRefsIntoAndScanClosure* cl, int* seed);
- };
-
-+void CMSParMarkTask::work_on_young_gen_roots(uint worker_id, OopsInGenClosure* cl) {
-+ DefNewGeneration* dng = _collector->_young_gen->as_DefNewGeneration();
-+ EdenSpace* eden_space = dng->eden();
-+ ContiguousSpace* from_space = dng->from();
-+ ContiguousSpace* to_space = dng->to();
-+
-+ HeapWord** eca = _collector->_eden_chunk_array;
-+ size_t ect = _collector->_eden_chunk_index;
-+ HeapWord** sca = _collector->_survivor_chunk_array;
-+ size_t sct = _collector->_survivor_chunk_index;
-+
-+ assert(ect <= _collector->_eden_chunk_capacity, "out of bounds");
-+ assert(sct <= _collector->_survivor_chunk_capacity, "out of bounds");
-+
-+ do_young_space_rescan(worker_id, cl, to_space, NULL, 0);
-+ do_young_space_rescan(worker_id, cl, from_space, sca, sct);
-+ do_young_space_rescan(worker_id, cl, eden_space, eca, ect);
-+}
-+
- // work_queue(i) is passed to the closure
- // Par_MarkRefsIntoAndScanClosure. The "i" parameter
- // also is passed to do_dirty_card_rescan_tasks() and to
-@@ -5180,23 +5319,7 @@
- // work first.
- // ---------- young gen roots --------------
- {
-- DefNewGeneration* dng = _collector->_young_gen->as_DefNewGeneration();
-- EdenSpace* eden_space = dng->eden();
-- ContiguousSpace* from_space = dng->from();
-- ContiguousSpace* to_space = dng->to();
--
-- HeapWord** eca = _collector->_eden_chunk_array;
-- size_t ect = _collector->_eden_chunk_index;
-- HeapWord** sca = _collector->_survivor_chunk_array;
-- size_t sct = _collector->_survivor_chunk_index;
--
-- assert(ect <= _collector->_eden_chunk_capacity, "out of bounds");
-- assert(sct <= _collector->_survivor_chunk_capacity, "out of bounds");
--
-- do_young_space_rescan(worker_id, &par_mrias_cl, to_space, NULL, 0);
-- do_young_space_rescan(worker_id, &par_mrias_cl, from_space, sca, sct);
-- do_young_space_rescan(worker_id, &par_mrias_cl, eden_space, eca, ect);
--
-+ work_on_young_gen_roots(worker_id, &par_mrias_cl);
- _timer.stop();
- if (PrintCMSStatistics != 0) {
- gclog_or_tty->print_cr(
-@@ -5257,8 +5380,8 @@
-
- // Note that parameter "i" is not used.
- void
--CMSParRemarkTask::do_young_space_rescan(int i,
-- Par_MarkRefsIntoAndScanClosure* cl, ContiguousSpace* space,
-+CMSParMarkTask::do_young_space_rescan(uint worker_id,
-+ OopsInGenClosure* cl, ContiguousSpace* space,
- HeapWord** chunk_array, size_t chunk_top) {
- // Until all tasks completed:
- // . claim an unclaimed task
-@@ -5454,6 +5577,32 @@
- "Else our work is not yet done");
- }
-
-+// Record object boundaries in _eden_chunk_array by sampling the eden
-+// top in the slow-path eden object allocation code path and record
-+// the boundaries, if CMSEdenChunksRecordAlways is true. If
-+// CMSEdenChunksRecordAlways is false, we use the other asynchronous
-+// sampling in sample_eden() that activates during the part of the
-+// preclean phase.
-+void CMSCollector::sample_eden_chunk() {
-+ if (CMSEdenChunksRecordAlways && _eden_chunk_array != NULL) {
-+ if (_eden_chunk_lock->try_lock()) {
-+ // Record a sample. This is the critical section. The contents
-+ // of the _eden_chunk_array have to be non-decreasing in the
-+ // address order.
-+ _eden_chunk_array[_eden_chunk_index] = *_top_addr;
-+ assert(_eden_chunk_array[_eden_chunk_index] <= *_end_addr,
-+ "Unexpected state of Eden");
-+ if (_eden_chunk_index == 0 ||
-+ ((_eden_chunk_array[_eden_chunk_index] > _eden_chunk_array[_eden_chunk_index-1]) &&
-+ (pointer_delta(_eden_chunk_array[_eden_chunk_index],
-+ _eden_chunk_array[_eden_chunk_index-1]) >= CMSSamplingGrain))) {
-+ _eden_chunk_index++; // commit sample
-+ }
-+ _eden_chunk_lock->unlock();
-+ }
-+ }
-+}
-+
- // Return a thread-local PLAB recording array, as appropriate.
- void* CMSCollector::get_data_recorder(int thr_num) {
- if (_survivor_plab_array != NULL &&
-@@ -5477,12 +5626,13 @@
-
- // Merge the per-thread plab arrays into the global survivor chunk
- // array which will provide the partitioning of the survivor space
--// for CMS rescan.
-+// for CMS initial scan and rescan.
- void CMSCollector::merge_survivor_plab_arrays(ContiguousSpace* surv,
- int no_of_gc_threads) {
- assert(_survivor_plab_array != NULL, "Error");
- assert(_survivor_chunk_array != NULL, "Error");
-- assert(_collectorState == FinalMarking, "Error");
-+ assert(_collectorState == FinalMarking ||
-+ (CMSParallelInitialMarkEnabled && _collectorState == InitialMarking), "Error");
- for (int j = 0; j < no_of_gc_threads; j++) {
- _cursor[j] = 0;
- }
-@@ -5545,7 +5695,7 @@
- }
-
- // Set up the space's par_seq_tasks structure for work claiming
--// for parallel rescan of young gen.
-+// for parallel initial scan and rescan of young gen.
- // See ParRescanTask where this is currently used.
- void
- CMSCollector::
-@@ -6695,6 +6845,28 @@
- void MarkRefsIntoClosure::do_oop(oop* p) { MarkRefsIntoClosure::do_oop_work(p); }
- void MarkRefsIntoClosure::do_oop(narrowOop* p) { MarkRefsIntoClosure::do_oop_work(p); }
-
-+Par_MarkRefsIntoClosure::Par_MarkRefsIntoClosure(
-+ MemRegion span, CMSBitMap* bitMap):
-+ _span(span),
-+ _bitMap(bitMap)
-+{
-+ assert(_ref_processor == NULL, "deliberately left NULL");
-+ assert(_bitMap->covers(_span), "_bitMap/_span mismatch");
-+}
-+
-+void Par_MarkRefsIntoClosure::do_oop(oop obj) {
-+ // if p points into _span, then mark corresponding bit in _markBitMap
-+ assert(obj->is_oop(), "expected an oop");
-+ HeapWord* addr = (HeapWord*)obj;
-+ if (_span.contains(addr)) {
-+ // this should be made more efficient
-+ _bitMap->par_mark(addr);
-+ }
-+}
-+
-+void Par_MarkRefsIntoClosure::do_oop(oop* p) { Par_MarkRefsIntoClosure::do_oop_work(p); }
-+void Par_MarkRefsIntoClosure::do_oop(narrowOop* p) { Par_MarkRefsIntoClosure::do_oop_work(p); }
-+
- // A variant of the above, used for CMS marking verification.
- MarkRefsIntoVerifyClosure::MarkRefsIntoVerifyClosure(
- MemRegion span, CMSBitMap* verification_bm, CMSBitMap* cms_bm):
-@@ -9360,7 +9532,6 @@
- return;
- }
- }
--
- // Transfer some number of overflown objects to usual marking
- // stack. Return true if some objects were transferred.
- bool MarkRefsIntoAndScanClosure::take_from_overflow_list() {
-@@ -9432,4 +9603,3 @@
- ShouldNotReachHere();
- }
- }
--
---- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Wed May 07 19:26:16 2014 -0700
-@@ -516,6 +516,8 @@
- friend class ConcurrentMarkSweepThread;
- friend class ConcurrentMarkSweepGeneration;
- friend class CompactibleFreeListSpace;
-+ friend class CMSParMarkTask;
-+ friend class CMSParInitialMarkTask;
- friend class CMSParRemarkTask;
- friend class CMSConcMarkingTask;
- friend class CMSRefProcTaskProxy;
-@@ -752,6 +754,7 @@
- Generation* _young_gen; // the younger gen
- HeapWord** _top_addr; // ... Top of Eden
- HeapWord** _end_addr; // ... End of Eden
-+ Mutex* _eden_chunk_lock;
- HeapWord** _eden_chunk_array; // ... Eden partitioning array
- size_t _eden_chunk_index; // ... top (exclusive) of array
- size_t _eden_chunk_capacity; // ... max entries in array
-@@ -953,6 +956,7 @@
-
- // Support for parallel remark of survivor space
- void* get_data_recorder(int thr_num);
-+ void sample_eden_chunk();
-
- CMSBitMap* markBitMap() { return &_markBitMap; }
- void directAllocated(HeapWord* start, size_t size);
-@@ -1013,7 +1017,7 @@
-
- // debugging
- void verify();
-- bool verify_after_remark();
-+ bool verify_after_remark(bool silent = VerifySilently);
- void verify_ok_to_terminate() const PRODUCT_RETURN;
- void verify_work_stacks_empty() const PRODUCT_RETURN;
- void verify_overflow_empty() const PRODUCT_RETURN;
-@@ -1031,6 +1035,8 @@
-
- // Initialization errors
- bool completed_initialization() { return _completed_initialization; }
-+
-+ void print_eden_and_survivor_chunk_arrays();
- };
-
- class CMSExpansionCause : public AllStatic {
-@@ -1317,6 +1323,10 @@
- //Delegate to collector
- return collector()->get_data_recorder(thr_num);
- }
-+ void sample_eden_chunk() {
-+ //Delegate to collector
-+ return collector()->sample_eden_chunk();
-+ }
-
- // Printing
- const char* name() const;
---- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2005, 2013, 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
-@@ -145,7 +145,7 @@
- );
- #endif /* USDT2 */
-
-- _collector->_gc_timer_cm->register_gc_pause_start("Initial Mark", os::elapsed_counter());
-+ _collector->_gc_timer_cm->register_gc_pause_start("Initial Mark");
-
- GenCollectedHeap* gch = GenCollectedHeap::heap();
- GCCauseSetter gccs(gch, GCCause::_cms_initial_mark);
-@@ -157,7 +157,7 @@
-
- VM_CMS_Operation::verify_after_gc();
-
-- _collector->_gc_timer_cm->register_gc_pause_end(os::elapsed_counter());
-+ _collector->_gc_timer_cm->register_gc_pause_end();
-
- #ifndef USDT2
- HS_DTRACE_PROBE(hs_private, cms__initmark__end);
-@@ -182,7 +182,7 @@
- );
- #endif /* USDT2 */
-
-- _collector->_gc_timer_cm->register_gc_pause_start("Final Mark", os::elapsed_counter());
-+ _collector->_gc_timer_cm->register_gc_pause_start("Final Mark");
-
- GenCollectedHeap* gch = GenCollectedHeap::heap();
- GCCauseSetter gccs(gch, GCCause::_cms_final_remark);
-@@ -195,7 +195,7 @@
- VM_CMS_Operation::verify_after_gc();
-
- _collector->save_heap_summary();
-- _collector->_gc_timer_cm->register_gc_pause_end(os::elapsed_counter());
-+ _collector->_gc_timer_cm->register_gc_pause_end();
-
- #ifndef USDT2
- HS_DTRACE_PROBE(hs_private, cms__remark__end);
---- ./hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp Wed May 07 19:26:16 2014 -0700
-@@ -114,6 +114,14 @@
- }
- }
-
-+void ConcurrentG1Refine::worker_threads_do(ThreadClosure * tc) {
-+ if (_threads != NULL) {
-+ for (int i = 0; i < worker_thread_num(); i++) {
-+ tc->do_thread(_threads[i]);
-+ }
-+ }
-+}
-+
- int ConcurrentG1Refine::thread_num() {
- int n_threads = (G1ConcRefinementThreads > 0) ? G1ConcRefinementThreads
- : ParallelGCThreads;
-@@ -126,3 +134,7 @@
- st->cr();
- }
- }
-+
-+ConcurrentG1RefineThread * ConcurrentG1Refine::sampling_thread() const {
-+ return _threads[worker_thread_num()];
-+}
---- ./hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp Wed May 07 19:26:16 2014 -0700
-@@ -35,6 +35,7 @@
- class G1CollectedHeap;
- class G1HotCardCache;
- class G1RemSet;
-+class DirtyCardQueue;
-
- class ConcurrentG1Refine: public CHeapObj<mtGC> {
- ConcurrentG1RefineThread** _threads;
-@@ -78,9 +79,15 @@
-
- void reinitialize_threads();
-
-- // Iterate over the conc refine threads
-+ // Iterate over all concurrent refinement threads
- void threads_do(ThreadClosure *tc);
-
-+ // Iterate over all worker refinement threads
-+ void worker_threads_do(ThreadClosure * tc);
-+
-+ // The RS sampling thread
-+ ConcurrentG1RefineThread * sampling_thread() const;
-+
- static int thread_num();
-
- void print_worker_threads_on(outputStream* st) const;
---- ./hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1154,10 +1154,9 @@
-
- if (VerifyDuringGC) {
- HandleMark hm; // handle scope
-- gclog_or_tty->print(" VerifyDuringGC:(before)");
- Universe::heap()->prepare_for_verify();
-- Universe::verify(/* silent */ false,
-- /* option */ VerifyOption_G1UsePrevMarking);
-+ Universe::verify(VerifyOption_G1UsePrevMarking,
-+ " VerifyDuringGC:(before)");
- }
-
- G1CollectorPolicy* g1p = g1h->g1_policy();
-@@ -1181,10 +1180,9 @@
- // Verify the heap w.r.t. the previous marking bitmap.
- if (VerifyDuringGC) {
- HandleMark hm; // handle scope
-- gclog_or_tty->print(" VerifyDuringGC:(overflow)");
- Universe::heap()->prepare_for_verify();
-- Universe::verify(/* silent */ false,
-- /* option */ VerifyOption_G1UsePrevMarking);
-+ Universe::verify(VerifyOption_G1UsePrevMarking,
-+ " VerifyDuringGC:(overflow)");
- }
-
- // Clear the marking state because we will be restarting
-@@ -1204,10 +1202,9 @@
-
- if (VerifyDuringGC) {
- HandleMark hm; // handle scope
-- gclog_or_tty->print(" VerifyDuringGC:(after)");
- Universe::heap()->prepare_for_verify();
-- Universe::verify(/* silent */ false,
-- /* option */ VerifyOption_G1UseNextMarking);
-+ Universe::verify(VerifyOption_G1UseNextMarking,
-+ " VerifyDuringGC:(after)");
- }
- assert(!restart_for_overflow(), "sanity");
- // Completely reset the marking state since marking completed
-@@ -1498,7 +1495,6 @@
- }
- };
-
--
- class G1ParVerifyFinalCountTask: public AbstractGangTask {
- protected:
- G1CollectedHeap* _g1h;
-@@ -1856,10 +1852,9 @@
-
- if (VerifyDuringGC) {
- HandleMark hm; // handle scope
-- gclog_or_tty->print(" VerifyDuringGC:(before)");
- Universe::heap()->prepare_for_verify();
-- Universe::verify(/* silent */ false,
-- /* option */ VerifyOption_G1UsePrevMarking);
-+ Universe::verify(VerifyOption_G1UsePrevMarking,
-+ " VerifyDuringGC:(before)");
- }
-
- G1CollectorPolicy* g1p = G1CollectedHeap::heap()->g1_policy();
-@@ -2011,10 +2006,9 @@
-
- if (VerifyDuringGC) {
- HandleMark hm; // handle scope
-- gclog_or_tty->print(" VerifyDuringGC:(after)");
- Universe::heap()->prepare_for_verify();
-- Universe::verify(/* silent */ false,
-- /* option */ VerifyOption_G1UsePrevMarking);
-+ Universe::verify(VerifyOption_G1UsePrevMarking,
-+ " VerifyDuringGC:(after)");
- }
-
- g1h->verify_region_sets_optional();
-@@ -2412,10 +2406,9 @@
- assert(!rp->discovery_enabled(), "Post condition");
- }
-
-- // Now clean up stale oops in StringTable
-- StringTable::unlink(&g1_is_alive);
-- // Clean up unreferenced symbols in symbol table.
-- SymbolTable::unlink();
-+ g1h->unlink_string_and_symbol_table(&g1_is_alive,
-+ /* process_strings */ false, // currently strings are always roots
-+ /* process_symbols */ true);
- }
-
- void ConcurrentMark::swapMarkBitMaps() {
-@@ -4396,7 +4389,8 @@
- _total_used_bytes(0), _total_capacity_bytes(0),
- _total_prev_live_bytes(0), _total_next_live_bytes(0),
- _hum_used_bytes(0), _hum_capacity_bytes(0),
-- _hum_prev_live_bytes(0), _hum_next_live_bytes(0) {
-+ _hum_prev_live_bytes(0), _hum_next_live_bytes(0),
-+ _total_remset_bytes(0), _total_strong_code_roots_bytes(0) {
- G1CollectedHeap* g1h = G1CollectedHeap::heap();
- MemRegion g1_committed = g1h->g1_committed();
- MemRegion g1_reserved = g1h->g1_reserved();
-@@ -4414,23 +4408,29 @@
- HeapRegion::GrainBytes);
- _out->print_cr(G1PPRL_LINE_PREFIX);
- _out->print_cr(G1PPRL_LINE_PREFIX
-- G1PPRL_TYPE_H_FORMAT
-- G1PPRL_ADDR_BASE_H_FORMAT
-- G1PPRL_BYTE_H_FORMAT
-- G1PPRL_BYTE_H_FORMAT
-- G1PPRL_BYTE_H_FORMAT
-- G1PPRL_DOUBLE_H_FORMAT,
-- "type", "address-range",
-- "used", "prev-live", "next-live", "gc-eff");
-+ G1PPRL_TYPE_H_FORMAT
-+ G1PPRL_ADDR_BASE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT
-+ G1PPRL_DOUBLE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT,
-+ "type", "address-range",
-+ "used", "prev-live", "next-live", "gc-eff",
-+ "remset", "code-roots");
- _out->print_cr(G1PPRL_LINE_PREFIX
-- G1PPRL_TYPE_H_FORMAT
-- G1PPRL_ADDR_BASE_H_FORMAT
-- G1PPRL_BYTE_H_FORMAT
-- G1PPRL_BYTE_H_FORMAT
-- G1PPRL_BYTE_H_FORMAT
-- G1PPRL_DOUBLE_H_FORMAT,
-- "", "",
-- "(bytes)", "(bytes)", "(bytes)", "(bytes/ms)");
-+ G1PPRL_TYPE_H_FORMAT
-+ G1PPRL_ADDR_BASE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT
-+ G1PPRL_DOUBLE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT
-+ G1PPRL_BYTE_H_FORMAT,
-+ "", "",
-+ "(bytes)", "(bytes)", "(bytes)", "(bytes/ms)",
-+ "(bytes)", "(bytes)");
- }
-
- // It takes as a parameter a reference to one of the _hum_* fields, it
-@@ -4472,6 +4472,9 @@
- size_t prev_live_bytes = r->live_bytes();
- size_t next_live_bytes = r->next_live_bytes();
- double gc_eff = r->gc_efficiency();
-+ size_t remset_bytes = r->rem_set()->mem_size();
-+ size_t strong_code_roots_bytes = r->rem_set()->strong_code_roots_mem_size();
-+
- if (r->used() == 0) {
- type = "FREE";
- } else if (r->is_survivor()) {
-@@ -4505,6 +4508,8 @@
- _total_capacity_bytes += capacity_bytes;
- _total_prev_live_bytes += prev_live_bytes;
- _total_next_live_bytes += next_live_bytes;
-+ _total_remset_bytes += remset_bytes;
-+ _total_strong_code_roots_bytes += strong_code_roots_bytes;
-
- // Print a line for this particular region.
- _out->print_cr(G1PPRL_LINE_PREFIX
-@@ -4513,14 +4518,19 @@
- G1PPRL_BYTE_FORMAT
- G1PPRL_BYTE_FORMAT
- G1PPRL_BYTE_FORMAT
-- G1PPRL_DOUBLE_FORMAT,
-+ G1PPRL_DOUBLE_FORMAT
-+ G1PPRL_BYTE_FORMAT
-+ G1PPRL_BYTE_FORMAT,
- type, bottom, end,
-- used_bytes, prev_live_bytes, next_live_bytes, gc_eff);
-+ used_bytes, prev_live_bytes, next_live_bytes, gc_eff,
-+ remset_bytes, strong_code_roots_bytes);
-
- return false;
- }
-
- G1PrintRegionLivenessInfoClosure::~G1PrintRegionLivenessInfoClosure() {
-+ // add static memory usages to remembered set sizes
-+ _total_remset_bytes += HeapRegionRemSet::fl_mem_size() + HeapRegionRemSet::static_mem_size();
- // Print the footer of the output.
- _out->print_cr(G1PPRL_LINE_PREFIX);
- _out->print_cr(G1PPRL_LINE_PREFIX
-@@ -4528,13 +4538,17 @@
- G1PPRL_SUM_MB_FORMAT("capacity")
- G1PPRL_SUM_MB_PERC_FORMAT("used")
- G1PPRL_SUM_MB_PERC_FORMAT("prev-live")
-- G1PPRL_SUM_MB_PERC_FORMAT("next-live"),
-+ G1PPRL_SUM_MB_PERC_FORMAT("next-live")
-+ G1PPRL_SUM_MB_FORMAT("remset")
-+ G1PPRL_SUM_MB_FORMAT("code-roots"),
- bytes_to_mb(_total_capacity_bytes),
- bytes_to_mb(_total_used_bytes),
- perc(_total_used_bytes, _total_capacity_bytes),
- bytes_to_mb(_total_prev_live_bytes),
- perc(_total_prev_live_bytes, _total_capacity_bytes),
- bytes_to_mb(_total_next_live_bytes),
-- perc(_total_next_live_bytes, _total_capacity_bytes));
-+ perc(_total_next_live_bytes, _total_capacity_bytes),
-+ bytes_to_mb(_total_remset_bytes),
-+ bytes_to_mb(_total_strong_code_roots_bytes));
- _out->cr();
- }
---- ./hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1224,6 +1224,12 @@
- size_t _hum_prev_live_bytes;
- size_t _hum_next_live_bytes;
-
-+ // Accumulator for the remembered set size
-+ size_t _total_remset_bytes;
-+
-+ // Accumulator for strong code roots memory size
-+ size_t _total_strong_code_roots_bytes;
-+
- static double perc(size_t val, size_t total) {
- if (total == 0) {
- return 0.0;
---- ./hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp Wed May 07 19:26:16 2014 -0700
-@@ -81,7 +81,7 @@
- size_t* marked_bytes_array,
- BitMap* task_card_bm) {
- G1CollectedHeap* g1h = _g1h;
-- CardTableModRefBS* ct_bs = (CardTableModRefBS*) (g1h->barrier_set());
-+ CardTableModRefBS* ct_bs = g1h->g1_barrier_set();
-
- HeapWord* start = mr.start();
- HeapWord* end = mr.end();
---- ./hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp Wed May 07 19:26:16 2014 -0700
-@@ -65,9 +65,7 @@
- // threshold limit is no more than this.
- guarantee(G1ConcRSHotCardLimit <= max_jubyte, "sanity");
-
-- ModRefBarrierSet* bs = _g1h->mr_bs();
-- guarantee(bs->is_a(BarrierSet::CardTableModRef), "Precondition");
-- _ct_bs = (CardTableModRefBS*)bs;
-+ _ct_bs = _g1h->g1_barrier_set();
- _ct_bot = _ct_bs->byte_for_const(_g1h->reserved_region().start());
-
- // Allocate/Reserve the counts table
---- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Wed May 07 19:26:16 2014 -0700
-@@ -23,6 +23,7 @@
- */
-
- #include "precompiled.hpp"
-+#include "code/codeCache.hpp"
- #include "code/icBuffer.hpp"
- #include "gc_implementation/g1/bufferingOopClosure.hpp"
- #include "gc_implementation/g1/concurrentG1Refine.hpp"
-@@ -56,6 +57,7 @@
- #include "oops/oop.pcgc.inline.hpp"
- #include "runtime/aprofiler.hpp"
- #include "runtime/vmThread.hpp"
-+#include "utilities/ticks.hpp"
-
- size_t G1CollectedHeap::_humongous_object_threshold_in_words = 0;
-
-@@ -125,10 +127,8 @@
- int _histo[256];
- public:
- ClearLoggedCardTableEntryClosure() :
-- _calls(0)
-+ _calls(0), _g1h(G1CollectedHeap::heap()), _ctbs(_g1h->g1_barrier_set())
- {
-- _g1h = G1CollectedHeap::heap();
-- _ctbs = (CardTableModRefBS*)_g1h->barrier_set();
- for (int i = 0; i < 256; i++) _histo[i] = 0;
- }
- bool do_card_ptr(jbyte* card_ptr, int worker_i) {
-@@ -158,11 +158,8 @@
- CardTableModRefBS* _ctbs;
- public:
- RedirtyLoggedCardTableEntryClosure() :
-- _calls(0)
-- {
-- _g1h = G1CollectedHeap::heap();
-- _ctbs = (CardTableModRefBS*)_g1h->barrier_set();
-- }
-+ _calls(0), _g1h(G1CollectedHeap::heap()), _ctbs(_g1h->g1_barrier_set()) {}
-+
- bool do_card_ptr(jbyte* card_ptr, int worker_i) {
- if (_g1h->is_in_reserved(_ctbs->addr_for(card_ptr))) {
- _calls++;
-@@ -477,7 +474,7 @@
-
- void G1CollectedHeap::check_ct_logs_at_safepoint() {
- DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
-- CardTableModRefBS* ct_bs = (CardTableModRefBS*)barrier_set();
-+ CardTableModRefBS* ct_bs = g1_barrier_set();
-
- // Count the dirty cards at the start.
- CountNonCleanMemRegionClosure count1(this);
-@@ -1158,26 +1155,33 @@
- ModRefBarrierSet* _mr_bs;
- public:
- PostMCRemSetClearClosure(G1CollectedHeap* g1h, ModRefBarrierSet* mr_bs) :
-- _g1h(g1h), _mr_bs(mr_bs) { }
-+ _g1h(g1h), _mr_bs(mr_bs) {}
-+
- bool doHeapRegion(HeapRegion* r) {
-+ HeapRegionRemSet* hrrs = r->rem_set();
-+
- if (r->continuesHumongous()) {
-+ // We'll assert that the strong code root list and RSet is empty
-+ assert(hrrs->strong_code_roots_list_length() == 0, "sanity");
-+ assert(hrrs->occupied() == 0, "RSet should be empty");
- return false;
- }
-+
- _g1h->reset_gc_time_stamps(r);
-- HeapRegionRemSet* hrrs = r->rem_set();
-- if (hrrs != NULL) hrrs->clear();
-+ hrrs->clear();
- // You might think here that we could clear just the cards
- // corresponding to the used region. But no: if we leave a dirty card
- // in a region we might allocate into, then it would prevent that card
- // from being enqueued, and cause it to be missed.
- // Re: the performance cost: we shouldn't be doing full GC anyway!
- _mr_bs->clear(MemRegion(r->bottom(), r->end()));
-+
- return false;
- }
- };
-
- void G1CollectedHeap::clear_rsets_post_compaction() {
-- PostMCRemSetClearClosure rs_clear(this, mr_bs());
-+ PostMCRemSetClearClosure rs_clear(this, g1_barrier_set());
- heap_region_iterate(&rs_clear);
- }
-
-@@ -1251,31 +1255,6 @@
- heap_region_iterate(&cl);
- }
-
--double G1CollectedHeap::verify(bool guard, const char* msg) {
-- double verify_time_ms = 0.0;
--
-- if (guard && total_collections() >= VerifyGCStartAt) {
-- double verify_start = os::elapsedTime();
-- HandleMark hm; // Discard invalid handles created during verification
-- gclog_or_tty->print(msg);
-- prepare_for_verify();
-- Universe::verify(false /* silent */, VerifyOption_G1UsePrevMarking);
-- verify_time_ms = (os::elapsedTime() - verify_start) * 1000;
-- }
--
-- return verify_time_ms;
--}
--
--void G1CollectedHeap::verify_before_gc() {
-- double verify_time_ms = verify(VerifyBeforeGC, " VerifyBeforeGC:");
-- g1_policy()->phase_times()->record_verify_before_time_ms(verify_time_ms);
--}
--
--void G1CollectedHeap::verify_after_gc() {
-- double verify_time_ms = verify(VerifyAfterGC, " VerifyAfterGC:");
-- g1_policy()->phase_times()->record_verify_after_time_ms(verify_time_ms);
--}
--
- bool G1CollectedHeap::do_collection(bool explicit_gc,
- bool clear_all_soft_refs,
- size_t word_size) {
-@@ -1286,7 +1265,7 @@
- }
-
- STWGCTimer* gc_timer = G1MarkSweep::gc_timer();
-- gc_timer->register_gc_start(os::elapsed_counter());
-+ gc_timer->register_gc_start();
-
- SerialOldTracer* gc_tracer = G1MarkSweep::gc_tracer();
- gc_tracer->report_gc_start(gc_cause(), gc_timer->gc_start());
-@@ -1408,8 +1387,6 @@
-
- MemoryService::track_memory_usage();
-
-- verify_after_gc();
--
- assert(!ref_processor_stw()->discovery_enabled(), "Postcondition");
- ref_processor_stw()->verify_no_references_recorded();
-
-@@ -1482,6 +1459,9 @@
- heap_region_iterate(&rebuild_rs);
- }
-
-+ // Rebuild the strong code root lists for each region
-+ rebuild_strong_code_roots();
-+
- if (true) { // FIXME
- // Ask the permanent generation to adjust size for full collections
- perm()->compute_new_size();
-@@ -1509,6 +1489,8 @@
- _hrs.verify_optional();
- verify_region_sets_optional();
-
-+ verify_after_gc();
-+
- // Start a new incremental collection set for the next pause
- assert(g1_policy()->collection_set() == NULL, "must be");
- g1_policy()->start_incremental_cset_building();
-@@ -1546,8 +1528,7 @@
- post_full_gc_dump(gc_timer);
- }
-
-- gc_timer->register_gc_end(os::elapsed_counter());
--
-+ gc_timer->register_gc_end();
- gc_tracer->report_gc_end(gc_timer->gc_end(), gc_timer->time_partitions());
-
- return true;
-@@ -1568,8 +1549,6 @@
- void
- G1CollectedHeap::
- resize_if_necessary_after_full_collection(size_t word_size) {
-- assert(MinHeapFreeRatio <= MaxHeapFreeRatio, "sanity check");
--
- // Include the current allocation, if any, and bytes that will be
- // pre-allocated to support collections, as "used".
- const size_t used_after_gc = used();
-@@ -2002,10 +1981,12 @@
-
- size_t init_byte_size = collector_policy()->initial_heap_byte_size();
- size_t max_byte_size = collector_policy()->max_heap_byte_size();
-+ size_t heap_alignment = collector_policy()->max_alignment();
-
- // Ensure that the sizes are properly aligned.
- Universe::check_alignment(init_byte_size, HeapRegion::GrainBytes, "g1 heap");
- Universe::check_alignment(max_byte_size, HeapRegion::GrainBytes, "g1 heap");
-+ Universe::check_alignment(max_byte_size, heap_alignment, "g1 heap");
-
- _cg1r = new ConcurrentG1Refine(this);
-
-@@ -2029,14 +2010,14 @@
- size_t total_reserved = 0;
-
- total_reserved = add_and_check_overflow(total_reserved, max_byte_size);
-- size_t pg_max_size = (size_t) align_size_up(pgs->max_size(), HeapRegion::GrainBytes);
-+ size_t pg_max_size = (size_t) align_size_up(pgs->max_size(), heap_alignment);
- total_reserved = add_and_check_overflow(total_reserved, pg_max_size);
-
- Universe::check_alignment(total_reserved, HeapRegion::GrainBytes, "g1 heap and perm");
-
-- char* addr = Universe::preferred_heap_base(total_reserved, Universe::UnscaledNarrowOop);
--
-- ReservedHeapSpace heap_rs(total_reserved, HeapRegion::GrainBytes,
-+ char* addr = Universe::preferred_heap_base(total_reserved, heap_alignment, Universe::UnscaledNarrowOop);
-+
-+ ReservedHeapSpace heap_rs(total_reserved, heap_alignment,
- UseLargePages, addr);
-
- if (UseCompressedOops) {
-@@ -2044,17 +2025,17 @@
- // Failed to reserve at specified address - the requested memory
- // region is taken already, for example, by 'java' launcher.
- // Try again to reserver heap higher.
-- addr = Universe::preferred_heap_base(total_reserved, Universe::ZeroBasedNarrowOop);
--
-- ReservedHeapSpace heap_rs0(total_reserved, HeapRegion::GrainBytes,
-+ addr = Universe::preferred_heap_base(total_reserved, heap_alignment, Universe::ZeroBasedNarrowOop);
-+
-+ ReservedHeapSpace heap_rs0(total_reserved, heap_alignment,
- UseLargePages, addr);
-
- if (addr != NULL && !heap_rs0.is_reserved()) {
- // Failed to reserve at specified address again - give up.
-- addr = Universe::preferred_heap_base(total_reserved, Universe::HeapBasedNarrowOop);
-+ addr = Universe::preferred_heap_base(total_reserved, heap_alignment, Universe::HeapBasedNarrowOop);
- assert(addr == NULL, "");
-
-- ReservedHeapSpace heap_rs1(total_reserved, HeapRegion::GrainBytes,
-+ ReservedHeapSpace heap_rs1(total_reserved, heap_alignment,
- UseLargePages, addr);
- heap_rs = heap_rs1;
- } else {
-@@ -2080,20 +2061,13 @@
- // Create the gen rem set (and barrier set) for the entire reserved region.
- _rem_set = collector_policy()->create_rem_set(_reserved, 2);
- set_barrier_set(rem_set()->bs());
-- if (barrier_set()->is_a(BarrierSet::ModRef)) {
-- _mr_bs = (ModRefBarrierSet*)_barrier_set;
-- } else {
-- vm_exit_during_initialization("G1 requires a mod ref bs.");
-+ if (!barrier_set()->is_a(BarrierSet::G1SATBCTLogging)) {
-+ vm_exit_during_initialization("G1 requires a G1SATBLoggingCardTableModRefBS");
- return JNI_ENOMEM;
- }
-
- // Also create a G1 rem set.
-- if (mr_bs()->is_a(BarrierSet::CardTableModRef)) {
-- _g1_rem_set = new G1RemSet(this, (CardTableModRefBS*)mr_bs());
-- } else {
-- vm_exit_during_initialization("G1 requires a cardtable mod ref bs.");
-- return JNI_ENOMEM;
-- }
-+ _g1_rem_set = new G1RemSet(this, g1_barrier_set());
-
- // Carve out the G1 part of the heap.
-
-@@ -2517,7 +2491,7 @@
- FullGCCount_lock->notify_all();
- }
-
--void G1CollectedHeap::register_concurrent_cycle_start(jlong start_time) {
-+void G1CollectedHeap::register_concurrent_cycle_start(const Ticks& start_time) {
- _concurrent_cycle_started = true;
- _gc_timer_cm->register_gc_start(start_time);
-
-@@ -2527,7 +2501,7 @@
-
- void G1CollectedHeap::register_concurrent_cycle_end() {
- if (_concurrent_cycle_started) {
-- _gc_timer_cm->register_gc_end(os::elapsed_counter());
-+ _gc_timer_cm->register_gc_end();
-
- if (_cm->has_aborted()) {
- _gc_tracer_cm->report_concurrent_mode_failure();
-@@ -3161,6 +3135,119 @@
- return NULL; // keep some compilers happy
- }
-
-+// TODO: VerifyRootsClosure extends OopsInGenClosure so that we can
-+// pass it as the perm_blk to SharedHeap::process_strong_roots.
-+// When process_strong_roots stop calling perm_blk->younger_refs_iterate
-+// we can change this closure to extend the simpler OopClosure.
-+class VerifyRootsClosure: public OopsInGenClosure {
-+private:
-+ G1CollectedHeap* _g1h;
-+ VerifyOption _vo;
-+ bool _failures;
-+public:
-+ // _vo == UsePrevMarking -> use "prev" marking information,
-+ // _vo == UseNextMarking -> use "next" marking information,
-+ // _vo == UseMarkWord -> use mark word from object header.
-+ VerifyRootsClosure(VerifyOption vo) :
-+ _g1h(G1CollectedHeap::heap()),
-+ _vo(vo),
-+ _failures(false) { }
-+
-+ bool failures() { return _failures; }
-+
-+ template <class T> void do_oop_nv(T* p) {
-+ T heap_oop = oopDesc::load_heap_oop(p);
-+ if (!oopDesc::is_null(heap_oop)) {
-+ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-+ if (_g1h->is_obj_dead_cond(obj, _vo)) {
-+ gclog_or_tty->print_cr("Root location "PTR_FORMAT" "
-+ "points to dead obj "PTR_FORMAT, p, (void*) obj);
-+ if (_vo == VerifyOption_G1UseMarkWord) {
-+ gclog_or_tty->print_cr(" Mark word: "PTR_FORMAT, (void*)(obj->mark()));
-+ }
-+ obj->print_on(gclog_or_tty);
-+ _failures = true;
-+ }
-+ }
-+ }
-+
-+ void do_oop(oop* p) { do_oop_nv(p); }
-+ void do_oop(narrowOop* p) { do_oop_nv(p); }
-+};
-+
-+class G1VerifyCodeRootOopClosure: public OopsInGenClosure {
-+ G1CollectedHeap* _g1h;
-+ OopClosure* _root_cl;
-+ nmethod* _nm;
-+ VerifyOption _vo;
-+ bool _failures;
-+
-+ template <class T> void do_oop_work(T* p) {
-+ // First verify that this root is live
-+ _root_cl->do_oop(p);
-+
-+ if (!G1VerifyHeapRegionCodeRoots) {
-+ // We're not verifying the code roots attached to heap region.
-+ return;
-+ }
-+
-+ // Don't check the code roots during marking verification in a full GC
-+ if (_vo == VerifyOption_G1UseMarkWord) {
-+ return;
-+ }
-+
-+ // Now verify that the current nmethod (which contains p) is
-+ // in the code root list of the heap region containing the
-+ // object referenced by p.
-+
-+ T heap_oop = oopDesc::load_heap_oop(p);
-+ if (!oopDesc::is_null(heap_oop)) {
-+ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-+
-+ if (_g1h->is_in_g1_reserved(obj)) {
-+ // Now fetch the region containing the object
-+ HeapRegion* hr = _g1h->heap_region_containing(obj);
-+ HeapRegionRemSet* hrrs = hr->rem_set();
-+ // Verify that the strong code root list for this region
-+ // contains the nmethod
-+ if (!hrrs->strong_code_roots_list_contains(_nm)) {
-+ gclog_or_tty->print_cr("Code root location "PTR_FORMAT" "
-+ "from nmethod "PTR_FORMAT" not in strong "
-+ "code roots for region ["PTR_FORMAT","PTR_FORMAT")",
-+ p, _nm, hr->bottom(), hr->end());
-+ _failures = true;
-+ }
-+ }
-+ }
-+ }
-+
-+public:
-+ G1VerifyCodeRootOopClosure(G1CollectedHeap* g1h, OopClosure* root_cl, VerifyOption vo):
-+ _g1h(g1h), _root_cl(root_cl), _vo(vo), _nm(NULL), _failures(false) {}
-+
-+ void do_oop(oop* p) { do_oop_work(p); }
-+ void do_oop(narrowOop* p) { do_oop_work(p); }
-+
-+ void set_nmethod(nmethod* nm) { _nm = nm; }
-+ bool failures() { return _failures; }
-+};
-+
-+class G1VerifyCodeRootBlobClosure: public CodeBlobClosure {
-+ G1VerifyCodeRootOopClosure* _oop_cl;
-+
-+public:
-+ G1VerifyCodeRootBlobClosure(G1VerifyCodeRootOopClosure* oop_cl):
-+ _oop_cl(oop_cl) {}
-+
-+ void do_code_blob(CodeBlob* cb) {
-+ nmethod* nm = cb->as_nmethod_or_null();
-+ if (nm != NULL) {
-+ _oop_cl->set_nmethod(nm);
-+ nm->oops_do(_oop_cl);
-+ }
-+ }
-+};
-+
- class VerifyLivenessOopClosure: public OopClosure {
- G1CollectedHeap* _g1h;
- VerifyOption _vo;
-@@ -3294,42 +3381,6 @@
- }
- };
-
--class VerifyRootsClosure: public OopsInGenClosure {
--private:
-- G1CollectedHeap* _g1h;
-- VerifyOption _vo;
-- bool _failures;
--public:
-- // _vo == UsePrevMarking -> use "prev" marking information,
-- // _vo == UseNextMarking -> use "next" marking information,
-- // _vo == UseMarkWord -> use mark word from object header.
-- VerifyRootsClosure(VerifyOption vo) :
-- _g1h(G1CollectedHeap::heap()),
-- _vo(vo),
-- _failures(false) { }
--
-- bool failures() { return _failures; }
--
-- template <class T> void do_oop_nv(T* p) {
-- T heap_oop = oopDesc::load_heap_oop(p);
-- if (!oopDesc::is_null(heap_oop)) {
-- oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-- if (_g1h->is_obj_dead_cond(obj, _vo)) {
-- gclog_or_tty->print_cr("Root location "PTR_FORMAT" "
-- "points to dead obj "PTR_FORMAT, p, (void*) obj);
-- if (_vo == VerifyOption_G1UseMarkWord) {
-- gclog_or_tty->print_cr(" Mark word: "PTR_FORMAT, (void*)(obj->mark()));
-- }
-- obj->print_on(gclog_or_tty);
-- _failures = true;
-- }
-- }
-- }
--
-- void do_oop(oop* p) { do_oop_nv(p); }
-- void do_oop(narrowOop* p) { do_oop_nv(p); }
--};
--
- // This is the task used for parallel heap verification.
-
- class G1ParVerifyTask: public AbstractGangTask {
-@@ -3364,21 +3415,16 @@
- }
- };
-
--void G1CollectedHeap::verify(bool silent) {
-- verify(silent, VerifyOption_G1UsePrevMarking);
--}
--
--void G1CollectedHeap::verify(bool silent,
-- VerifyOption vo) {
-+void G1CollectedHeap::verify(bool silent, VerifyOption vo) {
- if (SafepointSynchronize::is_at_safepoint()) {
-+ assert(Thread::current()->is_VM_thread(),
-+ "Expected to be executed serially by the VM thread at this point");
-+
- if (!silent) { gclog_or_tty->print("Roots (excluding permgen) "); }
- VerifyRootsClosure rootsCl(vo);
-
-- assert(Thread::current()->is_VM_thread(),
-- "Expected to be executed serially by the VM thread at this point");
--
-- CodeBlobToOopClosure blobsCl(&rootsCl, /*do_marking=*/ false);
--
-+ G1VerifyCodeRootOopClosure codeRootsCl(this, &rootsCl, vo);
-+ G1VerifyCodeRootBlobClosure blobsCl(&codeRootsCl);
- // We apply the relevant closures to all the oops in the
- // system dictionary, the string table and the code cache.
- const int so = SO_AllClasses | SO_Strings | SO_CodeCache;
-@@ -3473,6 +3519,34 @@
- }
- }
-
-+void G1CollectedHeap::verify(bool silent) {
-+ verify(silent, VerifyOption_G1UsePrevMarking);
-+}
-+
-+double G1CollectedHeap::verify(bool guard, const char* msg) {
-+ double verify_time_ms = 0.0;
-+
-+ if (guard && total_collections() >= VerifyGCStartAt) {
-+ double verify_start = os::elapsedTime();
-+ HandleMark hm; // Discard invalid handles created during verification
-+ prepare_for_verify();
-+ Universe::verify(VerifyOption_G1UsePrevMarking, msg);
-+ verify_time_ms = (os::elapsedTime() - verify_start) * 1000;
-+ }
-+
-+ return verify_time_ms;
-+}
-+
-+void G1CollectedHeap::verify_before_gc() {
-+ double verify_time_ms = verify(VerifyBeforeGC, " VerifyBeforeGC:");
-+ g1_policy()->phase_times()->record_verify_before_time_ms(verify_time_ms);
-+}
-+
-+void G1CollectedHeap::verify_after_gc() {
-+ double verify_time_ms = verify(VerifyAfterGC, " VerifyAfterGC:");
-+ g1_policy()->phase_times()->record_verify_after_time_ms(verify_time_ms);
-+}
-+
- class PrintRegionClosure: public HeapRegionClosure {
- outputStream* _st;
- public:
-@@ -3616,9 +3690,22 @@
- AllocationProfiler::iterate_since_last_gc();
- // Fill TLAB's and such
- ensure_parsability(true);
-+
-+ if (G1SummarizeRSetStats && (G1SummarizeRSetStatsPeriod > 0) &&
-+ (total_collections() % G1SummarizeRSetStatsPeriod == 0)) {
-+ g1_rem_set()->print_periodic_summary_info("Before GC RS summary");
-+ }
- }
-
- void G1CollectedHeap::gc_epilogue(bool full /* Ignored */) {
-+
-+ if (G1SummarizeRSetStats &&
-+ (G1SummarizeRSetStatsPeriod > 0) &&
-+ // we are at the end of the GC. Total collections has already been increased.
-+ ((total_collections() - 1) % G1SummarizeRSetStatsPeriod == 0)) {
-+ g1_rem_set()->print_periodic_summary_info("After GC RS summary");
-+ }
-+
- // FIXME: what is this about?
- // I'm ignoring the "fill_newgen()" call if "alloc_event_enabled"
- // is set.
-@@ -3815,7 +3902,7 @@
- return false;
- }
-
-- _gc_timer_stw->register_gc_start(os::elapsed_counter());
-+ _gc_timer_stw->register_gc_start();
-
- _gc_tracer_stw->report_gc_start(gc_cause(), _gc_timer_stw->gc_start());
-
-@@ -3880,8 +3967,9 @@
- append_secondary_free_list_if_not_empty_with_lock();
- }
-
-- assert(check_young_list_well_formed(),
-- "young list should be well formed");
-+ assert(check_young_list_well_formed(), "young list should be well formed");
-+ assert(check_heap_region_claim_values(HeapRegion::InitialClaimValue),
-+ "sanity check");
-
- // Don't dynamically change the number of GC threads this early. A value of
- // 0 is used to indicate serial work. When parallel work is done,
-@@ -4193,15 +4281,10 @@
-
- _gc_tracer_stw->report_evacuation_info(&evacuation_info);
- _gc_tracer_stw->report_tenuring_threshold(_g1_policy->tenuring_threshold());
-- _gc_timer_stw->register_gc_end(os::elapsed_counter());
-+ _gc_timer_stw->register_gc_end();
- _gc_tracer_stw->report_gc_end(_gc_timer_stw->gc_end(), _gc_timer_stw->time_partitions());
- }
-
-- if (G1SummarizeRSetStats &&
-- (G1SummarizeRSetStatsPeriod > 0) &&
-- (total_collections() % G1SummarizeRSetStatsPeriod == 0)) {
-- g1_rem_set()->print_summary_info();
-- }
- // It should now be safe to tell the concurrent mark thread to start
- // without its logging output interfering with the logging output
- // that came from the pause.
-@@ -4482,7 +4565,7 @@
- : _g1h(g1h),
- _refs(g1h->task_queue(queue_num)),
- _dcq(&g1h->dirty_card_queue_set()),
-- _ct_bs((CardTableModRefBS*)_g1h->barrier_set()),
-+ _ct_bs(g1h->g1_barrier_set()),
- _g1_rem(g1h->g1_rem_set()),
- _hash_seed(17), _queue_num(queue_num),
- _term_attempts(0),
-@@ -4975,7 +5058,8 @@
- scan_root_cl,
- &push_heap_rs_cl,
- scan_perm_cl,
-- worker_id);
-+ worker_id,
-+ /* manages_code_roots */ true);
- pss.end_strong_roots();
-
- {
-@@ -5009,67 +5093,6 @@
-
- // *** Common G1 Evacuation Stuff
-
--// Closures that support the filtering of CodeBlobs scanned during
--// external root scanning.
--
--// Closure applied to reference fields in code blobs (specifically nmethods)
--// to determine whether an nmethod contains references that point into
--// the collection set. Used as a predicate when walking code roots so
--// that only nmethods that point into the collection set are added to the
--// 'marked' list.
--
--class G1FilteredCodeBlobToOopClosure : public CodeBlobToOopClosure {
--
-- class G1PointsIntoCSOopClosure : public OopClosure {
-- G1CollectedHeap* _g1;
-- bool _points_into_cs;
-- public:
-- G1PointsIntoCSOopClosure(G1CollectedHeap* g1) :
-- _g1(g1), _points_into_cs(false) { }
--
-- bool points_into_cs() const { return _points_into_cs; }
--
-- template <class T>
-- void do_oop_nv(T* p) {
-- if (!_points_into_cs) {
-- T heap_oop = oopDesc::load_heap_oop(p);
-- if (!oopDesc::is_null(heap_oop) &&
-- _g1->in_cset_fast_test(oopDesc::decode_heap_oop_not_null(heap_oop))) {
-- _points_into_cs = true;
-- }
-- }
-- }
--
-- virtual void do_oop(oop* p) { do_oop_nv(p); }
-- virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
-- };
--
-- G1CollectedHeap* _g1;
--
--public:
-- G1FilteredCodeBlobToOopClosure(G1CollectedHeap* g1, OopClosure* cl) :
-- CodeBlobToOopClosure(cl, true), _g1(g1) { }
--
-- virtual void do_code_blob(CodeBlob* cb) {
-- nmethod* nm = cb->as_nmethod_or_null();
-- if (nm != NULL && !(nm->test_oops_do_mark())) {
-- G1PointsIntoCSOopClosure predicate_cl(_g1);
-- nm->oops_do(&predicate_cl);
--
-- if (predicate_cl.points_into_cs()) {
-- // At least one of the reference fields or the oop relocations
-- // in the nmethod points into the collection set. We have to
-- // 'mark' this nmethod.
-- // Note: Revisit the following if CodeBlobToOopClosure::do_code_blob()
-- // or MarkingCodeBlobClosure::do_code_blob() change.
-- if (!nm->test_set_oops_do_mark()) {
-- do_newly_marked_nmethod(nm);
-- }
-- }
-- }
-- }
--};
--
- // This method is run in a GC worker.
-
- void
-@@ -5079,7 +5102,8 @@
- OopClosure* scan_non_heap_roots,
- OopsInHeapRegionClosure* scan_rs,
- OopsInGenClosure* scan_perm,
-- int worker_i) {
-+ int worker_i,
-+ bool manages_code_roots) {
-
- // First scan the strong roots, including the perm gen.
- double ext_roots_start = os::elapsedTime();
-@@ -5089,15 +5113,17 @@
- BufferingOopsInGenClosure buf_scan_perm(scan_perm);
- buf_scan_perm.set_generation(perm_gen());
-
-- // Walk the code cache w/o buffering, because StarTask cannot handle
-- // unaligned oop locations.
-- G1FilteredCodeBlobToOopClosure eager_scan_code_roots(this, scan_non_heap_roots);
-+ assert(so & SO_CodeCache || scan_rs != NULL, "must scan code roots somehow");
-+ // Walk the code cache/strong code roots w/o buffering, because StarTask
-+ // cannot handle unaligned oop locations.
-+ CodeBlobToOopClosure eager_scan_code_roots(scan_non_heap_roots, true /* do_marking */);
-
- process_strong_roots(false, // no scoping; this is parallel code
- collecting_perm_gen, so,
- &buf_scan_non_heap_roots,
- &eager_scan_code_roots,
-- &buf_scan_perm);
-+ &buf_scan_perm,
-+ manages_code_roots);
-
- // Now the CM ref_processor roots.
- if (!_process_strong_tasks->is_task_claimed(G1H_PS_refProcessor_oops_do)) {
-@@ -5136,9 +5162,22 @@
- }
- g1_policy()->phase_times()->record_satb_filtering_time(worker_i, satb_filtering_ms);
-
-+ // If this is an initial mark pause, and we're not scanning
-+ // the entire code cache, we need to mark the oops in the
-+ // strong code root lists for the regions that are not in
-+ // the collection set.
-+ // Note all threads participate in this set of root tasks.
-+ double mark_strong_code_roots_ms = 0.0;
-+ if (g1_policy()->during_initial_mark_pause() && !(so & SO_CodeCache)) {
-+ double mark_strong_roots_start = os::elapsedTime();
-+ mark_strong_code_roots(worker_i);
-+ mark_strong_code_roots_ms = (os::elapsedTime() - mark_strong_roots_start) * 1000.0;
-+ }
-+ g1_policy()->phase_times()->record_strong_code_root_mark_time(worker_i, mark_strong_code_roots_ms);
-+
- // Now scan the complement of the collection set.
- if (scan_rs != NULL) {
-- g1_rem_set()->oops_into_collection_set_do(scan_rs, worker_i);
-+ g1_rem_set()->oops_into_collection_set_do(scan_rs, &eager_scan_code_roots, worker_i);
- }
-
- _process_strong_tasks->all_tasks_completed();
-@@ -5151,6 +5190,102 @@
- SharedHeap::process_weak_roots(root_closure, &roots_in_blobs, non_root_closure);
- }
-
-+class G1StringSymbolTableUnlinkTask : public AbstractGangTask {
-+private:
-+ BoolObjectClosure* _is_alive;
-+ int _initial_string_table_size;
-+ int _initial_symbol_table_size;
-+
-+ bool _process_strings;
-+ int _strings_processed;
-+ int _strings_removed;
-+
-+ bool _process_symbols;
-+ int _symbols_processed;
-+ int _symbols_removed;
-+
-+ bool _do_in_parallel;
-+public:
-+ G1StringSymbolTableUnlinkTask(BoolObjectClosure* is_alive, bool process_strings, bool process_symbols) :
-+ AbstractGangTask("Par String/Symbol table unlink"), _is_alive(is_alive),
-+ _do_in_parallel(G1CollectedHeap::use_parallel_gc_threads()),
-+ _process_strings(process_strings), _strings_processed(0), _strings_removed(0),
-+ _process_symbols(process_symbols), _symbols_processed(0), _symbols_removed(0) {
-+
-+ _initial_string_table_size = StringTable::the_table()->table_size();
-+ _initial_symbol_table_size = SymbolTable::the_table()->table_size();
-+ if (process_strings) {
-+ StringTable::clear_parallel_claimed_index();
-+ }
-+ if (process_symbols) {
-+ SymbolTable::clear_parallel_claimed_index();
-+ }
-+ }
-+
-+ ~G1StringSymbolTableUnlinkTask() {
-+ guarantee(!_process_strings || !_do_in_parallel || StringTable::parallel_claimed_index() >= _initial_string_table_size,
-+ err_msg("claim value "INT32_FORMAT" after unlink less than initial string table size "INT32_FORMAT,
-+ StringTable::parallel_claimed_index(), _initial_string_table_size));
-+ guarantee(!_process_symbols || !_do_in_parallel || SymbolTable::parallel_claimed_index() >= _initial_symbol_table_size,
-+ err_msg("claim value "INT32_FORMAT" after unlink less than initial symbol table size "INT32_FORMAT,
-+ SymbolTable::parallel_claimed_index(), _initial_symbol_table_size));
-+ }
-+
-+ void work(uint worker_id) {
-+ if (_do_in_parallel) {
-+ int strings_processed = 0;
-+ int strings_removed = 0;
-+ int symbols_processed = 0;
-+ int symbols_removed = 0;
-+ if (_process_strings) {
-+ StringTable::possibly_parallel_unlink(_is_alive, &strings_processed, &strings_removed);
-+ Atomic::add(strings_processed, &_strings_processed);
-+ Atomic::add(strings_removed, &_strings_removed);
-+ }
-+ if (_process_symbols) {
-+ SymbolTable::possibly_parallel_unlink(&symbols_processed, &symbols_removed);
-+ Atomic::add(symbols_processed, &_symbols_processed);
-+ Atomic::add(symbols_removed, &_symbols_removed);
-+ }
-+ } else {
-+ if (_process_strings) {
-+ StringTable::unlink(_is_alive, &_strings_processed, &_strings_removed);
-+ }
-+ if (_process_symbols) {
-+ SymbolTable::unlink(&_symbols_processed, &_symbols_removed);
-+ }
-+ }
-+ }
-+
-+ size_t strings_processed() const { return (size_t)_strings_processed; }
-+ size_t strings_removed() const { return (size_t)_strings_removed; }
-+
-+ size_t symbols_processed() const { return (size_t)_symbols_processed; }
-+ size_t symbols_removed() const { return (size_t)_symbols_removed; }
-+};
-+
-+void G1CollectedHeap::unlink_string_and_symbol_table(BoolObjectClosure* is_alive,
-+ bool process_strings, bool process_symbols) {
-+ uint n_workers = (G1CollectedHeap::use_parallel_gc_threads() ?
-+ _g1h->workers()->active_workers() : 1);
-+
-+ G1StringSymbolTableUnlinkTask g1_unlink_task(is_alive, process_strings, process_symbols);
-+ if (G1CollectedHeap::use_parallel_gc_threads()) {
-+ set_par_threads(n_workers);
-+ workers()->run_task(&g1_unlink_task);
-+ set_par_threads(0);
-+ } else {
-+ g1_unlink_task.work(0);
-+ }
-+ if (G1TraceStringSymbolTableScrubbing) {
-+ gclog_or_tty->print_cr("Cleaned string and symbol table, "
-+ "strings: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed, "
-+ "symbols: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed",
-+ g1_unlink_task.strings_processed(), g1_unlink_task.strings_removed(),
-+ g1_unlink_task.symbols_processed(), g1_unlink_task.symbols_removed());
-+ }
-+}
-+
- // Weak Reference Processing support
-
- // An always "is_alive" closure that is used to preserve referents.
-@@ -5761,9 +5896,6 @@
- process_discovered_references(n_workers);
-
- // Weak root processing.
-- // Note: when JSR 292 is enabled and code blobs can contain
-- // non-perm oops then we will need to process the code blobs
-- // here too.
- {
- G1STWIsAliveClosure is_alive(this);
- G1KeepAliveClosure keep_alive(this);
-@@ -5779,6 +5911,17 @@
- hot_card_cache->reset_hot_cache();
- hot_card_cache->set_use_cache(true);
-
-+ // Migrate the strong code roots attached to each region in
-+ // the collection set. Ideally we would like to do this
-+ // after we have finished the scanning/evacuation of the
-+ // strong code roots for a particular heap region.
-+ migrate_strong_code_roots();
-+
-+ if (g1_policy()->during_initial_mark_pause()) {
-+ // Reset the claim values set during marking the strong code roots
-+ reset_heap_region_claim_values();
-+ }
-+
- finalize_for_evac_failure();
-
- if (evacuation_failed()) {
-@@ -5912,11 +6055,11 @@
- }
-
- class G1ParCleanupCTTask : public AbstractGangTask {
-- CardTableModRefBS* _ct_bs;
-+ G1SATBCardTableModRefBS* _ct_bs;
- G1CollectedHeap* _g1h;
- HeapRegion* volatile _su_head;
- public:
-- G1ParCleanupCTTask(CardTableModRefBS* ct_bs,
-+ G1ParCleanupCTTask(G1SATBCardTableModRefBS* ct_bs,
- G1CollectedHeap* g1h) :
- AbstractGangTask("G1 Par Cleanup CT Task"),
- _ct_bs(ct_bs), _g1h(g1h) { }
-@@ -5939,9 +6082,9 @@
- #ifndef PRODUCT
- class G1VerifyCardTableCleanup: public HeapRegionClosure {
- G1CollectedHeap* _g1h;
-- CardTableModRefBS* _ct_bs;
-+ G1SATBCardTableModRefBS* _ct_bs;
- public:
-- G1VerifyCardTableCleanup(G1CollectedHeap* g1h, CardTableModRefBS* ct_bs)
-+ G1VerifyCardTableCleanup(G1CollectedHeap* g1h, G1SATBCardTableModRefBS* ct_bs)
- : _g1h(g1h), _ct_bs(ct_bs) { }
- virtual bool doHeapRegion(HeapRegion* r) {
- if (r->is_survivor()) {
-@@ -5955,7 +6098,7 @@
-
- void G1CollectedHeap::verify_not_dirty_region(HeapRegion* hr) {
- // All of the region should be clean.
-- CardTableModRefBS* ct_bs = (CardTableModRefBS*)barrier_set();
-+ G1SATBCardTableModRefBS* ct_bs = g1_barrier_set();
- MemRegion mr(hr->bottom(), hr->end());
- ct_bs->verify_not_dirty_region(mr);
- }
-@@ -5968,13 +6111,17 @@
- // not dirty that area (one less thing to have to do while holding
- // a lock). So we can only verify that [bottom(),pre_dummy_top()]
- // is dirty.
-- CardTableModRefBS* ct_bs = (CardTableModRefBS*) barrier_set();
-+ G1SATBCardTableModRefBS* ct_bs = g1_barrier_set();
- MemRegion mr(hr->bottom(), hr->pre_dummy_top());
-- ct_bs->verify_dirty_region(mr);
-+ if (hr->is_young()) {
-+ ct_bs->verify_g1_young_region(mr);
-+ } else {
-+ ct_bs->verify_dirty_region(mr);
-+ }
- }
-
- void G1CollectedHeap::verify_dirty_young_list(HeapRegion* head) {
-- CardTableModRefBS* ct_bs = (CardTableModRefBS*) barrier_set();
-+ G1SATBCardTableModRefBS* ct_bs = g1_barrier_set();
- for (HeapRegion* hr = head; hr != NULL; hr = hr->get_next_young_region()) {
- verify_dirty_region(hr);
- }
-@@ -5986,7 +6133,7 @@
- #endif
-
- void G1CollectedHeap::cleanUpCardTable() {
-- CardTableModRefBS* ct_bs = (CardTableModRefBS*) (barrier_set());
-+ G1SATBCardTableModRefBS* ct_bs = g1_barrier_set();
- double start = os::elapsedTime();
-
- {
-@@ -6575,3 +6722,234 @@
- _humongous_set.verify_end();
- _free_list.verify_end();
- }
-+
-+// Optimized nmethod scanning
-+
-+class RegisterNMethodOopClosure: public OopClosure {
-+ G1CollectedHeap* _g1h;
-+ nmethod* _nm;
-+
-+ template <class T> void do_oop_work(T* p) {
-+ T heap_oop = oopDesc::load_heap_oop(p);
-+ if (!oopDesc::is_null(heap_oop)) {
-+ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-+ HeapRegion* hr = _g1h->heap_region_containing(obj);
-+ if (hr == NULL) {
-+ // reference into perm gen - ignore.
-+ assert(_g1h->is_in_permanent(obj), "must be a reference into perm gen");
-+ return;
-+ }
-+ assert(!hr->continuesHumongous(),
-+ err_msg("trying to add code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT
-+ " starting at "HR_FORMAT,
-+ _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region())));
-+
-+ // HeapRegion::add_strong_code_root() avoids adding duplicate
-+ // entries but having duplicates is OK since we "mark" nmethods
-+ // as visited when we scan the strong code root lists during the GC.
-+ hr->add_strong_code_root(_nm);
-+ assert(hr->rem_set()->strong_code_roots_list_contains(_nm),
-+ err_msg("failed to add code root "PTR_FORMAT" to remembered set of region "HR_FORMAT,
-+ _nm, HR_FORMAT_PARAMS(hr)));
-+ }
-+ }
-+
-+public:
-+ RegisterNMethodOopClosure(G1CollectedHeap* g1h, nmethod* nm) :
-+ _g1h(g1h), _nm(nm) {}
-+
-+ void do_oop(oop* p) { do_oop_work(p); }
-+ void do_oop(narrowOop* p) { do_oop_work(p); }
-+};
-+
-+class UnregisterNMethodOopClosure: public OopClosure {
-+ G1CollectedHeap* _g1h;
-+ nmethod* _nm;
-+
-+ template <class T> void do_oop_work(T* p) {
-+ T heap_oop = oopDesc::load_heap_oop(p);
-+ if (!oopDesc::is_null(heap_oop)) {
-+ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-+ HeapRegion* hr = _g1h->heap_region_containing(obj);
-+ if (hr == NULL) {
-+ // reference into perm gen - ignore.
-+ assert(_g1h->is_in_permanent(obj), "must be a reference into perm gen");
-+ return;
-+ }
-+ assert(!hr->continuesHumongous(),
-+ err_msg("trying to remove code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT
-+ " starting at "HR_FORMAT,
-+ _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region())));
-+
-+ hr->remove_strong_code_root(_nm);
-+ assert(!hr->rem_set()->strong_code_roots_list_contains(_nm),
-+ err_msg("failed to remove code root "PTR_FORMAT" of region "HR_FORMAT,
-+ _nm, HR_FORMAT_PARAMS(hr))); }
-+ }
-+
-+public:
-+ UnregisterNMethodOopClosure(G1CollectedHeap* g1h, nmethod* nm) :
-+ _g1h(g1h), _nm(nm) {}
-+
-+ void do_oop(oop* p) { do_oop_work(p); }
-+ void do_oop(narrowOop* p) { do_oop_work(p); }
-+};
-+
-+void G1CollectedHeap::register_nmethod(nmethod* nm) {
-+ CollectedHeap::register_nmethod(nm);
-+
-+ guarantee(nm != NULL, "sanity");
-+ RegisterNMethodOopClosure reg_cl(this, nm);
-+ nm->oops_do(&reg_cl);
-+}
-+
-+void G1CollectedHeap::unregister_nmethod(nmethod* nm) {
-+ CollectedHeap::unregister_nmethod(nm);
-+
-+ guarantee(nm != NULL, "sanity");
-+ UnregisterNMethodOopClosure reg_cl(this, nm);
-+ nm->oops_do(&reg_cl, false, true);
-+}
-+
-+class MigrateCodeRootsHeapRegionClosure: public HeapRegionClosure {
-+public:
-+ bool doHeapRegion(HeapRegion *hr) {
-+ assert(!hr->isHumongous(),
-+ err_msg("humongous region "HR_FORMAT" should not have been added to collection set",
-+ HR_FORMAT_PARAMS(hr)));
-+ hr->migrate_strong_code_roots();
-+ return false;
-+ }
-+};
-+
-+void G1CollectedHeap::migrate_strong_code_roots() {
-+ MigrateCodeRootsHeapRegionClosure cl;
-+ double migrate_start = os::elapsedTime();
-+ collection_set_iterate(&cl);
-+ double migration_time_ms = (os::elapsedTime() - migrate_start) * 1000.0;
-+ g1_policy()->phase_times()->record_strong_code_root_migration_time(migration_time_ms);
-+}
-+
-+// Mark all the code roots that point into regions *not* in the
-+// collection set.
-+//
-+// Note we do not want to use a "marking" CodeBlobToOopClosure while
-+// walking the the code roots lists of regions not in the collection
-+// set. Suppose we have an nmethod (M) that points to objects in two
-+// separate regions - one in the collection set (R1) and one not (R2).
-+// Using a "marking" CodeBlobToOopClosure here would result in "marking"
-+// nmethod M when walking the code roots for R1. When we come to scan
-+// the code roots for R2, we would see that M is already marked and it
-+// would be skipped and the objects in R2 that are referenced from M
-+// would not be evacuated.
-+
-+class MarkStrongCodeRootCodeBlobClosure: public CodeBlobClosure {
-+
-+ class MarkStrongCodeRootOopClosure: public OopClosure {
-+ ConcurrentMark* _cm;
-+ HeapRegion* _hr;
-+ uint _worker_id;
-+
-+ template <class T> void do_oop_work(T* p) {
-+ T heap_oop = oopDesc::load_heap_oop(p);
-+ if (!oopDesc::is_null(heap_oop)) {
-+ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-+ // Only mark objects in the region (which is assumed
-+ // to be not in the collection set).
-+ if (_hr->is_in(obj)) {
-+ _cm->grayRoot(obj, (size_t) obj->size(), _worker_id);
-+ }
-+ }
-+ }
-+
-+ public:
-+ MarkStrongCodeRootOopClosure(ConcurrentMark* cm, HeapRegion* hr, uint worker_id) :
-+ _cm(cm), _hr(hr), _worker_id(worker_id) {
-+ assert(!_hr->in_collection_set(), "sanity");
-+ }
-+
-+ void do_oop(narrowOop* p) { do_oop_work(p); }
-+ void do_oop(oop* p) { do_oop_work(p); }
-+ };
-+
-+ MarkStrongCodeRootOopClosure _oop_cl;
-+
-+public:
-+ MarkStrongCodeRootCodeBlobClosure(ConcurrentMark* cm, HeapRegion* hr, uint worker_id):
-+ _oop_cl(cm, hr, worker_id) {}
-+
-+ void do_code_blob(CodeBlob* cb) {
-+ nmethod* nm = (cb == NULL) ? NULL : cb->as_nmethod_or_null();
-+ if (nm != NULL) {
-+ nm->oops_do(&_oop_cl);
-+ }
-+ }
-+};
-+
-+class MarkStrongCodeRootsHRClosure: public HeapRegionClosure {
-+ G1CollectedHeap* _g1h;
-+ uint _worker_id;
-+
-+public:
-+ MarkStrongCodeRootsHRClosure(G1CollectedHeap* g1h, uint worker_id) :
-+ _g1h(g1h), _worker_id(worker_id) {}
-+
-+ bool doHeapRegion(HeapRegion *hr) {
-+ HeapRegionRemSet* hrrs = hr->rem_set();
-+ if (hr->continuesHumongous()) {
-+ // Code roots should never be attached to a continuation of a humongous region
-+ assert(hrrs->strong_code_roots_list_length() == 0,
-+ err_msg("code roots should never be attached to continuations of humongous region "HR_FORMAT
-+ " starting at "HR_FORMAT", but has "INT32_FORMAT,
-+ HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region()),
-+ hrrs->strong_code_roots_list_length()));
-+ return false;
-+ }
-+
-+ if (hr->in_collection_set()) {
-+ // Don't mark code roots into regions in the collection set here.
-+ // They will be marked when we scan them.
-+ return false;
-+ }
-+
-+ MarkStrongCodeRootCodeBlobClosure cb_cl(_g1h->concurrent_mark(), hr, _worker_id);
-+ hr->strong_code_roots_do(&cb_cl);
-+ return false;
-+ }
-+};
-+
-+void G1CollectedHeap::mark_strong_code_roots(uint worker_id) {
-+ MarkStrongCodeRootsHRClosure cl(this, worker_id);
-+ if (G1CollectedHeap::use_parallel_gc_threads()) {
-+ heap_region_par_iterate_chunked(&cl,
-+ worker_id,
-+ workers()->active_workers(),
-+ HeapRegion::ParMarkRootClaimValue);
-+ } else {
-+ heap_region_iterate(&cl);
-+ }
-+}
-+
-+class RebuildStrongCodeRootClosure: public CodeBlobClosure {
-+ G1CollectedHeap* _g1h;
-+
-+public:
-+ RebuildStrongCodeRootClosure(G1CollectedHeap* g1h) :
-+ _g1h(g1h) {}
-+
-+ void do_code_blob(CodeBlob* cb) {
-+ nmethod* nm = (cb != NULL) ? cb->as_nmethod_or_null() : NULL;
-+ if (nm == NULL) {
-+ return;
-+ }
-+
-+ if (ScavengeRootsInCode && nm->detect_scavenge_root_oops()) {
-+ _g1h->register_nmethod(nm);
-+ }
-+ }
-+};
-+
-+void G1CollectedHeap::rebuild_strong_code_roots() {
-+ RebuildStrongCodeRootClosure blob_cl(this);
-+ CodeCache::blobs_do(&blob_cl);
-+}
---- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp Wed May 07 19:26:16 2014 -0700
-@@ -31,6 +31,7 @@
- #include "gc_implementation/g1/g1HRPrinter.hpp"
- #include "gc_implementation/g1/g1MonitoringSupport.hpp"
- #include "gc_implementation/g1/g1RemSet.hpp"
-+#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
- #include "gc_implementation/g1/g1YCTypes.hpp"
- #include "gc_implementation/g1/heapRegionSeq.hpp"
- #include "gc_implementation/g1/heapRegionSets.hpp"
-@@ -46,6 +47,7 @@
- // may combine concurrent marking with parallel, incremental compaction of
- // heap subsets that will yield large amounts of garbage.
-
-+// Forward declarations
- class HeapRegion;
- class HRRSCleanupTask;
- class PermanentGenerationSpec;
-@@ -69,6 +71,8 @@
- class G1NewTracer;
- class G1OldTracer;
- class EvacuationFailedInfo;
-+class nmethod;
-+class Ticks;
-
- typedef OverflowTaskQueue<StarTask, mtGC> RefToScanQueue;
- typedef GenericTaskQueueSet<RefToScanQueue, mtGC> RefToScanQueueSet;
-@@ -163,19 +167,6 @@
- : G1AllocRegion("Mutator Alloc Region", false /* bot_updates */) { }
- };
-
--// The G1 STW is alive closure.
--// An instance is embedded into the G1CH and used as the
--// (optional) _is_alive_non_header closure in the STW
--// reference processor. It is also extensively used during
--// reference processing during STW evacuation pauses.
--class G1STWIsAliveClosure: public BoolObjectClosure {
-- G1CollectedHeap* _g1;
--public:
-- G1STWIsAliveClosure(G1CollectedHeap* g1) : _g1(g1) {}
-- void do_object(oop p) { assert(false, "Do not call."); }
-- bool do_object_b(oop p);
--};
--
- class SurvivorGCAllocRegion : public G1AllocRegion {
- protected:
- virtual HeapRegion* allocate_new_region(size_t word_size, bool force);
-@@ -194,6 +185,19 @@
- : G1AllocRegion("Old GC Alloc Region", true /* bot_updates */) { }
- };
-
-+// The G1 STW is alive closure.
-+// An instance is embedded into the G1CH and used as the
-+// (optional) _is_alive_non_header closure in the STW
-+// reference processor. It is also extensively used during
-+// reference processing during STW evacuation pauses.
-+class G1STWIsAliveClosure: public BoolObjectClosure {
-+ G1CollectedHeap* _g1;
-+public:
-+ G1STWIsAliveClosure(G1CollectedHeap* g1) : _g1(g1) {}
-+ void do_object(oop p) { assert(false, "Do not call."); }
-+ bool do_object_b(oop p);
-+};
-+
- class RefineCardTableEntryClosure;
-
- class G1CollectedHeap : public SharedHeap {
-@@ -747,7 +751,7 @@
- return _old_marking_cycles_completed;
- }
-
-- void register_concurrent_cycle_start(jlong start_time);
-+ void register_concurrent_cycle_start(const Ticks& start_time);
- void register_concurrent_cycle_end();
- void trace_heap_after_concurrent_cycle();
-
-@@ -792,8 +796,6 @@
-
- // The g1 remembered set of the heap.
- G1RemSet* _g1_rem_set;
-- // And it's mod ref barrier set, used to track updates for the above.
-- ModRefBarrierSet* _mr_bs;
-
- // A set of cards that cover the objects for which the Rsets should be updated
- // concurrently after the collection.
-@@ -835,7 +837,8 @@
- OopClosure* scan_non_heap_roots,
- OopsInHeapRegionClosure* scan_rs,
- OopsInGenClosure* scan_perm,
-- int worker_i);
-+ int worker_i,
-+ bool manages_code_roots = false);
-
- // Apply "blk" to all the weak roots of the system. These include
- // JNI weak roots, the code cache, system dictionary, symbol table,
-@@ -1127,7 +1130,6 @@
-
- // The rem set and barrier set.
- G1RemSet* g1_rem_set() const { return _g1_rem_set; }
-- ModRefBarrierSet* mr_bs() const { return _mr_bs; }
-
- // The rem set iterator.
- HeapRegionRemSetIterator* rem_set_iterator(int i) {
-@@ -1361,6 +1363,10 @@
-
- virtual bool is_in_closed_subset(const void* p) const;
-
-+ G1SATBCardTableModRefBS* g1_barrier_set() {
-+ return (G1SATBCardTableModRefBS*) barrier_set();
-+ }
-+
- // This resets the card table to all zeros. It is used after
- // a collection pause which used the card table to claim cards.
- void cleanUpCardTable();
-@@ -1592,41 +1598,6 @@
-
- virtual jlong millis_since_last_gc();
-
-- // Perform any cleanup actions necessary before allowing a verification.
-- virtual void prepare_for_verify();
--
-- // Perform verification.
--
-- // vo == UsePrevMarking -> use "prev" marking information,
-- // vo == UseNextMarking -> use "next" marking information
-- // vo == UseMarkWord -> use the mark word in the object header
-- //
-- // NOTE: Only the "prev" marking information is guaranteed to be
-- // consistent most of the time, so most calls to this should use
-- // vo == UsePrevMarking.
-- // Currently, there is only one case where this is called with
-- // vo == UseNextMarking, which is to verify the "next" marking
-- // information at the end of remark.
-- // Currently there is only one place where this is called with
-- // vo == UseMarkWord, which is to verify the marking during a
-- // full GC.
-- void verify(bool silent, VerifyOption vo);
--
-- // Override; it uses the "prev" marking information
-- virtual void verify(bool silent);
--
-- virtual void print_on(outputStream* st) const;
-- virtual void print_extended_on(outputStream* st) const;
--
-- virtual void print_gc_threads_on(outputStream* st) const;
-- virtual void gc_threads_do(ThreadClosure* tc) const;
--
-- // Override
-- void print_tracing_info() const;
--
-- // The following two methods are helpful for debugging RSet issues.
-- void print_cset_rsets() PRODUCT_RETURN;
-- void print_all_rsets() PRODUCT_RETURN;
-
- // Convenience function to be used in situations where the heap type can be
- // asserted to be this type.
-@@ -1684,7 +1655,6 @@
- // then call the region version of the same function.
-
- // Added if it is in permanent gen it isn't dead.
-- // Added if it is NULL it isn't dead.
-
- bool is_obj_dead(const oop obj) const {
- const HeapRegion* hr = heap_region_containing(obj);
-@@ -1708,13 +1678,90 @@
- else return is_obj_ill(obj, hr);
- }
-
-+ bool allocated_since_marking(oop obj, HeapRegion* hr, VerifyOption vo);
-+ HeapWord* top_at_mark_start(HeapRegion* hr, VerifyOption vo);
-+ bool is_marked(oop obj, VerifyOption vo);
-+ const char* top_at_mark_start_str(VerifyOption vo);
-+
-+ ConcurrentMark* concurrent_mark() const { return _cm; }
-+
-+ // Refinement
-+
-+ ConcurrentG1Refine* concurrent_g1_refine() const { return _cg1r; }
-+
-+ // The dirty cards region list is used to record a subset of regions
-+ // whose cards need clearing. The list if populated during the
-+ // remembered set scanning and drained during the card table
-+ // cleanup. Although the methods are reentrant, population/draining
-+ // phases must not overlap. For synchronization purposes the last
-+ // element on the list points to itself.
-+ HeapRegion* _dirty_cards_region_list;
-+ void push_dirty_cards_region(HeapRegion* hr);
-+ HeapRegion* pop_dirty_cards_region();
-+
-+ // Optimized nmethod scanning support routines
-+
-+ // Register the given nmethod with the G1 heap
-+ virtual void register_nmethod(nmethod* nm);
-+
-+ // Unregister the given nmethod from the G1 heap
-+ virtual void unregister_nmethod(nmethod* nm);
-+
-+ // Migrate the nmethods in the code root lists of the regions
-+ // in the collection set to regions in to-space. In the event
-+ // of an evacuation failure, nmethods that reference objects
-+ // that were not successfullly evacuated are not migrated.
-+ void migrate_strong_code_roots();
-+
-+ // During an initial mark pause, mark all the code roots that
-+ // point into regions *not* in the collection set.
-+ void mark_strong_code_roots(uint worker_id);
-+
-+ // Rebuild the stong code root lists for each region
-+ // after a full GC
-+ void rebuild_strong_code_roots();
-+
-+ // Delete entries for dead interned string and clean up unreferenced symbols
-+ // in symbol table, possibly in parallel.
-+ void unlink_string_and_symbol_table(BoolObjectClosure* is_alive, bool unlink_strings = true, bool unlink_symbols = true);
-+
-+ // Verification
-+
-+ // The following is just to alert the verification code
-+ // that a full collection has occurred and that the
-+ // remembered sets are no longer up to date.
-+ bool _full_collection;
-+ void set_full_collection() { _full_collection = true;}
-+ void clear_full_collection() {_full_collection = false;}
-+ bool full_collection() {return _full_collection;}
-+
-+ // Perform any cleanup actions necessary before allowing a verification.
-+ virtual void prepare_for_verify();
-+
-+ // Perform verification.
-+
-+ // vo == UsePrevMarking -> use "prev" marking information,
-+ // vo == UseNextMarking -> use "next" marking information
-+ // vo == UseMarkWord -> use the mark word in the object header
-+ //
-+ // NOTE: Only the "prev" marking information is guaranteed to be
-+ // consistent most of the time, so most calls to this should use
-+ // vo == UsePrevMarking.
-+ // Currently, there is only one case where this is called with
-+ // vo == UseNextMarking, which is to verify the "next" marking
-+ // information at the end of remark.
-+ // Currently there is only one place where this is called with
-+ // vo == UseMarkWord, which is to verify the marking during a
-+ // full GC.
-+ void verify(bool silent, VerifyOption vo);
-+
-+ // Override; it uses the "prev" marking information
-+ virtual void verify(bool silent);
-+
- // The methods below are here for convenience and dispatch the
- // appropriate method depending on value of the given VerifyOption
-- // parameter. The options for that parameter are:
-- //
-- // vo == UsePrevMarking -> use "prev" marking information,
-- // vo == UseNextMarking -> use "next" marking information,
-- // vo == UseMarkWord -> use mark word from object header
-+ // parameter. The values for that parameter, and their meanings,
-+ // are the same as those above.
-
- bool is_obj_dead_cond(const oop obj,
- const HeapRegion* hr,
-@@ -1739,31 +1786,20 @@
- return false; // keep some compilers happy
- }
-
-- bool allocated_since_marking(oop obj, HeapRegion* hr, VerifyOption vo);
-- HeapWord* top_at_mark_start(HeapRegion* hr, VerifyOption vo);
-- bool is_marked(oop obj, VerifyOption vo);
-- const char* top_at_mark_start_str(VerifyOption vo);
-+ // Printing
-
-- // The following is just to alert the verification code
-- // that a full collection has occurred and that the
-- // remembered sets are no longer up to date.
-- bool _full_collection;
-- void set_full_collection() { _full_collection = true;}
-- void clear_full_collection() {_full_collection = false;}
-- bool full_collection() {return _full_collection;}
-+ virtual void print_on(outputStream* st) const;
-+ virtual void print_extended_on(outputStream* st) const;
-
-- ConcurrentMark* concurrent_mark() const { return _cm; }
-- ConcurrentG1Refine* concurrent_g1_refine() const { return _cg1r; }
-+ virtual void print_gc_threads_on(outputStream* st) const;
-+ virtual void gc_threads_do(ThreadClosure* tc) const;
-
-- // The dirty cards region list is used to record a subset of regions
-- // whose cards need clearing. The list if populated during the
-- // remembered set scanning and drained during the card table
-- // cleanup. Although the methods are reentrant, population/draining
-- // phases must not overlap. For synchronization purposes the last
-- // element on the list points to itself.
-- HeapRegion* _dirty_cards_region_list;
-- void push_dirty_cards_region(HeapRegion* hr);
-- HeapRegion* pop_dirty_cards_region();
-+ // Override
-+ void print_tracing_info() const;
-+
-+ // The following two methods are helpful for debugging RSet issues.
-+ void print_cset_rsets() PRODUCT_RETURN;
-+ void print_all_rsets() PRODUCT_RETURN;
-
- public:
- void stop_conc_gc_threads();
-@@ -1800,7 +1836,7 @@
- G1CollectedHeap* _g1h;
- RefToScanQueue* _refs;
- DirtyCardQueue _dcq;
-- CardTableModRefBS* _ct_bs;
-+ G1SATBCardTableModRefBS* _ct_bs;
- G1RemSet* _g1_rem;
-
- G1ParGCAllocBuffer _surviving_alloc_buffer;
-@@ -1839,7 +1875,7 @@
- void add_to_undo_waste(size_t waste) { _undo_waste += waste; }
-
- DirtyCardQueue& dirty_card_queue() { return _dcq; }
-- CardTableModRefBS* ctbs() { return _ct_bs; }
-+ G1SATBCardTableModRefBS* ctbs() { return _ct_bs; }
-
- template <class T> void immediate_rs_update(HeapRegion* from, T* p, int tid) {
- if (!from->is_survivor()) {
---- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Wed May 07 19:26:16 2014 -0700
-@@ -29,6 +29,7 @@
- #include "gc_implementation/g1/g1CollectedHeap.hpp"
- #include "gc_implementation/g1/g1AllocRegion.inline.hpp"
- #include "gc_implementation/g1/g1CollectorPolicy.hpp"
-+#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp"
- #include "gc_implementation/g1/heapRegionSeq.inline.hpp"
- #include "utilities/taskqueue.hpp"
-
-@@ -131,7 +132,7 @@
- assert(containing_hr->is_in(end - 1), "it should also contain end - 1");
-
- MemRegion mr(start, end);
-- ((CardTableModRefBS*)_g1h->barrier_set())->dirty(mr);
-+ g1_barrier_set()->g1_mark_as_young(mr);
- }
-
- inline RefToScanQueue* G1CollectedHeap::task_queue(int i) const {
---- ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Wed May 07 19:26:16 2014 -0700
-@@ -310,7 +310,8 @@
- void G1CollectorPolicy::initialize_flags() {
- set_min_alignment(HeapRegion::GrainBytes);
- size_t card_table_alignment = GenRemSet::max_alignment_constraint(rem_set_name());
-- set_max_alignment(MAX2(card_table_alignment, min_alignment()));
-+ size_t page_size = UseLargePages ? os::large_page_size() : os::vm_page_size();
-+ set_max_alignment(MAX3(card_table_alignment, min_alignment(), page_size));
- if (SurvivorRatio < 1) {
- vm_exit_during_initialization("Invalid survivor ratio specified");
- }
---- ./hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp Wed May 07 19:26:16 2014 -0700
-@@ -41,11 +41,11 @@
- private:
- G1CollectedHeap* _g1;
- DirtyCardQueue *_dcq;
-- CardTableModRefBS* _ct_bs;
-+ G1SATBCardTableModRefBS* _ct_bs;
-
- public:
- UpdateRSetDeferred(G1CollectedHeap* g1, DirtyCardQueue* dcq) :
-- _g1(g1), _ct_bs((CardTableModRefBS*)_g1->barrier_set()), _dcq(dcq) {}
-+ _g1(g1), _ct_bs(_g1->g1_barrier_set()), _dcq(dcq) {}
-
- virtual void do_oop(narrowOop* p) { do_oop_work(p); }
- virtual void do_oop( oop* p) { do_oop_work(p); }
---- ./hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp Wed May 07 19:26:16 2014 -0700
-@@ -161,6 +161,8 @@
- _last_update_rs_times_ms(_max_gc_threads, "%.1lf"),
- _last_update_rs_processed_buffers(_max_gc_threads, "%d"),
- _last_scan_rs_times_ms(_max_gc_threads, "%.1lf"),
-+ _last_strong_code_root_scan_times_ms(_max_gc_threads, "%.1lf"),
-+ _last_strong_code_root_mark_times_ms(_max_gc_threads, "%.1lf"),
- _last_obj_copy_times_ms(_max_gc_threads, "%.1lf"),
- _last_termination_times_ms(_max_gc_threads, "%.1lf"),
- _last_termination_attempts(_max_gc_threads, SIZE_FORMAT),
-@@ -182,6 +184,8 @@
- _last_update_rs_times_ms.reset();
- _last_update_rs_processed_buffers.reset();
- _last_scan_rs_times_ms.reset();
-+ _last_strong_code_root_scan_times_ms.reset();
-+ _last_strong_code_root_mark_times_ms.reset();
- _last_obj_copy_times_ms.reset();
- _last_termination_times_ms.reset();
- _last_termination_attempts.reset();
-@@ -197,6 +201,8 @@
- _last_update_rs_times_ms.verify();
- _last_update_rs_processed_buffers.verify();
- _last_scan_rs_times_ms.verify();
-+ _last_strong_code_root_scan_times_ms.verify();
-+ _last_strong_code_root_mark_times_ms.verify();
- _last_obj_copy_times_ms.verify();
- _last_termination_times_ms.verify();
- _last_termination_attempts.verify();
-@@ -210,6 +216,8 @@
- _last_satb_filtering_times_ms.get(i) +
- _last_update_rs_times_ms.get(i) +
- _last_scan_rs_times_ms.get(i) +
-+ _last_strong_code_root_scan_times_ms.get(i) +
-+ _last_strong_code_root_mark_times_ms.get(i) +
- _last_obj_copy_times_ms.get(i) +
- _last_termination_times_ms.get(i);
-
-@@ -239,6 +247,9 @@
- // Now subtract the time taken to fix up roots in generated code
- misc_time_ms += _cur_collection_code_root_fixup_time_ms;
-
-+ // Strong code root migration time
-+ misc_time_ms += _cur_strong_code_root_migration_time_ms;
-+
- // Subtract the time taken to clean the card table from the
- // current value of "other time"
- misc_time_ms += _cur_clear_ct_time_ms;
-@@ -257,9 +268,13 @@
- if (_last_satb_filtering_times_ms.sum() > 0.0) {
- _last_satb_filtering_times_ms.print(2, "SATB Filtering (ms)");
- }
-+ if (_last_strong_code_root_mark_times_ms.sum() > 0.0) {
-+ _last_strong_code_root_mark_times_ms.print(2, "Code Root Marking (ms)");
-+ }
- _last_update_rs_times_ms.print(2, "Update RS (ms)");
- _last_update_rs_processed_buffers.print(3, "Processed Buffers");
- _last_scan_rs_times_ms.print(2, "Scan RS (ms)");
-+ _last_strong_code_root_scan_times_ms.print(2, "Code Root Scanning (ms)");
- _last_obj_copy_times_ms.print(2, "Object Copy (ms)");
- _last_termination_times_ms.print(2, "Termination (ms)");
- if (G1Log::finest()) {
-@@ -273,12 +288,17 @@
- if (_last_satb_filtering_times_ms.sum() > 0.0) {
- _last_satb_filtering_times_ms.print(1, "SATB Filtering (ms)");
- }
-+ if (_last_strong_code_root_mark_times_ms.sum() > 0.0) {
-+ _last_strong_code_root_mark_times_ms.print(1, "Code Root Marking (ms)");
-+ }
- _last_update_rs_times_ms.print(1, "Update RS (ms)");
- _last_update_rs_processed_buffers.print(2, "Processed Buffers");
- _last_scan_rs_times_ms.print(1, "Scan RS (ms)");
-+ _last_strong_code_root_scan_times_ms.print(1, "Code Root Scanning (ms)");
- _last_obj_copy_times_ms.print(1, "Object Copy (ms)");
- }
- print_stats(1, "Code Root Fixup", _cur_collection_code_root_fixup_time_ms);
-+ print_stats(1, "Code Root Migration", _cur_strong_code_root_migration_time_ms);
- print_stats(1, "Clear CT", _cur_clear_ct_time_ms);
- double misc_time_ms = pause_time_sec * MILLIUNITS - accounted_time_ms();
- print_stats(1, "Other", misc_time_ms);
---- ./hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp Wed May 07 19:26:16 2014 -0700
-@@ -119,6 +119,8 @@
- WorkerDataArray<double> _last_update_rs_times_ms;
- WorkerDataArray<int> _last_update_rs_processed_buffers;
- WorkerDataArray<double> _last_scan_rs_times_ms;
-+ WorkerDataArray<double> _last_strong_code_root_scan_times_ms;
-+ WorkerDataArray<double> _last_strong_code_root_mark_times_ms;
- WorkerDataArray<double> _last_obj_copy_times_ms;
- WorkerDataArray<double> _last_termination_times_ms;
- WorkerDataArray<size_t> _last_termination_attempts;
-@@ -128,6 +130,7 @@
-
- double _cur_collection_par_time_ms;
- double _cur_collection_code_root_fixup_time_ms;
-+ double _cur_strong_code_root_migration_time_ms;
-
- double _cur_clear_ct_time_ms;
- double _cur_ref_proc_time_ms;
-@@ -179,6 +182,14 @@
- _last_scan_rs_times_ms.set(worker_i, ms);
- }
-
-+ void record_strong_code_root_scan_time(uint worker_i, double ms) {
-+ _last_strong_code_root_scan_times_ms.set(worker_i, ms);
-+ }
-+
-+ void record_strong_code_root_mark_time(uint worker_i, double ms) {
-+ _last_strong_code_root_mark_times_ms.set(worker_i, ms);
-+ }
-+
- void record_obj_copy_time(uint worker_i, double ms) {
- _last_obj_copy_times_ms.set(worker_i, ms);
- }
-@@ -208,6 +219,10 @@
- _cur_collection_code_root_fixup_time_ms = ms;
- }
-
-+ void record_strong_code_root_migration_time(double ms) {
-+ _cur_strong_code_root_migration_time_ms = ms;
-+ }
-+
- void record_ref_proc_time(double ms) {
- _cur_ref_proc_time_ms = ms;
- }
-@@ -294,6 +309,14 @@
- return _last_scan_rs_times_ms.average();
- }
-
-+ double average_last_strong_code_root_scan_time(){
-+ return _last_strong_code_root_scan_times_ms.average();
-+ }
-+
-+ double average_last_strong_code_root_mark_time(){
-+ return _last_strong_code_root_mark_times_ms.average();
-+ }
-+
- double average_last_obj_copy_time() {
- return _last_obj_copy_times_ms.average();
- }
---- ./hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Wed May 07 19:26:16 2014 -0700
-@@ -177,10 +177,8 @@
- GenMarkSweep::follow_mdo_weak_refs();
- assert(GenMarkSweep::_marking_stack.is_empty(), "just drained");
-
-- // Visit interned string tables and delete unmarked oops
-- StringTable::unlink(&GenMarkSweep::is_alive);
-- // Clean up unreferenced symbols in symbol table.
-- SymbolTable::unlink();
-+ // Delete entries for dead interned string and clean up unreferenced symbols in symbol table.
-+ G1CollectedHeap::heap()->unlink_string_and_symbol_table(&GenMarkSweep::is_alive);
-
- assert(GenMarkSweep::_marking_stack.is_empty(),
- "stack should be empty by now");
-@@ -188,7 +186,6 @@
- if (VerifyDuringGC) {
- HandleMark hm; // handle scope
- COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact);
-- gclog_or_tty->print(" VerifyDuringGC:(full)[Verifying ");
- Universe::heap()->prepare_for_verify();
- // Note: we can verify only the heap here. When an object is
- // marked, the previous value of the mark word (including
-@@ -200,11 +197,13 @@
- // fail. At the end of the GC, the orginal mark word values
- // (including hash values) are restored to the appropriate
- // objects.
-- Universe::heap()->verify(/* silent */ false,
-- /* option */ VerifyOption_G1UseMarkWord);
--
-- G1CollectedHeap* g1h = G1CollectedHeap::heap();
-- gclog_or_tty->print_cr("]");
-+ if (!VerifySilently) {
-+ gclog_or_tty->print(" VerifyDuringGC:(full)[Verifying ");
-+ }
-+ Universe::heap()->verify(VerifySilently, VerifyOption_G1UseMarkWord);
-+ if (!VerifySilently) {
-+ gclog_or_tty->print_cr("]");
-+ }
- }
-
- gc_tracer()->report_object_count_after_gc(&GenMarkSweep::is_alive);
-@@ -235,7 +234,7 @@
- public:
- G1PrepareCompactClosure(CompactibleSpace* cs)
- : _g1h(G1CollectedHeap::heap()),
-- _mrbs(G1CollectedHeap::heap()->mr_bs()),
-+ _mrbs(_g1h->g1_barrier_set()),
- _cp(NULL, cs, cs->initialize_threshold()),
- _humongous_proxy_set("G1MarkSweep Humongous Proxy Set") { }
-
---- ./hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp Wed May 07 19:26:16 2014 -0700
-@@ -34,6 +34,7 @@
- #include "gc_implementation/g1/g1OopClosures.inline.hpp"
- #include "gc_implementation/g1/g1RemSet.inline.hpp"
- #include "gc_implementation/g1/heapRegionSeq.inline.hpp"
-+#include "gc_implementation/g1/heapRegionRemSet.hpp"
- #include "memory/iterator.hpp"
- #include "oops/oop.inline.hpp"
- #include "utilities/intHisto.hpp"
-@@ -73,7 +74,8 @@
- _ct_bs(ct_bs), _g1p(_g1->g1_policy()),
- _cg1r(g1->concurrent_g1_refine()),
- _cset_rs_update_cl(NULL),
-- _cards_scanned(NULL), _total_cards_scanned(0)
-+ _cards_scanned(NULL), _total_cards_scanned(0),
-+ _prev_period_summary()
- {
- _seq_task = new SubTasksDone(NumSeqTasks);
- guarantee(n_workers() > 0, "There should be some workers");
-@@ -81,6 +83,9 @@
- for (uint i = 0; i < n_workers(); i++) {
- _cset_rs_update_cl[i] = NULL;
- }
-+ if (G1SummarizeRSetStats) {
-+ _prev_period_summary.initialize(this);
-+ }
- }
-
- G1RemSet::~G1RemSet() {
-@@ -101,15 +106,25 @@
- class ScanRSClosure : public HeapRegionClosure {
- size_t _cards_done, _cards;
- G1CollectedHeap* _g1h;
-+
- OopsInHeapRegionClosure* _oc;
-+ CodeBlobToOopClosure* _code_root_cl;
-+
- G1BlockOffsetSharedArray* _bot_shared;
-- CardTableModRefBS *_ct_bs;
-- int _worker_i;
-- int _block_size;
-- bool _try_claimed;
-+ G1SATBCardTableModRefBS *_ct_bs;
-+
-+ double _strong_code_root_scan_time_sec;
-+ int _worker_i;
-+ int _block_size;
-+ bool _try_claimed;
-+
- public:
-- ScanRSClosure(OopsInHeapRegionClosure* oc, int worker_i) :
-+ ScanRSClosure(OopsInHeapRegionClosure* oc,
-+ CodeBlobToOopClosure* code_root_cl,
-+ int worker_i) :
- _oc(oc),
-+ _code_root_cl(code_root_cl),
-+ _strong_code_root_scan_time_sec(0.0),
- _cards(0),
- _cards_done(0),
- _worker_i(worker_i),
-@@ -117,7 +132,7 @@
- {
- _g1h = G1CollectedHeap::heap();
- _bot_shared = _g1h->bot_shared();
-- _ct_bs = (CardTableModRefBS*) (_g1h->barrier_set());
-+ _ct_bs = _g1h->g1_barrier_set();
- _block_size = MAX2<int>(G1RSetScanBlockSize, 1);
- }
-
-@@ -157,6 +172,12 @@
- card_start, card_start + G1BlockOffsetSharedArray::N_words);
- }
-
-+ void scan_strong_code_roots(HeapRegion* r) {
-+ double scan_start = os::elapsedTime();
-+ r->strong_code_roots_do(_code_root_cl);
-+ _strong_code_root_scan_time_sec += (os::elapsedTime() - scan_start);
-+ }
-+
- bool doHeapRegion(HeapRegion* r) {
- assert(r->in_collection_set(), "should only be called on elements of CS.");
- HeapRegionRemSet* hrrs = r->rem_set();
-@@ -170,6 +191,7 @@
- // _try_claimed || r->claim_iter()
- // is true: either we're supposed to work on claimed-but-not-complete
- // regions, or we successfully claimed the region.
-+
- HeapRegionRemSetIterator* iter = _g1h->rem_set_iterator(_worker_i);
- hrrs->init_iterator(iter);
- size_t card_index;
-@@ -203,30 +225,43 @@
- }
- }
- if (!_try_claimed) {
-+ // Scan the strong code root list attached to the current region
-+ scan_strong_code_roots(r);
-+
- hrrs->set_iter_complete();
- }
- return false;
- }
-+
-+ double strong_code_root_scan_time_sec() {
-+ return _strong_code_root_scan_time_sec;
-+ }
-+
- size_t cards_done() { return _cards_done;}
- size_t cards_looked_up() { return _cards;}
- };
-
--void G1RemSet::scanRS(OopsInHeapRegionClosure* oc, int worker_i) {
-+void G1RemSet::scanRS(OopsInHeapRegionClosure* oc,
-+ CodeBlobToOopClosure* code_root_cl,
-+ int worker_i) {
- double rs_time_start = os::elapsedTime();
- HeapRegion *startRegion = _g1->start_cset_region_for_worker(worker_i);
-
-- ScanRSClosure scanRScl(oc, worker_i);
-+ ScanRSClosure scanRScl(oc, code_root_cl, worker_i);
-
- _g1->collection_set_iterate_from(startRegion, &scanRScl);
- scanRScl.set_try_claimed();
- _g1->collection_set_iterate_from(startRegion, &scanRScl);
-
-- double scan_rs_time_sec = os::elapsedTime() - rs_time_start;
-+ double scan_rs_time_sec = (os::elapsedTime() - rs_time_start)
-+ - scanRScl.strong_code_root_scan_time_sec();
-
-- assert( _cards_scanned != NULL, "invariant" );
-+ assert(_cards_scanned != NULL, "invariant");
- _cards_scanned[worker_i] = scanRScl.cards_done();
-
- _g1p->phase_times()->record_scan_rs_time(worker_i, scan_rs_time_sec * 1000.0);
-+ _g1p->phase_times()->record_strong_code_root_scan_time(worker_i,
-+ scanRScl.strong_code_root_scan_time_sec() * 1000.0);
- }
-
- // Closure used for updating RSets and recording references that
-@@ -286,7 +321,8 @@
- }
-
- void G1RemSet::oops_into_collection_set_do(OopsInHeapRegionClosure* oc,
-- int worker_i) {
-+ CodeBlobToOopClosure* code_root_cl,
-+ int worker_i) {
- #if CARD_REPEAT_HISTO
- ct_freq_update_histo_and_reset();
- #endif
-@@ -326,7 +362,7 @@
- _g1p->phase_times()->record_update_rs_time(worker_i, 0.0);
- }
- if (G1UseParallelRSetScanning || (worker_i == 0)) {
-- scanRS(oc, worker_i);
-+ scanRS(oc, code_root_cl, worker_i);
- } else {
- _g1p->phase_times()->record_scan_rs_time(worker_i, 0.0);
- }
-@@ -472,12 +508,7 @@
- ScrubRSClosure(BitMap* region_bm, BitMap* card_bm) :
- _g1h(G1CollectedHeap::heap()),
- _region_bm(region_bm), _card_bm(card_bm),
-- _ctbs(NULL)
-- {
-- ModRefBarrierSet* bs = _g1h->mr_bs();
-- guarantee(bs->is_a(BarrierSet::CardTableModRef), "Precondition");
-- _ctbs = (CardTableModRefBS*)bs;
-- }
-+ _ctbs(_g1h->g1_barrier_set()) {}
-
- bool doHeapRegion(HeapRegion* r) {
- if (!r->continuesHumongous()) {
-@@ -700,47 +731,29 @@
- return has_refs_into_cset;
- }
-
--class HRRSStatsIter: public HeapRegionClosure {
-- size_t _occupied;
-- size_t _total_mem_sz;
-- size_t _max_mem_sz;
-- HeapRegion* _max_mem_sz_region;
--public:
-- HRRSStatsIter() :
-- _occupied(0),
-- _total_mem_sz(0),
-- _max_mem_sz(0),
-- _max_mem_sz_region(NULL)
-- {}
-+void G1RemSet::print_periodic_summary_info(const char* header) {
-+ G1RemSetSummary current;
-+ current.initialize(this);
-
-- bool doHeapRegion(HeapRegion* r) {
-- if (r->continuesHumongous()) return false;
-- size_t mem_sz = r->rem_set()->mem_size();
-- if (mem_sz > _max_mem_sz) {
-- _max_mem_sz = mem_sz;
-- _max_mem_sz_region = r;
-- }
-- _total_mem_sz += mem_sz;
-- size_t occ = r->rem_set()->occupied();
-- _occupied += occ;
-- return false;
-- }
-- size_t total_mem_sz() { return _total_mem_sz; }
-- size_t max_mem_sz() { return _max_mem_sz; }
-- size_t occupied() { return _occupied; }
-- HeapRegion* max_mem_sz_region() { return _max_mem_sz_region; }
--};
-+ _prev_period_summary.subtract_from(&current);
-+ print_summary_info(&_prev_period_summary, header);
-
--class PrintRSThreadVTimeClosure : public ThreadClosure {
--public:
-- virtual void do_thread(Thread *t) {
-- ConcurrentG1RefineThread* crt = (ConcurrentG1RefineThread*) t;
-- gclog_or_tty->print(" %5.2f", crt->vtime_accum());
-- }
--};
-+ _prev_period_summary.set(&current);
-+}
-
- void G1RemSet::print_summary_info() {
-- G1CollectedHeap* g1 = G1CollectedHeap::heap();
-+ G1RemSetSummary current;
-+ current.initialize(this);
-+
-+ print_summary_info(&current, " Cumulative RS summary");
-+}
-+
-+void G1RemSet::print_summary_info(G1RemSetSummary * summary, const char * header) {
-+ assert(summary != NULL, "just checking");
-+
-+ if (header != NULL) {
-+ gclog_or_tty->print_cr("%s", header);
-+ }
-
- #if CARD_REPEAT_HISTO
- gclog_or_tty->print_cr("\nG1 card_repeat count histogram: ");
-@@ -748,52 +761,13 @@
- card_repeat_count.print_on(gclog_or_tty);
- #endif
-
-- gclog_or_tty->print_cr("\n Concurrent RS processed %d cards",
-- _conc_refine_cards);
-- DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
-- jint tot_processed_buffers =
-- dcqs.processed_buffers_mut() + dcqs.processed_buffers_rs_thread();
-- gclog_or_tty->print_cr(" Of %d completed buffers:", tot_processed_buffers);
-- gclog_or_tty->print_cr(" %8d (%5.1f%%) by conc RS threads.",
-- dcqs.processed_buffers_rs_thread(),
-- 100.0*(float)dcqs.processed_buffers_rs_thread()/
-- (float)tot_processed_buffers);
-- gclog_or_tty->print_cr(" %8d (%5.1f%%) by mutator threads.",
-- dcqs.processed_buffers_mut(),
-- 100.0*(float)dcqs.processed_buffers_mut()/
-- (float)tot_processed_buffers);
-- gclog_or_tty->print_cr(" Conc RS threads times(s)");
-- PrintRSThreadVTimeClosure p;
-- gclog_or_tty->print(" ");
-- g1->concurrent_g1_refine()->threads_do(&p);
-- gclog_or_tty->print_cr("");
--
-- HRRSStatsIter blk;
-- g1->heap_region_iterate(&blk);
-- gclog_or_tty->print_cr(" Total heap region rem set sizes = "SIZE_FORMAT"K."
-- " Max = "SIZE_FORMAT"K.",
-- blk.total_mem_sz()/K, blk.max_mem_sz()/K);
-- gclog_or_tty->print_cr(" Static structures = "SIZE_FORMAT"K,"
-- " free_lists = "SIZE_FORMAT"K.",
-- HeapRegionRemSet::static_mem_size() / K,
-- HeapRegionRemSet::fl_mem_size() / K);
-- gclog_or_tty->print_cr(" "SIZE_FORMAT" occupied cards represented.",
-- blk.occupied());
-- HeapRegion* max_mem_sz_region = blk.max_mem_sz_region();
-- HeapRegionRemSet* rem_set = max_mem_sz_region->rem_set();
-- gclog_or_tty->print_cr(" Max size region = "HR_FORMAT", "
-- "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
-- HR_FORMAT_PARAMS(max_mem_sz_region),
-- (rem_set->mem_size() + K - 1)/K,
-- (rem_set->occupied() + K - 1)/K);
-- gclog_or_tty->print_cr(" Did %d coarsenings.",
-- HeapRegionRemSet::n_coarsenings());
-+ summary->print_on(gclog_or_tty);
- }
-
- void G1RemSet::prepare_for_verify() {
- if (G1HRRSFlushLogBuffersOnVerify &&
- (VerifyBeforeGC || VerifyAfterGC)
-- && !_g1->full_collection()) {
-+ && (!_g1->full_collection() || G1VerifyRSetsDuringFullGC)) {
- cleanupHRRS();
- _g1->set_refine_cte_cl_concurrency(false);
- if (SafepointSynchronize::is_at_safepoint()) {
---- ./hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp Wed May 07 19:26:16 2014 -0700
-@@ -25,6 +25,8 @@
- #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_HPP
- #define SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSET_HPP
-
-+#include "gc_implementation/g1/g1RemSetSummary.hpp"
-+
- // A G1RemSet provides ways of iterating over pointers into a selected
- // collection set.
-
-@@ -37,9 +39,11 @@
- // so that they can be used to update the individual region remsets.
-
- class G1RemSet: public CHeapObj<mtGC> {
-+private:
-+ G1RemSetSummary _prev_period_summary;
- protected:
- G1CollectedHeap* _g1;
-- unsigned _conc_refine_cards;
-+ size_t _conc_refine_cards;
- uint n_workers();
-
- protected:
-@@ -66,6 +70,8 @@
- // references into the collection set.
- OopsInHeapRegionClosure** _cset_rs_update_cl;
-
-+ // Print the given summary info
-+ virtual void print_summary_info(G1RemSetSummary * summary, const char * header = NULL);
- public:
- // This is called to reset dual hash tables after the gc pause
- // is finished and the initial hash table is no longer being
-@@ -75,14 +81,23 @@
- G1RemSet(G1CollectedHeap* g1, CardTableModRefBS* ct_bs);
- ~G1RemSet();
-
-- // Invoke "blk->do_oop" on all pointers into the CS in objects in regions
-- // outside the CS (having invoked "blk->set_region" to set the "from"
-- // region correctly beforehand.) The "worker_i" param is for the
-- // parallel case where the number of the worker thread calling this
-- // function can be helpful in partitioning the work to be done. It
-- // should be the same as the "i" passed to the calling thread's
-- // work(i) function. In the sequential case this param will be ingored.
-- void oops_into_collection_set_do(OopsInHeapRegionClosure* blk, int worker_i);
-+ // Invoke "blk->do_oop" on all pointers into the collection set
-+ // from objects in regions outside the collection set (having
-+ // invoked "blk->set_region" to set the "from" region correctly
-+ // beforehand.)
-+ //
-+ // Invoke code_root_cl->do_code_blob on the unmarked nmethods
-+ // on the strong code roots list for each region in the
-+ // collection set.
-+ //
-+ // The "worker_i" param is for the parallel case where the id
-+ // of the worker thread calling this function can be helpful in
-+ // partitioning the work to be done. It should be the same as
-+ // the "i" passed to the calling thread's work(i) function.
-+ // In the sequential case this param will be ignored.
-+ void oops_into_collection_set_do(OopsInHeapRegionClosure* blk,
-+ CodeBlobToOopClosure* code_root_cl,
-+ int worker_i);
-
- // Prepare for and cleanup after an oops_into_collection_set_do
- // call. Must call each of these once before and after (in sequential
-@@ -92,7 +107,10 @@
- void prepare_for_oops_into_collection_set_do();
- void cleanup_after_oops_into_collection_set_do();
-
-- void scanRS(OopsInHeapRegionClosure* oc, int worker_i);
-+ void scanRS(OopsInHeapRegionClosure* oc,
-+ CodeBlobToOopClosure* code_root_cl,
-+ int worker_i);
-+
- void updateRS(DirtyCardQueue* into_cset_dcq, int worker_i);
-
- CardTableModRefBS* ct_bs() { return _ct_bs; }
-@@ -123,11 +141,18 @@
- int worker_i,
- bool check_for_refs_into_cset);
-
-- // Print any relevant summary info.
-+ // Print accumulated summary info from the start of the VM.
- virtual void print_summary_info();
-
-+ // Print accumulated summary info from the last time called.
-+ virtual void print_periodic_summary_info(const char* header);
-+
- // Prepare remembered set for verification.
- virtual void prepare_for_verify();
-+
-+ size_t conc_refine_cards() const {
-+ return _conc_refine_cards;
-+ }
- };
-
- class CountNonCleanMemRegionClosure: public MemRegionClosure {
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,354 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+#include "precompiled.hpp"
-+#include "gc_implementation/g1/concurrentG1Refine.hpp"
-+#include "gc_implementation/g1/concurrentG1RefineThread.hpp"
-+#include "gc_implementation/g1/heapRegion.hpp"
-+#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
-+#include "gc_implementation/g1/g1RemSet.inline.hpp"
-+#include "gc_implementation/g1/g1RemSetSummary.hpp"
-+#include "gc_implementation/g1/heapRegionRemSet.hpp"
-+#include "runtime/thread.hpp"
-+
-+class GetRSThreadVTimeClosure : public ThreadClosure {
-+private:
-+ G1RemSetSummary* _summary;
-+ uint _counter;
-+
-+public:
-+ GetRSThreadVTimeClosure(G1RemSetSummary * summary) : ThreadClosure(), _summary(summary), _counter(0) {
-+ assert(_summary != NULL, "just checking");
-+ }
-+
-+ virtual void do_thread(Thread* t) {
-+ ConcurrentG1RefineThread* crt = (ConcurrentG1RefineThread*) t;
-+ _summary->set_rs_thread_vtime(_counter, crt->vtime_accum());
-+ _counter++;
-+ }
-+};
-+
-+void G1RemSetSummary::update() {
-+ _num_refined_cards = remset()->conc_refine_cards();
-+ DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
-+ _num_processed_buf_mutator = dcqs.processed_buffers_mut();
-+ _num_processed_buf_rs_threads = dcqs.processed_buffers_rs_thread();
-+
-+ _num_coarsenings = HeapRegionRemSet::n_coarsenings();
-+
-+ ConcurrentG1Refine * cg1r = G1CollectedHeap::heap()->concurrent_g1_refine();
-+ if (_rs_threads_vtimes != NULL) {
-+ GetRSThreadVTimeClosure p(this);
-+ cg1r->worker_threads_do(&p);
-+ }
-+ set_sampling_thread_vtime(cg1r->sampling_thread()->vtime_accum());
-+}
-+
-+void G1RemSetSummary::set_rs_thread_vtime(uint thread, double value) {
-+ assert(_rs_threads_vtimes != NULL, "just checking");
-+ assert(thread < _num_vtimes, "just checking");
-+ _rs_threads_vtimes[thread] = value;
-+}
-+
-+double G1RemSetSummary::rs_thread_vtime(uint thread) const {
-+ assert(_rs_threads_vtimes != NULL, "just checking");
-+ assert(thread < _num_vtimes, "just checking");
-+ return _rs_threads_vtimes[thread];
-+}
-+
-+void G1RemSetSummary::initialize(G1RemSet* remset) {
-+ assert(_rs_threads_vtimes == NULL, "just checking");
-+ assert(remset != NULL, "just checking");
-+
-+ _remset = remset;
-+ _num_vtimes = ConcurrentG1Refine::thread_num();
-+ _rs_threads_vtimes = NEW_C_HEAP_ARRAY(double, _num_vtimes, mtGC);
-+ memset(_rs_threads_vtimes, 0, sizeof(double) * _num_vtimes);
-+
-+ update();
-+}
-+
-+void G1RemSetSummary::set(G1RemSetSummary* other) {
-+ assert(other != NULL, "just checking");
-+ assert(remset() == other->remset(), "just checking");
-+ assert(_num_vtimes == other->_num_vtimes, "just checking");
-+
-+ _num_refined_cards = other->num_concurrent_refined_cards();
-+
-+ _num_processed_buf_mutator = other->num_processed_buf_mutator();
-+ _num_processed_buf_rs_threads = other->num_processed_buf_rs_threads();
-+
-+ _num_coarsenings = other->_num_coarsenings;
-+
-+ memcpy(_rs_threads_vtimes, other->_rs_threads_vtimes, sizeof(double) * _num_vtimes);
-+
-+ set_sampling_thread_vtime(other->sampling_thread_vtime());
-+}
-+
-+void G1RemSetSummary::subtract_from(G1RemSetSummary* other) {
-+ assert(other != NULL, "just checking");
-+ assert(remset() == other->remset(), "just checking");
-+ assert(_num_vtimes == other->_num_vtimes, "just checking");
-+
-+ _num_refined_cards = other->num_concurrent_refined_cards() - _num_refined_cards;
-+
-+ _num_processed_buf_mutator = other->num_processed_buf_mutator() - _num_processed_buf_mutator;
-+ _num_processed_buf_rs_threads = other->num_processed_buf_rs_threads() - _num_processed_buf_rs_threads;
-+
-+ _num_coarsenings = other->num_coarsenings() - _num_coarsenings;
-+
-+ for (uint i = 0; i < _num_vtimes; i++) {
-+ set_rs_thread_vtime(i, other->rs_thread_vtime(i) - rs_thread_vtime(i));
-+ }
-+
-+ _sampling_thread_vtime = other->sampling_thread_vtime() - _sampling_thread_vtime;
-+}
-+
-+static double percent_of(size_t numerator, size_t denominator) {
-+ if (denominator != 0) {
-+ return (double)numerator / denominator * 100.0f;
-+ } else {
-+ return 0.0f;
-+ }
-+}
-+
-+static size_t round_to_K(size_t value) {
-+ return value / K;
-+}
-+
-+class RegionTypeCounter VALUE_OBJ_CLASS_SPEC {
-+private:
-+ const char* _name;
-+
-+ size_t _rs_mem_size;
-+ size_t _cards_occupied;
-+ size_t _amount;
-+
-+ size_t _code_root_mem_size;
-+ size_t _code_root_elems;
-+
-+ double rs_mem_size_percent_of(size_t total) {
-+ return percent_of(_rs_mem_size, total);
-+ }
-+
-+ double cards_occupied_percent_of(size_t total) {
-+ return percent_of(_cards_occupied, total);
-+ }
-+
-+ double code_root_mem_size_percent_of(size_t total) {
-+ return percent_of(_code_root_mem_size, total);
-+ }
-+
-+ double code_root_elems_percent_of(size_t total) {
-+ return percent_of(_code_root_elems, total);
-+ }
-+
-+ size_t amount() const { return _amount; }
-+
-+public:
-+
-+ RegionTypeCounter(const char* name) : _name(name), _rs_mem_size(0), _cards_occupied(0),
-+ _amount(0), _code_root_mem_size(0), _code_root_elems(0) { }
-+
-+ void add(size_t rs_mem_size, size_t cards_occupied, size_t code_root_mem_size,
-+ size_t code_root_elems) {
-+ _rs_mem_size += rs_mem_size;
-+ _cards_occupied += cards_occupied;
-+ _code_root_mem_size += code_root_mem_size;
-+ _code_root_elems += code_root_elems;
-+ _amount++;
-+ }
-+
-+ size_t rs_mem_size() const { return _rs_mem_size; }
-+ size_t cards_occupied() const { return _cards_occupied; }
-+
-+ size_t code_root_mem_size() const { return _code_root_mem_size; }
-+ size_t code_root_elems() const { return _code_root_elems; }
-+
-+ void print_rs_mem_info_on(outputStream * out, size_t total) {
-+ out->print_cr(" "SIZE_FORMAT_W(8)"K (%5.1f%%) by "SIZE_FORMAT" %s regions",
-+ round_to_K(rs_mem_size()), rs_mem_size_percent_of(total), amount(), _name);
-+ }
-+
-+ void print_cards_occupied_info_on(outputStream * out, size_t total) {
-+ out->print_cr(" "SIZE_FORMAT_W(8)" (%5.1f%%) entries by "SIZE_FORMAT" %s regions",
-+ cards_occupied(), cards_occupied_percent_of(total), amount(), _name);
-+ }
-+
-+ void print_code_root_mem_info_on(outputStream * out, size_t total) {
-+ out->print_cr(" "SIZE_FORMAT_W(8)"K (%5.1f%%) by "SIZE_FORMAT" %s regions",
-+ round_to_K(code_root_mem_size()), code_root_mem_size_percent_of(total), amount(), _name);
-+ }
-+
-+ void print_code_root_elems_info_on(outputStream * out, size_t total) {
-+ out->print_cr(" "SIZE_FORMAT_W(8)" (%5.1f%%) elements by "SIZE_FORMAT" %s regions",
-+ code_root_elems(), code_root_elems_percent_of(total), amount(), _name);
-+ }
-+};
-+
-+
-+class HRRSStatsIter: public HeapRegionClosure {
-+private:
-+ RegionTypeCounter _young;
-+ RegionTypeCounter _humonguous;
-+ RegionTypeCounter _free;
-+ RegionTypeCounter _old;
-+ RegionTypeCounter _all;
-+
-+ size_t _max_rs_mem_sz;
-+ HeapRegion* _max_rs_mem_sz_region;
-+
-+ size_t total_rs_mem_sz() const { return _all.rs_mem_size(); }
-+ size_t total_cards_occupied() const { return _all.cards_occupied(); }
-+
-+ size_t max_rs_mem_sz() const { return _max_rs_mem_sz; }
-+ HeapRegion* max_rs_mem_sz_region() const { return _max_rs_mem_sz_region; }
-+
-+ size_t _max_code_root_mem_sz;
-+ HeapRegion* _max_code_root_mem_sz_region;
-+
-+ size_t total_code_root_mem_sz() const { return _all.code_root_mem_size(); }
-+ size_t total_code_root_elems() const { return _all.code_root_elems(); }
-+
-+ size_t max_code_root_mem_sz() const { return _max_code_root_mem_sz; }
-+ HeapRegion* max_code_root_mem_sz_region() const { return _max_code_root_mem_sz_region; }
-+
-+public:
-+ HRRSStatsIter() : _all("All"), _young("Young"), _humonguous("Humonguous"),
-+ _free("Free"), _old("Old"), _max_code_root_mem_sz_region(NULL), _max_rs_mem_sz_region(NULL),
-+ _max_rs_mem_sz(0), _max_code_root_mem_sz(0)
-+ {}
-+
-+ bool doHeapRegion(HeapRegion* r) {
-+ HeapRegionRemSet* hrrs = r->rem_set();
-+
-+ // HeapRegionRemSet::mem_size() includes the
-+ // size of the strong code roots
-+ size_t rs_mem_sz = hrrs->mem_size();
-+ if (rs_mem_sz > _max_rs_mem_sz) {
-+ _max_rs_mem_sz = rs_mem_sz;
-+ _max_rs_mem_sz_region = r;
-+ }
-+ size_t occupied_cards = hrrs->occupied();
-+ size_t code_root_mem_sz = hrrs->strong_code_roots_mem_size();
-+ if (code_root_mem_sz > max_code_root_mem_sz()) {
-+ _max_code_root_mem_sz_region = r;
-+ }
-+ size_t code_root_elems = hrrs->strong_code_roots_list_length();
-+
-+ RegionTypeCounter* current = NULL;
-+ if (r->is_young()) {
-+ current = &_young;
-+ } else if (r->isHumongous()) {
-+ current = &_humonguous;
-+ } else if (r->is_empty()) {
-+ current = &_free;
-+ } else {
-+ current = &_old;
-+ }
-+ current->add(rs_mem_sz, occupied_cards, code_root_mem_sz, code_root_elems);
-+ _all.add(rs_mem_sz, occupied_cards, code_root_mem_sz, code_root_elems);
-+
-+ return false;
-+ }
-+
-+ void print_summary_on(outputStream* out) {
-+ RegionTypeCounter* counters[] = { &_young, &_humonguous, &_free, &_old, NULL };
-+
-+ out->print_cr("\n Current rem set statistics");
-+ out->print_cr(" Total per region rem sets sizes = "SIZE_FORMAT"K."
-+ " Max = "SIZE_FORMAT"K.",
-+ round_to_K(total_rs_mem_sz()), round_to_K(max_rs_mem_sz()));
-+ for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
-+ (*current)->print_rs_mem_info_on(out, total_rs_mem_sz());
-+ }
-+
-+ out->print_cr(" Static structures = "SIZE_FORMAT"K,"
-+ " free_lists = "SIZE_FORMAT"K.",
-+ round_to_K(HeapRegionRemSet::static_mem_size()),
-+ round_to_K(HeapRegionRemSet::fl_mem_size()));
-+
-+ out->print_cr(" "SIZE_FORMAT" occupied cards represented.",
-+ total_cards_occupied());
-+ for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
-+ (*current)->print_cards_occupied_info_on(out, total_cards_occupied());
-+ }
-+
-+ // Largest sized rem set region statistics
-+ HeapRegionRemSet* rem_set = max_rs_mem_sz_region()->rem_set();
-+ out->print_cr(" Region with largest rem set = "HR_FORMAT", "
-+ "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
-+ HR_FORMAT_PARAMS(max_rs_mem_sz_region()),
-+ round_to_K(rem_set->mem_size()),
-+ round_to_K(rem_set->occupied()));
-+
-+ // Strong code root statistics
-+ HeapRegionRemSet* max_code_root_rem_set = max_code_root_mem_sz_region()->rem_set();
-+ out->print_cr(" Total heap region code root sets sizes = "SIZE_FORMAT"K."
-+ " Max = "SIZE_FORMAT"K.",
-+ round_to_K(total_code_root_mem_sz()),
-+ round_to_K(max_code_root_rem_set->strong_code_roots_mem_size()));
-+ for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
-+ (*current)->print_code_root_mem_info_on(out, total_code_root_mem_sz());
-+ }
-+
-+ out->print_cr(" "SIZE_FORMAT" code roots represented.",
-+ total_code_root_elems());
-+ for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) {
-+ (*current)->print_code_root_elems_info_on(out, total_code_root_elems());
-+ }
-+
-+ out->print_cr(" Region with largest amount of code roots = "HR_FORMAT", "
-+ "size = "SIZE_FORMAT "K, num_elems = "SIZE_FORMAT".",
-+ HR_FORMAT_PARAMS(max_code_root_mem_sz_region()),
-+ round_to_K(max_code_root_rem_set->strong_code_roots_mem_size()),
-+ round_to_K(max_code_root_rem_set->strong_code_roots_list_length()));
-+ }
-+};
-+
-+void G1RemSetSummary::print_on(outputStream* out) {
-+ out->print_cr("\n Recent concurrent refinement statistics");
-+ out->print_cr(" Processed "SIZE_FORMAT" cards",
-+ num_concurrent_refined_cards());
-+ out->print_cr(" Of "SIZE_FORMAT" completed buffers:", num_processed_buf_total());
-+ out->print_cr(" "SIZE_FORMAT_W(8)" (%5.1f%%) by concurrent RS threads.",
-+ num_processed_buf_total(),
-+ percent_of(num_processed_buf_rs_threads(), num_processed_buf_total()));
-+ out->print_cr(" "SIZE_FORMAT_W(8)" (%5.1f%%) by mutator threads.",
-+ num_processed_buf_mutator(),
-+ percent_of(num_processed_buf_mutator(), num_processed_buf_total()));
-+ out->print_cr(" Did "SIZE_FORMAT" coarsenings.", num_coarsenings());
-+ out->print_cr(" Concurrent RS threads times (s)");
-+ out->print(" ");
-+ for (uint i = 0; i < _num_vtimes; i++) {
-+ out->print(" %5.2f", rs_thread_vtime(i));
-+ }
-+ out->cr();
-+ out->print_cr(" Concurrent sampling threads times (s)");
-+ out->print_cr(" %5.2f", sampling_thread_vtime());
-+
-+ HRRSStatsIter blk;
-+ G1CollectedHeap::heap()->heap_region_iterate(&blk);
-+ blk.print_summary_on(out);
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.hpp Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,118 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSETSUMMARY_HPP
-+#define SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSETSUMMARY_HPP
-+
-+#include "utilities/ostream.hpp"
-+
-+class G1RemSet;
-+
-+// A G1RemSetSummary manages statistical information about the G1RemSet
-+
-+class G1RemSetSummary VALUE_OBJ_CLASS_SPEC {
-+private:
-+ friend class GetRSThreadVTimeClosure;
-+
-+ G1RemSet* _remset;
-+
-+ G1RemSet* remset() const {
-+ return _remset;
-+ }
-+
-+ size_t _num_refined_cards;
-+ size_t _num_processed_buf_mutator;
-+ size_t _num_processed_buf_rs_threads;
-+
-+ size_t _num_coarsenings;
-+
-+ double* _rs_threads_vtimes;
-+ size_t _num_vtimes;
-+
-+ double _sampling_thread_vtime;
-+
-+ void set_rs_thread_vtime(uint thread, double value);
-+ void set_sampling_thread_vtime(double value) {
-+ _sampling_thread_vtime = value;
-+ }
-+
-+ void free_and_null() {
-+ if (_rs_threads_vtimes) {
-+ FREE_C_HEAP_ARRAY(double, _rs_threads_vtimes, mtGC);
-+ _rs_threads_vtimes = NULL;
-+ _num_vtimes = 0;
-+ }
-+ }
-+
-+ // update this summary with current data from various places
-+ void update();
-+
-+public:
-+ G1RemSetSummary() : _remset(NULL), _num_refined_cards(0),
-+ _num_processed_buf_mutator(0), _num_processed_buf_rs_threads(0), _num_coarsenings(0),
-+ _rs_threads_vtimes(NULL), _num_vtimes(0), _sampling_thread_vtime(0.0f) {
-+ }
-+
-+ ~G1RemSetSummary() {
-+ free_and_null();
-+ }
-+
-+ // set the counters in this summary to the values of the others
-+ void set(G1RemSetSummary* other);
-+ // subtract all counters from the other summary, and set them in the current
-+ void subtract_from(G1RemSetSummary* other);
-+
-+ // initialize and get the first sampling
-+ void initialize(G1RemSet* remset);
-+
-+ void print_on(outputStream* out);
-+
-+ double rs_thread_vtime(uint thread) const;
-+
-+ double sampling_thread_vtime() const {
-+ return _sampling_thread_vtime;
-+ }
-+
-+ size_t num_concurrent_refined_cards() const {
-+ return _num_refined_cards;
-+ }
-+
-+ size_t num_processed_buf_mutator() const {
-+ return _num_processed_buf_mutator;
-+ }
-+
-+ size_t num_processed_buf_rs_threads() const {
-+ return _num_processed_buf_rs_threads;
-+ }
-+
-+ size_t num_processed_buf_total() const {
-+ return num_processed_buf_mutator() + num_processed_buf_rs_threads();
-+ }
-+
-+ size_t num_coarsenings() const {
-+ return _num_coarsenings;
-+ }
-+};
-+
-+#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1REMSETSUMMARY_HPP
---- ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp Wed May 07 19:26:16 2014 -0700
-@@ -76,6 +76,46 @@
- }
- }
-
-+bool G1SATBCardTableModRefBS::mark_card_deferred(size_t card_index) {
-+ jbyte val = _byte_map[card_index];
-+ // It's already processed
-+ if ((val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val()) {
-+ return false;
-+ }
-+
-+ if (val == g1_young_gen) {
-+ // the card is for a young gen region. We don't need to keep track of all pointers into young
-+ return false;
-+ }
-+
-+ // Cached bit can be installed either on a clean card or on a claimed card.
-+ jbyte new_val = val;
-+ if (val == clean_card_val()) {
-+ new_val = (jbyte)deferred_card_val();
-+ } else {
-+ if (val & claimed_card_val()) {
-+ new_val = val | (jbyte)deferred_card_val();
-+ }
-+ }
-+ if (new_val != val) {
-+ Atomic::cmpxchg(new_val, &_byte_map[card_index], val);
-+ }
-+ return true;
-+}
-+
-+void G1SATBCardTableModRefBS::g1_mark_as_young(const MemRegion& mr) {
-+ jbyte *const first = byte_for(mr.start());
-+ jbyte *const last = byte_after(mr.last());
-+
-+ memset(first, g1_young_gen, last - first);
-+}
-+
-+#ifndef PRODUCT
-+void G1SATBCardTableModRefBS::verify_g1_young_region(MemRegion mr) {
-+ verify_region(mr, g1_young_gen, true);
-+}
-+#endif
-+
- G1SATBCardTableLoggingModRefBS::
- G1SATBCardTableLoggingModRefBS(MemRegion whole_heap,
- int max_covered_regions) :
-@@ -88,7 +128,11 @@
- void
- G1SATBCardTableLoggingModRefBS::write_ref_field_work(void* field,
- oop new_val) {
-- jbyte* byte = byte_for(field);
-+ volatile jbyte* byte = byte_for(field);
-+ if (*byte == g1_young_gen) {
-+ return;
-+ }
-+ OrderAccess::storeload();
- if (*byte != dirty_card) {
- *byte = dirty_card;
- Thread* thr = Thread::current();
-@@ -120,7 +164,7 @@
-
- void
- G1SATBCardTableLoggingModRefBS::invalidate(MemRegion mr, bool whole_heap) {
-- jbyte* byte = byte_for(mr.start());
-+ volatile jbyte* byte = byte_for(mr.start());
- jbyte* last_byte = byte_for(mr.last());
- Thread* thr = Thread::current();
- if (whole_heap) {
-@@ -129,25 +173,35 @@
- byte++;
- }
- } else {
-- // Enqueue if necessary.
-- if (thr->is_Java_thread()) {
-- JavaThread* jt = (JavaThread*)thr;
-- while (byte <= last_byte) {
-- if (*byte != dirty_card) {
-- *byte = dirty_card;
-- jt->dirty_card_queue().enqueue(byte);
-+ // skip all consecutive young cards
-+ for (; byte <= last_byte && *byte == g1_young_gen; byte++);
-+
-+ if (byte <= last_byte) {
-+ OrderAccess::storeload();
-+ // Enqueue if necessary.
-+ if (thr->is_Java_thread()) {
-+ JavaThread* jt = (JavaThread*)thr;
-+ for (; byte <= last_byte; byte++) {
-+ if (*byte == g1_young_gen) {
-+ continue;
-+ }
-+ if (*byte != dirty_card) {
-+ *byte = dirty_card;
-+ jt->dirty_card_queue().enqueue(byte);
-+ }
- }
-- byte++;
-- }
-- } else {
-- MutexLockerEx x(Shared_DirtyCardQ_lock,
-- Mutex::_no_safepoint_check_flag);
-- while (byte <= last_byte) {
-- if (*byte != dirty_card) {
-- *byte = dirty_card;
-- _dcqs.shared_dirty_card_queue()->enqueue(byte);
-+ } else {
-+ MutexLockerEx x(Shared_DirtyCardQ_lock,
-+ Mutex::_no_safepoint_check_flag);
-+ for (; byte <= last_byte; byte++) {
-+ if (*byte == g1_young_gen) {
-+ continue;
-+ }
-+ if (*byte != dirty_card) {
-+ *byte = dirty_card;
-+ _dcqs.shared_dirty_card_queue()->enqueue(byte);
-+ }
- }
-- byte++;
- }
- }
- }
---- ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp Wed May 07 19:26:16 2014 -0700
-@@ -37,7 +37,14 @@
- // snapshot-at-the-beginning marking.
-
- class G1SATBCardTableModRefBS: public CardTableModRefBSForCTRS {
-+protected:
-+ enum G1CardValues {
-+ g1_young_gen = CT_MR_BS_last_reserved << 1
-+ };
-+
- public:
-+ static int g1_young_card_val() { return g1_young_gen; }
-+
- // Add "pre_val" to a set of objects that may have been disconnected from the
- // pre-marking object graph.
- static void enqueue(oop pre_val);
-@@ -88,6 +95,45 @@
- write_ref_array_pre_work(dst, count);
- }
- }
-+
-+/*
-+ Claimed and deferred bits are used together in G1 during the evacuation
-+ pause. These bits can have the following state transitions:
-+ 1. The claimed bit can be put over any other card state. Except that
-+ the "dirty -> dirty and claimed" transition is checked for in
-+ G1 code and is not used.
-+ 2. Deferred bit can be set only if the previous state of the card
-+ was either clean or claimed. mark_card_deferred() is wait-free.
-+ We do not care if the operation is be successful because if
-+ it does not it will only result in duplicate entry in the update
-+ buffer because of the "cache-miss". So it's not worth spinning.
-+ */
-+
-+ bool is_card_claimed(size_t card_index) {
-+ jbyte val = _byte_map[card_index];
-+ return (val & (clean_card_mask_val() | claimed_card_val())) == claimed_card_val();
-+ }
-+
-+ void set_card_claimed(size_t card_index) {
-+ jbyte val = _byte_map[card_index];
-+ if (val == clean_card_val()) {
-+ val = (jbyte)claimed_card_val();
-+ } else {
-+ val |= (jbyte)claimed_card_val();
-+ }
-+ _byte_map[card_index] = val;
-+ }
-+
-+ void verify_g1_young_region(MemRegion mr) PRODUCT_RETURN;
-+ void g1_mark_as_young(const MemRegion& mr);
-+
-+ bool mark_card_deferred(size_t card_index);
-+
-+ bool is_card_deferred(size_t card_index) {
-+ jbyte val = _byte_map[card_index];
-+ return (val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val();
-+ }
-+
- };
-
- // Adds card-table logging to the post-barrier.
---- ./hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp Wed May 07 19:26:16 2014 -0700
-@@ -71,6 +71,9 @@
- diagnostic(bool, G1TraceConcRefinement, false, \
- "Trace G1 concurrent refinement") \
- \
-+ experimental(bool, G1TraceStringSymbolTableScrubbing, false, \
-+ "Trace information string and symbol table scrubbing.") \
-+ \
- product(double, G1ConcMarkStepDurationMillis, 10.0, \
- "Target duration of individual concurrent marking steps " \
- "in milliseconds.") \
-@@ -332,7 +335,14 @@
- \
- develop(bool, G1EvacuationFailureALotDuringMixedGC, true, \
- "Force use of evacuation failure handling during mixed " \
-- "evacuation pauses")
-+ "evacuation pauses") \
-+ \
-+ diagnostic(bool, G1VerifyRSetsDuringFullGC, false, \
-+ "If true, perform verification of each heap region's " \
-+ "remembered set when verifying the heap during a full GC.") \
-+ \
-+ diagnostic(bool, G1VerifyHeapRegionCodeRoots, false, \
-+ "Verify the code root lists attached to each heap region.")
-
- G1_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG)
-
---- ./hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp Wed May 07 19:26:16 2014 -0700
-@@ -23,6 +23,7 @@
- */
-
- #include "precompiled.hpp"
-+#include "code/nmethod.hpp"
- #include "gc_implementation/g1/g1BlockOffsetTable.inline.hpp"
- #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
- #include "gc_implementation/g1/g1OopClosures.inline.hpp"
-@@ -50,144 +51,6 @@
- OopClosure* oc) :
- _r_bottom(r->bottom()), _r_end(r->end()), _oc(oc) { }
-
--class VerifyLiveClosure: public OopClosure {
--private:
-- G1CollectedHeap* _g1h;
-- CardTableModRefBS* _bs;
-- oop _containing_obj;
-- bool _failures;
-- int _n_failures;
-- VerifyOption _vo;
--public:
-- // _vo == UsePrevMarking -> use "prev" marking information,
-- // _vo == UseNextMarking -> use "next" marking information,
-- // _vo == UseMarkWord -> use mark word from object header.
-- VerifyLiveClosure(G1CollectedHeap* g1h, VerifyOption vo) :
-- _g1h(g1h), _bs(NULL), _containing_obj(NULL),
-- _failures(false), _n_failures(0), _vo(vo)
-- {
-- BarrierSet* bs = _g1h->barrier_set();
-- if (bs->is_a(BarrierSet::CardTableModRef))
-- _bs = (CardTableModRefBS*)bs;
-- }
--
-- void set_containing_obj(oop obj) {
-- _containing_obj = obj;
-- }
--
-- bool failures() { return _failures; }
-- int n_failures() { return _n_failures; }
--
-- virtual void do_oop(narrowOop* p) { do_oop_work(p); }
-- virtual void do_oop( oop* p) { do_oop_work(p); }
--
-- void print_object(outputStream* out, oop obj) {
--#ifdef PRODUCT
-- klassOop k = obj->klass();
-- const char* class_name = instanceKlass::cast(k)->external_name();
-- out->print_cr("class name %s", class_name);
--#else // PRODUCT
-- obj->print_on(out);
--#endif // PRODUCT
-- }
--
-- template <class T>
-- void do_oop_work(T* p) {
-- assert(_containing_obj != NULL, "Precondition");
-- assert(!_g1h->is_obj_dead_cond(_containing_obj, _vo),
-- "Precondition");
-- T heap_oop = oopDesc::load_heap_oop(p);
-- if (!oopDesc::is_null(heap_oop)) {
-- oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-- bool failed = false;
-- if (!_g1h->is_in_closed_subset(obj) || _g1h->is_obj_dead_cond(obj, _vo)) {
-- MutexLockerEx x(ParGCRareEvent_lock,
-- Mutex::_no_safepoint_check_flag);
--
-- if (!_failures) {
-- gclog_or_tty->print_cr("");
-- gclog_or_tty->print_cr("----------");
-- }
-- if (!_g1h->is_in_closed_subset(obj)) {
-- HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
-- gclog_or_tty->print_cr("Field "PTR_FORMAT
-- " of live obj "PTR_FORMAT" in region "
-- "["PTR_FORMAT", "PTR_FORMAT")",
-- p, (void*) _containing_obj,
-- from->bottom(), from->end());
-- print_object(gclog_or_tty, _containing_obj);
-- gclog_or_tty->print_cr("points to obj "PTR_FORMAT" not in the heap",
-- (void*) obj);
-- } else {
-- HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
-- HeapRegion* to = _g1h->heap_region_containing((HeapWord*)obj);
-- gclog_or_tty->print_cr("Field "PTR_FORMAT
-- " of live obj "PTR_FORMAT" in region "
-- "["PTR_FORMAT", "PTR_FORMAT")",
-- p, (void*) _containing_obj,
-- from->bottom(), from->end());
-- print_object(gclog_or_tty, _containing_obj);
-- gclog_or_tty->print_cr("points to dead obj "PTR_FORMAT" in region "
-- "["PTR_FORMAT", "PTR_FORMAT")",
-- (void*) obj, to->bottom(), to->end());
-- print_object(gclog_or_tty, obj);
-- }
-- gclog_or_tty->print_cr("----------");
-- gclog_or_tty->flush();
-- _failures = true;
-- failed = true;
-- _n_failures++;
-- }
--
-- if (!_g1h->full_collection()) {
-- HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
-- HeapRegion* to = _g1h->heap_region_containing(obj);
-- if (from != NULL && to != NULL &&
-- from != to &&
-- !to->isHumongous()) {
-- jbyte cv_obj = *_bs->byte_for_const(_containing_obj);
-- jbyte cv_field = *_bs->byte_for_const(p);
-- const jbyte dirty = CardTableModRefBS::dirty_card_val();
--
-- bool is_bad = !(from->is_young()
-- || to->rem_set()->contains_reference(p)
-- || !G1HRRSFlushLogBuffersOnVerify && // buffers were not flushed
-- (_containing_obj->is_objArray() ?
-- cv_field == dirty
-- : cv_obj == dirty || cv_field == dirty));
-- if (is_bad) {
-- MutexLockerEx x(ParGCRareEvent_lock,
-- Mutex::_no_safepoint_check_flag);
--
-- if (!_failures) {
-- gclog_or_tty->print_cr("");
-- gclog_or_tty->print_cr("----------");
-- }
-- gclog_or_tty->print_cr("Missing rem set entry:");
-- gclog_or_tty->print_cr("Field "PTR_FORMAT" "
-- "of obj "PTR_FORMAT", "
-- "in region "HR_FORMAT,
-- p, (void*) _containing_obj,
-- HR_FORMAT_PARAMS(from));
-- _containing_obj->print_on(gclog_or_tty);
-- gclog_or_tty->print_cr("points to obj "PTR_FORMAT" "
-- "in region "HR_FORMAT,
-- (void*) obj,
-- HR_FORMAT_PARAMS(to));
-- obj->print_on(gclog_or_tty);
-- gclog_or_tty->print_cr("Obj head CTE = %d, field CTE = %d.",
-- cv_obj, cv_field);
-- gclog_or_tty->print_cr("----------");
-- gclog_or_tty->flush();
-- _failures = true;
-- if (!failed) _n_failures++;
-- }
-- }
-- }
-- }
-- }
--};
--
- template<class ClosureType>
- HeapWord* walk_mem_region_loop(ClosureType* cl, G1CollectedHeap* g1h,
- HeapRegion* hr,
-@@ -314,6 +177,11 @@
- region_size = MAX_REGION_SIZE;
- }
-
-+ if (region_size != G1HeapRegionSize) {
-+ // Update the flag to make sure that PrintFlagsFinal logs the correct value
-+ FLAG_SET_ERGO(uintx, G1HeapRegionSize, region_size);
-+ }
-+
- // And recalculate the log.
- region_size_log = log2_long((jlong) region_size);
-
-@@ -363,7 +231,7 @@
- if (!par) {
- // If this is parallel, this will be done later.
- HeapRegionRemSet* hrrs = rem_set();
-- if (hrrs != NULL) hrrs->clear();
-+ hrrs->clear();
- _claimed = InitialClaimValue;
- }
- zero_marked_bytes();
-@@ -504,6 +372,7 @@
- _rem_set(NULL), _recorded_rs_length(0), _predicted_elapsed_time_ms(0),
- _predicted_bytes_to_copy(0)
- {
-+ _rem_set = new HeapRegionRemSet(sharedOffsetArray, this);
- _orig_end = mr.end();
- // Note that initialize() will set the start of the unmarked area of the
- // region.
-@@ -511,8 +380,6 @@
- set_top(bottom());
- set_saved_mark();
-
-- _rem_set = new HeapRegionRemSet(sharedOffsetArray, this);
--
- assert(HeapRegionRemSet::num_par_rem_sets() > 0, "Invariant.");
- }
-
-@@ -732,6 +599,161 @@
- return NULL;
- }
-
-+// Code roots support
-+
-+void HeapRegion::add_strong_code_root(nmethod* nm) {
-+ HeapRegionRemSet* hrrs = rem_set();
-+ hrrs->add_strong_code_root(nm);
-+}
-+
-+void HeapRegion::remove_strong_code_root(nmethod* nm) {
-+ HeapRegionRemSet* hrrs = rem_set();
-+ hrrs->remove_strong_code_root(nm);
-+}
-+
-+void HeapRegion::migrate_strong_code_roots() {
-+ assert(in_collection_set(), "only collection set regions");
-+ assert(!isHumongous(),
-+ err_msg("humongous region "HR_FORMAT" should not have been added to collection set",
-+ HR_FORMAT_PARAMS(this)));
-+
-+ HeapRegionRemSet* hrrs = rem_set();
-+ hrrs->migrate_strong_code_roots();
-+}
-+
-+void HeapRegion::strong_code_roots_do(CodeBlobClosure* blk) const {
-+ HeapRegionRemSet* hrrs = rem_set();
-+ hrrs->strong_code_roots_do(blk);
-+}
-+
-+class VerifyStrongCodeRootOopClosure: public OopClosure {
-+ const HeapRegion* _hr;
-+ nmethod* _nm;
-+ bool _failures;
-+ bool _has_oops_in_region;
-+
-+ template <class T> void do_oop_work(T* p) {
-+ T heap_oop = oopDesc::load_heap_oop(p);
-+ if (!oopDesc::is_null(heap_oop)) {
-+ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-+
-+ // Note: not all the oops embedded in the nmethod are in the
-+ // current region. We only look at those which are.
-+ if (_hr->is_in(obj)) {
-+ // Object is in the region. Check that its less than top
-+ if (_hr->top() <= (HeapWord*)obj) {
-+ // Object is above top
-+ gclog_or_tty->print_cr("Object "PTR_FORMAT" in region "
-+ "["PTR_FORMAT", "PTR_FORMAT") is above "
-+ "top "PTR_FORMAT,
-+ obj, _hr->bottom(), _hr->end(), _hr->top());
-+ _failures = true;
-+ return;
-+ }
-+ // Nmethod has at least one oop in the current region
-+ _has_oops_in_region = true;
-+ }
-+ }
-+ }
-+
-+public:
-+ VerifyStrongCodeRootOopClosure(const HeapRegion* hr, nmethod* nm):
-+ _hr(hr), _failures(false), _has_oops_in_region(false) {}
-+
-+ void do_oop(narrowOop* p) { do_oop_work(p); }
-+ void do_oop(oop* p) { do_oop_work(p); }
-+
-+ bool failures() { return _failures; }
-+ bool has_oops_in_region() { return _has_oops_in_region; }
-+};
-+
-+class VerifyStrongCodeRootCodeBlobClosure: public CodeBlobClosure {
-+ const HeapRegion* _hr;
-+ bool _failures;
-+public:
-+ VerifyStrongCodeRootCodeBlobClosure(const HeapRegion* hr) :
-+ _hr(hr), _failures(false) {}
-+
-+ void do_code_blob(CodeBlob* cb) {
-+ nmethod* nm = (cb == NULL) ? NULL : cb->as_nmethod_or_null();
-+ if (nm != NULL) {
-+ // Verify that the nemthod is live
-+ if (!nm->is_alive()) {
-+ gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has dead nmethod "
-+ PTR_FORMAT" in its strong code roots",
-+ _hr->bottom(), _hr->end(), nm);
-+ _failures = true;
-+ } else {
-+ VerifyStrongCodeRootOopClosure oop_cl(_hr, nm);
-+ nm->oops_do(&oop_cl);
-+ if (!oop_cl.has_oops_in_region()) {
-+ gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has nmethod "
-+ PTR_FORMAT" in its strong code roots "
-+ "with no pointers into region",
-+ _hr->bottom(), _hr->end(), nm);
-+ _failures = true;
-+ } else if (oop_cl.failures()) {
-+ gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has other "
-+ "failures for nmethod "PTR_FORMAT,
-+ _hr->bottom(), _hr->end(), nm);
-+ _failures = true;
-+ }
-+ }
-+ }
-+ }
-+
-+ bool failures() { return _failures; }
-+};
-+
-+void HeapRegion::verify_strong_code_roots(VerifyOption vo, bool* failures) const {
-+ if (!G1VerifyHeapRegionCodeRoots) {
-+ // We're not verifying code roots.
-+ return;
-+ }
-+ if (vo == VerifyOption_G1UseMarkWord) {
-+ // Marking verification during a full GC is performed after class
-+ // unloading, code cache unloading, etc so the strong code roots
-+ // attached to each heap region are in an inconsistent state. They won't
-+ // be consistent until the strong code roots are rebuilt after the
-+ // actual GC. Skip verifying the strong code roots in this particular
-+ // time.
-+ assert(VerifyDuringGC, "only way to get here");
-+ return;
-+ }
-+
-+ HeapRegionRemSet* hrrs = rem_set();
-+ int strong_code_roots_length = hrrs->strong_code_roots_list_length();
-+
-+ // if this region is empty then there should be no entries
-+ // on its strong code root list
-+ if (is_empty()) {
-+ if (strong_code_roots_length > 0) {
-+ gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] is empty "
-+ "but has "INT32_FORMAT" code root entries",
-+ bottom(), end(), strong_code_roots_length);
-+ *failures = true;
-+ }
-+ return;
-+ }
-+
-+ if (continuesHumongous()) {
-+ if (strong_code_roots_length > 0) {
-+ gclog_or_tty->print_cr("region "HR_FORMAT" is a continuation of a humongous "
-+ "region but has "INT32_FORMAT" code root entries",
-+ HR_FORMAT_PARAMS(this), strong_code_roots_length);
-+ *failures = true;
-+ }
-+ return;
-+ }
-+
-+ VerifyStrongCodeRootCodeBlobClosure cb_cl(this);
-+ strong_code_roots_do(&cb_cl);
-+
-+ if (cb_cl.failures()) {
-+ *failures = true;
-+ }
-+}
-+
- void HeapRegion::print() const { print_on(gclog_or_tty); }
- void HeapRegion::print_on(outputStream* st) const {
- if (isHumongous()) {
-@@ -760,10 +782,143 @@
- G1OffsetTableContigSpace::print_on(st);
- }
-
--void HeapRegion::verify() const {
-- bool dummy = false;
-- verify(VerifyOption_G1UsePrevMarking, /* failures */ &dummy);
--}
-+class VerifyLiveClosure: public OopClosure {
-+private:
-+ G1CollectedHeap* _g1h;
-+ CardTableModRefBS* _bs;
-+ oop _containing_obj;
-+ bool _failures;
-+ int _n_failures;
-+ VerifyOption _vo;
-+public:
-+ // _vo == UsePrevMarking -> use "prev" marking information,
-+ // _vo == UseNextMarking -> use "next" marking information,
-+ // _vo == UseMarkWord -> use mark word from object header.
-+ VerifyLiveClosure(G1CollectedHeap* g1h, VerifyOption vo) :
-+ _g1h(g1h), _bs(NULL), _containing_obj(NULL),
-+ _failures(false), _n_failures(0), _vo(vo)
-+ {
-+ BarrierSet* bs = _g1h->barrier_set();
-+ if (bs->is_a(BarrierSet::CardTableModRef))
-+ _bs = (CardTableModRefBS*)bs;
-+ }
-+
-+ void set_containing_obj(oop obj) {
-+ _containing_obj = obj;
-+ }
-+
-+ bool failures() { return _failures; }
-+ int n_failures() { return _n_failures; }
-+
-+ virtual void do_oop(narrowOop* p) { do_oop_work(p); }
-+ virtual void do_oop( oop* p) { do_oop_work(p); }
-+
-+ void print_object(outputStream* out, oop obj) {
-+#ifdef PRODUCT
-+ klassOop k = obj->klass();
-+ const char* class_name = instanceKlass::cast(k)->external_name();
-+ out->print_cr("class name %s", class_name);
-+#else // PRODUCT
-+ obj->print_on(out);
-+#endif // PRODUCT
-+ }
-+
-+ template <class T>
-+ void do_oop_work(T* p) {
-+ assert(_containing_obj != NULL, "Precondition");
-+ assert(!_g1h->is_obj_dead_cond(_containing_obj, _vo),
-+ "Precondition");
-+ T heap_oop = oopDesc::load_heap_oop(p);
-+ if (!oopDesc::is_null(heap_oop)) {
-+ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-+ bool failed = false;
-+ if (!_g1h->is_in_closed_subset(obj) || _g1h->is_obj_dead_cond(obj, _vo)) {
-+ MutexLockerEx x(ParGCRareEvent_lock,
-+ Mutex::_no_safepoint_check_flag);
-+
-+ if (!_failures) {
-+ gclog_or_tty->print_cr("");
-+ gclog_or_tty->print_cr("----------");
-+ }
-+ if (!_g1h->is_in_closed_subset(obj)) {
-+ HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
-+ gclog_or_tty->print_cr("Field "PTR_FORMAT
-+ " of live obj "PTR_FORMAT" in region "
-+ "["PTR_FORMAT", "PTR_FORMAT")",
-+ p, (void*) _containing_obj,
-+ from->bottom(), from->end());
-+ print_object(gclog_or_tty, _containing_obj);
-+ gclog_or_tty->print_cr("points to obj "PTR_FORMAT" not in the heap",
-+ (void*) obj);
-+ } else {
-+ HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
-+ HeapRegion* to = _g1h->heap_region_containing((HeapWord*)obj);
-+ gclog_or_tty->print_cr("Field "PTR_FORMAT
-+ " of live obj "PTR_FORMAT" in region "
-+ "["PTR_FORMAT", "PTR_FORMAT")",
-+ p, (void*) _containing_obj,
-+ from->bottom(), from->end());
-+ print_object(gclog_or_tty, _containing_obj);
-+ gclog_or_tty->print_cr("points to dead obj "PTR_FORMAT" in region "
-+ "["PTR_FORMAT", "PTR_FORMAT")",
-+ (void*) obj, to->bottom(), to->end());
-+ print_object(gclog_or_tty, obj);
-+ }
-+ gclog_or_tty->print_cr("----------");
-+ gclog_or_tty->flush();
-+ _failures = true;
-+ failed = true;
-+ _n_failures++;
-+ }
-+
-+ if (!_g1h->full_collection() || G1VerifyRSetsDuringFullGC) {
-+ HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p);
-+ HeapRegion* to = _g1h->heap_region_containing(obj);
-+ if (from != NULL && to != NULL &&
-+ from != to &&
-+ !to->isHumongous()) {
-+ jbyte cv_obj = *_bs->byte_for_const(_containing_obj);
-+ jbyte cv_field = *_bs->byte_for_const(p);
-+ const jbyte dirty = CardTableModRefBS::dirty_card_val();
-+
-+ bool is_bad = !(from->is_young()
-+ || to->rem_set()->contains_reference(p)
-+ || !G1HRRSFlushLogBuffersOnVerify && // buffers were not flushed
-+ (_containing_obj->is_objArray() ?
-+ cv_field == dirty
-+ : cv_obj == dirty || cv_field == dirty));
-+ if (is_bad) {
-+ MutexLockerEx x(ParGCRareEvent_lock,
-+ Mutex::_no_safepoint_check_flag);
-+
-+ if (!_failures) {
-+ gclog_or_tty->print_cr("");
-+ gclog_or_tty->print_cr("----------");
-+ }
-+ gclog_or_tty->print_cr("Missing rem set entry:");
-+ gclog_or_tty->print_cr("Field "PTR_FORMAT" "
-+ "of obj "PTR_FORMAT", "
-+ "in region "HR_FORMAT,
-+ p, (void*) _containing_obj,
-+ HR_FORMAT_PARAMS(from));
-+ _containing_obj->print_on(gclog_or_tty);
-+ gclog_or_tty->print_cr("points to obj "PTR_FORMAT" "
-+ "in region "HR_FORMAT,
-+ (void*) obj,
-+ HR_FORMAT_PARAMS(to));
-+ obj->print_on(gclog_or_tty);
-+ gclog_or_tty->print_cr("Obj head CTE = %d, field CTE = %d.",
-+ cv_obj, cv_field);
-+ gclog_or_tty->print_cr("----------");
-+ gclog_or_tty->flush();
-+ _failures = true;
-+ if (!failed) _n_failures++;
-+ }
-+ }
-+ }
-+ }
-+ }
-+};
-
- // This really ought to be commoned up into OffsetTableContigSpace somehow.
- // We would need a mechanism to make that code skip dead objects.
-@@ -903,6 +1058,13 @@
- *failures = true;
- return;
- }
-+
-+ verify_strong_code_roots(vo, failures);
-+}
-+
-+void HeapRegion::verify() const {
-+ bool dummy = false;
-+ verify(VerifyOption_G1UsePrevMarking, /* failures */ &dummy);
- }
-
- // G1OffsetTableContigSpace code; copied from space.cpp. Hope this can go
---- ./hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp Wed May 07 19:26:16 2014 -0700
-@@ -51,6 +51,7 @@
- class HeapRegionRemSetIterator;
- class HeapRegion;
- class HeapRegionSetBase;
-+class nmethod;
-
- #define HR_FORMAT "%u:(%s)["PTR_FORMAT","PTR_FORMAT","PTR_FORMAT"]"
- #define HR_FORMAT_PARAMS(_hr_) \
-@@ -374,7 +375,8 @@
- RebuildRSClaimValue = 5,
- ParEvacFailureClaimValue = 6,
- AggregateCountClaimValue = 7,
-- VerifyCountClaimValue = 8
-+ VerifyCountClaimValue = 8,
-+ ParMarkRootClaimValue = 9
- };
-
- inline HeapWord* par_allocate_no_bot_updates(size_t word_size) {
-@@ -801,6 +803,25 @@
-
- virtual void reset_after_compaction();
-
-+ // Routines for managing a list of code roots (attached to the
-+ // this region's RSet) that point into this heap region.
-+ void add_strong_code_root(nmethod* nm);
-+ void remove_strong_code_root(nmethod* nm);
-+
-+ // During a collection, migrate the successfully evacuated
-+ // strong code roots that referenced into this region to the
-+ // new regions that they now point into. Unsuccessfully
-+ // evacuated code roots are not migrated.
-+ void migrate_strong_code_roots();
-+
-+ // Applies blk->do_code_blob() to each of the entries in
-+ // the strong code roots list for this region
-+ void strong_code_roots_do(CodeBlobClosure* blk) const;
-+
-+ // Verify that the entries on the strong code root list for this
-+ // region are live and include at least one pointer into this region.
-+ void verify_strong_code_roots(VerifyOption vo, bool* failures) const;
-+
- void print() const;
- void print_on(outputStream* st) const;
-
---- ./hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Wed May 07 19:26:16 2014 -0700
-@@ -33,6 +33,7 @@
- #include "oops/oop.inline.hpp"
- #include "utilities/bitMap.inline.hpp"
- #include "utilities/globalDefinitions.hpp"
-+#include "utilities/growableArray.hpp"
-
- class PerRegionTable: public CHeapObj<mtGC> {
- friend class OtherRegionsTable;
-@@ -706,10 +707,11 @@
- // Cast away const in this case.
- MutexLockerEx x((Mutex*)&_m, Mutex::_no_safepoint_check_flag);
- size_t sum = 0;
-- PerRegionTable * cur = _first_all_fine_prts;
-- while (cur != NULL) {
-- sum += cur->mem_size();
-- cur = cur->next();
-+ // all PRTs are of the same size so it is sufficient to query only one of them.
-+ if (_first_all_fine_prts != NULL) {
-+ assert(_last_all_fine_prts != NULL &&
-+ _first_all_fine_prts->mem_size() == _last_all_fine_prts->mem_size(), "check that mem_size() is constant");
-+ sum += _first_all_fine_prts->mem_size() * _n_fine_entries;
- }
- sum += (sizeof(PerRegionTable*) * _max_fine_entries);
- sum += (_coarse_map.size_in_words() * HeapWordSize);
-@@ -845,7 +847,7 @@
-
- HeapRegionRemSet::HeapRegionRemSet(G1BlockOffsetSharedArray* bosa,
- HeapRegion* hr)
-- : _bosa(bosa), _other_regions(hr) {
-+ : _bosa(bosa), _strong_code_roots_list(NULL), _other_regions(hr) {
- reset_for_par_iteration();
- }
-
-@@ -909,6 +911,12 @@
- }
-
- void HeapRegionRemSet::clear() {
-+ if (_strong_code_roots_list != NULL) {
-+ delete _strong_code_roots_list;
-+ }
-+ _strong_code_roots_list = new (ResourceObj::C_HEAP, mtGC)
-+ GrowableArray<nmethod*>(10, 0, NULL, true);
-+
- _other_regions.clear();
- assert(occupied() == 0, "Should be clear.");
- reset_for_par_iteration();
-@@ -926,6 +934,126 @@
- _other_regions.scrub(ctbs, region_bm, card_bm);
- }
-
-+
-+// Code roots support
-+
-+void HeapRegionRemSet::add_strong_code_root(nmethod* nm) {
-+ assert(nm != NULL, "sanity");
-+ // Search for the code blob from the RHS to avoid
-+ // duplicate entries as much as possible
-+ if (_strong_code_roots_list->find_from_end(nm) < 0) {
-+ // Code blob isn't already in the list
-+ _strong_code_roots_list->push(nm);
-+ }
-+}
-+
-+void HeapRegionRemSet::remove_strong_code_root(nmethod* nm) {
-+ assert(nm != NULL, "sanity");
-+ int idx = _strong_code_roots_list->find(nm);
-+ if (idx >= 0) {
-+ _strong_code_roots_list->remove_at(idx);
-+ }
-+ // Check that there were no duplicates
-+ guarantee(_strong_code_roots_list->find(nm) < 0, "duplicate entry found");
-+}
-+
-+class NMethodMigrationOopClosure : public OopClosure {
-+ G1CollectedHeap* _g1h;
-+ HeapRegion* _from;
-+ nmethod* _nm;
-+
-+ uint _num_self_forwarded;
-+
-+ template <class T> void do_oop_work(T* p) {
-+ T heap_oop = oopDesc::load_heap_oop(p);
-+ if (!oopDesc::is_null(heap_oop)) {
-+ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
-+ if (obj->is_perm()) {
-+ // reference into perm gen - ignore.
-+ return;
-+ } else if (_from->is_in(obj)) {
-+ // Reference still points into the source region.
-+ // Since roots are immediately evacuated this means that
-+ // we must have self forwarded the object
-+ assert(obj->is_forwarded(),
-+ err_msg("code roots should be immediately evacuated. "
-+ "Ref: "PTR_FORMAT", "
-+ "Obj: "PTR_FORMAT", "
-+ "Region: "HR_FORMAT,
-+ p, (void*) obj, HR_FORMAT_PARAMS(_from)));
-+ assert(obj->forwardee() == obj,
-+ err_msg("not self forwarded? obj = "PTR_FORMAT, (void*)obj));
-+
-+ // The object has been self forwarded.
-+ // Note, if we're during an initial mark pause, there is
-+ // no need to explicitly mark object. It will be marked
-+ // during the regular evacuation failure handling code.
-+ _num_self_forwarded++;
-+ } else {
-+ // The reference points into a promotion or to-space region
-+ HeapRegion* to = _g1h->heap_region_containing(obj);
-+ to->rem_set()->add_strong_code_root(_nm);
-+ }
-+ }
-+ }
-+
-+public:
-+ NMethodMigrationOopClosure(G1CollectedHeap* g1h, HeapRegion* from, nmethod* nm):
-+ _g1h(g1h), _from(from), _nm(nm), _num_self_forwarded(0) {}
-+
-+ void do_oop(narrowOop* p) { do_oop_work(p); }
-+ void do_oop(oop* p) { do_oop_work(p); }
-+
-+ uint retain() { return _num_self_forwarded > 0; }
-+};
-+
-+void HeapRegionRemSet::migrate_strong_code_roots() {
-+ assert(hr()->in_collection_set(), "only collection set regions");
-+ assert(!hr()->isHumongous(),
-+ err_msg("humongous region "HR_FORMAT" should not have been added to the collection set",
-+ HR_FORMAT_PARAMS(hr())));
-+
-+ ResourceMark rm;
-+
-+ // List of code blobs to retain for this region
-+ GrowableArray<nmethod*> to_be_retained(10);
-+ G1CollectedHeap* g1h = G1CollectedHeap::heap();
-+
-+ while (_strong_code_roots_list->is_nonempty()) {
-+ nmethod *nm = _strong_code_roots_list->pop();
-+ if (nm != NULL) {
-+ NMethodMigrationOopClosure oop_cl(g1h, hr(), nm);
-+ nm->oops_do(&oop_cl);
-+ if (oop_cl.retain()) {
-+ to_be_retained.push(nm);
-+ }
-+ }
-+ }
-+
-+ // Now push any code roots we need to retain
-+ assert(to_be_retained.is_empty() || hr()->evacuation_failed(),
-+ "Retained nmethod list must be empty or "
-+ "evacuation of this region failed");
-+
-+ while (to_be_retained.is_nonempty()) {
-+ nmethod* nm = to_be_retained.pop();
-+ assert(nm != NULL, "sanity");
-+ add_strong_code_root(nm);
-+ }
-+}
-+
-+void HeapRegionRemSet::strong_code_roots_do(CodeBlobClosure* blk) const {
-+ for (int i = 0; i < _strong_code_roots_list->length(); i += 1) {
-+ nmethod* nm = _strong_code_roots_list->at(i);
-+ blk->do_code_blob(nm);
-+ }
-+}
-+
-+size_t HeapRegionRemSet::strong_code_roots_mem_size() {
-+ return sizeof(GrowableArray<nmethod*>) +
-+ _strong_code_roots_list->max_length() * sizeof(nmethod*);
-+}
-+
- //-------------------- Iteration --------------------
-
- HeapRegionRemSetIterator::
---- ./hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp Wed May 07 19:26:16 2014 -0700
-@@ -37,6 +37,7 @@
- class HeapRegionRemSetIterator;
- class PerRegionTable;
- class SparsePRT;
-+class nmethod;
-
- // Essentially a wrapper around SparsePRTCleanupTask. See
- // sparsePRT.hpp for more details.
-@@ -191,6 +192,10 @@
- G1BlockOffsetSharedArray* _bosa;
- G1BlockOffsetSharedArray* bosa() const { return _bosa; }
-
-+ // A list of code blobs (nmethods) whose code contains pointers into
-+ // the region that owns this RSet.
-+ GrowableArray<nmethod*>* _strong_code_roots_list;
-+
- OtherRegionsTable _other_regions;
-
- enum ParIterState { Unclaimed, Claimed, Complete };
-@@ -285,11 +290,13 @@
- void init_iterator(HeapRegionRemSetIterator* iter) const;
-
- // The actual # of bytes this hr_remset takes up.
-+ // Note also includes the strong code root set.
- size_t mem_size() {
- return _other_regions.mem_size()
- // This correction is necessary because the above includes the second
- // part.
-- + sizeof(this) - sizeof(OtherRegionsTable);
-+ + (sizeof(this) - sizeof(OtherRegionsTable))
-+ + strong_code_roots_mem_size();
- }
-
- // Returns the memory occupancy of all static data structures associated
-@@ -307,6 +314,37 @@
- bool contains_reference(OopOrNarrowOopStar from) const {
- return _other_regions.contains_reference(from);
- }
-+
-+ // Routines for managing the list of code roots that point into
-+ // the heap region that owns this RSet.
-+ void add_strong_code_root(nmethod* nm);
-+ void remove_strong_code_root(nmethod* nm);
-+
-+ // During a collection, migrate the successfully evacuated strong
-+ // code roots that referenced into the region that owns this RSet
-+ // to the RSets of the new regions that they now point into.
-+ // Unsuccessfully evacuated code roots are not migrated.
-+ void migrate_strong_code_roots();
-+
-+ // Applies blk->do_code_blob() to each of the entries in
-+ // the strong code roots list
-+ void strong_code_roots_do(CodeBlobClosure* blk) const;
-+
-+ // Returns the number of elements in the strong code roots list
-+ int strong_code_roots_list_length() {
-+ return _strong_code_roots_list->length();
-+ }
-+
-+ // Returns true if the strong code roots contains the given
-+ // nmethod.
-+ bool strong_code_roots_list_contains(nmethod* nm) {
-+ return _strong_code_roots_list->contains(nm);
-+ }
-+
-+ // Returns the amount of memory, in bytes, currently
-+ // consumed by the strong code roots.
-+ size_t strong_code_roots_mem_size();
-+
- void print() const;
-
- // Called during a stop-world phase to perform any deferred cleanups.
---- ./hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp Wed May 07 19:26:16 2014 -0700
-@@ -79,6 +79,10 @@
-
- void reset() { if (_buf != NULL) _index = _sz; }
-
-+ void enqueue(volatile void* ptr) {
-+ enqueue((void*)(ptr));
-+ }
-+
- // Enqueues the given "obj".
- void enqueue(void* ptr) {
- if (!_active) return;
---- ./hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp Wed May 07 19:26:16 2014 -0700
-@@ -923,7 +923,7 @@
-
- GenCollectedHeap* gch = GenCollectedHeap::heap();
-
-- _gc_timer->register_gc_start(os::elapsed_counter());
-+ _gc_timer->register_gc_start();
-
- assert(gch->kind() == CollectedHeap::GenCollectedHeap,
- "not a CMS generational heap");
-@@ -1100,7 +1100,7 @@
- gch->trace_heap_after_gc(&gc_tracer);
- gc_tracer.report_tenuring_threshold(tenuring_threshold());
-
-- _gc_timer->register_gc_end(os::elapsed_counter());
-+ _gc_timer->register_gc_end();
-
- gc_tracer.report_gc_end(_gc_timer->gc_end(), _gc_timer->time_partitions());
- }
---- ./hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Wed May 07 19:26:16 2014 -0700
-@@ -90,14 +90,16 @@
- og_min_size, og_max_size,
- yg_min_size, yg_max_size);
-
-- // The ReservedSpace ctor used below requires that the page size for the perm
-- // gen is <= the page size for the rest of the heap (young + old gens).
- const size_t og_page_sz = os::page_size_for_region(yg_min_size + og_min_size,
- yg_max_size + og_max_size,
- 8);
-- const size_t pg_page_sz = MIN2(os::page_size_for_region(pg_min_size,
-- pg_max_size, 16),
-- og_page_sz);
-+
-+ // Use the same page size for both perm gen and old gen,
-+ // to allow large pages to be allocated when the heap is reserved
-+ // for the implementations that can't 'commit' large pages.
-+ // NEEDS_CLEANUP. ReservedHeapSpace/ReservedSpace that takes both
-+ // a prefix and a suffix alignment can now be removed.
-+ const size_t pg_page_sz = og_page_sz;
-
- const size_t pg_align = set_alignment(_perm_gen_alignment, pg_page_sz);
- const size_t og_align = set_alignment(_old_gen_alignment, og_page_sz);
-@@ -138,12 +140,9 @@
- total_reserved = add_and_check_overflow(total_reserved, og_max_size);
- total_reserved = add_and_check_overflow(total_reserved, yg_max_size);
-
-- char* addr = Universe::preferred_heap_base(total_reserved, Universe::UnscaledNarrowOop);
-+ assert(is_size_aligned(total_reserved, og_align), "Must be");
-
-- // The main part of the heap (old gen + young gen) can often use a larger page
-- // size than is needed or wanted for the perm gen. Use the "compound
-- // alignment" ReservedSpace ctor to avoid having to use the same page size for
-- // all gens.
-+ char* addr = Universe::preferred_heap_base(total_reserved, og_align, Universe::UnscaledNarrowOop);
-
- ReservedHeapSpace heap_rs(pg_max_size, pg_align, og_max_size + yg_max_size,
- og_align, addr);
-@@ -153,12 +152,12 @@
- // Failed to reserve at specified address - the requested memory
- // region is taken already, for example, by 'java' launcher.
- // Try again to reserver heap higher.
-- addr = Universe::preferred_heap_base(total_reserved, Universe::ZeroBasedNarrowOop);
-+ addr = Universe::preferred_heap_base(total_reserved, og_align, Universe::ZeroBasedNarrowOop);
- ReservedHeapSpace heap_rs0(pg_max_size, pg_align, og_max_size + yg_max_size,
- og_align, addr);
- if (addr != NULL && !heap_rs0.is_reserved()) {
- // Failed to reserve at specified address again - give up.
-- addr = Universe::preferred_heap_base(total_reserved, Universe::HeapBasedNarrowOop);
-+ addr = Universe::preferred_heap_base(total_reserved, og_align, Universe::HeapBasedNarrowOop);
- assert(addr == NULL, "");
- ReservedHeapSpace heap_rs1(pg_max_size, pg_align, og_max_size + yg_max_size,
- og_align, addr);
---- ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp Wed May 07 19:26:16 2014 -0700
-@@ -24,6 +24,7 @@
-
- #include "precompiled.hpp"
- #include "gc_implementation/parallelScavenge/generationSizer.hpp"
-+#include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp"
- #include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp"
- #include "gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp"
- #include "gc_implementation/parallelScavenge/psScavenge.hpp"
-@@ -78,6 +79,38 @@
- _old_gen_policy_is_ready = false;
- }
-
-+size_t PSAdaptiveSizePolicy::calculate_free_based_on_live(size_t live, uintx ratio_as_percentage) {
-+ // We want to calculate how much free memory there can be based on the
-+ // amount of live data currently in the old gen. Using the formula:
-+ // ratio * (free + live) = free
-+ // Some equation solving later we get:
-+ // free = (live * ratio) / (1 - ratio)
-+
-+ const double ratio = ratio_as_percentage / 100.0;
-+ const double ratio_inverse = 1.0 - ratio;
-+ const double tmp = live * ratio;
-+ size_t free = (size_t)(tmp / ratio_inverse);
-+
-+ return free;
-+}
-+
-+size_t PSAdaptiveSizePolicy::calculated_old_free_size_in_bytes() const {
-+ size_t free_size = (size_t)(_promo_size + avg_promoted()->padded_average());
-+ size_t live = ParallelScavengeHeap::heap()->old_gen()->used_in_bytes();
-+
-+ if (MinHeapFreeRatio != 0) {
-+ size_t min_free = calculate_free_based_on_live(live, MinHeapFreeRatio);
-+ free_size = MAX2(free_size, min_free);
-+ }
-+
-+ if (MaxHeapFreeRatio != 100) {
-+ size_t max_free = calculate_free_based_on_live(live, MaxHeapFreeRatio);
-+ free_size = MIN2(max_free, free_size);
-+ }
-+
-+ return free_size;
-+}
-+
- void PSAdaptiveSizePolicy::major_collection_begin() {
- // Update the interval time
- _major_timer.stop();
-@@ -1107,3 +1140,18 @@
- st,
- PSScavenge::tenuring_threshold());
- }
-+
-+#ifndef PRODUCT
-+
-+void TestOldFreeSpaceCalculation_test() {
-+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 20) == 25, "Calculation of free memory failed");
-+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 50) == 100, "Calculation of free memory failed");
-+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 60) == 150, "Calculation of free memory failed");
-+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(100, 75) == 300, "Calculation of free memory failed");
-+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 20) == 100, "Calculation of free memory failed");
-+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 50) == 400, "Calculation of free memory failed");
-+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 60) == 600, "Calculation of free memory failed");
-+ assert(PSAdaptiveSizePolicy::calculate_free_based_on_live(400, 75) == 1200, "Calculation of free memory failed");
-+}
-+
-+#endif /* !PRODUCT */
---- ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp Wed May 07 19:26:16 2014 -0700
-@@ -238,7 +238,6 @@
- void major_collection_begin();
- void major_collection_end(size_t amount_live, GCCause::Cause gc_cause);
-
-- //
- void tenured_allocation(size_t size) {
- _avg_pretenured->sample(size);
- }
-@@ -246,9 +245,9 @@
- // Accessors
- // NEEDS_CLEANUP should use sizes.hpp
-
-- size_t calculated_old_free_size_in_bytes() const {
-- return (size_t)(_promo_size + avg_promoted()->padded_average());
-- }
-+ static size_t calculate_free_based_on_live(size_t live, uintx ratio_as_percentage);
-+
-+ size_t calculated_old_free_size_in_bytes() const;
-
- size_t average_old_live_in_bytes() const {
- return (size_t) avg_old_live()->average();
---- ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Wed May 07 19:26:16 2014 -0700
-@@ -116,7 +116,7 @@
- assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity");
- GCCause::Cause gc_cause = heap->gc_cause();
-
-- _gc_timer->register_gc_start(os::elapsed_counter());
-+ _gc_timer->register_gc_start();
- _gc_tracer->report_gc_start(gc_cause, _gc_timer->gc_start());
-
- PSAdaptiveSizePolicy* size_policy = heap->size_policy();
-@@ -149,8 +149,7 @@
-
- if (VerifyBeforeGC && heap->total_collections() >= VerifyGCStartAt) {
- HandleMark hm; // Discard invalid handles created during verification
-- gclog_or_tty->print(" VerifyBeforeGC:");
-- Universe::verify();
-+ Universe::verify(" VerifyBeforeGC:");
- }
-
- // Verify object start arrays
-@@ -359,8 +358,7 @@
-
- if (VerifyAfterGC && heap->total_collections() >= VerifyGCStartAt) {
- HandleMark hm; // Discard invalid handles created during verification
-- gclog_or_tty->print(" VerifyAfterGC:");
-- Universe::verify();
-+ Universe::verify(" VerifyAfterGC:");
- }
-
- // Re-verify object start arrays
-@@ -386,7 +384,7 @@
- ParallelTaskTerminator::print_termination_counts();
- #endif
-
-- _gc_timer->register_gc_end(os::elapsed_counter());
-+ _gc_timer->register_gc_end();
-
- _gc_tracer->report_gc_end(_gc_timer->gc_end(), _gc_timer->time_partitions());
-
---- ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2005, 2013, 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
-@@ -1034,8 +1034,7 @@
-
- if (VerifyBeforeGC && heap->total_collections() >= VerifyGCStartAt) {
- HandleMark hm; // Discard invalid handles created during verification
-- gclog_or_tty->print(" VerifyBeforeGC:");
-- Universe::verify();
-+ Universe::verify(" VerifyBeforeGC:");
- }
-
- // Verify object start arrays
-@@ -2041,7 +2040,7 @@
-
- ParallelScavengeHeap* heap = gc_heap();
-
-- _gc_timer.register_gc_start(os::elapsed_counter());
-+ _gc_timer.register_gc_start();
- _gc_tracer.report_gc_start(heap->gc_cause(), _gc_timer.gc_start());
-
- TimeStamp marking_start;
-@@ -2248,8 +2247,7 @@
-
- if (VerifyAfterGC && heap->total_collections() >= VerifyGCStartAt) {
- HandleMark hm; // Discard invalid handles created during verification
-- gclog_or_tty->print(" VerifyAfterGC:");
-- Universe::verify();
-+ Universe::verify(" VerifyAfterGC:");
- }
-
- // Re-verify object start arrays
-@@ -2285,7 +2283,7 @@
- ParallelTaskTerminator::print_termination_counts();
- #endif
-
-- _gc_timer.register_gc_end(os::elapsed_counter());
-+ _gc_timer.register_gc_end();
-
- _gc_tracer.report_dense_prefix(dense_prefix(old_space_id));
- _gc_tracer.report_gc_end(_gc_timer.gc_end(), _gc_timer.time_partitions());
---- ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp Wed May 07 19:26:16 2014 -0700
-@@ -266,7 +266,7 @@
- assert(_preserved_mark_stack.is_empty(), "should be empty");
- assert(_preserved_oop_stack.is_empty(), "should be empty");
-
-- _gc_timer.register_gc_start(os::elapsed_counter());
-+ _gc_timer.register_gc_start();
-
- TimeStamp scavenge_entry;
- TimeStamp scavenge_midpoint;
-@@ -325,8 +325,7 @@
-
- if (VerifyBeforeGC && heap->total_collections() >= VerifyGCStartAt) {
- HandleMark hm; // Discard invalid handles created during verification
-- gclog_or_tty->print(" VerifyBeforeGC:");
-- Universe::verify();
-+ Universe::verify(" VerifyBeforeGC:");
- }
-
- {
-@@ -536,8 +535,19 @@
- counters->update_survivor_overflowed(_survivor_overflow);
- }
-
-+ size_t max_young_size = young_gen->max_size();
-+
-+ // Deciding a free ratio in the young generation is tricky, so if
-+ // MinHeapFreeRatio or MaxHeapFreeRatio are in use (implicating
-+ // that the old generation size may have been limited because of them) we
-+ // should then limit our young generation size using NewRatio to have it
-+ // follow the old generation size.
-+ if (MinHeapFreeRatio != 0 || MaxHeapFreeRatio != 100) {
-+ max_young_size = MIN2(old_gen->capacity_in_bytes() / NewRatio, young_gen->max_size());
-+ }
-+
- size_t survivor_limit =
-- size_policy->max_survivor_size(young_gen->max_size());
-+ size_policy->max_survivor_size(max_young_size);
- _tenuring_threshold =
- size_policy->compute_survivor_space_size_and_threshold(
- _survivor_overflow,
-@@ -560,8 +570,7 @@
- // Do call at minor collections?
- // Don't check if the size_policy is ready at this
- // level. Let the size_policy check that internally.
-- if (UseAdaptiveSizePolicy &&
-- UseAdaptiveGenerationSizePolicyAtMinorCollection &&
-+ if (UseAdaptiveGenerationSizePolicyAtMinorCollection &&
- ((gc_cause != GCCause::_java_lang_system_gc) ||
- UseAdaptiveSizePolicyWithSystemGC)) {
-
-@@ -570,7 +579,7 @@
- young_gen->from_space()->capacity_in_bytes() +
- young_gen->to_space()->capacity_in_bytes(),
- "Sizes of space in young gen are out-of-bounds");
-- size_t max_eden_size = young_gen->max_size() -
-+ size_t max_eden_size = max_young_size -
- young_gen->from_space()->capacity_in_bytes() -
- young_gen->to_space()->capacity_in_bytes();
- size_policy->compute_generation_free_space(young_gen->used_in_bytes(),
-@@ -661,8 +670,7 @@
-
- if (VerifyAfterGC && heap->total_collections() >= VerifyGCStartAt) {
- HandleMark hm; // Discard invalid handles created during verification
-- gclog_or_tty->print(" VerifyAfterGC:");
-- Universe::verify();
-+ Universe::verify(" VerifyAfterGC:");
- }
-
- heap->print_heap_after_gc();
-@@ -689,7 +697,7 @@
- #endif
-
-
-- _gc_timer.register_gc_end(os::elapsed_counter());
-+ _gc_timer.register_gc_end();
-
- _gc_tracer.report_gc_end(_gc_timer.gc_end(), _gc_timer.time_partitions());
-
---- ./hotspot/src/share/vm/gc_implementation/shared/gcTimer.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/shared/gcTimer.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2012, 2013, 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
-@@ -25,52 +25,55 @@
- #include "precompiled.hpp"
- #include "gc_implementation/shared/gcTimer.hpp"
- #include "utilities/growableArray.hpp"
-+#include "utilities/ticks.inline.hpp"
-
--void GCTimer::register_gc_start(jlong time) {
-+// the "time" parameter for most functions
-+// has a default value set by Ticks::now()
-+
-+void GCTimer::register_gc_start(const Ticks& time) {
- _time_partitions.clear();
- _gc_start = time;
- }
-
--void GCTimer::register_gc_end(jlong time) {
-+void GCTimer::register_gc_end(const Ticks& time) {
- assert(!_time_partitions.has_active_phases(),
- "We should have ended all started phases, before ending the GC");
-
- _gc_end = time;
- }
-
--void GCTimer::register_gc_pause_start(const char* name, jlong time) {
-+void GCTimer::register_gc_pause_start(const char* name, const Ticks& time) {
- _time_partitions.report_gc_phase_start(name, time);
- }
-
--void GCTimer::register_gc_pause_end(jlong time) {
-+void GCTimer::register_gc_pause_end(const Ticks& time) {
- _time_partitions.report_gc_phase_end(time);
- }
-
--void GCTimer::register_gc_phase_start(const char* name, jlong time) {
-+void GCTimer::register_gc_phase_start(const char* name, const Ticks& time) {
- _time_partitions.report_gc_phase_start(name, time);
- }
-
--void GCTimer::register_gc_phase_end(jlong time) {
-+void GCTimer::register_gc_phase_end(const Ticks& time) {
- _time_partitions.report_gc_phase_end(time);
- }
-
--
--void STWGCTimer::register_gc_start(jlong time) {
-+void STWGCTimer::register_gc_start(const Ticks& time) {
- GCTimer::register_gc_start(time);
- register_gc_pause_start("GC Pause", time);
- }
-
--void STWGCTimer::register_gc_end(jlong time) {
-+void STWGCTimer::register_gc_end(const Ticks& time) {
- register_gc_pause_end(time);
- GCTimer::register_gc_end(time);
- }
-
--void ConcurrentGCTimer::register_gc_pause_start(const char* name, jlong time) {
-- GCTimer::register_gc_pause_start(name, time);
-+void ConcurrentGCTimer::register_gc_pause_start(const char* name) {
-+ GCTimer::register_gc_pause_start(name);
- }
-
--void ConcurrentGCTimer::register_gc_pause_end(jlong time) {
-- GCTimer::register_gc_pause_end(time);
-+void ConcurrentGCTimer::register_gc_pause_end() {
-+ GCTimer::register_gc_pause_end();
- }
-
- void PhasesStack::clear() {
-@@ -111,11 +114,11 @@
- void TimePartitions::clear() {
- _phases->clear();
- _active_phases.clear();
-- _sum_of_pauses = 0;
-- _longest_pause = 0;
-+ _sum_of_pauses = Tickspan();
-+ _longest_pause = Tickspan();
- }
-
--void TimePartitions::report_gc_phase_start(const char* name, jlong time) {
-+void TimePartitions::report_gc_phase_start(const char* name, const Ticks& time) {
- assert(_phases->length() <= 1000, "Too many recored phases?");
-
- int level = _active_phases.count();
-@@ -133,13 +136,13 @@
- void TimePartitions::update_statistics(GCPhase* phase) {
- // FIXME: This should only be done for pause phases
- if (phase->level() == 0) {
-- jlong pause = phase->end() - phase->start();
-+ const Tickspan pause = phase->end() - phase->start();
- _sum_of_pauses += pause;
- _longest_pause = MAX2(pause, _longest_pause);
- }
- }
-
--void TimePartitions::report_gc_phase_end(jlong time) {
-+void TimePartitions::report_gc_phase_end(const Ticks& time) {
- int phase_index = _active_phases.pop();
- GCPhase* phase = _phases->adr_at(phase_index);
- phase->set_end(time);
-@@ -157,14 +160,6 @@
- return _phases->adr_at(index);
- }
-
--jlong TimePartitions::sum_of_pauses() {
-- return _sum_of_pauses;
--}
--
--jlong TimePartitions::longest_pause() {
-- return _longest_pause;
--}
--
- bool TimePartitions::has_active_phases() {
- return _active_phases.count() > 0;
- }
-@@ -194,7 +189,7 @@
- max_nested_pause_phases();
- }
-
-- static void validate_pause_phase(GCPhase* phase, int level, const char* name, jlong start, jlong end) {
-+ static void validate_pause_phase(GCPhase* phase, int level, const char* name, const Ticks& start, const Ticks& end) {
- assert(phase->level() == level, "Incorrect level");
- assert(strcmp(phase->name(), name) == 0, "Incorrect name");
- assert(phase->start() == start, "Incorrect start");
-@@ -209,8 +204,8 @@
- TimePartitionPhasesIterator iter(&time_partitions);
-
- validate_pause_phase(iter.next(), 0, "PausePhase", 2, 8);
-- assert(time_partitions.sum_of_pauses() == 8-2, "Incorrect");
-- assert(time_partitions.longest_pause() == 8-2, "Incorrect");
-+ assert(time_partitions.sum_of_pauses() == Ticks(8) - Ticks(2), "Incorrect");
-+ assert(time_partitions.longest_pause() == Ticks(8) - Ticks(2), "Incorrect");
-
- assert(!iter.has_next(), "Too many elements");
- }
-@@ -227,8 +222,8 @@
- validate_pause_phase(iter.next(), 0, "PausePhase1", 2, 3);
- validate_pause_phase(iter.next(), 0, "PausePhase2", 4, 6);
-
-- assert(time_partitions.sum_of_pauses() == 3, "Incorrect");
-- assert(time_partitions.longest_pause() == 2, "Incorrect");
-+ assert(time_partitions.sum_of_pauses() == Ticks(3) - Ticks(0), "Incorrect");
-+ assert(time_partitions.longest_pause() == Ticks(2) - Ticks(0), "Incorrect");
-
- assert(!iter.has_next(), "Too many elements");
- }
-@@ -245,8 +240,8 @@
- validate_pause_phase(iter.next(), 0, "PausePhase", 2, 5);
- validate_pause_phase(iter.next(), 1, "SubPhase", 3, 4);
-
-- assert(time_partitions.sum_of_pauses() == 3, "Incorrect");
-- assert(time_partitions.longest_pause() == 3, "Incorrect");
-+ assert(time_partitions.sum_of_pauses() == Ticks(3) - Ticks(0), "Incorrect");
-+ assert(time_partitions.longest_pause() == Ticks(3) - Ticks(0), "Incorrect");
-
- assert(!iter.has_next(), "Too many elements");
- }
-@@ -269,8 +264,8 @@
- validate_pause_phase(iter.next(), 2, "SubPhase2", 4, 7);
- validate_pause_phase(iter.next(), 3, "SubPhase3", 5, 6);
-
-- assert(time_partitions.sum_of_pauses() == 7, "Incorrect");
-- assert(time_partitions.longest_pause() == 7, "Incorrect");
-+ assert(time_partitions.sum_of_pauses() == Ticks(7) - Ticks(0), "Incorrect");
-+ assert(time_partitions.longest_pause() == Ticks(7) - Ticks(0), "Incorrect");
-
- assert(!iter.has_next(), "Too many elements");
- }
-@@ -298,8 +293,8 @@
- validate_pause_phase(iter.next(), 1, "SubPhase3", 7, 8);
- validate_pause_phase(iter.next(), 1, "SubPhase4", 9, 10);
-
-- assert(time_partitions.sum_of_pauses() == 9, "Incorrect");
-- assert(time_partitions.longest_pause() == 9, "Incorrect");
-+ assert(time_partitions.sum_of_pauses() == Ticks(9) - Ticks(0), "Incorrect");
-+ assert(time_partitions.longest_pause() == Ticks(9) - Ticks(0), "Incorrect");
-
- assert(!iter.has_next(), "Too many elements");
- }
-@@ -336,8 +331,8 @@
- validate_pause_phase(iter.next(), 2, "SubPhase22", 12, 13);
- validate_pause_phase(iter.next(), 1, "SubPhase3", 15, 16);
-
-- assert(time_partitions.sum_of_pauses() == 15, "Incorrect");
-- assert(time_partitions.longest_pause() == 15, "Incorrect");
-+ assert(time_partitions.sum_of_pauses() == Ticks(15) - Ticks(0), "Incorrect");
-+ assert(time_partitions.longest_pause() == Ticks(15) - Ticks(0), "Incorrect");
-
- assert(!iter.has_next(), "Too many elements");
- }
---- ./hotspot/src/share/vm/gc_implementation/shared/gcTimer.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/shared/gcTimer.hpp Wed May 07 19:26:16 2014 -0700
-@@ -28,6 +28,7 @@
- #include "memory/allocation.hpp"
- #include "prims/jni_md.h"
- #include "utilities/macros.hpp"
-+#include "utilities/ticks.hpp"
-
- class ConcurrentPhase;
- class GCPhase;
-@@ -45,21 +46,21 @@
- class GCPhase {
- const char* _name;
- int _level;
-- jlong _start;
-- jlong _end;
-+ Ticks _start;
-+ Ticks _end;
-
- public:
- void set_name(const char* name) { _name = name; }
-- const char* name() { return _name; }
-+ const char* name() const { return _name; }
-
-- int level() { return _level; }
-+ int level() const { return _level; }
- void set_level(int level) { _level = level; }
-
-- jlong start() { return _start; }
-- void set_start(jlong time) { _start = time; }
-+ const Ticks start() const { return _start; }
-+ void set_start(const Ticks& time) { _start = time; }
-
-- jlong end() { return _end; }
-- void set_end(jlong time) { _end = time; }
-+ const Ticks end() const { return _end; }
-+ void set_end(const Ticks& time) { _end = time; }
-
- virtual void accept(PhaseVisitor* visitor) = 0;
- };
-@@ -102,22 +103,22 @@
- GrowableArray<PausePhase>* _phases;
- PhasesStack _active_phases;
-
-- jlong _sum_of_pauses;
-- jlong _longest_pause;
-+ Tickspan _sum_of_pauses;
-+ Tickspan _longest_pause;
-
- public:
- TimePartitions();
- ~TimePartitions();
- void clear();
-
-- void report_gc_phase_start(const char* name, jlong time);
-- void report_gc_phase_end(jlong time);
-+ void report_gc_phase_start(const char* name, const Ticks& time);
-+ void report_gc_phase_end(const Ticks& time);
-
- int num_phases() const;
- GCPhase* phase_at(int index) const;
-
-- jlong sum_of_pauses();
-- jlong longest_pause();
-+ const Tickspan sum_of_pauses() const { return _sum_of_pauses; }
-+ const Tickspan longest_pause() const { return _longest_pause; }
-
- bool has_active_phases();
- private:
-@@ -133,40 +134,37 @@
- class GCTimer : public ResourceObj {
- NOT_PRODUCT(friend class GCTimerTest;)
- protected:
-- jlong _gc_start;
-- jlong _gc_end;
-+ Ticks _gc_start;
-+ Ticks _gc_end;
- TimePartitions _time_partitions;
-
- public:
-- virtual void register_gc_start(jlong time);
-- virtual void register_gc_end(jlong time);
-+ virtual void register_gc_start(const Ticks& time = Ticks::now());
-+ virtual void register_gc_end(const Ticks& time = Ticks::now());
-
-- void register_gc_phase_start(const char* name, jlong time);
-- void register_gc_phase_end(jlong time);
-+ void register_gc_phase_start(const char* name, const Ticks& time);
-+ void register_gc_phase_end(const Ticks& time);
-
-- jlong gc_start() { return _gc_start; }
-- jlong gc_end() { return _gc_end; }
-+ const Ticks gc_start() const { return _gc_start; }
-+ const Ticks gc_end() const { return _gc_end; }
-
- TimePartitions* time_partitions() { return &_time_partitions; }
-
-- long longest_pause();
-- long sum_of_pauses();
--
- protected:
-- void register_gc_pause_start(const char* name, jlong time);
-- void register_gc_pause_end(jlong time);
-+ void register_gc_pause_start(const char* name, const Ticks& time = Ticks::now());
-+ void register_gc_pause_end(const Ticks& time = Ticks::now());
- };
-
- class STWGCTimer : public GCTimer {
- public:
-- virtual void register_gc_start(jlong time);
-- virtual void register_gc_end(jlong time);
-+ virtual void register_gc_start(const Ticks& time = Ticks::now());
-+ virtual void register_gc_end(const Ticks& time = Ticks::now());
- };
-
- class ConcurrentGCTimer : public GCTimer {
- public:
-- void register_gc_pause_start(const char* name, jlong time);
-- void register_gc_pause_end(jlong time);
-+ void register_gc_pause_start(const char* name);
-+ void register_gc_pause_end();
- };
-
- class TimePartitionPhasesIterator {
---- ./hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp Wed May 07 19:26:16 2014 -0700
-@@ -33,6 +33,7 @@
- #include "memory/referenceProcessorStats.hpp"
- #include "runtime/os.hpp"
- #include "utilities/globalDefinitions.hpp"
-+#include "utilities/ticks.inline.hpp"
-
- #ifndef SERIALGC
- #include "gc_implementation/g1/evacuationInfo.hpp"
-@@ -46,7 +47,7 @@
- return GCTracer_next_gc_id++;
- }
-
--void GCTracer::report_gc_start_impl(GCCause::Cause cause, jlong timestamp) {
-+void GCTracer::report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp) {
- assert_unset_gc_id();
-
- GCId gc_id = create_new_gc_id();
-@@ -55,7 +56,7 @@
- _shared_gc_info.set_start_timestamp(timestamp);
- }
-
--void GCTracer::report_gc_start(GCCause::Cause cause, jlong timestamp) {
-+void GCTracer::report_gc_start(GCCause::Cause cause, const Ticks& timestamp) {
- assert_unset_gc_id();
-
- report_gc_start_impl(cause, timestamp);
-@@ -65,7 +66,7 @@
- return _shared_gc_info.id() != SharedGCInfo::UNSET_GCID;
- }
-
--void GCTracer::report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions) {
-+void GCTracer::report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions) {
- assert_set_gc_id();
-
- _shared_gc_info.set_sum_of_pauses(time_partitions->sum_of_pauses());
-@@ -76,7 +77,7 @@
- send_garbage_collection_event();
- }
-
--void GCTracer::report_gc_end(jlong timestamp, TimePartitions* time_partitions) {
-+void GCTracer::report_gc_end(const Ticks& timestamp, TimePartitions* time_partitions) {
- assert_set_gc_id();
-
- report_gc_end_impl(timestamp, time_partitions);
-@@ -97,10 +98,10 @@
- const GCId _gc_id;
- const double _size_threshold_percentage;
- const size_t _total_size_in_words;
-- const jlong _timestamp;
-+ const Ticks _timestamp;
-
- public:
-- ObjectCountEventSenderClosure(GCId gc_id, size_t total_size_in_words, jlong timestamp) :
-+ ObjectCountEventSenderClosure(GCId gc_id, size_t total_size_in_words, const Ticks& timestamp) :
- _gc_id(gc_id),
- _size_threshold_percentage(ObjectCountCutOffPercent / 100),
- _total_size_in_words(total_size_in_words),
-@@ -154,8 +155,7 @@
- ObjectCountFilter object_filter(is_alive_cl);
- HeapInspection::populate_table(&cit, false, &object_filter);
-
-- jlong timestamp = os::elapsed_counter();
-- ObjectCountEventSenderClosure event_sender(_shared_gc_info.id(), cit.size_of_instances_in_words(), timestamp);
-+ ObjectCountEventSenderClosure event_sender(_shared_gc_info.id(), cit.size_of_instances_in_words(), Ticks::now());
- cit.iterate(&event_sender);
- }
- }
-@@ -168,7 +168,7 @@
- send_perm_gen_summary_event(when, perm_gen_summary);
- }
-
--void YoungGCTracer::report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions) {
-+void YoungGCTracer::report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions) {
- assert_set_gc_id();
- assert(_tenuring_threshold != UNSET_TENURING_THRESHOLD, "Tenuring threshold has not been reported");
-
-@@ -188,14 +188,14 @@
- _tenuring_threshold = tenuring_threshold;
- }
-
--void OldGCTracer::report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions) {
-+void OldGCTracer::report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions) {
- assert_set_gc_id();
-
- GCTracer::report_gc_end_impl(timestamp, time_partitions);
- send_old_gc_event();
- }
-
--void ParallelOldTracer::report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions) {
-+void ParallelOldTracer::report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions) {
- assert_set_gc_id();
-
- OldGCTracer::report_gc_end_impl(timestamp, time_partitions);
-@@ -221,7 +221,7 @@
- _g1_young_gc_info.set_type(type);
- }
-
--void G1NewTracer::report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions) {
-+void G1NewTracer::report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions) {
- assert_set_gc_id();
-
- YoungGCTracer::report_gc_end_impl(timestamp, time_partitions);
---- ./hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp Wed May 07 19:26:16 2014 -0700
-@@ -34,6 +34,7 @@
- #ifndef SERIALGC
- #include "gc_implementation/g1/g1YCTypes.hpp"
- #endif
-+#include "utilities/ticks.hpp"
-
- typedef uint GCId;
-
-@@ -46,8 +47,6 @@
- class BoolObjectClosure;
-
- class SharedGCInfo VALUE_OBJ_CLASS_SPEC {
-- static const jlong UNSET_TIMESTAMP = -1;
--
- public:
- static const GCId UNSET_GCID = (GCId)-1;
-
-@@ -55,23 +54,30 @@
- GCId _id;
- GCName _name;
- GCCause::Cause _cause;
-- jlong _start_timestamp;
-- jlong _end_timestamp;
-- jlong _sum_of_pauses;
-- jlong _longest_pause;
-+ Ticks _start_timestamp;
-+ Ticks _end_timestamp;
-+ Tickspan _sum_of_pauses;
-+ Tickspan _longest_pause;
-
- public:
-- SharedGCInfo(GCName name) : _id(UNSET_GCID), _name(name), _cause(GCCause::_last_gc_cause),
-- _start_timestamp(UNSET_TIMESTAMP), _end_timestamp(UNSET_TIMESTAMP), _sum_of_pauses(0), _longest_pause(0) {}
-+ SharedGCInfo(GCName name) :
-+ _id(UNSET_GCID),
-+ _name(name),
-+ _cause(GCCause::_last_gc_cause),
-+ _start_timestamp(),
-+ _end_timestamp(),
-+ _sum_of_pauses(),
-+ _longest_pause() {
-+ }
-
- void set_id(GCId id) { _id = id; }
- GCId id() const { return _id; }
-
-- void set_start_timestamp(jlong timestamp) { _start_timestamp = timestamp; }
-- jlong start_timestamp() const { return _start_timestamp; }
-+ void set_start_timestamp(const Ticks& timestamp) { _start_timestamp = timestamp; }
-+ const Ticks start_timestamp() const { return _start_timestamp; }
-
-- void set_end_timestamp(jlong timestamp) { _end_timestamp = timestamp; }
-- jlong end_timestamp() const { return _end_timestamp; }
-+ void set_end_timestamp(const Ticks& timestamp) { _end_timestamp = timestamp; }
-+ const Ticks end_timestamp() const { return _end_timestamp; }
-
- void set_name(GCName name) { _name = name; }
- GCName name() const { return _name; }
-@@ -79,11 +85,11 @@
- void set_cause(GCCause::Cause cause) { _cause = cause; }
- GCCause::Cause cause() const { return _cause; }
-
-- void set_sum_of_pauses(jlong duration) { _sum_of_pauses = duration; }
-- jlong sum_of_pauses() const { return _sum_of_pauses; }
-+ void set_sum_of_pauses(const Tickspan& duration) { _sum_of_pauses = duration; }
-+ const Tickspan sum_of_pauses() const { return _sum_of_pauses; }
-
-- void set_longest_pause(jlong duration) { _longest_pause = duration; }
-- jlong longest_pause() const { return _longest_pause; }
-+ void set_longest_pause(const Tickspan& duration) { _longest_pause = duration; }
-+ const Tickspan longest_pause() const { return _longest_pause; }
- };
-
- class ParallelOldGCInfo VALUE_OBJ_CLASS_SPEC {
-@@ -115,8 +121,8 @@
- SharedGCInfo _shared_gc_info;
-
- public:
-- void report_gc_start(GCCause::Cause cause, jlong timestamp);
-- void report_gc_end(jlong timestamp, TimePartitions* time_partitions);
-+ void report_gc_start(GCCause::Cause cause, const Ticks& timestamp);
-+ void report_gc_end(const Ticks& timestamp, TimePartitions* time_partitions);
- void report_gc_heap_summary(GCWhen::Type when, const GCHeapSummary& heap_summary, const PermGenSummary& perm_gen_summary) const;
- void report_gc_reference_stats(const ReferenceProcessorStats& rp) const;
- void report_object_count_after_gc(BoolObjectClosure* object_filter);
-@@ -125,8 +131,8 @@
-
- protected:
- GCTracer(GCName name) : _shared_gc_info(name) {}
-- virtual void report_gc_start_impl(GCCause::Cause cause, jlong timestamp);
-- virtual void report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions);
-+ virtual void report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp);
-+ virtual void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions);
-
- private:
- void send_garbage_collection_event() const;
-@@ -143,7 +149,7 @@
-
- protected:
- YoungGCTracer(GCName name) : GCTracer(name), _tenuring_threshold(UNSET_TENURING_THRESHOLD) {}
-- virtual void report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions);
-+ virtual void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions);
-
- public:
- void report_promotion_failed(const PromotionFailedInfo& pf_info);
-@@ -157,7 +163,7 @@
- class OldGCTracer : public GCTracer {
- protected:
- OldGCTracer(GCName name) : GCTracer(name) {}
-- virtual void report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions);
-+ virtual void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions);
-
- public:
- void report_concurrent_mode_failure();
-@@ -175,7 +181,7 @@
- void report_dense_prefix(void* dense_prefix);
-
- protected:
-- void report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions);
-+ void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions);
-
- private:
- void send_parallel_old_event() const;
-@@ -209,7 +215,7 @@
- G1NewTracer() : YoungGCTracer(G1New) {}
-
- void report_yc_type(G1YCType type);
-- void report_gc_end_impl(jlong timestamp, TimePartitions* time_partitions);
-+ void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions);
- void report_evacuation_info(EvacuationInfo* info);
- void report_evacuation_failed(EvacuationFailedInfo& ef_info);
-
---- ./hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp Wed May 07 19:26:16 2014 -0700
-@@ -28,8 +28,10 @@
- #include "gc_implementation/shared/gcTrace.hpp"
- #include "gc_implementation/shared/gcWhen.hpp"
- #include "gc_implementation/shared/copyFailedInfo.hpp"
-+#include "runtime/os.hpp"
- #include "trace/traceBackend.hpp"
- #include "trace/tracing.hpp"
-+
- #ifndef SERIALGC
- #include "gc_implementation/g1/evacuationInfo.hpp"
- #include "gc_implementation/g1/g1YCTypes.hpp"
---- ./hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2012, 2013, 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,11 +43,13 @@
- # include "thread_bsd.inline.hpp"
- #endif
-
-+#include "utilities/ticks.inline.hpp"
-+
-
- GCTraceTime::GCTraceTime(const char* title, bool doit, bool print_cr, GCTimer* timer) :
-- _title(title), _doit(doit), _print_cr(print_cr), _timer(timer) {
-+ _title(title), _doit(doit), _print_cr(print_cr), _timer(timer), _start_counter() {
- if (_doit || _timer != NULL) {
-- _start_counter = os::elapsed_counter();
-+ _start_counter.stamp();
- }
-
- if (_timer != NULL) {
-@@ -66,10 +68,10 @@
- }
-
- GCTraceTime::~GCTraceTime() {
-- jlong stop_counter = 0;
-+ Ticks stop_counter;
-
- if (_doit || _timer != NULL) {
-- stop_counter = os::elapsed_counter();
-+ stop_counter.stamp();
- }
-
- if (_timer != NULL) {
-@@ -77,11 +79,12 @@
- }
-
- if (_doit) {
-- double seconds = TimeHelper::counter_to_seconds(stop_counter - _start_counter);
-+ const Tickspan duration = stop_counter - _start_counter;
-+ double duration_in_seconds = TicksToTimeHelper::seconds(duration);
- if (_print_cr) {
-- gclog_or_tty->print_cr(", %3.7f secs]", seconds);
-+ gclog_or_tty->print_cr(", %3.7f secs]", duration_in_seconds);
- } else {
-- gclog_or_tty->print(", %3.7f secs]", seconds);
-+ gclog_or_tty->print(", %3.7f secs]", duration_in_seconds);
- }
- gclog_or_tty->flush();
- }
---- ./hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.hpp Wed May 07 19:26:16 2014 -0700
-@@ -26,6 +26,7 @@
- #define SHARE_VM_GC_IMPLEMENTATION_SHARED_GCTRACETIME_HPP
-
- #include "prims/jni_md.h"
-+#include "utilities/ticks.hpp"
-
- class GCTimer;
-
-@@ -34,7 +35,7 @@
- bool _doit;
- bool _print_cr;
- GCTimer* _timer;
-- jlong _start_counter;
-+ Ticks _start_counter;
-
- public:
- GCTraceTime(const char* title, bool doit, bool print_cr, GCTimer* timer);
---- ./hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.cpp Wed May 07 19:26:16 2014 -0700
-@@ -28,8 +28,10 @@
- #include "memory/heapInspection.hpp"
- #include "trace/tracing.hpp"
- #include "utilities/globalDefinitions.hpp"
-+#include "utilities/ticks.hpp"
-
--void ObjectCountEventSender::send(const KlassInfoEntry* entry, GCId gc_id, jlong timestamp) {
-+void ObjectCountEventSender::send(const KlassInfoEntry* entry, GCId gc_id, const Ticks& timestamp) {
-+#if INCLUDE_TRACE
- assert(Tracing::is_event_enabled(EventObjectCountAfterGC::eventId),
- "Only call this method if the event is enabled");
-
-@@ -40,6 +42,8 @@
- event.set_totalSize(entry->words() * BytesPerWord);
- event.set_endtime(timestamp);
- event.commit();
-+
-+#endif
- }
-
- bool ObjectCountEventSender::should_send_event() {
---- ./hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.hpp Wed May 07 19:26:16 2014 -0700
-@@ -29,10 +29,11 @@
- #include "memory/allocation.hpp"
-
- class KlassInfoEntry;
-+class Ticks;
-
- class ObjectCountEventSender : public AllStatic {
- public:
-- static void send(const KlassInfoEntry* entry, GCId gc_id, jlong timestamp);
-+ static void send(const KlassInfoEntry* entry, GCId gc_id, const Ticks& timestamp);
- static bool should_send_event();
- };
-
---- ./hotspot/src/share/vm/gc_interface/collectedHeap.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_interface/collectedHeap.cpp Wed May 07 19:26:16 2014 -0700
-@@ -121,6 +121,14 @@
- }
- }
-
-+void CollectedHeap::register_nmethod(nmethod* nm) {
-+ assert_locked_or_safepoint(CodeCache_lock);
-+}
-+
-+void CollectedHeap::unregister_nmethod(nmethod* nm) {
-+ assert_locked_or_safepoint(CodeCache_lock);
-+}
-+
- void CollectedHeap::trace_heap(GCWhen::Type when, GCTracer* gc_tracer) {
- const GCHeapSummary& heap_summary = create_heap_summary();
- const PermGenSummary& perm_summary = create_perm_gen_summary();
---- ./hotspot/src/share/vm/gc_interface/collectedHeap.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/gc_interface/collectedHeap.hpp Wed May 07 19:26:16 2014 -0700
-@@ -49,6 +49,7 @@
- class Thread;
- class ThreadClosure;
- class VirtualSpaceSummary;
-+class nmethod;
-
- class GCMessage : public FormatBuffer<1024> {
- public:
-@@ -667,6 +668,11 @@
- void print_heap_before_gc();
- void print_heap_after_gc();
-
-+ // Registering and unregistering an nmethod (compiled code) with the heap.
-+ // Override with specific mechanism for each specialized heap type.
-+ virtual void register_nmethod(nmethod* nm);
-+ virtual void unregister_nmethod(nmethod* nm);
-+
- void trace_heap_before_gc(GCTracer* gc_tracer);
- void trace_heap_after_gc(GCTracer* gc_tracer);
-
---- ./hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/interpreter/interpreterRuntime.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -1222,3 +1222,24 @@
- size_of_arguments * Interpreter::stackElementSize);
- IRT_END
- #endif
-+
-+// This is a support of the JVMTI PopFrame interface.
-+// Make sure it is an invokestatic of a polymorphic intrinsic that has a member_name argument
-+// and return it as a vm_result so that it can be reloaded in the list of invokestatic parameters.
-+// The dmh argument is a reference to a DirectMethoHandle that has a member name field.
-+IRT_ENTRY(void, InterpreterRuntime::member_name_arg_or_null(JavaThread* thread, address dmh,
-+ methodOopDesc* method, address bcp))
-+ Bytecodes::Code code = Bytecodes::code_at(method, bcp);
-+ if (code != Bytecodes::_invokestatic) {
-+ return;
-+ }
-+ constantPoolOopDesc* cpool = method->constants();
-+ int cp_index = Bytes::get_native_u2(bcp + 1) + constantPoolOopDesc::CPCACHE_INDEX_TAG;
-+ Symbol* cname = cpool->klass_name_at(cpool->klass_ref_index_at(cp_index));
-+ Symbol* mname = cpool->name_ref_at(cp_index);
-+
-+ if (MethodHandles::has_member_arg(cname, mname)) {
-+ oop member_name = java_lang_invoke_DirectMethodHandle::member((oop)dmh);
-+ thread->set_vm_result(member_name);
-+ }
-+IRT_END
---- ./hotspot/src/share/vm/interpreter/interpreterRuntime.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/interpreter/interpreterRuntime.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -106,6 +106,7 @@
- static void create_exception(JavaThread* thread, char* name, char* message);
- static void create_klass_exception(JavaThread* thread, char* name, oopDesc* obj);
- static address exception_handler_for_exception(JavaThread* thread, oopDesc* exception);
-+ static void member_name_arg_or_null(JavaThread* thread, address dmh, methodOopDesc* m, address bcp);
- static void throw_pending_exception(JavaThread* thread);
-
- // Statics & fields
---- ./hotspot/src/share/vm/memory/cardTableModRefBS.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/cardTableModRefBS.cpp Wed May 07 19:26:16 2014 -0700
-@@ -400,60 +400,6 @@
- inline_write_ref_field(field, newVal);
- }
-
--/*
-- Claimed and deferred bits are used together in G1 during the evacuation
-- pause. These bits can have the following state transitions:
-- 1. The claimed bit can be put over any other card state. Except that
-- the "dirty -> dirty and claimed" transition is checked for in
-- G1 code and is not used.
-- 2. Deferred bit can be set only if the previous state of the card
-- was either clean or claimed. mark_card_deferred() is wait-free.
-- We do not care if the operation is be successful because if
-- it does not it will only result in duplicate entry in the update
-- buffer because of the "cache-miss". So it's not worth spinning.
-- */
--
--
--bool CardTableModRefBS::claim_card(size_t card_index) {
-- jbyte val = _byte_map[card_index];
-- assert(val != dirty_card_val(), "Shouldn't claim a dirty card");
-- while (val == clean_card_val() ||
-- (val & (clean_card_mask_val() | claimed_card_val())) != claimed_card_val()) {
-- jbyte new_val = val;
-- if (val == clean_card_val()) {
-- new_val = (jbyte)claimed_card_val();
-- } else {
-- new_val = val | (jbyte)claimed_card_val();
-- }
-- jbyte res = Atomic::cmpxchg(new_val, &_byte_map[card_index], val);
-- if (res == val) {
-- return true;
-- }
-- val = res;
-- }
-- return false;
--}
--
--bool CardTableModRefBS::mark_card_deferred(size_t card_index) {
-- jbyte val = _byte_map[card_index];
-- // It's already processed
-- if ((val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val()) {
-- return false;
-- }
-- // Cached bit can be installed either on a clean card or on a claimed card.
-- jbyte new_val = val;
-- if (val == clean_card_val()) {
-- new_val = (jbyte)deferred_card_val();
-- } else {
-- if (val & claimed_card_val()) {
-- new_val = val | (jbyte)deferred_card_val();
-- }
-- }
-- if (new_val != val) {
-- Atomic::cmpxchg(new_val, &_byte_map[card_index], val);
-- }
-- return true;
--}
-
- void CardTableModRefBS::non_clean_card_iterate_possibly_parallel(Space* sp,
- MemRegion mr,
---- ./hotspot/src/share/vm/memory/cardTableModRefBS.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/cardTableModRefBS.hpp Wed May 07 19:26:16 2014 -0700
-@@ -344,34 +344,10 @@
- _byte_map[card_index] = dirty_card_val();
- }
-
-- bool is_card_claimed(size_t card_index) {
-- jbyte val = _byte_map[card_index];
-- return (val & (clean_card_mask_val() | claimed_card_val())) == claimed_card_val();
-- }
--
-- void set_card_claimed(size_t card_index) {
-- jbyte val = _byte_map[card_index];
-- if (val == clean_card_val()) {
-- val = (jbyte)claimed_card_val();
-- } else {
-- val |= (jbyte)claimed_card_val();
-- }
-- _byte_map[card_index] = val;
-- }
--
-- bool claim_card(size_t card_index);
--
- bool is_card_clean(size_t card_index) {
- return _byte_map[card_index] == clean_card_val();
- }
-
-- bool is_card_deferred(size_t card_index) {
-- jbyte val = _byte_map[card_index];
-- return (val & (clean_card_mask_val() | deferred_card_val())) == deferred_card_val();
-- }
--
-- bool mark_card_deferred(size_t card_index);
--
- // Card marking array base (adjusted for heap low boundary)
- // This would be the 0th element of _byte_map, if the heap started at 0x0.
- // But since the heap starts at some higher address, this points to somewhere
---- ./hotspot/src/share/vm/memory/collectorPolicy.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/collectorPolicy.cpp Wed May 07 19:26:16 2014 -0700
-@@ -230,6 +230,8 @@
- alignment = lcm(os::large_page_size(), alignment);
- }
-
-+ assert(alignment >= min_alignment(), "Must be");
-+
- return alignment;
- }
-
---- ./hotspot/src/share/vm/memory/defNewGeneration.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/defNewGeneration.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2001, 2013, 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
-@@ -538,7 +538,7 @@
-
- GenCollectedHeap* gch = GenCollectedHeap::heap();
-
-- _gc_timer->register_gc_start(os::elapsed_counter());
-+ _gc_timer->register_gc_start();
- DefNewTracer gc_tracer;
- gc_tracer.report_gc_start(gch->gc_cause(), _gc_timer->gc_start());
-
-@@ -682,7 +682,7 @@
- gch->trace_heap_after_gc(&gc_tracer);
- gc_tracer.report_tenuring_threshold(tenuring_threshold());
-
-- _gc_timer->register_gc_end(os::elapsed_counter());
-+ _gc_timer->register_gc_end();
-
- gc_tracer.report_gc_end(_gc_timer->gc_end(), _gc_timer->time_partitions());
- }
-@@ -1004,6 +1004,9 @@
- // have to use it here, as well.
- HeapWord* result = eden()->par_allocate(word_size);
- if (result != NULL) {
-+ if (CMSEdenChunksRecordAlways && _next_gen != NULL) {
-+ _next_gen->sample_eden_chunk();
-+ }
- return result;
- }
- do {
-@@ -1034,13 +1037,19 @@
- // circular dependency at compile time.
- if (result == NULL) {
- result = allocate_from_space(word_size);
-+ } else if (CMSEdenChunksRecordAlways && _next_gen != NULL) {
-+ _next_gen->sample_eden_chunk();
- }
- return result;
- }
-
- HeapWord* DefNewGeneration::par_allocate(size_t word_size,
- bool is_tlab) {
-- return eden()->par_allocate(word_size);
-+ HeapWord* res = eden()->par_allocate(word_size);
-+ if (CMSEdenChunksRecordAlways && _next_gen != NULL) {
-+ _next_gen->sample_eden_chunk();
-+ }
-+ return res;
- }
-
- void DefNewGeneration::gc_prologue(bool full) {
---- ./hotspot/src/share/vm/memory/genCollectedHeap.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/genCollectedHeap.cpp Wed May 07 19:26:16 2014 -0700
-@@ -99,17 +99,19 @@
- guarantee(HeapWordSize == wordSize, "HeapWordSize must equal wordSize");
-
- // The heap must be at least as aligned as generations.
-- size_t alignment = Generation::GenGrain;
-+ size_t gen_alignment = Generation::GenGrain;
-
- _gen_specs = gen_policy()->generations();
- PermanentGenerationSpec *perm_gen_spec =
- collector_policy()->permanent_generation();
-
-+ size_t heap_alignment = collector_policy()->max_alignment();
-+
- // Make sure the sizes are all aligned.
- for (i = 0; i < _n_gens; i++) {
-- _gen_specs[i]->align(alignment);
-+ _gen_specs[i]->align(gen_alignment);
- }
-- perm_gen_spec->align(alignment);
-+ perm_gen_spec->align(heap_alignment);
-
- // If we are dumping the heap, then allocate a wasted block of address
- // space in order to push the heap to a lower address. This extra
-@@ -130,9 +132,9 @@
- char* heap_address;
- size_t total_reserved = 0;
- int n_covered_regions = 0;
-- ReservedSpace heap_rs(0);
-+ ReservedSpace heap_rs;
-
-- heap_address = allocate(alignment, perm_gen_spec, &total_reserved,
-+ heap_address = allocate(heap_alignment, perm_gen_spec, &total_reserved,
- &n_covered_regions, &heap_rs);
-
- if (UseSharedSpaces) {
-@@ -142,7 +144,7 @@
- }
- FileMapInfo* mapinfo = FileMapInfo::current_info();
- mapinfo->fail_continue("Unable to reserve shared region.");
-- allocate(alignment, perm_gen_spec, &total_reserved, &n_covered_regions,
-+ allocate(heap_alignment, perm_gen_spec, &total_reserved, &n_covered_regions,
- &heap_rs);
- }
- }
-@@ -207,19 +209,21 @@
- const size_t pageSize = UseLargePages ?
- os::large_page_size() : os::vm_page_size();
-
-+ assert(alignment % pageSize == 0, "Must be");
-+
- for (int i = 0; i < _n_gens; i++) {
- total_reserved = add_and_check_overflow(total_reserved, _gen_specs[i]->max_size());
- n_covered_regions += _gen_specs[i]->n_covered_regions();
- }
-
-- assert(total_reserved % pageSize == 0,
-- err_msg("Gen size; total_reserved=" SIZE_FORMAT ", pageSize="
-- SIZE_FORMAT, total_reserved, pageSize));
-+ assert(total_reserved % alignment == 0,
-+ err_msg("Gen size; total_reserved=" SIZE_FORMAT ", alignment="
-+ SIZE_FORMAT, total_reserved, alignment));
- total_reserved = add_and_check_overflow(total_reserved, perm_gen_spec->max_size());
-- assert(total_reserved % pageSize == 0,
-- err_msg("Perm size; total_reserved=" SIZE_FORMAT ", pageSize="
-+ assert(total_reserved % alignment == 0,
-+ err_msg("Perm size; total_reserved=" SIZE_FORMAT ", alignment="
- SIZE_FORMAT ", perm gen max=" SIZE_FORMAT, total_reserved,
-- pageSize, perm_gen_spec->max_size()));
-+ alignment, perm_gen_spec->max_size()));
-
- n_covered_regions += perm_gen_spec->n_covered_regions();
-
-@@ -229,7 +233,9 @@
- total_reserved = add_and_check_overflow(total_reserved, misc);
-
- if (UseLargePages) {
-+ assert(misc == 0, "CDS does not support Large Pages");
- assert(total_reserved != 0, "total_reserved cannot be 0");
-+ assert(is_size_aligned(total_reserved, os::large_page_size()), "Must be");
- total_reserved = round_up_and_check_overflow(total_reserved, os::large_page_size());
- }
-
-@@ -250,7 +256,7 @@
- } else {
- heap_address = NULL; // any address will do.
- if (UseCompressedOops) {
-- heap_address = Universe::preferred_heap_base(total_reserved, Universe::UnscaledNarrowOop);
-+ heap_address = Universe::preferred_heap_base(total_reserved, alignment, Universe::UnscaledNarrowOop);
- *_total_reserved = total_reserved;
- *_n_covered_regions = n_covered_regions;
- *heap_rs = ReservedHeapSpace(total_reserved, alignment,
-@@ -260,13 +266,13 @@
- // Failed to reserve at specified address - the requested memory
- // region is taken already, for example, by 'java' launcher.
- // Try again to reserver heap higher.
-- heap_address = Universe::preferred_heap_base(total_reserved, Universe::ZeroBasedNarrowOop);
-+ heap_address = Universe::preferred_heap_base(total_reserved, alignment, Universe::ZeroBasedNarrowOop);
- *heap_rs = ReservedHeapSpace(total_reserved, alignment,
- UseLargePages, heap_address);
-
- if (heap_address != NULL && !heap_rs->is_reserved()) {
- // Failed to reserve at specified address again - give up.
-- heap_address = Universe::preferred_heap_base(total_reserved, Universe::HeapBasedNarrowOop);
-+ heap_address = Universe::preferred_heap_base(total_reserved, alignment, Universe::HeapBasedNarrowOop);
- assert(heap_address == NULL, "");
- *heap_rs = ReservedHeapSpace(total_reserved, alignment,
- UseLargePages, heap_address);
-@@ -538,8 +544,7 @@
- prepare_for_verify();
- prepared_for_verification = true;
- }
-- gclog_or_tty->print(" VerifyBeforeGC:");
-- Universe::verify();
-+ Universe::verify(" VerifyBeforeGC:");
- }
- COMPILER2_PRESENT(DerivedPointerTable::clear());
-
-@@ -610,8 +615,7 @@
- if (VerifyAfterGC && i >= VerifyGCLevel &&
- total_collections() >= VerifyGCStartAt) {
- HandleMark hm; // Discard invalid handles created during verification
-- gclog_or_tty->print(" VerifyAfterGC:");
-- Universe::verify();
-+ Universe::verify(" VerifyAfterGC:");
- }
-
- if (PrintGCDetails) {
-@@ -932,12 +936,13 @@
- // Returns "TRUE" iff "p" points into the committed areas of the heap.
- bool GenCollectedHeap::is_in(const void* p) const {
- #ifndef ASSERT
-- guarantee(VerifyBeforeGC ||
-- VerifyDuringGC ||
-- VerifyBeforeExit ||
-- PrintAssembly ||
-- tty->count() != 0 || // already printing
-- VerifyAfterGC ||
-+ guarantee(VerifyBeforeGC ||
-+ VerifyDuringGC ||
-+ VerifyBeforeExit ||
-+ VerifyDuringStartup ||
-+ PrintAssembly ||
-+ tty->count() != 0 || // already printing
-+ VerifyAfterGC ||
- VMError::fatal_error_in_progress(), "too expensive");
-
- #endif
---- ./hotspot/src/share/vm/memory/generation.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/generation.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -476,16 +476,16 @@
- x(ref_processor(), gch->reserved_region());
-
- STWGCTimer* gc_timer = GenMarkSweep::gc_timer();
-- gc_timer->register_gc_start(os::elapsed_counter());
-+ gc_timer->register_gc_start();
-
- SerialOldTracer* gc_tracer = GenMarkSweep::gc_tracer();
- gc_tracer->report_gc_start(gch->gc_cause(), gc_timer->gc_start());
-
- GenMarkSweep::invoke_at_safepoint(_level, ref_processor(), clear_all_soft_refs);
-
-- gc_timer->register_gc_end(os::elapsed_counter());
-+ gc_timer->register_gc_end();
-
-- gc_tracer->report_gc_end(os::elapsed_counter(), gc_timer->time_partitions());
-+ gc_tracer->report_gc_end(gc_timer->gc_end(), gc_timer->time_partitions());
-
- SpecializationStats::print();
- }
---- ./hotspot/src/share/vm/memory/generation.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/generation.hpp Wed May 07 19:26:16 2014 -0700
-@@ -457,6 +457,7 @@
- // expected to be GC worker thread-local, with the worker index
- // indicated by "thr_num".
- virtual void* get_data_recorder(int thr_num) { return NULL; }
-+ virtual void sample_eden_chunk() {}
-
- // Some generations may require some cleanup actions before allowing
- // a verification.
---- ./hotspot/src/share/vm/memory/iterator.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/iterator.cpp Wed May 07 19:26:16 2014 -0700
-@@ -70,7 +70,7 @@
- }
-
- void CodeBlobToOopClosure::do_newly_marked_nmethod(nmethod* nm) {
-- nm->oops_do(_cl, /*do_strong_roots_only=*/ true);
-+ nm->oops_do(_cl, /*do_strong_roots_only=*/ true, /*allow_zombie=*/ false);
- }
-
- void CodeBlobToOopClosure::do_code_blob(CodeBlob* cb) {
---- ./hotspot/src/share/vm/memory/sharedHeap.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/sharedHeap.cpp Wed May 07 19:26:16 2014 -0700
-@@ -64,7 +64,8 @@
- }
- _sh = this; // ch is static, should be set only once.
- if ((UseParNewGC ||
-- (UseConcMarkSweepGC && CMSParallelRemarkEnabled) ||
-+ (UseConcMarkSweepGC && (CMSParallelInitialMarkEnabled ||
-+ CMSParallelRemarkEnabled)) ||
- UseG1GC) &&
- ParallelGCThreads > 0) {
- _workers = new FlexibleWorkGang("Parallel GC Threads", ParallelGCThreads,
-@@ -148,7 +149,8 @@
- ScanningOption so,
- OopClosure* roots,
- CodeBlobClosure* code_roots,
-- OopsInGenClosure* perm_blk) {
-+ OopsInGenClosure* perm_blk,
-+ bool manages_code_roots) {
- StrongRootsScope srs(this, activate_scope);
- // General strong roots.
- assert(_strong_roots_parity != 0, "must have called prologue code");
-@@ -216,7 +218,7 @@
- CodeCache::blobs_do(code_roots);
- }
- } else if (so & (SO_SystemClasses|SO_AllClasses)) {
-- if (!collecting_perm_gen) {
-+ if (!manages_code_roots && !collecting_perm_gen) {
- // If we are collecting from class statics, but we are not going to
- // visit all of the CodeCache, collect from the non-perm roots if any.
- // This makes the code cache function temporarily as a source of strong
---- ./hotspot/src/share/vm/memory/sharedHeap.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/sharedHeap.hpp Wed May 07 19:26:16 2014 -0700
-@@ -267,7 +267,8 @@
- ScanningOption so,
- OopClosure* roots,
- CodeBlobClosure* code_roots,
-- OopsInGenClosure* perm_blk);
-+ OopsInGenClosure* perm_blk,
-+ bool manages_code_roots = false);
-
- // Apply "blk" to all the weak roots of the system. These include
- // JNI weak roots, the code cache, system dictionary, symbol table,
---- ./hotspot/src/share/vm/memory/universe.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/universe.cpp Wed May 07 19:26:16 2014 -0700
-@@ -826,17 +826,23 @@
- // 32Gb
- // OopEncodingHeapMax == NarrowOopHeapMax << LogMinObjAlignmentInBytes;
-
--char* Universe::preferred_heap_base(size_t heap_size, NARROW_OOP_MODE mode) {
-+char* Universe::preferred_heap_base(size_t heap_size, size_t alignment, NARROW_OOP_MODE mode) {
-+ assert(is_size_aligned((size_t)OopEncodingHeapMax, alignment), "Must be");
-+ assert(is_size_aligned((size_t)NarrowOopHeapMax, alignment), "Must be");
-+ assert(is_size_aligned(heap_size, alignment), "Must be");
-+
-+ uintx heap_base_min_address_aligned = align_size_up(HeapBaseMinAddress, alignment);
-+
- size_t base = 0;
- #ifdef _LP64
- if (UseCompressedOops) {
- assert(mode == UnscaledNarrowOop ||
- mode == ZeroBasedNarrowOop ||
- mode == HeapBasedNarrowOop, "mode is invalid");
-- const size_t total_size = heap_size + HeapBaseMinAddress;
-+ const size_t total_size = heap_size + heap_base_min_address_aligned;
- // Return specified base for the first request.
- if (!FLAG_IS_DEFAULT(HeapBaseMinAddress) && (mode == UnscaledNarrowOop)) {
-- base = HeapBaseMinAddress;
-+ base = heap_base_min_address_aligned;
- } else if (total_size <= OopEncodingHeapMax && (mode != HeapBasedNarrowOop)) {
- if (total_size <= NarrowOopHeapMax && (mode == UnscaledNarrowOop) &&
- (Universe::narrow_oop_shift() == 0)) {
-@@ -882,6 +888,8 @@
- }
- }
- #endif
-+
-+ assert(is_ptr_aligned((char*)base, alignment), "Must be");
- return (char*)base; // also return NULL (don't care) for 32-bit VM
- }
-
-@@ -1366,7 +1374,7 @@
- st->print_cr("}");
- }
-
--void Universe::verify(bool silent, VerifyOption option) {
-+void Universe::verify(VerifyOption option, const char* prefix, bool silent) {
- if (SharedSkipVerify) {
- return;
- }
-@@ -1387,11 +1395,12 @@
- HandleMark hm; // Handles created during verification can be zapped
- _verify_count++;
-
-+ if (!silent) gclog_or_tty->print(prefix);
- if (!silent) gclog_or_tty->print("[Verifying ");
- if (!silent) gclog_or_tty->print("threads ");
- Threads::verify();
-+ if (!silent) gclog_or_tty->print("heap ");
- heap()->verify(silent, option);
--
- if (!silent) gclog_or_tty->print("syms ");
- SymbolTable::verify();
- if (!silent) gclog_or_tty->print("strs ");
---- ./hotspot/src/share/vm/memory/universe.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/memory/universe.hpp Wed May 07 19:26:16 2014 -0700
-@@ -380,7 +380,7 @@
-
- static NARROW_OOP_MODE narrow_oop_mode();
-
-- static char* preferred_heap_base(size_t heap_size, NARROW_OOP_MODE mode);
-+ static char* preferred_heap_base(size_t heap_size, size_t alignment, NARROW_OOP_MODE mode);
-
- // Historic gc information
- static size_t get_heap_capacity_at_last_gc() { return _heap_capacity_at_last_gc; }
-@@ -419,12 +419,12 @@
-
- // Debugging
- static bool verify_in_progress() { return _verify_in_progress; }
-- static void verify(bool silent, VerifyOption option);
-- static void verify(bool silent) {
-- verify(silent, VerifyOption_Default /* option */);
-+ static void verify(VerifyOption option, const char* prefix, bool silent = VerifySilently);
-+ static void verify(const char* prefix, bool silent = VerifySilently) {
-+ verify(VerifyOption_Default, prefix, silent);
- }
-- static void verify() {
-- verify(false /* silent */);
-+ static void verify(bool silent = VerifySilently) {
-+ verify("", silent);
- }
-
- static int verify_count() { return _verify_count; }
---- ./hotspot/src/share/vm/oops/constantPoolOop.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/oops/constantPoolOop.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -1026,24 +1026,13 @@
-
- case JVM_CONSTANT_InvokeDynamic:
- {
-- int k1 = invoke_dynamic_bootstrap_method_ref_index_at(index1);
-- int k2 = cp2->invoke_dynamic_bootstrap_method_ref_index_at(index2);
-- bool match = compare_entry_to(k1, cp2, k2, CHECK_false);
-- if (!match) return false;
-- k1 = invoke_dynamic_name_and_type_ref_index_at(index1);
-- k2 = cp2->invoke_dynamic_name_and_type_ref_index_at(index2);
-- match = compare_entry_to(k1, cp2, k2, CHECK_false);
-- if (!match) return false;
-- int argc = invoke_dynamic_argument_count_at(index1);
-- if (argc == cp2->invoke_dynamic_argument_count_at(index2)) {
-- for (int j = 0; j < argc; j++) {
-- k1 = invoke_dynamic_argument_index_at(index1, j);
-- k2 = cp2->invoke_dynamic_argument_index_at(index2, j);
-- match = compare_entry_to(k1, cp2, k2, CHECK_false);
-- if (!match) return false;
-- }
-- return true; // got through loop; all elements equal
-- }
-+ int k1 = invoke_dynamic_name_and_type_ref_index_at(index1);
-+ int k2 = cp2->invoke_dynamic_name_and_type_ref_index_at(index2);
-+ int i1 = invoke_dynamic_bootstrap_specifier_index(index1);
-+ int i2 = cp2->invoke_dynamic_bootstrap_specifier_index(index2);
-+ bool match = compare_entry_to(k1, cp2, k2, CHECK_false) &&
-+ compare_operand_to(i1, cp2, i2, CHECK_false);
-+ return match;
- } break;
-
- case JVM_CONSTANT_UnresolvedString:
-@@ -1078,12 +1067,135 @@
- } // end compare_entry_to()
-
-
-+// Resize the operands array with delta_len and delta_size.
-+// Used in RedefineClasses for CP merge.
-+void constantPoolOopDesc::resize_operands(int delta_len, int delta_size, TRAPS) {
-+ int old_len = operand_array_length(operands());
-+ int new_len = old_len + delta_len;
-+ int min_len = (delta_len > 0) ? old_len : new_len;
-+
-+ int old_size = operands()->length();
-+ int new_size = old_size + delta_size;
-+ int min_size = (delta_size > 0) ? old_size : new_size;
-+
-+ typeArrayHandle new_ops = oopFactory::new_permanent_intArray(new_size, CHECK);
-+
-+ // Set index in the resized array for existing elements only
-+ for (int idx = 0; idx < min_len; idx++) {
-+ int offset = operand_offset_at(idx); // offset in original array
-+ operand_offset_at_put(new_ops(), idx, offset + 2*delta_len); // offset in resized array
-+ }
-+ // Copy the bootstrap specifiers only
-+ Copy::conjoint_memory_atomic(operands()->short_at_addr(2*old_len),
-+ new_ops->short_at_addr(2*new_len),
-+ (min_size - 2*min_len) * sizeof(u2));
-+ // Explicit deallocation of old operands array is not needed for 7u
-+ set_operands(new_ops());
-+} // end resize_operands()
-+
-+
-+// Extend the operands array with the length and size of the ext_cp operands.
-+// Used in RedefineClasses for CP merge.
-+void constantPoolOopDesc::extend_operands(constantPoolHandle ext_cp, TRAPS) {
-+ int delta_len = operand_array_length(ext_cp->operands());
-+ if (delta_len == 0) {
-+ return; // nothing to do
-+ }
-+ int delta_size = ext_cp->operands()->length();
-+
-+ assert(delta_len > 0 && delta_size > 0, "extended operands array must be bigger");
-+
-+ if (operand_array_length(operands()) == 0) {
-+ typeArrayHandle new_ops = oopFactory::new_permanent_intArray(delta_size, CHECK);
-+ // The first element index defines the offset of second part
-+ operand_offset_at_put(new_ops(), 0, 2*delta_len); // offset in new array
-+ set_operands(new_ops());
-+ } else {
-+ resize_operands(delta_len, delta_size, CHECK);
-+ }
-+
-+} // end extend_operands()
-+
-+
-+// Shrink the operands array to a smaller array with new_len length.
-+// Used in RedefineClasses for CP merge.
-+void constantPoolOopDesc::shrink_operands(int new_len, TRAPS) {
-+ int old_len = operand_array_length(operands());
-+ if (new_len == old_len) {
-+ return; // nothing to do
-+ }
-+ assert(new_len < old_len, "shrunken operands array must be smaller");
-+
-+ int free_base = operand_next_offset_at(new_len - 1);
-+ int delta_len = new_len - old_len;
-+ int delta_size = 2*delta_len + free_base - operands()->length();
-+
-+ resize_operands(delta_len, delta_size, CHECK);
-+
-+} // end shrink_operands()
-+
-+
-+void constantPoolOopDesc::copy_operands(constantPoolHandle from_cp,
-+ constantPoolHandle to_cp,
-+ TRAPS) {
-+
-+ int from_oplen = operand_array_length(from_cp->operands());
-+ int old_oplen = operand_array_length(to_cp->operands());
-+ if (from_oplen != 0) {
-+ // append my operands to the target's operands array
-+ if (old_oplen == 0) {
-+ to_cp->set_operands(from_cp->operands()); // reuse; do not merge
-+ } else {
-+ int old_len = to_cp->operands()->length();
-+ int from_len = from_cp->operands()->length();
-+ int old_off = old_oplen * sizeof(u2);
-+ int from_off = from_oplen * sizeof(u2);
-+ typeArrayHandle new_operands = oopFactory::new_permanent_intArray(old_len + from_len, CHECK);
-+ int fillp = 0, len = 0;
-+ // first part of dest
-+ Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(0),
-+ new_operands->short_at_addr(fillp),
-+ (len = old_off) * sizeof(u2));
-+ fillp += len;
-+ // first part of src
-+ Copy::conjoint_memory_atomic(from_cp->operands()->short_at_addr(0),
-+ new_operands->short_at_addr(fillp),
-+ (len = from_off) * sizeof(u2));
-+ fillp += len;
-+ // second part of dest
-+ Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(old_off),
-+ new_operands->short_at_addr(fillp),
-+ (len = old_len - old_off) * sizeof(u2));
-+ fillp += len;
-+ // second part of src
-+ Copy::conjoint_memory_atomic(from_cp->operands()->short_at_addr(from_off),
-+ new_operands->short_at_addr(fillp),
-+ (len = from_len - from_off) * sizeof(u2));
-+ fillp += len;
-+ assert(fillp == new_operands->length(), "");
-+
-+ // Adjust indexes in the first part of the copied operands array.
-+ for (int j = 0; j < from_oplen; j++) {
-+ int offset = operand_offset_at(new_operands(), old_oplen + j);
-+ assert(offset == operand_offset_at(from_cp->operands(), j), "correct copy");
-+ offset += old_len; // every new tuple is preceded by old_len extra u2's
-+ operand_offset_at_put(new_operands(), old_oplen + j, offset);
-+ }
-+
-+ // replace target operands array with combined array
-+ to_cp->set_operands(new_operands());
-+ }
-+ }
-+} // end copy_operands()
-+
-+
- // Copy this constant pool's entries at start_i to end_i (inclusive)
- // to the constant pool to_cp's entries starting at to_i. A total of
- // (end_i - start_i) + 1 entries are copied.
- void constantPoolOopDesc::copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i,
- constantPoolHandle to_cp, int to_i, TRAPS) {
-
-+
- int dest_i = to_i; // leave original alone for debug purposes
-
- for (int src_i = start_i; src_i <= end_i; /* see loop bottom */ ) {
-@@ -1104,56 +1216,9 @@
- break;
- }
- }
-+ copy_operands(from_cp, to_cp, CHECK);
-
-- int from_oplen = operand_array_length(from_cp->operands());
-- int old_oplen = operand_array_length(to_cp->operands());
-- if (from_oplen != 0) {
-- // append my operands to the target's operands array
-- if (old_oplen == 0) {
-- to_cp->set_operands(from_cp->operands()); // reuse; do not merge
-- } else {
-- int old_len = to_cp->operands()->length();
-- int from_len = from_cp->operands()->length();
-- int old_off = old_oplen * sizeof(u2);
-- int from_off = from_oplen * sizeof(u2);
-- typeArrayHandle new_operands = oopFactory::new_permanent_shortArray(old_len + from_len, CHECK);
-- int fillp = 0, len = 0;
-- // first part of dest
-- Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(0),
-- new_operands->short_at_addr(fillp),
-- (len = old_off) * sizeof(u2));
-- fillp += len;
-- // first part of src
-- Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(0),
-- new_operands->short_at_addr(fillp),
-- (len = from_off) * sizeof(u2));
-- fillp += len;
-- // second part of dest
-- Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(old_off),
-- new_operands->short_at_addr(fillp),
-- (len = old_len - old_off) * sizeof(u2));
-- fillp += len;
-- // second part of src
-- Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(from_off),
-- new_operands->short_at_addr(fillp),
-- (len = from_len - from_off) * sizeof(u2));
-- fillp += len;
-- assert(fillp == new_operands->length(), "");
--
-- // Adjust indexes in the first part of the copied operands array.
-- for (int j = 0; j < from_oplen; j++) {
-- int offset = operand_offset_at(new_operands(), old_oplen + j);
-- assert(offset == operand_offset_at(from_cp->operands(), j), "correct copy");
-- offset += old_len; // every new tuple is preceded by old_len extra u2's
-- operand_offset_at_put(new_operands(), old_oplen + j, offset);
-- }
--
-- // replace target operands array with combined array
-- to_cp->set_operands(new_operands());
-- }
-- }
--
--} // end copy_cp_to()
-+} // end copy_cp_to_impl()
-
-
- // Copy this constant pool's entry at from_i to the constant pool
-@@ -1337,6 +1402,46 @@
- } // end find_matching_entry()
-
-
-+// Compare this constant pool's bootstrap specifier at idx1 to the constant pool
-+// cp2's bootstrap specifier at idx2.
-+bool constantPoolOopDesc::compare_operand_to(int idx1, constantPoolHandle cp2, int idx2, TRAPS) {
-+ int k1 = operand_bootstrap_method_ref_index_at(idx1);
-+ int k2 = cp2->operand_bootstrap_method_ref_index_at(idx2);
-+ bool match = compare_entry_to(k1, cp2, k2, CHECK_false);
-+
-+ if (!match) {
-+ return false;
-+ }
-+ int argc = operand_argument_count_at(idx1);
-+ if (argc == cp2->operand_argument_count_at(idx2)) {
-+ for (int j = 0; j < argc; j++) {
-+ k1 = operand_argument_index_at(idx1, j);
-+ k2 = cp2->operand_argument_index_at(idx2, j);
-+ match = compare_entry_to(k1, cp2, k2, CHECK_false);
-+ if (!match) {
-+ return false;
-+ }
-+ }
-+ return true; // got through loop; all elements equal
-+ }
-+ return false;
-+} // end compare_operand_to()
-+
-+// Search constant pool search_cp for a bootstrap specifier that matches
-+// this constant pool's bootstrap specifier at pattern_i index.
-+// Return the index of a matching bootstrap specifier or (-1) if there is no match.
-+int constantPoolOopDesc::find_matching_operand(int pattern_i,
-+ constantPoolHandle search_cp, int search_len, TRAPS) {
-+ for (int i = 0; i < search_len; i++) {
-+ bool found = compare_operand_to(pattern_i, search_cp, i, CHECK_(-1));
-+ if (found) {
-+ return i;
-+ }
-+ }
-+ return -1; // bootstrap specifier not found; return unused index (-1)
-+} // end find_matching_operand()
-+
-+
- #ifndef PRODUCT
-
- const char* constantPoolOopDesc::printable_name_at(int which) {
---- ./hotspot/src/share/vm/oops/constantPoolOop.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/oops/constantPoolOop.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -565,6 +565,47 @@
- _indy_argc_offset = 1, // u2 argc
- _indy_argv_offset = 2 // u2 argv[argc]
- };
-+
-+ // These functions are used in RedefineClasses for CP merge
-+
-+ int operand_offset_at(int bootstrap_specifier_index) {
-+ assert(0 <= bootstrap_specifier_index &&
-+ bootstrap_specifier_index < operand_array_length(operands()),
-+ "Corrupted CP operands");
-+ return operand_offset_at(operands(), bootstrap_specifier_index);
-+ }
-+ int operand_bootstrap_method_ref_index_at(int bootstrap_specifier_index) {
-+ int offset = operand_offset_at(bootstrap_specifier_index);
-+ return operands()->short_at(offset + _indy_bsm_offset);
-+ }
-+ int operand_argument_count_at(int bootstrap_specifier_index) {
-+ int offset = operand_offset_at(bootstrap_specifier_index);
-+ int argc = operands()->short_at(offset + _indy_argc_offset);
-+ return argc;
-+ }
-+ int operand_argument_index_at(int bootstrap_specifier_index, int j) {
-+ int offset = operand_offset_at(bootstrap_specifier_index);
-+ return operands()->short_at(offset + _indy_argv_offset + j);
-+ }
-+ int operand_next_offset_at(int bootstrap_specifier_index) {
-+ int offset = operand_offset_at(bootstrap_specifier_index) + _indy_argv_offset
-+ + operand_argument_count_at(bootstrap_specifier_index);
-+ return offset;
-+ }
-+ // Compare a bootsrap specifier in the operands arrays
-+ bool compare_operand_to(int bootstrap_specifier_index1, constantPoolHandle cp2,
-+ int bootstrap_specifier_index2, TRAPS);
-+ // Find a bootsrap specifier in the operands array
-+ int find_matching_operand(int bootstrap_specifier_index, constantPoolHandle search_cp,
-+ int operands_cur_len, TRAPS);
-+ // Resize the operands array with delta_len and delta_size
-+ void resize_operands(int delta_len, int delta_size, TRAPS);
-+ // Extend the operands array with the length and size of the ext_cp operands
-+ void extend_operands(constantPoolHandle ext_cp, TRAPS);
-+ // Shrink the operands array to a smaller array with new_len length
-+ void shrink_operands(int new_len, TRAPS);
-+
-+
- int invoke_dynamic_bootstrap_method_ref_index_at(int which) {
- assert(tag_at(which).is_invoke_dynamic(), "Corrupted constant pool");
- int op_base = invoke_dynamic_operand_base(which);
-@@ -755,6 +796,7 @@
- copy_cp_to_impl(h_this, start_i, end_i, to_cp, to_i, THREAD);
- }
- static void copy_cp_to_impl(constantPoolHandle from_cp, int start_i, int end_i, constantPoolHandle to_cp, int to_i, TRAPS);
-+ static void copy_operands(constantPoolHandle from_cp, constantPoolHandle to_cp, TRAPS);
- static void copy_entry_to(constantPoolHandle from_cp, int from_i, constantPoolHandle to_cp, int to_i, TRAPS);
- int find_matching_entry(int pattern_i, constantPoolHandle search_cp, TRAPS);
- int orig_length() const { return _orig_length; }
---- ./hotspot/src/share/vm/oops/instanceKlass.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/oops/instanceKlass.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -1901,6 +1901,17 @@
- FreeHeap(jmeths);
- }
-
-+ // Deallocate MemberNameTable
-+ {
-+ Mutex* lock_or_null = SafepointSynchronize::is_at_safepoint() ? NULL : MemberNameTable_lock;
-+ MutexLockerEx ml(lock_or_null, Mutex::_no_safepoint_check_flag);
-+ MemberNameTable* mnt = member_names();
-+ if (mnt != NULL) {
-+ delete mnt;
-+ set_member_names(NULL);
-+ }
-+ }
-+
- int* indices = methods_cached_itable_indices_acquire();
- if (indices != (int*)NULL) {
- release_set_methods_cached_itable_indices(NULL);
-@@ -2333,6 +2344,30 @@
- return NULL;
- }
-
-+void instanceKlass::add_member_name(int index, Handle mem_name) {
-+ jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
-+ MutexLocker ml(MemberNameTable_lock);
-+ assert(0 <= index && index < idnum_allocated_count(), "index is out of bounds");
-+ DEBUG_ONLY(No_Safepoint_Verifier nsv);
-+
-+ if (_member_names == NULL) {
-+ _member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable(idnum_allocated_count());
-+ }
-+ _member_names->add_member_name(index, mem_name_wref);
-+}
-+
-+oop instanceKlass::get_member_name(int index) {
-+ MutexLocker ml(MemberNameTable_lock);
-+ assert(0 <= index && index < idnum_allocated_count(), "index is out of bounds");
-+ DEBUG_ONLY(No_Safepoint_Verifier nsv);
-+
-+ if (_member_names == NULL) {
-+ return NULL;
-+ }
-+ oop mem_name =_member_names->get_member_name(index);
-+ return mem_name;
-+}
-+
- // -----------------------------------------------------------------------------------------------------
- #ifndef PRODUCT
-
---- ./hotspot/src/share/vm/oops/instanceKlass.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/oops/instanceKlass.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -94,6 +94,7 @@
- class nmethodBucket;
- class PreviousVersionNode;
- class JvmtiCachedClassFieldMap;
-+class MemberNameTable;
-
- // This is used in iterators below.
- class FieldClosure: public StackObj {
-@@ -265,6 +266,7 @@
- int _vtable_len; // length of Java vtable (in words)
- int _itable_len; // length of Java itable (in words)
- OopMapCache* volatile _oop_map_cache; // OopMapCache for all methods in the klass (allocated lazily)
-+ MemberNameTable* _member_names; // Member names
- JNIid* _jni_ids; // First JNI identifier for static fields in this class
- jmethodID* _methods_jmethod_ids; // jmethodIDs corresponding to method_idnum, or NULL if none
- int* _methods_cached_itable_indices; // itable_index cache for JNI invoke corresponding to methods idnum, or NULL
-@@ -972,6 +974,12 @@
- // jvm support
- jint compute_modifier_flags(TRAPS) const;
-
-+ // JSR-292 support
-+ MemberNameTable* member_names() { return _member_names; }
-+ void set_member_names(MemberNameTable* member_names) { _member_names = member_names; }
-+ void add_member_name(int index, Handle member_name);
-+ oop get_member_name(int index);
-+
- public:
- // JVMTI support
- jint jvmti_class_status() const;
---- ./hotspot/src/share/vm/opto/bytecodeInfo.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/bytecodeInfo.cpp Wed May 07 19:26:16 2014 -0700
-@@ -103,7 +103,7 @@
- // Allows targeted inlining
- if(callee_method->should_inline()) {
- *wci_result = *(WarmCallInfo::always_hot());
-- if (PrintInlining && Verbose) {
-+ if (C->print_inlining() && Verbose) {
- CompileTask::print_inline_indent(inline_level());
- tty->print_cr("Inlined method is hot: ");
- }
-@@ -117,7 +117,7 @@
- if(callee_method->interpreter_throwout_count() > InlineThrowCount &&
- size < InlineThrowMaxSize ) {
- wci_result->set_profit(wci_result->profit() * 100);
-- if (PrintInlining && Verbose) {
-+ if (C->print_inlining() && Verbose) {
- CompileTask::print_inline_indent(inline_level());
- tty->print_cr("Inlined method with many throws (throws=%d):", callee_method->interpreter_throwout_count());
- }
-@@ -468,7 +468,7 @@
- C->log()->inline_fail(inline_msg);
- }
- }
-- if (PrintInlining) {
-+ if (C->print_inlining()) {
- C->print_inlining(callee_method, inline_level(), caller_bci, inline_msg);
- if (callee_method == NULL) tty->print(" callee not monotonic or profiled");
- if (Verbose && callee_method) {
-@@ -517,7 +517,7 @@
-
- #ifndef PRODUCT
- if (UseOldInlining && InlineWarmCalls
-- && (PrintOpto || PrintOptoInlining || PrintInlining)) {
-+ && (PrintOpto || C->print_inlining())) {
- bool cold = wci.is_cold();
- bool hot = !cold && wci.is_hot();
- bool old_cold = !success;
-@@ -594,7 +594,7 @@
- callee_method->is_compiled_lambda_form()) {
- max_inline_level_adjust += 1; // don't count method handle calls from java.lang.invoke implem
- }
-- if (max_inline_level_adjust != 0 && PrintInlining && (Verbose || WizardMode)) {
-+ if (max_inline_level_adjust != 0 && C->print_inlining() && (Verbose || WizardMode)) {
- CompileTask::print_inline_indent(inline_level());
- tty->print_cr(" \\-> discounting inline depth");
- }
---- ./hotspot/src/share/vm/opto/c2_globals.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/c2_globals.hpp Wed May 07 19:26:16 2014 -0700
-@@ -173,6 +173,9 @@
- product_pd(intx, LoopUnrollLimit, \
- "Unroll loop bodies with node count less than this") \
- \
-+ product(intx, LoopMaxUnroll, 16, \
-+ "Maximum number of unrolls for main loop") \
-+ \
- product(intx, LoopUnrollMin, 4, \
- "Minimum number of unroll loop bodies before checking progress" \
- "of rounds of unroll,optimize,..") \
---- ./hotspot/src/share/vm/opto/callGenerator.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/callGenerator.hpp Wed May 07 19:26:16 2014 -0700
-@@ -158,8 +158,9 @@
- virtual void print_inlining_late(const char* msg) { ShouldNotReachHere(); }
-
- static void print_inlining(Compile* C, ciMethod* callee, int inline_level, int bci, const char* msg) {
-- if (PrintInlining)
-+ if (C->print_inlining()) {
- C->print_inlining(callee, inline_level, bci, msg);
-+ }
- }
- };
-
---- ./hotspot/src/share/vm/opto/coalesce.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/coalesce.cpp Wed May 07 19:26:16 2014 -0700
-@@ -135,20 +135,26 @@
- // After cloning some rematerialized instruction, clone any MachProj's that
- // follow it. Example: Intel zero is XOR, kills flags. Sparc FP constants
- // use G3 as an address temp.
--int PhaseChaitin::clone_projs( Block *b, uint idx, Node *con, Node *copy, uint &maxlrg ) {
-- Block *bcon = _cfg._bbs[con->_idx];
-- uint cindex = bcon->find_node(con);
-- Node *con_next = bcon->_nodes[cindex+1];
-- if( con_next->in(0) != con || !con_next->is_MachProj() )
-- return false; // No MachProj's follow
--
-- // Copy kills after the cloned constant
-- Node *kills = con_next->clone();
-- kills->set_req( 0, copy );
-- b->_nodes.insert( idx, kills );
-- _cfg._bbs.map( kills->_idx, b );
-- new_lrg( kills, maxlrg++ );
-- return true;
-+int PhaseChaitin::clone_projs(Block* b, uint idx, Node* orig, Node* copy, uint& max_lrg_id) {
-+ assert(b->find_node(copy) == (idx - 1), "incorrect insert index for copy kill projections");
-+ DEBUG_ONLY( Block* borig = _cfg._bbs[orig->_idx]; )
-+ int found_projs = 0;
-+ uint cnt = orig->outcnt();
-+ for (uint i = 0; i < cnt; i++) {
-+ Node* proj = orig->raw_out(i);
-+ if (proj->is_MachProj()) {
-+ assert(proj->outcnt() == 0, "only kill projections are expected here");
-+ assert(_cfg._bbs[proj->_idx] == borig, "incorrect block for kill projections");
-+ found_projs++;
-+ // Copy kill projections after the cloned node
-+ Node* kills = proj->clone();
-+ kills->set_req(0, copy);
-+ b->_nodes.insert(idx++, kills);
-+ _cfg._bbs.map(kills->_idx, b);
-+ new_lrg(kills, max_lrg_id++);
-+ }
-+ }
-+ return found_projs;
- }
-
- //------------------------------compact----------------------------------------
-@@ -464,8 +470,7 @@
- copy = m->clone();
- // Insert the copy in the basic block, just before us
- b->_nodes.insert( l++, copy );
-- if( _phc.clone_projs( b, l, m, copy, _phc._maxlrg ) )
-- l++;
-+ l += _phc.clone_projs(b, l, m, copy, _phc._maxlrg);
- } else {
- const RegMask *rm = C->matcher()->idealreg2spillmask[m->ideal_reg()];
- copy = new (C) MachSpillCopyNode( m, *rm, *rm );
---- ./hotspot/src/share/vm/opto/compile.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/compile.cpp Wed May 07 19:26:16 2014 -0700
-@@ -642,7 +642,7 @@
- _inlining_progress(false),
- _inlining_incrementally(false),
- _print_inlining_list(NULL),
-- _print_inlining(0) {
-+ _print_inlining_idx(0) {
- C = this;
-
- CompileWrapper cw(this);
-@@ -667,6 +667,8 @@
- set_print_assembly(print_opto_assembly);
- set_parsed_irreducible_loop(false);
- #endif
-+ set_print_inlining(PrintInlining || method()->has_option("PrintInlining") NOT_PRODUCT( || PrintOptoInlining));
-+ set_print_intrinsics(PrintIntrinsics || method()->has_option("PrintIntrinsics"));
-
- if (ProfileTraps) {
- // Make sure the method being compiled gets its own MDO,
-@@ -698,7 +700,7 @@
- PhaseGVN gvn(node_arena(), estimated_size);
- set_initial_gvn(&gvn);
-
-- if (PrintInlining || PrintIntrinsics NOT_PRODUCT( || PrintOptoInlining)) {
-+ if (print_inlining() || print_intrinsics()) {
- _print_inlining_list = new (comp_arena())GrowableArray<PrintInliningBuffer>(comp_arena(), 1, 1, PrintInliningBuffer());
- }
- { // Scope for timing the parser
-@@ -832,6 +834,7 @@
- }
- #endif
-
-+ NOT_PRODUCT( verify_barriers(); )
- // Now that we know the size of all the monitors we can add a fixed slot
- // for the original deopt pc.
-
-@@ -924,7 +927,7 @@
- _inlining_progress(false),
- _inlining_incrementally(false),
- _print_inlining_list(NULL),
-- _print_inlining(0) {
-+ _print_inlining_idx(0) {
- C = this;
-
- #ifndef PRODUCT
-@@ -3237,6 +3240,72 @@
- }
- }
- }
-+
-+// Verify GC barriers consistency
-+// Currently supported:
-+// - G1 pre-barriers (see GraphKit::g1_write_barrier_pre())
-+void Compile::verify_barriers() {
-+ if (UseG1GC) {
-+ // Verify G1 pre-barriers
-+ const int marking_offset = in_bytes(JavaThread::satb_mark_queue_offset() + PtrQueue::byte_offset_of_active());
-+
-+ ResourceArea *area = Thread::current()->resource_area();
-+ Unique_Node_List visited(area);
-+ Node_List worklist(area);
-+ // We're going to walk control flow backwards starting from the Root
-+ worklist.push(_root);
-+ while (worklist.size() > 0) {
-+ Node* x = worklist.pop();
-+ if (x == NULL || x == top()) continue;
-+ if (visited.member(x)) {
-+ continue;
-+ } else {
-+ visited.push(x);
-+ }
-+
-+ if (x->is_Region()) {
-+ for (uint i = 1; i < x->req(); i++) {
-+ worklist.push(x->in(i));
-+ }
-+ } else {
-+ worklist.push(x->in(0));
-+ // We are looking for the pattern:
-+ // /->ThreadLocal
-+ // If->Bool->CmpI->LoadB->AddP->ConL(marking_offset)
-+ // \->ConI(0)
-+ // We want to verify that the If and the LoadB have the same control
-+ // See GraphKit::g1_write_barrier_pre()
-+ if (x->is_If()) {
-+ IfNode *iff = x->as_If();
-+ if (iff->in(1)->is_Bool() && iff->in(1)->in(1)->is_Cmp()) {
-+ CmpNode *cmp = iff->in(1)->in(1)->as_Cmp();
-+ if (cmp->Opcode() == Op_CmpI && cmp->in(2)->is_Con() && cmp->in(2)->bottom_type()->is_int()->get_con() == 0
-+ && cmp->in(1)->is_Load()) {
-+ LoadNode* load = cmp->in(1)->as_Load();
-+ if (load->Opcode() == Op_LoadB && load->in(2)->is_AddP() && load->in(2)->in(2)->Opcode() == Op_ThreadLocal
-+ && load->in(2)->in(3)->is_Con()
-+ && load->in(2)->in(3)->bottom_type()->is_intptr_t()->get_con() == marking_offset) {
-+
-+ Node* if_ctrl = iff->in(0);
-+ Node* load_ctrl = load->in(0);
-+
-+ if (if_ctrl != load_ctrl) {
-+ // Skip possible CProj->NeverBranch in infinite loops
-+ if ((if_ctrl->is_Proj() && if_ctrl->Opcode() == Op_CProj)
-+ && (if_ctrl->in(0)->is_MultiBranch() && if_ctrl->in(0)->Opcode() == Op_NeverBranch)) {
-+ if_ctrl = if_ctrl->in(0)->in(0);
-+ }
-+ }
-+ assert(load_ctrl != NULL && if_ctrl == load_ctrl, "controls must match");
-+ }
-+ }
-+ }
-+ }
-+ }
-+ }
-+ }
-+}
-+
- #endif
-
- // The Compile object keeps track of failure reasons separately from the ciEnv.
-@@ -3510,7 +3579,7 @@
- }
-
- void Compile::dump_inlining() {
-- if (PrintInlining || PrintIntrinsics NOT_PRODUCT( || PrintOptoInlining)) {
-+ if (print_inlining() || print_intrinsics()) {
- // Print inlining message for candidates that we couldn't inline
- // for lack of space or non constant receiver
- for (int i = 0; i < _late_inlines.length(); i++) {
-@@ -3534,7 +3603,7 @@
- }
- }
- for (int i = 0; i < _print_inlining_list->length(); i++) {
-- tty->print(_print_inlining_list->at(i).ss()->as_string());
-+ tty->print(_print_inlining_list->adr_at(i)->ss()->as_string());
- }
- }
- }
---- ./hotspot/src/share/vm/opto/compile.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/compile.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -42,6 +42,7 @@
- #include "runtime/deoptimization.hpp"
- #include "runtime/vmThread.hpp"
- #include "trace/tracing.hpp"
-+#include "utilities/ticks.hpp"
-
- class Block;
- class Bundle;
-@@ -284,6 +285,8 @@
- bool _do_method_data_update; // True if we generate code to update methodDataOops
- int _AliasLevel; // Locally-adjusted version of AliasLevel flag.
- bool _print_assembly; // True if we should dump assembly code for this compilation
-+ bool _print_inlining; // True if we should print inlining for this compilation
-+ bool _print_intrinsics; // True if we should print intrinsics for this compilation
- #ifndef PRODUCT
- bool _trace_opto_output;
- bool _parsed_irreducible_loop; // True if ciTypeFlow detected irreducible loops during parsing
-@@ -384,7 +387,7 @@
- };
-
- GrowableArray<PrintInliningBuffer>* _print_inlining_list;
-- int _print_inlining;
-+ int _print_inlining_idx;
-
- // Only keep nodes in the expensive node list that need to be optimized
- void cleanup_expensive_nodes(PhaseIterGVN &igvn);
-@@ -396,24 +399,24 @@
- public:
-
- outputStream* print_inlining_stream() const {
-- return _print_inlining_list->at(_print_inlining).ss();
-+ return _print_inlining_list->adr_at(_print_inlining_idx)->ss();
- }
-
- void print_inlining_skip(CallGenerator* cg) {
-- if (PrintInlining) {
-- _print_inlining_list->at(_print_inlining).set_cg(cg);
-- _print_inlining++;
-- _print_inlining_list->insert_before(_print_inlining, PrintInliningBuffer());
-+ if (_print_inlining) {
-+ _print_inlining_list->adr_at(_print_inlining_idx)->set_cg(cg);
-+ _print_inlining_idx++;
-+ _print_inlining_list->insert_before(_print_inlining_idx, PrintInliningBuffer());
- }
- }
-
- void print_inlining_insert(CallGenerator* cg) {
-- if (PrintInlining) {
-+ if (_print_inlining) {
- for (int i = 0; i < _print_inlining_list->length(); i++) {
-- if (_print_inlining_list->at(i).cg() == cg) {
-+ if (_print_inlining_list->adr_at(i)->cg() == cg) {
- _print_inlining_list->insert_before(i+1, PrintInliningBuffer());
-- _print_inlining = i+1;
-- _print_inlining_list->at(i).set_cg(NULL);
-+ _print_inlining_idx = i+1;
-+ _print_inlining_list->adr_at(i)->set_cg(NULL);
- return;
- }
- }
-@@ -536,6 +539,10 @@
- int AliasLevel() const { return _AliasLevel; }
- bool print_assembly() const { return _print_assembly; }
- void set_print_assembly(bool z) { _print_assembly = z; }
-+ bool print_inlining() const { return _print_inlining; }
-+ void set_print_inlining(bool z) { _print_inlining = z; }
-+ bool print_intrinsics() const { return _print_intrinsics; }
-+ void set_print_intrinsics(bool z) { _print_intrinsics = z; }
- // check the CompilerOracle for special behaviours for this compile
- bool method_has_option(const char * option) {
- return method() != NULL && method()->has_option(option);
-@@ -550,20 +557,19 @@
- bool has_method_handle_invokes() const { return _has_method_handle_invokes; }
- void set_has_method_handle_invokes(bool z) { _has_method_handle_invokes = z; }
-
-- jlong _latest_stage_start_counter;
-+ Ticks _latest_stage_start_counter;
-
- void begin_method() {
- #ifndef PRODUCT
- if (_printer) _printer->begin_method(this);
- #endif
-- C->_latest_stage_start_counter = os::elapsed_counter();
-+ C->_latest_stage_start_counter.stamp();
- }
-
- void print_method(CompilerPhaseType cpt, int level = 1) {
-- EventCompilerPhase event(UNTIMED);
-+ EventCompilerPhase event;
- if (event.should_commit()) {
- event.set_starttime(C->_latest_stage_start_counter);
-- event.set_endtime(os::elapsed_counter());
- event.set_phase((u1) cpt);
- event.set_compileID(C->_compile_id);
- event.set_phaseLevel(level);
-@@ -574,14 +580,13 @@
- #ifndef PRODUCT
- if (_printer) _printer->print_method(this, CompilerPhaseTypeHelper::to_string(cpt), level);
- #endif
-- C->_latest_stage_start_counter = os::elapsed_counter();
-+ C->_latest_stage_start_counter.stamp();
- }
-
- void end_method(int level = 1) {
-- EventCompilerPhase event(UNTIMED);
-+ EventCompilerPhase event;
- if (event.should_commit()) {
- event.set_starttime(C->_latest_stage_start_counter);
-- event.set_endtime(os::elapsed_counter());
- event.set_phase((u1) PHASE_END);
- event.set_compileID(C->_compile_id);
- event.set_phaseLevel(level);
-@@ -1091,6 +1096,9 @@
- // Print bytecodes, including the scope inlining tree
- void print_codes();
-
-+ // Verify GC barrier patterns
-+ void verify_barriers() PRODUCT_RETURN;
-+
- // End-of-run dumps.
- static void print_statistics() PRODUCT_RETURN;
-
---- ./hotspot/src/share/vm/opto/doCall.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/doCall.cpp Wed May 07 19:26:16 2014 -0700
-@@ -42,9 +42,9 @@
- #include "runtime/sharedRuntime.hpp"
-
- void trace_type_profile(Compile* C, ciMethod *method, int depth, int bci, ciMethod *prof_method, ciKlass *prof_klass, int site_count, int receiver_count) {
-- if (TraceTypeProfile || PrintInlining NOT_PRODUCT(|| PrintOptoInlining)) {
-+ if (TraceTypeProfile || C->print_inlining()) {
- outputStream* out = tty;
-- if (!PrintInlining) {
-+ if (!C->print_inlining()) {
- if (NOT_PRODUCT(!PrintOpto &&) !PrintCompilation) {
- method->print_short_name();
- tty->cr();
---- ./hotspot/src/share/vm/opto/graphKit.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/graphKit.cpp Wed May 07 19:26:16 2014 -0700
-@@ -3596,7 +3596,7 @@
- Node* marking = __ load(__ ctrl(), marking_adr, TypeInt::INT, active_type, Compile::AliasIdxRaw);
-
- // if (!marking)
-- __ if_then(marking, BoolTest::ne, zero); {
-+ __ if_then(marking, BoolTest::ne, zero, unlikely); {
- BasicType index_bt = TypeX_X->basic_type();
- assert(sizeof(size_t) == type2aelembytes(index_bt), "Loading G1 PtrQueue::_index with wrong size.");
- Node* index = __ load(__ ctrl(), index_adr, TypeX_X, index_bt, Compile::AliasIdxRaw);
-@@ -3604,7 +3604,7 @@
- if (do_load) {
- // load original value
- // alias_idx correct??
-- pre_val = __ load(no_ctrl, adr, val_type, bt, alias_idx);
-+ pre_val = __ load(__ ctrl(), adr, val_type, bt, alias_idx);
- }
-
- // if (pre_val != NULL)
-@@ -3701,7 +3701,8 @@
- Node* no_base = __ top();
- float likely = PROB_LIKELY(0.999);
- float unlikely = PROB_UNLIKELY(0.999);
-- Node* zero = __ ConI(0);
-+ Node* young_card = __ ConI((jint)G1SATBCardTableModRefBS::g1_young_card_val());
-+ Node* dirty_card = __ ConI((jint)CardTableModRefBS::dirty_card_val());
- Node* zeroX = __ ConX(0);
-
- // Get the alias_index for raw card-mark memory
-@@ -3757,8 +3758,16 @@
- // load the original value of the card
- Node* card_val = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw);
-
-- __ if_then(card_val, BoolTest::ne, zero); {
-- g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf);
-+ __ if_then(card_val, BoolTest::ne, young_card); {
-+ sync_kit(ideal);
-+ // Use Op_MemBarVolatile to achieve the effect of a StoreLoad barrier.
-+ insert_mem_bar(Op_MemBarVolatile, oop_store);
-+ __ sync_kit(this);
-+
-+ Node* card_val_reload = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw);
-+ __ if_then(card_val_reload, BoolTest::ne, dirty_card); {
-+ g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf);
-+ } __ end_if();
- } __ end_if();
- } __ end_if();
- } __ end_if();
---- ./hotspot/src/share/vm/opto/library_call.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/library_call.cpp Wed May 07 19:26:16 2014 -0700
-@@ -525,7 +525,7 @@
- Compile* C = kit.C;
- int nodes = C->unique();
- #ifndef PRODUCT
-- if ((PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) && Verbose) {
-+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
- char buf[1000];
- const char* str = vmIntrinsics::short_name_as_C_string(intrinsic_id(), buf, sizeof(buf));
- tty->print_cr("Intrinsic %s", str);
-@@ -536,7 +536,7 @@
-
- // Try to inline the intrinsic.
- if (kit.try_to_inline()) {
-- if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
-+ if (C->print_intrinsics() || C->print_inlining()) {
- C->print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)");
- }
- C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked);
-@@ -552,7 +552,7 @@
- }
-
- // The intrinsic bailed out
-- if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
-+ if (C->print_intrinsics() || C->print_inlining()) {
- if (jvms->has_method()) {
- // Not a root compile.
- const char* msg = is_virtual() ? "failed to inline (intrinsic, virtual)" : "failed to inline (intrinsic)";
-@@ -574,7 +574,7 @@
- int nodes = C->unique();
- #ifndef PRODUCT
- assert(is_predicted(), "sanity");
-- if ((PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) && Verbose) {
-+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
- char buf[1000];
- const char* str = vmIntrinsics::short_name_as_C_string(intrinsic_id(), buf, sizeof(buf));
- tty->print_cr("Predicate for intrinsic %s", str);
-@@ -585,7 +585,7 @@
-
- Node* slow_ctl = kit.try_to_predicate();
- if (!kit.failing()) {
-- if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
-+ if (C->print_intrinsics() || C->print_inlining()) {
- C->print_inlining(callee, jvms->depth() - 1, bci, is_virtual() ? "(intrinsic, virtual)" : "(intrinsic)");
- }
- C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_worked);
-@@ -599,7 +599,7 @@
- }
-
- // The intrinsic bailed out
-- if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
-+ if (C->print_intrinsics() || C->print_inlining()) {
- if (jvms->has_method()) {
- // Not a root compile.
- const char* msg = "failed to generate predicate for intrinsic";
-@@ -2262,7 +2262,7 @@
- const TypeOopPtr* tjp = TypeOopPtr::make_from_klass(sharpened_klass);
-
- #ifndef PRODUCT
-- if (PrintIntrinsics || PrintInlining || PrintOptoInlining) {
-+ if (C->print_intrinsics() || C->print_inlining()) {
- tty->print(" from base type: "); adr_type->dump();
- tty->print(" sharpened value: "); tjp->dump();
- }
-@@ -3158,7 +3158,7 @@
- if (mirror_con == NULL) return false; // cannot happen?
-
- #ifndef PRODUCT
-- if (PrintIntrinsics || PrintInlining || PrintOptoInlining) {
-+ if (C->print_intrinsics() || C->print_inlining()) {
- ciType* k = mirror_con->java_mirror_type();
- if (k) {
- tty->print("Inlining %s on constant Class ", vmIntrinsics::name_at(intrinsic_id()));
-@@ -3846,7 +3846,7 @@
- // Method.invoke() and auxiliary frames.
- bool LibraryCallKit::inline_native_Reflection_getCallerClass() {
- #ifndef PRODUCT
-- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
-+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
- tty->print_cr("Attempting to inline sun.reflect.Reflection.getCallerClass");
- }
- #endif
-@@ -3858,7 +3858,7 @@
- const TypeInt* caller_depth_type = _gvn.type(caller_depth_node)->isa_int();
- if (caller_depth_type == NULL || !caller_depth_type->is_con()) {
- #ifndef PRODUCT
-- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
-+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
- tty->print_cr(" Bailing out because caller depth was not a constant");
- }
- #endif
-@@ -3873,7 +3873,7 @@
- int caller_depth = caller_depth_type->get_con() - 1;
- if (caller_depth < 0) {
- #ifndef PRODUCT
-- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
-+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
- tty->print_cr(" Bailing out because caller depth was %d", caller_depth);
- }
- #endif
-@@ -3882,7 +3882,7 @@
-
- if (!jvms()->has_method()) {
- #ifndef PRODUCT
-- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
-+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
- tty->print_cr(" Bailing out because intrinsic was inlined at top level");
- }
- #endif
-@@ -3919,7 +3919,7 @@
-
- if (inlining_depth == 0) {
- #ifndef PRODUCT
-- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
-+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
- tty->print_cr(" Bailing out because caller depth (%d) exceeded inlining depth (%d)", caller_depth_type->get_con(), _depth);
- tty->print_cr(" JVM state at this point:");
- for (int i = _depth; i >= 1; i--) {
-@@ -3939,7 +3939,7 @@
- set_result(makecon(TypeInstPtr::make(caller_mirror)));
-
- #ifndef PRODUCT
-- if ((PrintIntrinsics || PrintInlining || PrintOptoInlining) && Verbose) {
-+ if ((C->print_intrinsics() || C->print_inlining()) && Verbose) {
- tty->print_cr(" Succeeded: caller = %s.%s, caller depth = %d, depth = %d", caller_klass->name()->as_utf8(), caller_jvms->method()->name()->as_utf8(), caller_depth_type->get_con(), _depth);
- tty->print_cr(" JVM state at this point:");
- for (int i = _depth; i >= 1; i--) {
---- ./hotspot/src/share/vm/opto/loopTransform.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/loopTransform.cpp Wed May 07 19:26:16 2014 -0700
-@@ -623,8 +623,6 @@
- }
-
-
--#define MAX_UNROLL 16 // maximum number of unrolls for main loop
--
- //------------------------------policy_unroll----------------------------------
- // Return TRUE or FALSE if the loop should be unrolled or not. Unroll if
- // the loop is a CountedLoop and the body is small enough.
-@@ -641,7 +639,7 @@
- if (cl->trip_count() <= (uint)(cl->is_normal_loop() ? 2 : 1)) return false;
-
- int future_unroll_ct = cl->unrolled_count() * 2;
-- if (future_unroll_ct > MAX_UNROLL) return false;
-+ if (future_unroll_ct > LoopMaxUnroll) return false;
-
- // Check for initial stride being a small enough constant
- if (abs(cl->stride_con()) > (1<<2)*future_unroll_ct) return false;
-@@ -1956,7 +1954,7 @@
- // Find loads off the surviving projection; remove their control edge
- for (DUIterator_Fast imax, i = dp->fast_outs(imax); i < imax; i++) {
- Node* cd = dp->fast_out(i); // Control-dependent node
-- if( cd->is_Load() ) { // Loads can now float around in the loop
-+ if (cd->is_Load() && cd->depends_only_on_test()) { // Loads can now float around in the loop
- // Allow the load to float around in the loop, or before it
- // but NOT before the pre-loop.
- _igvn.replace_input_of(cd, 0, ctrl); // ctrl, not NULL
---- ./hotspot/src/share/vm/opto/memnode.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/memnode.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1957,6 +1957,11 @@
- if (t != NULL) {
- // constant oop => constant klass
- if (offset == java_lang_Class::array_klass_offset_in_bytes()) {
-+ if (t->is_void()) {
-+ // We cannot create a void array. Since void is a primitive type return null
-+ // klass. Users of this result need to do a null check on the returned klass.
-+ return TypePtr::NULL_PTR;
-+ }
- return TypeKlassPtr::make(ciArrayKlass::make(t));
- }
- if (!t->is_klass()) {
---- ./hotspot/src/share/vm/opto/memnode.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/memnode.hpp Wed May 07 19:26:16 2014 -0700
-@@ -204,6 +204,17 @@
- protected:
- const Type* load_array_final_field(const TypeKlassPtr *tkls,
- ciKlass* klass) const;
-+ // depends_only_on_test is almost always true, and needs to be almost always
-+ // true to enable key hoisting & commoning optimizations. However, for the
-+ // special case of RawPtr loads from TLS top & end, and other loads performed by
-+ // GC barriers, the control edge carries the dependence preventing hoisting past
-+ // a Safepoint instead of the memory edge. (An unfortunate consequence of having
-+ // Safepoints not set Raw Memory; itself an unfortunate consequence of having Nodes
-+ // which produce results (new raw memory state) inside of loops preventing all
-+ // manner of other optimizations). Basically, it's ugly but so is the alternative.
-+ // See comment in macro.cpp, around line 125 expand_allocate_common().
-+ virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; }
-+
- };
-
- //------------------------------LoadBNode--------------------------------------
-@@ -370,16 +381,6 @@
- virtual uint ideal_reg() const { return Op_RegP; }
- virtual int store_Opcode() const { return Op_StoreP; }
- virtual BasicType memory_type() const { return T_ADDRESS; }
-- // depends_only_on_test is almost always true, and needs to be almost always
-- // true to enable key hoisting & commoning optimizations. However, for the
-- // special case of RawPtr loads from TLS top & end, the control edge carries
-- // the dependence preventing hoisting past a Safepoint instead of the memory
-- // edge. (An unfortunate consequence of having Safepoints not set Raw
-- // Memory; itself an unfortunate consequence of having Nodes which produce
-- // results (new raw memory state) inside of loops preventing all manner of
-- // other optimizations). Basically, it's ugly but so is the alternative.
-- // See comment in macro.cpp, around line 125 expand_allocate_common().
-- virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; }
- };
-
-
-@@ -393,16 +394,6 @@
- virtual uint ideal_reg() const { return Op_RegN; }
- virtual int store_Opcode() const { return Op_StoreN; }
- virtual BasicType memory_type() const { return T_NARROWOOP; }
-- // depends_only_on_test is almost always true, and needs to be almost always
-- // true to enable key hoisting & commoning optimizations. However, for the
-- // special case of RawPtr loads from TLS top & end, the control edge carries
-- // the dependence preventing hoisting past a Safepoint instead of the memory
-- // edge. (An unfortunate consequence of having Safepoints not set Raw
-- // Memory; itself an unfortunate consequence of having Nodes which produce
-- // results (new raw memory state) inside of loops preventing all manner of
-- // other optimizations). Basically, it's ugly but so is the alternative.
-- // See comment in macro.cpp, around line 125 expand_allocate_common().
-- virtual bool depends_only_on_test() const { return adr_type() != TypeRawPtr::BOTTOM; }
- };
-
- //------------------------------LoadKlassNode----------------------------------
---- ./hotspot/src/share/vm/opto/reg_split.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/opto/reg_split.cpp Wed May 07 19:26:16 2014 -0700
-@@ -391,10 +391,15 @@
- #endif
- // See if the cloned def kills any flags, and copy those kills as well
- uint i = insidx+1;
-- if( clone_projs( b, i, def, spill, maxlrg ) ) {
-+ int found_projs = clone_projs(b, i, def, spill, maxlrg);
-+ if (found_projs > 0) {
- // Adjust the point where we go hi-pressure
-- if( i <= b->_ihrp_index ) b->_ihrp_index++;
-- if( i <= b->_fhrp_index ) b->_fhrp_index++;
-+ if (i <= b->_ihrp_index) {
-+ b->_ihrp_index += found_projs;
-+ }
-+ if (i <= b->_fhrp_index) {
-+ b->_fhrp_index += found_projs;
-+ }
- }
-
- return spill;
---- ./hotspot/src/share/vm/prims/jni.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/prims/jni.cpp Wed May 07 19:26:16 2014 -0700
-@@ -5042,14 +5042,22 @@
- tty->print_cr("Running test: " #unit_test_function_call); \
- unit_test_function_call
-
-+// Forward declaration
-+void TestReservedSpace_test();
-+void TestReserveMemorySpecial_test();
-+void TestOldFreeSpaceCalculation_test();
-+
- void execute_internal_vm_tests() {
- if (ExecuteInternalVMTests) {
- tty->print_cr("Running internal VM tests");
-+ run_unit_test(TestReservedSpace_test());
-+ run_unit_test(TestReserveMemorySpecial_test());
- run_unit_test(GCTimerAllTest::all());
- run_unit_test(arrayOopDesc::test_max_array_length());
- run_unit_test(CollectedHeap::test_is_in());
- run_unit_test(QuickSort::test_quick_sort());
- run_unit_test(AltHashing::test_alt_hash());
-+ run_unit_test(TestOldFreeSpaceCalculation_test());
- tty->print_cr("All internal VM tests passed");
- }
- }
---- ./hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp Wed May 07 19:26:16 2014 -0700
-@@ -204,7 +204,7 @@
-
- write_attribute_name_index("Code");
- write_u4(size);
-- write_u2(method->max_stack());
-+ write_u2(method->verifier_max_stack());
- write_u2(method->max_locals());
- write_u4(code_size);
- copy_bytecodes(method, (unsigned char*)writeable_address(code_size));
---- ./hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2014, 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
-@@ -35,6 +35,7 @@
- #include "prims/jvmtiImpl.hpp"
- #include "prims/jvmtiRedefineClasses.hpp"
- #include "prims/methodComparator.hpp"
-+#include "prims/methodHandles.hpp"
- #include "runtime/deoptimization.hpp"
- #include "runtime/relocator.hpp"
- #include "utilities/bitMap.inline.hpp"
-@@ -262,76 +263,23 @@
- case JVM_CONSTANT_NameAndType:
- {
- int name_ref_i = scratch_cp->name_ref_index_at(scratch_i);
-- int new_name_ref_i = 0;
-- bool match = (name_ref_i < *merge_cp_length_p) &&
-- scratch_cp->compare_entry_to(name_ref_i, *merge_cp_p, name_ref_i,
-- THREAD);
-- if (!match) {
-- // forward reference in *merge_cp_p or not a direct match
--
-- int found_i = scratch_cp->find_matching_entry(name_ref_i, *merge_cp_p,
-- THREAD);
-- if (found_i != 0) {
-- guarantee(found_i != name_ref_i,
-- "compare_entry_to() and find_matching_entry() do not agree");
--
-- // Found a matching entry somewhere else in *merge_cp_p so
-- // just need a mapping entry.
-- new_name_ref_i = found_i;
-- map_index(scratch_cp, name_ref_i, found_i);
-- } else {
-- // no match found so we have to append this entry to *merge_cp_p
-- append_entry(scratch_cp, name_ref_i, merge_cp_p, merge_cp_length_p,
-- THREAD);
-- // The above call to append_entry() can only append one entry
-- // so the post call query of *merge_cp_length_p is only for
-- // the sake of consistency.
-- new_name_ref_i = *merge_cp_length_p - 1;
-- }
-- }
-+ int new_name_ref_i = find_or_append_indirect_entry(scratch_cp, name_ref_i, merge_cp_p,
-+ merge_cp_length_p, THREAD);
-
- int signature_ref_i = scratch_cp->signature_ref_index_at(scratch_i);
-- int new_signature_ref_i = 0;
-- match = (signature_ref_i < *merge_cp_length_p) &&
-- scratch_cp->compare_entry_to(signature_ref_i, *merge_cp_p,
-- signature_ref_i, THREAD);
-- if (!match) {
-- // forward reference in *merge_cp_p or not a direct match
--
-- int found_i = scratch_cp->find_matching_entry(signature_ref_i,
-- *merge_cp_p, THREAD);
-- if (found_i != 0) {
-- guarantee(found_i != signature_ref_i,
-- "compare_entry_to() and find_matching_entry() do not agree");
--
-- // Found a matching entry somewhere else in *merge_cp_p so
-- // just need a mapping entry.
-- new_signature_ref_i = found_i;
-- map_index(scratch_cp, signature_ref_i, found_i);
-- } else {
-- // no match found so we have to append this entry to *merge_cp_p
-- append_entry(scratch_cp, signature_ref_i, merge_cp_p,
-- merge_cp_length_p, THREAD);
-- // The above call to append_entry() can only append one entry
-- // so the post call query of *merge_cp_length_p is only for
-- // the sake of consistency.
-- new_signature_ref_i = *merge_cp_length_p - 1;
-- }
-- }
-+ int new_signature_ref_i = find_or_append_indirect_entry(scratch_cp, signature_ref_i,
-+ merge_cp_p, merge_cp_length_p,
-+ THREAD);
-
- // If the referenced entries already exist in *merge_cp_p, then
- // both new_name_ref_i and new_signature_ref_i will both be 0.
- // In that case, all we are appending is the current entry.
-- if (new_name_ref_i == 0) {
-- new_name_ref_i = name_ref_i;
-- } else {
-+ if (new_name_ref_i != name_ref_i) {
- RC_TRACE(0x00080000,
- ("NameAndType entry@%d name_ref_index change: %d to %d",
- *merge_cp_length_p, name_ref_i, new_name_ref_i));
- }
-- if (new_signature_ref_i == 0) {
-- new_signature_ref_i = signature_ref_i;
-- } else {
-+ if (new_signature_ref_i != signature_ref_i) {
- RC_TRACE(0x00080000,
- ("NameAndType entry@%d signature_ref_index change: %d to %d",
- *merge_cp_length_p, signature_ref_i, new_signature_ref_i));
-@@ -353,76 +301,11 @@
- case JVM_CONSTANT_Methodref:
- {
- int klass_ref_i = scratch_cp->uncached_klass_ref_index_at(scratch_i);
-- int new_klass_ref_i = 0;
-- bool match = (klass_ref_i < *merge_cp_length_p) &&
-- scratch_cp->compare_entry_to(klass_ref_i, *merge_cp_p, klass_ref_i,
-- THREAD);
-- if (!match) {
-- // forward reference in *merge_cp_p or not a direct match
--
-- int found_i = scratch_cp->find_matching_entry(klass_ref_i, *merge_cp_p,
-- THREAD);
-- if (found_i != 0) {
-- guarantee(found_i != klass_ref_i,
-- "compare_entry_to() and find_matching_entry() do not agree");
--
-- // Found a matching entry somewhere else in *merge_cp_p so
-- // just need a mapping entry.
-- new_klass_ref_i = found_i;
-- map_index(scratch_cp, klass_ref_i, found_i);
-- } else {
-- // no match found so we have to append this entry to *merge_cp_p
-- append_entry(scratch_cp, klass_ref_i, merge_cp_p, merge_cp_length_p,
-- THREAD);
-- // The above call to append_entry() can only append one entry
-- // so the post call query of *merge_cp_length_p is only for
-- // the sake of consistency. Without the optimization where we
-- // use JVM_CONSTANT_UnresolvedClass, then up to two entries
-- // could be appended.
-- new_klass_ref_i = *merge_cp_length_p - 1;
-- }
-- }
--
-- int name_and_type_ref_i =
-- scratch_cp->uncached_name_and_type_ref_index_at(scratch_i);
-- int new_name_and_type_ref_i = 0;
-- match = (name_and_type_ref_i < *merge_cp_length_p) &&
-- scratch_cp->compare_entry_to(name_and_type_ref_i, *merge_cp_p,
-- name_and_type_ref_i, THREAD);
-- if (!match) {
-- // forward reference in *merge_cp_p or not a direct match
--
-- int found_i = scratch_cp->find_matching_entry(name_and_type_ref_i,
-- *merge_cp_p, THREAD);
-- if (found_i != 0) {
-- guarantee(found_i != name_and_type_ref_i,
-- "compare_entry_to() and find_matching_entry() do not agree");
--
-- // Found a matching entry somewhere else in *merge_cp_p so
-- // just need a mapping entry.
-- new_name_and_type_ref_i = found_i;
-- map_index(scratch_cp, name_and_type_ref_i, found_i);
-- } else {
-- // no match found so we have to append this entry to *merge_cp_p
-- append_entry(scratch_cp, name_and_type_ref_i, merge_cp_p,
-- merge_cp_length_p, THREAD);
-- // The above call to append_entry() can append more than
-- // one entry so the post call query of *merge_cp_length_p
-- // is required in order to get the right index for the
-- // JVM_CONSTANT_NameAndType entry.
-- new_name_and_type_ref_i = *merge_cp_length_p - 1;
-- }
-- }
--
-- // If the referenced entries already exist in *merge_cp_p, then
-- // both new_klass_ref_i and new_name_and_type_ref_i will both be
-- // 0. In that case, all we are appending is the current entry.
-- if (new_klass_ref_i == 0) {
-- new_klass_ref_i = klass_ref_i;
-- }
-- if (new_name_and_type_ref_i == 0) {
-- new_name_and_type_ref_i = name_and_type_ref_i;
-- }
-+ int new_klass_ref_i = find_or_append_indirect_entry(scratch_cp, klass_ref_i,
-+ merge_cp_p, merge_cp_length_p, THREAD);
-+ int name_and_type_ref_i = scratch_cp->uncached_name_and_type_ref_index_at(scratch_i);
-+ int new_name_and_type_ref_i = find_or_append_indirect_entry(scratch_cp, name_and_type_ref_i,
-+ merge_cp_p, merge_cp_length_p, THREAD);
-
- const char *entry_name;
- switch (scratch_cp->tag_at(scratch_i).value()) {
-@@ -465,7 +348,79 @@
- (*merge_cp_length_p)++;
- } break;
-
-- // At this stage, Class or UnresolvedClass could be here, but not
-+ // this is an indirect CP entry so it needs special handling
-+ case JVM_CONSTANT_MethodType:
-+ {
-+ int ref_i = scratch_cp->method_type_index_at(scratch_i);
-+ int new_ref_i = find_or_append_indirect_entry(scratch_cp, ref_i, merge_cp_p,
-+ merge_cp_length_p, THREAD);
-+ if (new_ref_i != ref_i) {
-+ RC_TRACE(0x00080000,
-+ ("MethodType entry@%d ref_index change: %d to %d",
-+ *merge_cp_length_p, ref_i, new_ref_i));
-+ }
-+ (*merge_cp_p)->method_type_index_at_put(*merge_cp_length_p, new_ref_i);
-+ if (scratch_i != *merge_cp_length_p) {
-+ // The new entry in *merge_cp_p is at a different index than
-+ // the new entry in scratch_cp so we need to map the index values.
-+ map_index(scratch_cp, scratch_i, *merge_cp_length_p);
-+ }
-+ (*merge_cp_length_p)++;
-+ } break;
-+
-+ // this is an indirect CP entry so it needs special handling
-+ case JVM_CONSTANT_MethodHandle:
-+ {
-+ int ref_kind = scratch_cp->method_handle_ref_kind_at(scratch_i);
-+ int ref_i = scratch_cp->method_handle_index_at(scratch_i);
-+ int new_ref_i = find_or_append_indirect_entry(scratch_cp, ref_i, merge_cp_p,
-+ merge_cp_length_p, THREAD);
-+ if (new_ref_i != ref_i) {
-+ RC_TRACE(0x00080000,
-+ ("MethodHandle entry@%d ref_index change: %d to %d",
-+ *merge_cp_length_p, ref_i, new_ref_i));
-+ }
-+ (*merge_cp_p)->method_handle_index_at_put(*merge_cp_length_p, ref_kind, new_ref_i);
-+ if (scratch_i != *merge_cp_length_p) {
-+ // The new entry in *merge_cp_p is at a different index than
-+ // the new entry in scratch_cp so we need to map the index values.
-+ map_index(scratch_cp, scratch_i, *merge_cp_length_p);
-+ }
-+ (*merge_cp_length_p)++;
-+ } break;
-+
-+ // this is an indirect CP entry so it needs special handling
-+ case JVM_CONSTANT_InvokeDynamic:
-+ {
-+ // Index of the bootstrap specifier in the operands array
-+ int old_bs_i = scratch_cp->invoke_dynamic_bootstrap_specifier_index(scratch_i);
-+ int new_bs_i = find_or_append_operand(scratch_cp, old_bs_i, merge_cp_p,
-+ merge_cp_length_p, THREAD);
-+ // The bootstrap method NameAndType_info index
-+ int old_ref_i = scratch_cp->invoke_dynamic_name_and_type_ref_index_at(scratch_i);
-+ int new_ref_i = find_or_append_indirect_entry(scratch_cp, old_ref_i, merge_cp_p,
-+ merge_cp_length_p, THREAD);
-+ if (new_bs_i != old_bs_i) {
-+ RC_TRACE(0x00080000,
-+ ("InvokeDynamic entry@%d bootstrap_method_attr_index change: %d to %d",
-+ *merge_cp_length_p, old_bs_i, new_bs_i));
-+ }
-+ if (new_ref_i != old_ref_i) {
-+ RC_TRACE(0x00080000,
-+ ("InvokeDynamic entry@%d name_and_type_index change: %d to %d",
-+ *merge_cp_length_p, old_ref_i, new_ref_i));
-+ }
-+
-+ (*merge_cp_p)->invoke_dynamic_at_put(*merge_cp_length_p, new_bs_i, new_ref_i);
-+ if (scratch_i != *merge_cp_length_p) {
-+ // The new entry in *merge_cp_p is at a different index than
-+ // the new entry in scratch_cp so we need to map the index values.
-+ map_index(scratch_cp, scratch_i, *merge_cp_length_p);
-+ }
-+ (*merge_cp_length_p)++;
-+ } break;
-+
-+ // At this stage, Class or UnresolvedClass could be here, but not
- // ClassIndex
- case JVM_CONSTANT_ClassIndex: // fall through
-
-@@ -492,6 +447,134 @@
- } // end append_entry()
-
-
-+int VM_RedefineClasses::find_or_append_indirect_entry(constantPoolHandle scratch_cp,
-+ int ref_i, constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS) {
-+
-+ int new_ref_i = ref_i;
-+ bool match = (ref_i < *merge_cp_length_p) &&
-+ scratch_cp->compare_entry_to(ref_i, *merge_cp_p, ref_i, THREAD);
-+
-+ if (!match) {
-+ // forward reference in *merge_cp_p or not a direct match
-+ int found_i = scratch_cp->find_matching_entry(ref_i, *merge_cp_p, THREAD);
-+ if (found_i != 0) {
-+ guarantee(found_i != ref_i, "compare_entry_to() and find_matching_entry() do not agree");
-+ // Found a matching entry somewhere else in *merge_cp_p so just need a mapping entry.
-+ new_ref_i = found_i;
-+ map_index(scratch_cp, ref_i, found_i);
-+ } else {
-+ // no match found so we have to append this entry to *merge_cp_p
-+ append_entry(scratch_cp, ref_i, merge_cp_p, merge_cp_length_p, THREAD);
-+ // The above call to append_entry() can only append one entry
-+ // so the post call query of *merge_cp_length_p is only for
-+ // the sake of consistency.
-+ new_ref_i = *merge_cp_length_p - 1;
-+ }
-+ }
-+
-+ return new_ref_i;
-+} // end find_or_append_indirect_entry()
-+
-+
-+// Append a bootstrap specifier into the merge_cp operands that is semantically equal
-+// to the scratch_cp operands bootstrap specifier passed by the old_bs_i index.
-+// Recursively append new merge_cp entries referenced by the new bootstrap specifier.
-+void VM_RedefineClasses::append_operand(constantPoolHandle scratch_cp, int old_bs_i,
-+ constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS) {
-+
-+ int old_ref_i = scratch_cp->operand_bootstrap_method_ref_index_at(old_bs_i);
-+ int new_ref_i = find_or_append_indirect_entry(scratch_cp, old_ref_i, merge_cp_p,
-+ merge_cp_length_p, THREAD);
-+ if (new_ref_i != old_ref_i) {
-+ RC_TRACE(0x00080000,
-+ ("operands entry@%d bootstrap method ref_index change: %d to %d",
-+ _operands_cur_length, old_ref_i, new_ref_i));
-+ }
-+
-+ typeArrayOop merge_ops = (*merge_cp_p)->operands();
-+ int new_bs_i = _operands_cur_length;
-+ // We have _operands_cur_length == 0 when the merge_cp operands is empty yet.
-+ // However, the operand_offset_at(0) was set in the extend_operands() call.
-+ int new_base = (new_bs_i == 0) ? (*merge_cp_p)->operand_offset_at(0)
-+ : (*merge_cp_p)->operand_next_offset_at(new_bs_i - 1);
-+ int argc = scratch_cp->operand_argument_count_at(old_bs_i);
-+
-+ constantPoolOopDesc::operand_offset_at_put(merge_ops, _operands_cur_length, new_base);
-+ merge_ops->short_at_put(new_base++, new_ref_i);
-+ merge_ops->short_at_put(new_base++, argc);
-+
-+ for (int i = 0; i < argc; i++) {
-+ int old_arg_ref_i = scratch_cp->operand_argument_index_at(old_bs_i, i);
-+ int new_arg_ref_i = find_or_append_indirect_entry(scratch_cp, old_arg_ref_i, merge_cp_p,
-+ merge_cp_length_p, THREAD);
-+ merge_ops->short_at_put(new_base++, new_arg_ref_i);
-+ if (new_arg_ref_i != old_arg_ref_i) {
-+ RC_TRACE(0x00080000,
-+ ("operands entry@%d bootstrap method argument ref_index change: %d to %d",
-+ _operands_cur_length, old_arg_ref_i, new_arg_ref_i));
-+ }
-+ }
-+ if (old_bs_i != _operands_cur_length) {
-+ // The bootstrap specifier in *merge_cp_p is at a different index than
-+ // that in scratch_cp so we need to map the index values.
-+ map_operand_index(old_bs_i, new_bs_i);
-+ }
-+ _operands_cur_length++;
-+} // end append_operand()
-+
-+
-+int VM_RedefineClasses::find_or_append_operand(constantPoolHandle scratch_cp,
-+ int old_bs_i, constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS) {
-+
-+ int new_bs_i = old_bs_i; // bootstrap specifier index
-+ bool match = (old_bs_i < _operands_cur_length) &&
-+ scratch_cp->compare_operand_to(old_bs_i, *merge_cp_p, old_bs_i, THREAD);
-+
-+ if (!match) {
-+ // forward reference in *merge_cp_p or not a direct match
-+ int found_i = scratch_cp->find_matching_operand(old_bs_i, *merge_cp_p,
-+ _operands_cur_length, THREAD);
-+ if (found_i != -1) {
-+ guarantee(found_i != old_bs_i, "compare_operand_to() and find_matching_operand() disagree");
-+ // found a matching operand somewhere else in *merge_cp_p so just need a mapping
-+ new_bs_i = found_i;
-+ map_operand_index(old_bs_i, found_i);
-+ } else {
-+ // no match found so we have to append this bootstrap specifier to *merge_cp_p
-+ append_operand(scratch_cp, old_bs_i, merge_cp_p, merge_cp_length_p, THREAD);
-+ new_bs_i = _operands_cur_length - 1;
-+ }
-+ }
-+ return new_bs_i;
-+} // end find_or_append_operand()
-+
-+
-+void VM_RedefineClasses::finalize_operands_merge(constantPoolHandle merge_cp, TRAPS) {
-+ if (merge_cp->operands() == NULL) {
-+ return;
-+ }
-+ // Shrink the merge_cp operands
-+ merge_cp->shrink_operands(_operands_cur_length, CHECK);
-+
-+ if (RC_TRACE_ENABLED(0x00040000)) {
-+ // don't want to loop unless we are tracing
-+ int count = 0;
-+ for (int i = 1; i < _operands_index_map_p->length(); i++) {
-+ int value = _operands_index_map_p->at(i);
-+ if (value != -1) {
-+ RC_TRACE_WITH_THREAD(0x00040000, THREAD,
-+ ("operands_index_map[%d]: old=%d new=%d", count, i, value));
-+ count++;
-+ }
-+ }
-+ }
-+ // Clean-up
-+ _operands_index_map_p = NULL;
-+ _operands_cur_length = 0;
-+ _operands_index_map_count = 0;
-+} // end finalize_operands_merge()
-+
-+
- void VM_RedefineClasses::swap_all_method_annotations(int i, int j, instanceKlassHandle scratch_class) {
- typeArrayOop save;
-
-@@ -777,6 +860,27 @@
- } // end find_new_index()
-
-
-+// Find new bootstrap specifier index value for old bootstrap specifier index
-+// value by seaching the index map. Returns zero (-1) if there is no mapped
-+// value for the old bootstrap specifier index.
-+int VM_RedefineClasses::find_new_operand_index(int old_index) {
-+ if (_operands_index_map_count == 0) {
-+ // map is empty so nothing can be found
-+ return -1;
-+ }
-+
-+ if (old_index == -1 || old_index >= _operands_index_map_p->length()) {
-+ // The old_index is out of range so it is not mapped.
-+ // This should not happen in regular constant pool merging use.
-+ return -1;
-+ }
-+
-+ int value = _operands_index_map_p->at(old_index);
-+
-+ return value;
-+} // end find_new_operand_index()
-+
-+
- // Returns true if the current mismatch is due to a resolved/unresolved
- // class pair. Otherwise, returns false.
- bool VM_RedefineClasses::is_unresolved_class_mismatch(constantPoolHandle cp1,
-@@ -1042,6 +1146,25 @@
- } // end map_index()
-
-
-+// Map old_index to new_index as needed.
-+void VM_RedefineClasses::map_operand_index(int old_index, int new_index) {
-+ if (find_new_operand_index(old_index) != -1) {
-+ // old_index is already mapped
-+ return;
-+ }
-+
-+ if (old_index == new_index) {
-+ // no mapping is needed
-+ return;
-+ }
-+
-+ _operands_index_map_p->at_put(old_index, new_index);
-+ _operands_index_map_count++;
-+
-+ RC_TRACE(0x00040000, ("mapped bootstrap specifier at index %d to %d", old_index, new_index));
-+} // end map_index()
-+
-+
- // Merge old_cp and scratch_cp and return the results of the merge via
- // merge_cp_p. The number of entries in *merge_cp_p is returned via
- // merge_cp_length_p. The entries in old_cp occupy the same locations
-@@ -1113,6 +1236,9 @@
- }
- } // end for each old_cp entry
-
-+ constantPoolOopDesc::copy_operands(old_cp, *merge_cp_p, CHECK_0);
-+ (*merge_cp_p)->extend_operands(scratch_cp, CHECK_0);
-+
- // We don't need to sanity check that *merge_cp_length_p is within
- // *merge_cp_p bounds since we have the minimum on-entry check above.
- (*merge_cp_length_p) = old_i;
-@@ -1235,6 +1361,7 @@
- ("after pass 1b: merge_cp_len=%d, scratch_i=%d, index_map_len=%d",
- *merge_cp_length_p, scratch_i, _index_map_count));
- }
-+ finalize_operands_merge(*merge_cp_p, THREAD);
-
- return true;
- } // end merge_constant_pools()
-@@ -1282,8 +1409,17 @@
- _index_map_count = 0;
- _index_map_p = new intArray(scratch_cp->length(), -1);
-
-+ _operands_cur_length = constantPoolOopDesc::operand_array_length(old_cp->operands());
-+ _operands_index_map_count = 0;
-+ _operands_index_map_p = new intArray(
-+ constantPoolOopDesc::operand_array_length(scratch_cp->operands()), -1);
-+
-+ // reference to the cp holder is needed for copy_operands()
-+ merge_cp->set_pool_holder(scratch_class());
- bool result = merge_constant_pools(old_cp, scratch_cp, &merge_cp,
- &merge_cp_length, THREAD);
-+ merge_cp->set_pool_holder(NULL);
-+
- if (!result) {
- // The merge can fail due to memory allocation failure or due
- // to robustness checks.
-@@ -1326,7 +1462,7 @@
- // Replace the new constant pool with a shrunken copy of the
- // merged constant pool; the previous new constant pool will
- // get GCed.
-- set_new_constant_pool(scratch_class, merge_cp, merge_cp_length, true,
-+ set_new_constant_pool(scratch_class, merge_cp, merge_cp_length,
- THREAD);
- // drop local ref to the merged constant pool
- merge_cp()->set_is_conc_safe(true);
-@@ -1357,7 +1493,7 @@
- // merged constant pool so now the rewritten bytecodes have
- // valid references; the previous new constant pool will get
- // GCed.
-- set_new_constant_pool(scratch_class, merge_cp, merge_cp_length, true,
-+ set_new_constant_pool(scratch_class, merge_cp, merge_cp_length,
- THREAD);
- merge_cp()->set_is_conc_safe(true);
- }
-@@ -1540,6 +1676,7 @@
- case Bytecodes::_getfield : // fall through
- case Bytecodes::_getstatic : // fall through
- case Bytecodes::_instanceof : // fall through
-+ case Bytecodes::_invokedynamic : // fall through
- case Bytecodes::_invokeinterface: // fall through
- case Bytecodes::_invokespecial : // fall through
- case Bytecodes::_invokestatic : // fall through
-@@ -2343,30 +2480,30 @@
- // smaller constant pool is associated with scratch_class.
- void VM_RedefineClasses::set_new_constant_pool(
- instanceKlassHandle scratch_class, constantPoolHandle scratch_cp,
-- int scratch_cp_length, bool shrink, TRAPS) {
-- assert(!shrink || scratch_cp->length() >= scratch_cp_length, "sanity check");
--
-- if (shrink) {
-- // scratch_cp is a merged constant pool and has enough space for a
-- // worst case merge situation. We want to associate the minimum
-- // sized constant pool with the klass to save space.
-- constantPoolHandle smaller_cp(THREAD,
-- oopFactory::new_constantPool(scratch_cp_length,
-- oopDesc::IsUnsafeConc,
-- THREAD));
-- // preserve orig_length() value in the smaller copy
-- int orig_length = scratch_cp->orig_length();
-- assert(orig_length != 0, "sanity check");
-- smaller_cp->set_orig_length(orig_length);
-- scratch_cp->copy_cp_to(1, scratch_cp_length - 1, smaller_cp, 1, THREAD);
-- scratch_cp = smaller_cp;
-- smaller_cp()->set_is_conc_safe(true);
-- }
-+ int scratch_cp_length, TRAPS) {
-+ assert(scratch_cp->length() >= scratch_cp_length, "sanity check");
-+
-+ // scratch_cp is a merged constant pool and has enough space for a
-+ // worst case merge situation. We want to associate the minimum
-+ // sized constant pool with the klass to save space.
-+ constantPoolHandle smaller_cp(THREAD,
-+ oopFactory::new_constantPool(scratch_cp_length,
-+ oopDesc::IsUnsafeConc,
-+ THREAD));
-+ // preserve orig_length() value in the smaller copy
-+ int orig_length = scratch_cp->orig_length();
-+ assert(orig_length != 0, "sanity check");
-+ smaller_cp->set_orig_length(orig_length);
-+
-+ // attach klass to new constant pool
-+ // reference to the cp holder is needed for copy_operands()
-+ smaller_cp->set_pool_holder(scratch_class());
-+
-+ scratch_cp->copy_cp_to(1, scratch_cp_length - 1, smaller_cp, 1, THREAD);
-+ scratch_cp = smaller_cp;
-+ smaller_cp()->set_is_conc_safe(true);
-
- // attach new constant pool to klass
-- scratch_cp->set_pool_holder(scratch_class());
--
-- // attach klass to new constant pool
- scratch_class->set_constants(scratch_cp());
-
- int i; // for portability
-@@ -3310,6 +3447,16 @@
- // that reference methods of the evolved class.
- SystemDictionary::classes_do(adjust_cpool_cache_and_vtable, THREAD);
-
-+ // JSR-292 support
-+ MemberNameTable* mnt = the_class->member_names();
-+ if (mnt != NULL) {
-+ bool trace_name_printed = false;
-+ mnt->adjust_method_entries(_matching_old_methods,
-+ _matching_new_methods,
-+ _matching_methods_length,
-+ &trace_name_printed);
-+ }
-+
- if (the_class->oop_map_cache() != NULL) {
- // Flush references to any obsolete methods from the oop map cache
- // so that obsolete methods are not pinned.
---- ./hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp Wed May 07 19:26:16 2014 -0700
-@@ -370,6 +370,13 @@
- // _index_map_p contains any entries.
- int _index_map_count;
- intArray * _index_map_p;
-+
-+ // _operands_index_map_count is just an optimization for knowing if
-+ // _operands_index_map_p contains any entries.
-+ int _operands_cur_length;
-+ int _operands_index_map_count;
-+ intArray * _operands_index_map_p;
-+
- // ptr to _class_count scratch_classes
- instanceKlassHandle * _scratch_classes;
- jvmtiError _res;
-@@ -431,16 +438,24 @@
- // and in all direct and indirect subclasses.
- void increment_class_counter(instanceKlass *ik, TRAPS);
-
-- // Support for constant pool merging (these routines are in alpha
-- // order):
-+ // Support for constant pool merging (these routines are in alpha order):
- void append_entry(constantPoolHandle scratch_cp, int scratch_i,
- constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS);
-+ void append_operand(constantPoolHandle scratch_cp, int scratch_bootstrap_spec_index,
-+ constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS);
-+ void finalize_operands_merge(constantPoolHandle merge_cp, TRAPS);
-+ int find_or_append_indirect_entry(constantPoolHandle scratch_cp, int scratch_i,
-+ constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS);
-+ int find_or_append_operand(constantPoolHandle scratch_cp, int scratch_bootstrap_spec_index,
-+ constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS);
- int find_new_index(int old_index);
-+ int find_new_operand_index(int old_bootstrap_spec_index);
- bool is_unresolved_class_mismatch(constantPoolHandle cp1, int index1,
- constantPoolHandle cp2, int index2);
- bool is_unresolved_string_mismatch(constantPoolHandle cp1, int index1,
- constantPoolHandle cp2, int index2);
- void map_index(constantPoolHandle scratch_cp, int old_index, int new_index);
-+ void map_operand_index(int old_bootstrap_spec_index, int new_bootstrap_spec_index);
- bool merge_constant_pools(constantPoolHandle old_cp,
- constantPoolHandle scratch_cp, constantPoolHandle *merge_cp_p,
- int *merge_cp_length_p, TRAPS);
-@@ -474,7 +489,7 @@
- address& stackmap_addr_ref, address stackmap_end, u2 frame_i,
- u1 frame_size, TRAPS);
- void set_new_constant_pool(instanceKlassHandle scratch_class,
-- constantPoolHandle scratch_cp, int scratch_cp_length, bool shrink, TRAPS);
-+ constantPoolHandle scratch_cp, int scratch_cp_length, TRAPS);
-
- void flush_dependent_code(instanceKlassHandle k_h, TRAPS);
-
---- ./hotspot/src/share/vm/prims/methodHandles.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/prims/methodHandles.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2008, 2014, 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
-@@ -29,6 +29,7 @@
- #include "interpreter/oopMapCache.hpp"
- #include "memory/allocation.inline.hpp"
- #include "memory/oopFactory.hpp"
-+#include "prims/jvmtiRedefineClassesTrace.hpp"
- #include "prims/methodHandles.hpp"
- #include "runtime/compilationPolicy.hpp"
- #include "runtime/javaCalls.hpp"
-@@ -123,7 +124,9 @@
- return Handle(THREAD, k->allocate_instance(THREAD));
- }
-
--oop MethodHandles::init_MemberName(oop mname_oop, oop target_oop) {
-+oop MethodHandles::init_MemberName(Handle mname, Handle target) {
-+ Thread* thread = Thread::current();
-+ oop target_oop = target();
- klassOop target_klass = target_oop->klass();
- if (target_klass == SystemDictionary::reflect_Field_klass()) {
- oop clazz = java_lang_reflect_Field::clazz(target_oop); // fd.field_holder()
-@@ -131,24 +134,24 @@
- int mods = java_lang_reflect_Field::modifiers(target_oop);
- oop type = java_lang_reflect_Field::type(target_oop);
- oop name = java_lang_reflect_Field::name(target_oop);
-- klassOop k = java_lang_Class::as_klassOop(clazz);
-- intptr_t offset = instanceKlass::cast(k)->field_offset(slot);
-- return init_field_MemberName(mname_oop, k, accessFlags_from(mods), type, name, offset);
-+ KlassHandle k(thread, java_lang_Class::as_klassOop(clazz));
-+ intptr_t offset = instanceKlass::cast(k())->field_offset(slot);
-+ return init_field_MemberName(mname, k, accessFlags_from(mods), type, name, offset);
- } else if (target_klass == SystemDictionary::reflect_Method_klass()) {
- oop clazz = java_lang_reflect_Method::clazz(target_oop);
- int slot = java_lang_reflect_Method::slot(target_oop);
-- klassOop k = java_lang_Class::as_klassOop(clazz);
-- if (k != NULL && Klass::cast(k)->oop_is_instance()) {
-- methodOop m = instanceKlass::cast(k)->method_with_idnum(slot);
-- return init_method_MemberName(mname_oop, m, true, k);
-+ KlassHandle k(thread, java_lang_Class::as_klassOop(clazz));
-+ if (!k.is_null() && k->oop_is_instance()) {
-+ methodOop m = instanceKlass::cast(k())->method_with_idnum(slot);
-+ return init_method_MemberName(mname, m, true, k);
- }
- } else if (target_klass == SystemDictionary::reflect_Constructor_klass()) {
- oop clazz = java_lang_reflect_Constructor::clazz(target_oop);
- int slot = java_lang_reflect_Constructor::slot(target_oop);
-- klassOop k = java_lang_Class::as_klassOop(clazz);
-- if (k != NULL && Klass::cast(k)->oop_is_instance()) {
-- methodOop m = instanceKlass::cast(k)->method_with_idnum(slot);
-- return init_method_MemberName(mname_oop, m, false, k);
-+ KlassHandle k(thread, java_lang_Class::as_klassOop(clazz));
-+ if (!k.is_null() && k->oop_is_instance()) {
-+ methodOop m = instanceKlass::cast(k())->method_with_idnum(slot);
-+ return init_method_MemberName(mname, m, false, k);
- }
- } else if (target_klass == SystemDictionary::MemberName_klass()) {
- // Note: This only works if the MemberName has already been resolved.
-@@ -156,17 +159,18 @@
- int flags = java_lang_invoke_MemberName::flags(target_oop);
- oop vmtarget = java_lang_invoke_MemberName::vmtarget(target_oop);
- intptr_t vmindex = java_lang_invoke_MemberName::vmindex(target_oop);
-- klassOop k = java_lang_Class::as_klassOop(clazz);
-+ KlassHandle k(thread, java_lang_Class::as_klassOop(clazz));
- int ref_kind = (flags >> REFERENCE_KIND_SHIFT) & REFERENCE_KIND_MASK;
- if (vmtarget == NULL) return NULL; // not resolved
- if ((flags & IS_FIELD) != 0) {
- assert(vmtarget->is_klass(), "field vmtarget is klassOop");
- int basic_mods = (ref_kind_is_static(ref_kind) ? JVM_ACC_STATIC : 0);
- // FIXME: how does k (receiver_limit) contribute?
-- return init_field_MemberName(mname_oop, klassOop(vmtarget), accessFlags_from(basic_mods), NULL, NULL, vmindex);
-+ KlassHandle k_vmtarget(thread, klassOop(vmtarget));
-+ return init_field_MemberName(mname, k_vmtarget, accessFlags_from(basic_mods), NULL, NULL, vmindex);
- } else if ((flags & (IS_METHOD | IS_CONSTRUCTOR)) != 0) {
- assert(vmtarget->is_method(), "method or constructor vmtarget is methodOop");
-- return init_method_MemberName(mname_oop, methodOop(vmtarget), ref_kind_does_dispatch(ref_kind), k);
-+ return init_method_MemberName(mname, methodOop(vmtarget), ref_kind_does_dispatch(ref_kind), k);
- } else {
- return NULL;
- }
-@@ -174,8 +178,9 @@
- return NULL;
- }
-
--oop MethodHandles::init_method_MemberName(oop mname_oop, methodOop m, bool do_dispatch,
-- klassOop resolved_klass) {
-+oop MethodHandles::init_method_MemberName(Handle mname, methodOop m, bool do_dispatch,
-+ KlassHandle resolved_klass_h) {
-+ klassOop resolved_klass = resolved_klass_h();
- AccessFlags mods = m->access_flags();
- int flags = (jushort)( mods.as_short() & JVM_RECOGNIZED_METHOD_MODIFIERS );
- int vmindex = methodOopDesc::nonvirtual_vtable_index; // implies never any dispatch
-@@ -235,6 +240,7 @@
- }
- }
-
-+ oop mname_oop = mname();
- java_lang_invoke_MemberName::set_flags(mname_oop, flags);
- java_lang_invoke_MemberName::set_vmtarget(mname_oop, m);
- java_lang_invoke_MemberName::set_vmindex(mname_oop, vmindex); // vtable/itable index
-@@ -246,11 +252,12 @@
- // If relevant, the vtable or itable value is stored as vmindex.
- // This is done eagerly, since it is readily available without
- // constructing any new objects.
-- // TO DO: maybe intern mname_oop
-- return mname_oop;
-+ instanceKlass::cast(m->method_holder())->add_member_name(m->method_idnum(), mname);
-+
-+ return mname();
- }
-
--Handle MethodHandles::init_method_MemberName(oop mname_oop, CallInfo& info, TRAPS) {
-+Handle MethodHandles::init_method_MemberName(Handle mname, CallInfo& info, TRAPS) {
- Handle empty;
- if (info.resolved_appendix().not_null()) {
- // The resolved MemberName must not be accompanied by an appendix argument,
-@@ -270,23 +277,24 @@
- } else {
- vmindex = info.vtable_index();
- }
-- oop res = init_method_MemberName(mname_oop, m(), (vmindex >= 0), defc());
-+ oop res = init_method_MemberName(mname, m(), (vmindex >= 0), defc());
- assert(res == NULL || (java_lang_invoke_MemberName::vmindex(res) == vmindex), "");
- return Handle(THREAD, res);
- }
-
--oop MethodHandles::init_field_MemberName(oop mname_oop, klassOop field_holder,
-+oop MethodHandles::init_field_MemberName(Handle mname, KlassHandle field_holder,
- AccessFlags mods, oop type, oop name,
- intptr_t offset, bool is_setter) {
- int flags = (jushort)( mods.as_short() & JVM_RECOGNIZED_FIELD_MODIFIERS );
- flags |= IS_FIELD | ((mods.is_static() ? JVM_REF_getStatic : JVM_REF_getField) << REFERENCE_KIND_SHIFT);
- if (is_setter) flags += ((JVM_REF_putField - JVM_REF_getField) << REFERENCE_KIND_SHIFT);
-- oop vmtarget = field_holder;
-+ oop vmtarget = field_holder();
- int vmindex = offset; // determines the field uniquely when combined with static bit
-+ oop mname_oop = mname();
- java_lang_invoke_MemberName::set_flags(mname_oop, flags);
- java_lang_invoke_MemberName::set_vmtarget(mname_oop, vmtarget);
- java_lang_invoke_MemberName::set_vmindex(mname_oop, vmindex);
-- java_lang_invoke_MemberName::set_clazz(mname_oop, Klass::cast(field_holder)->java_mirror());
-+ java_lang_invoke_MemberName::set_clazz(mname_oop, field_holder()->java_mirror());
- if (name != NULL)
- java_lang_invoke_MemberName::set_name(mname_oop, name);
- if (type != NULL)
-@@ -298,11 +306,10 @@
- // because they unambiguously identify the field.
- // Although the fieldDescriptor::_index would also identify the field,
- // we do not use it, because it is harder to decode.
-- // TO DO: maybe intern mname_oop
-- return mname_oop;
-+ return mname();
- }
-
--Handle MethodHandles::init_field_MemberName(oop mname_oop, FieldAccessInfo& info, TRAPS) {
-+Handle MethodHandles::init_field_MemberName(Handle mname, FieldAccessInfo& info, TRAPS) {
- return Handle();
- #if 0
- KlassHandle field_holder = info.klass();
-@@ -728,7 +735,7 @@
- return empty;
- }
- }
-- return init_method_MemberName(mname(), result, THREAD);
-+ return init_method_MemberName(mname, result, THREAD);
- }
- case IS_CONSTRUCTOR:
- {
-@@ -746,7 +753,7 @@
- }
- }
- assert(result.is_statically_bound(), "");
-- return init_method_MemberName(mname(), result, THREAD);
-+ return init_method_MemberName(mname, result, THREAD);
- }
- case IS_FIELD:
- {
-@@ -759,7 +766,7 @@
- oop name = field_name_or_null(fd.name());
- bool is_setter = (ref_kind_is_valid(ref_kind) && ref_kind_is_setter(ref_kind));
- mname = Handle(THREAD,
-- init_field_MemberName(mname(), sel_klass->as_klassOop(),
-+ init_field_MemberName(mname, sel_klass,
- fd.access_flags(), type, name, fd.offset(), is_setter));
- return mname;
- }
-@@ -851,16 +858,16 @@
- THROW_MSG(vmSymbols::java_lang_InternalError(), "unrecognized MemberName format");
- }
-
--int MethodHandles::find_MemberNames(klassOop k,
-+int MethodHandles::find_MemberNames(KlassHandle k,
- Symbol* name, Symbol* sig,
-- int mflags, klassOop caller,
-- int skip, objArrayOop results) {
-- DEBUG_ONLY(No_Safepoint_Verifier nsv);
-- // this code contains no safepoints!
-+ int mflags, KlassHandle caller,
-+ int skip, objArrayHandle results) {
-
- // %%% take caller into account!
-
-- if (k == NULL || !Klass::cast(k)->oop_is_instance()) return -1;
-+ Thread* thread = Thread::current();
-+
-+ if (k.is_null() || !k->oop_is_instance()) return -1;
-
- int rfill = 0, rlimit = results->length(), rskip = skip;
- // overflow measurement:
-@@ -888,7 +895,7 @@
- }
-
- if ((match_flags & IS_FIELD) != 0) {
-- for (FieldStream st(k, local_only, !search_intfc); !st.eos(); st.next()) {
-+ for (FieldStream st(k(), local_only, !search_intfc); !st.eos(); st.next()) {
- if (name != NULL && st.name() != name)
- continue;
- if (sig != NULL && st.signature() != sig)
-@@ -897,15 +904,15 @@
- if (rskip > 0) {
- --rskip;
- } else if (rfill < rlimit) {
-- oop result = results->obj_at(rfill++);
-- if (!java_lang_invoke_MemberName::is_instance(result))
-+ Handle result(thread, results->obj_at(rfill++));
-+ if (!java_lang_invoke_MemberName::is_instance(result()))
- return -99; // caller bug!
- oop type = field_signature_type_or_null(st.signature());
- oop name = field_name_or_null(st.name());
-- oop saved = MethodHandles::init_field_MemberName(result, st.klass()->as_klassOop(),
-+ oop saved = MethodHandles::init_field_MemberName(result, st.klass(),
- st.access_flags(), type, name,
- st.offset());
-- if (saved != result)
-+ if (saved != result())
- results->obj_at_put(rfill-1, saved); // show saved instance to user
- } else if (++overflow >= overflow_limit) {
- match_flags = 0; break; // got tired of looking at overflow
-@@ -938,7 +945,7 @@
- } else {
- // caller will accept either sort; no need to adjust name
- }
-- for (MethodStream st(k, local_only, !search_intfc); !st.eos(); st.next()) {
-+ for (MethodStream st(k(), local_only, !search_intfc); !st.eos(); st.next()) {
- methodOop m = st.method();
- Symbol* m_name = m->name();
- if (m_name == clinit_name)
-@@ -951,11 +958,11 @@
- if (rskip > 0) {
- --rskip;
- } else if (rfill < rlimit) {
-- oop result = results->obj_at(rfill++);
-- if (!java_lang_invoke_MemberName::is_instance(result))
-+ Handle result(thread, results->obj_at(rfill++));
-+ if (!java_lang_invoke_MemberName::is_instance(result()))
- return -99; // caller bug!
-- oop saved = MethodHandles::init_method_MemberName(result, m, true, NULL);
-- if (saved != result)
-+ oop saved = MethodHandles::init_method_MemberName(result, m, true, KlassHandle());
-+ if (saved != result())
- results->obj_at_put(rfill-1, saved); // show saved instance to user
- } else if (++overflow >= overflow_limit) {
- match_flags = 0; break; // got tired of looking at overflow
-@@ -967,6 +974,85 @@
- return rfill + overflow;
- }
-
-+//------------------------------------------------------------------------------
-+// MemberNameTable
-+//
-+
-+MemberNameTable::MemberNameTable(int methods_cnt)
-+ : GrowableArray<jweak>(methods_cnt, true) {
-+ assert_locked_or_safepoint(MemberNameTable_lock);
-+}
-+
-+MemberNameTable::~MemberNameTable() {
-+ assert_locked_or_safepoint(MemberNameTable_lock);
-+ int len = this->length();
-+
-+ for (int idx = 0; idx < len; idx++) {
-+ jweak ref = this->at(idx);
-+ JNIHandles::destroy_weak_global(ref);
-+ }
-+}
-+
-+void MemberNameTable::add_member_name(int index, jweak mem_name_wref) {
-+ assert_locked_or_safepoint(MemberNameTable_lock);
-+ this->at_put_grow(index, mem_name_wref);
-+}
-+
-+// Return a member name oop or NULL.
-+oop MemberNameTable::get_member_name(int index) {
-+ assert_locked_or_safepoint(MemberNameTable_lock);
-+ jweak ref = this->at(index);
-+ oop mem_name = JNIHandles::resolve(ref);
-+ return mem_name;
-+}
-+
-+oop MemberNameTable::find_member_name_by_method(methodOop old_method) {
-+ assert_locked_or_safepoint(MemberNameTable_lock);
-+ oop found = NULL;
-+ int len = this->length();
-+
-+ for (int idx = 0; idx < len; idx++) {
-+ oop mem_name = JNIHandles::resolve(this->at(idx));
-+ if (mem_name == NULL) {
-+ continue;
-+ }
-+ methodOop method = (methodOop)java_lang_invoke_MemberName::vmtarget(mem_name);
-+ if (method == old_method) {
-+ found = mem_name;
-+ break;
-+ }
-+ }
-+ return found;
-+}
-+
-+// It is called at safepoint only
-+void MemberNameTable::adjust_method_entries(methodOop* old_methods, methodOop* new_methods,
-+ int methods_length, bool *trace_name_printed) {
-+ assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint");
-+ // search the MemberNameTable for uses of either obsolete or EMCP methods
-+ for (int j = 0; j < methods_length; j++) {
-+ methodOop old_method = old_methods[j];
-+ methodOop new_method = new_methods[j];
-+ oop mem_name = find_member_name_by_method(old_method);
-+ if (mem_name != NULL) {
-+ java_lang_invoke_MemberName::adjust_vmtarget(mem_name, new_method);
-+
-+ if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) {
-+ if (!(*trace_name_printed)) {
-+ // RC_TRACE_MESG macro has an embedded ResourceMark
-+ RC_TRACE_MESG(("adjust: name=%s",
-+ Klass::cast(old_method->method_holder())->external_name()));
-+ *trace_name_printed = true;
-+ }
-+ // RC_TRACE macro has an embedded ResourceMark
-+ RC_TRACE(0x00400000, ("MemberName method update: %s(%s)",
-+ new_method->name()->as_C_string(),
-+ new_method->signature()->as_C_string()));
-+ }
-+ }
-+ }
-+}
-+
- //
- // Here are the native methods in java.lang.invoke.MethodHandleNatives
- // They are the private interface between this JVM and the HotSpot-specific
-@@ -1058,8 +1144,8 @@
- if (mname_jh == NULL) { THROW_MSG(vmSymbols::java_lang_InternalError(), "mname is null"); }
- if (target_jh == NULL) { THROW_MSG(vmSymbols::java_lang_InternalError(), "target is null"); }
- Handle mname(THREAD, JNIHandles::resolve_non_null(mname_jh));
-- oop target_oop = JNIHandles::resolve_non_null(target_jh);
-- MethodHandles::init_MemberName(mname(), target_oop);
-+ Handle target(THREAD, JNIHandles::resolve_non_null(target_jh));
-+ MethodHandles::init_MemberName(mname, target);
- }
- JVM_END
-
-@@ -1174,11 +1260,12 @@
- } else if (vmtarget->is_klass()) {
- x = Klass::cast((klassOop) vmtarget())->java_mirror();
- } else {
-- Handle mname2 = MethodHandles::new_MemberName(CHECK_NULL);
-- if (vmtarget->is_method())
-- x = MethodHandles::init_method_MemberName(mname2(), methodOop(vmtarget()), false, NULL);
-- else
-+ if (vmtarget->is_method()) {
-+ x = mname();
-+ } else {
-+ Handle mname2 = MethodHandles::new_MemberName(CHECK_NULL);
- x = MethodHandles::init_MemberName(mname2(), vmtarget());
-+ }
- }
- result->obj_at_put(1, x);
- return JNIHandles::make_local(env, result());
-@@ -1221,8 +1308,8 @@
- // %%% TO DO
- }
-
-- int res = MethodHandles::find_MemberNames(k(), name, sig, mflags,
-- caller(), skip, results());
-+ int res = MethodHandles::find_MemberNames(k, name, sig, mflags,
-+ caller, skip, results);
- // TO DO: expand at least some of the MemberNames, to avoid massive callbacks
- return res;
- }
---- ./hotspot/src/share/vm/prims/methodHandles.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/prims/methodHandles.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2008, 2014, 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
-@@ -39,7 +39,6 @@
- // in java.lang.invoke and sun.invoke.
- // See also javaClasses for layouts java_lang_invoke_Method{Handle,Type,Type::Form}.
- public:
-- public:
- static bool enabled() { return _enabled; }
- static void set_enabled(bool z);
-
-@@ -54,18 +53,18 @@
- static Handle resolve_MemberName(Handle mname, KlassHandle caller, TRAPS); // compute vmtarget/vmindex from name/type
- static void expand_MemberName(Handle mname, int suppress, TRAPS); // expand defc/name/type if missing
- static Handle new_MemberName(TRAPS); // must be followed by init_MemberName
-- static oop init_MemberName(oop mname_oop, oop target_oop); // compute vmtarget/vmindex from target
-- static oop init_method_MemberName(oop mname_oop, methodOop m, bool do_dispatch,
-- klassOop resolved_klass);
-- static oop init_field_MemberName(oop mname_oop, klassOop field_holder,
-+ static oop init_MemberName(Handle mname_h, Handle target_h); // compute vmtarget/vmindex from target
-+ static oop init_method_MemberName(Handle mname_h, methodOop m, bool do_dispatch,
-+ KlassHandle resolved_klass_h);
-+ static oop init_field_MemberName(Handle mname_h, KlassHandle field_holder_h,
- AccessFlags mods, oop type, oop name,
- intptr_t offset, bool is_setter = false);
-- static Handle init_method_MemberName(oop mname_oop, CallInfo& info, TRAPS);
-- static Handle init_field_MemberName(oop mname_oop, FieldAccessInfo& info, TRAPS);
-+ static Handle init_method_MemberName(Handle mname_h, CallInfo& info, TRAPS);
-+ static Handle init_field_MemberName(Handle mname_h, FieldAccessInfo& info, TRAPS);
- static int method_ref_kind(methodOop m, bool do_dispatch_if_possible = true);
-- static int find_MemberNames(klassOop k, Symbol* name, Symbol* sig,
-- int mflags, klassOop caller,
-- int skip, objArrayOop results);
-+ static int find_MemberNames(KlassHandle k, Symbol* name, Symbol* sig,
-+ int mflags, KlassHandle caller,
-+ int skip, objArrayHandle results);
- // bit values for suppress argument to expand_MemberName:
- enum { _suppress_defc = 1, _suppress_name = 2, _suppress_type = 4 };
-
-@@ -230,4 +229,26 @@
- void generate();
- };
-
-+//------------------------------------------------------------------------------
-+// MemberNameTable
-+//
-+
-+class MemberNameTable : public GrowableArray<jweak> {
-+ public:
-+ MemberNameTable(int methods_cnt);
-+ ~MemberNameTable();
-+
-+ void add_member_name(int index, jweak mem_name_ref);
-+ oop get_member_name(int index);
-+
-+ public:
-+ // RedefineClasses() API support:
-+ // If a MemberName refers to old_method then update it
-+ // to refer to new_method.
-+ void adjust_method_entries(methodOop* old_methods, methodOop* new_methods,
-+ int methods_length, bool *trace_name_printed);
-+ private:
-+ oop find_member_name_by_method(methodOop old_method);
-+};
-+
- #endif // SHARE_VM_PRIMS_METHODHANDLES_HPP
---- ./hotspot/src/share/vm/prims/whitebox.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/prims/whitebox.cpp Wed May 07 19:26:16 2014 -0700
-@@ -27,6 +27,8 @@
- #include "memory/universe.hpp"
- #include "oops/oop.inline.hpp"
-
-+#include "code/codeCache.hpp"
-+
- #include "classfile/symbolTable.hpp"
-
- #include "prims/whitebox.hpp"
-@@ -131,6 +133,13 @@
- return MemTracker::wbtest_wait_for_data_merge();
- WB_END
-
-+WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o))
-+ MutexLockerEx mu(Compile_lock);
-+ CodeCache::mark_all_nmethods_for_deoptimization();
-+ VM_Deoptimize op;
-+ VMThread::execute(&op);
-+WB_END
-+
- //Some convenience methods to deal with objects from java
- int WhiteBox::offset_for_field(const char* field_name, oop object,
- Symbol* signature_symbol) {
-@@ -204,6 +213,7 @@
- {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory },
- {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory },
- {CC"NMTWaitForDataMerge", CC"()Z", (void*)&WB_NMTWaitForDataMerge},
-+ {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll },
- };
-
- #undef CC
---- ./hotspot/src/share/vm/runtime/arguments.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/arguments.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1447,6 +1447,17 @@
- }
- FLAG_SET_DEFAULT(UseParallelGC, true);
-
-+ if (UseAdaptiveSizePolicy) {
-+ // We don't want to limit adaptive heap sizing's freedom to adjust the heap
-+ // unless the user actually sets these flags.
-+ if (FLAG_IS_DEFAULT(MinHeapFreeRatio)) {
-+ FLAG_SET_DEFAULT(MinHeapFreeRatio, 0);
-+ }
-+ if (FLAG_IS_DEFAULT(MaxHeapFreeRatio)) {
-+ FLAG_SET_DEFAULT(MaxHeapFreeRatio, 100);
-+ }
-+ }
-+
- // If no heap maximum was requested explicitly, use some reasonable fraction
- // of the physical memory, up to a maximum of 1GB.
- if (UseParallelGC) {
-@@ -1719,7 +1730,7 @@
- }
-
- bool Arguments::verify_percentage(uintx value, const char* name) {
-- if (value <= 100) {
-+ if (is_percentage(value)) {
- return true;
- }
- jio_fprintf(defaultStream::error_stream(),
-@@ -1768,6 +1779,34 @@
- }
- }
-
-+bool Arguments::verify_MinHeapFreeRatio(FormatBuffer<80>& err_msg, uintx min_heap_free_ratio) {
-+ if (!is_percentage(min_heap_free_ratio)) {
-+ err_msg.print("MinHeapFreeRatio must have a value between 0 and 100");
-+ return false;
-+ }
-+ if (min_heap_free_ratio > MaxHeapFreeRatio) {
-+ err_msg.print("MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
-+ "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")", min_heap_free_ratio,
-+ MaxHeapFreeRatio);
-+ return false;
-+ }
-+ return true;
-+}
-+
-+bool Arguments::verify_MaxHeapFreeRatio(FormatBuffer<80>& err_msg, uintx max_heap_free_ratio) {
-+ if (!is_percentage(max_heap_free_ratio)) {
-+ err_msg.print("MaxHeapFreeRatio must have a value between 0 and 100");
-+ return false;
-+ }
-+ if (max_heap_free_ratio < MinHeapFreeRatio) {
-+ err_msg.print("MaxHeapFreeRatio (" UINTX_FORMAT ") must be greater than or "
-+ "equal to MinHeapFreeRatio (" UINTX_FORMAT ")", max_heap_free_ratio,
-+ MinHeapFreeRatio);
-+ return false;
-+ }
-+ return true;
-+}
-+
- // Check consistency of GC selection
- bool Arguments::check_gc_consistency() {
- check_gclog_consistency();
-@@ -1852,15 +1891,19 @@
- "AdaptiveSizePolicyWeight");
- status = status && verify_percentage(AdaptivePermSizeWeight, "AdaptivePermSizeWeight");
- status = status && verify_percentage(ThresholdTolerance, "ThresholdTolerance");
-- status = status && verify_percentage(MinHeapFreeRatio, "MinHeapFreeRatio");
-- status = status && verify_percentage(MaxHeapFreeRatio, "MaxHeapFreeRatio");
--
-- if (MinHeapFreeRatio > MaxHeapFreeRatio) {
-- jio_fprintf(defaultStream::error_stream(),
-- "MinHeapFreeRatio (" UINTX_FORMAT ") must be less than or "
-- "equal to MaxHeapFreeRatio (" UINTX_FORMAT ")\n",
-- MinHeapFreeRatio, MaxHeapFreeRatio);
-- status = false;
-+
-+ {
-+ // Using "else if" below to avoid printing two error messages if min > max.
-+ // This will also prevent us from reporting both min>100 and max>100 at the
-+ // same time, but that is less annoying than printing two identical errors IMHO.
-+ FormatBuffer<80> err_msg("");
-+ if (!verify_MinHeapFreeRatio(err_msg, MinHeapFreeRatio)) {
-+ jio_fprintf(defaultStream::error_stream(), "%s\n", err_msg.buffer());
-+ status = false;
-+ } else if (!verify_MaxHeapFreeRatio(err_msg, MaxHeapFreeRatio)) {
-+ jio_fprintf(defaultStream::error_stream(), "%s\n", err_msg.buffer());
-+ status = false;
-+ }
- }
- // Keeping the heap 100% free is hard ;-) so limit it to 99%.
- MinHeapFreeRatio = MIN2(MinHeapFreeRatio, (uintx) 99);
-@@ -1943,11 +1986,12 @@
- // than just disable the lock verification. This will be fixed under
- // bug 4788986.
- if (UseConcMarkSweepGC && FLSVerifyAllHeapReferences) {
-- if (VerifyGCStartAt == 0) {
-+ if (VerifyDuringStartup) {
- warning("Heap verification at start-up disabled "
- "(due to current incompatibility with FLSVerifyAllHeapReferences)");
-- VerifyGCStartAt = 1; // Disable verification at start-up
-+ VerifyDuringStartup = false; // Disable verification at start-up
- }
-+
- if (VerifyBeforeExit) {
- warning("Heap verification at shutdown disabled "
- "(due to current incompatibility with FLSVerifyAllHeapReferences)");
-@@ -2549,7 +2593,9 @@
- FLAG_SET_CMDLINE(uintx, MaxNewSize, NewSize);
- }
-
-+#ifndef _ALLBSD_SOURCE // UseLargePages is not yet supported on BSD.
- FLAG_SET_DEFAULT(UseLargePages, true);
-+#endif
-
- // Increase some data structure sizes for efficiency
- FLAG_SET_CMDLINE(uintx, BaseFootPrintEstimate, MaxHeapSize);
-@@ -3111,6 +3157,10 @@
- UNSUPPORTED_OPTION(UseG1GC, "G1 GC");
- #endif
-
-+#ifdef _ALLBSD_SOURCE // UseLargePages is not yet supported on BSD.
-+ UNSUPPORTED_OPTION(UseLargePages, "-XX:+UseLargePages");
-+#endif
-+
- #ifndef PRODUCT
- if (TraceBytecodesAt != 0) {
- TraceBytecodes = true;
---- ./hotspot/src/share/vm/runtime/arguments.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/arguments.hpp Wed May 07 19:26:16 2014 -0700
-@@ -27,6 +27,7 @@
-
- #include "runtime/java.hpp"
- #include "runtime/perfData.hpp"
-+#include "utilities/debug.hpp"
- #include "utilities/top.hpp"
-
- // Arguments parses the command line and recognizes options
-@@ -350,6 +351,9 @@
- static bool is_bad_option(const JavaVMOption* option, jboolean ignore) {
- return is_bad_option(option, ignore, NULL);
- }
-+ static bool is_percentage(uintx val) {
-+ return val <= 100;
-+ }
- static bool verify_interval(uintx val, uintx min,
- uintx max, const char* name);
- static bool verify_min_value(intx val, intx min, const char* name);
-@@ -411,6 +415,12 @@
- public:
- // Parses the arguments
- static jint parse(const JavaVMInitArgs* args);
-+ // Verifies that the given value will fit as a MinHeapFreeRatio. If not, an error
-+ // message is returned in the provided buffer.
-+ static bool verify_MinHeapFreeRatio(FormatBuffer<80>& err_msg, uintx min_heap_free_ratio);
-+ // Verifies that the given value will fit as a MaxHeapFreeRatio. If not, an error
-+ // message is returned in the provided buffer.
-+ static bool verify_MaxHeapFreeRatio(FormatBuffer<80>& err_msg, uintx max_heap_free_ratio);
- // Check for consistency in the selection of the garbage collector.
- static bool check_gc_consistency();
- // Check consistecy or otherwise of VM argument settings
---- ./hotspot/src/share/vm/runtime/frame.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/frame.cpp Wed May 07 19:26:16 2014 -0700
-@@ -23,6 +23,7 @@
- */
-
- #include "precompiled.hpp"
-+#include "compiler/abstractCompiler.hpp"
- #include "gc_interface/collectedHeap.inline.hpp"
- #include "interpreter/interpreter.hpp"
- #include "interpreter/oopMapCache.hpp"
-@@ -559,7 +560,7 @@
-
- st->print("%s frame (sp=" INTPTR_FORMAT " unextended sp=" INTPTR_FORMAT, print_name(), sp(), unextended_sp());
- if (sp() != NULL)
-- st->print(", fp=" INTPTR_FORMAT ", pc=" INTPTR_FORMAT, fp(), pc());
-+ st->print(", fp=" INTPTR_FORMAT ", real_fp=" INTPTR_FORMAT ", pc=" INTPTR_FORMAT, fp(), real_fp(), pc());
-
- if (StubRoutines::contains(pc())) {
- st->print_cr(")");
-@@ -720,10 +721,14 @@
- } else if (_cb->is_buffer_blob()) {
- st->print("v ~BufferBlob::%s", ((BufferBlob *)_cb)->name());
- } else if (_cb->is_nmethod()) {
-- methodOop m = ((nmethod *)_cb)->method();
-+ nmethod* nm = (nmethod*)_cb;
-+ methodOop m = nm->method();
- if (m != NULL) {
- m->name_and_sig_as_C_string(buf, buflen);
-- st->print("J %s", buf);
-+ st->print("J %d%s %s %s (%d bytes) @ " PTR_FORMAT " [" PTR_FORMAT "+0x%x]",
-+ nm->compile_id(), (nm->is_osr_method() ? "%" : ""),
-+ ((nm->compiler() != NULL) ? nm->compiler()->name() : ""),
-+ buf, m->code_size(), _pc, _cb->code_begin(), _pc - _cb->code_begin());
- } else {
- st->print("J " PTR_FORMAT, pc());
- }
---- ./hotspot/src/share/vm/runtime/globals.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/globals.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1697,6 +1697,9 @@
- product(bool, CMSAbortSemantics, false, \
- "Whether abort-on-overflow semantics is implemented") \
- \
-+ product(bool, CMSParallelInitialMarkEnabled, false, \
-+ "Use the parallel initial mark.") \
-+ \
- product(bool, CMSParallelRemarkEnabled, true, \
- "Whether parallel remark enabled (only if ParNewGC)") \
- \
-@@ -1708,6 +1711,14 @@
- "Whether to always record survivor space PLAB bdries" \
- " (effective only if CMSParallelSurvivorRemarkEnabled)") \
- \
-+ product(bool, CMSEdenChunksRecordAlways, false, \
-+ "Whether to always record eden chunks used for " \
-+ "the parallel initial mark or remark of eden" ) \
-+ \
-+ product(bool, CMSPrintEdenSurvivorChunks, false, \
-+ "Print the eden and the survivor chunks used for the parallel " \
-+ "initial mark or remark of the eden/survivor spaces") \
-+ \
- product(bool, CMSConcurrentMTEnabled, true, \
- "Whether multi-threaded concurrent work enabled (if ParNewGC)") \
- \
-@@ -1917,6 +1928,9 @@
- notproduct(bool, ExecuteInternalVMTests, false, \
- "Enable execution of internal VM tests.") \
- \
-+ notproduct(bool, VerboseInternalVMTests, false, \
-+ "Turn on logging for internal VM tests.") \
-+ \
- product_pd(bool, UseTLAB, "Use thread-local object allocation") \
- \
- product_pd(bool, ResizeTLAB, \
-@@ -2126,6 +2140,13 @@
- product(intx, PrefetchFieldsAhead, -1, \
- "How many fields ahead to prefetch in oop scan (<= 0 means off)") \
- \
-+ diagnostic(bool, VerifySilently, false, \
-+ "Don't print print the verification progress") \
-+ \
-+ diagnostic(bool, VerifyDuringStartup, false, \
-+ "Verify memory system before executing any Java code " \
-+ "during VM initialization") \
-+ \
- diagnostic(bool, VerifyBeforeExit, trueInDebug, \
- "Verify system before exiting") \
- \
-@@ -3010,10 +3031,10 @@
- product_pd(uintx, MaxPermSize, \
- "Maximum size of permanent generation (in bytes)") \
- \
-- product(uintx, MinHeapFreeRatio, 40, \
-+ manageable(uintx, MinHeapFreeRatio, 40, \
- "Min percentage of heap free after GC to avoid expansion") \
- \
-- product(uintx, MaxHeapFreeRatio, 70, \
-+ manageable(uintx, MaxHeapFreeRatio, 70, \
- "Max percentage of heap free after GC to avoid shrinking") \
- \
- product(intx, SoftRefLRUPolicyMSPerMB, 1000, \
---- ./hotspot/src/share/vm/runtime/mutexLocker.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/mutexLocker.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -57,6 +57,7 @@
- Mutex* JNIGlobalHandle_lock = NULL;
- Mutex* JNIHandleBlockFreeList_lock = NULL;
- Mutex* JNICachedItableIndex_lock = NULL;
-+Mutex* MemberNameTable_lock = NULL;
- Mutex* JmethodIdCreation_lock = NULL;
- Mutex* JfieldIdCreation_lock = NULL;
- Monitor* JNICritical_lock = NULL;
-@@ -263,6 +264,7 @@
- def(Heap_lock , Monitor, nonleaf+1, false);
- def(JfieldIdCreation_lock , Mutex , nonleaf+1, true ); // jfieldID, Used in VM_Operation
- def(JNICachedItableIndex_lock , Mutex , nonleaf+1, false); // Used to cache an itable index during JNI invoke
-+ def(MemberNameTable_lock , Mutex , nonleaf+1, false); // Used to protect MemberNameTable
-
- def(CompiledIC_lock , Mutex , nonleaf+2, false); // locks VtableStubs_lock, InlineCacheBuffer_lock
- def(CompileTaskAlloc_lock , Mutex , nonleaf+2, true );
---- ./hotspot/src/share/vm/runtime/mutexLocker.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/mutexLocker.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -51,6 +51,7 @@
- extern Mutex* JNIGlobalHandle_lock; // a lock on creating JNI global handles
- extern Mutex* JNIHandleBlockFreeList_lock; // a lock on the JNI handle block free list
- extern Mutex* JNICachedItableIndex_lock; // a lock on caching an itable index during JNI invoke
-+extern Mutex* MemberNameTable_lock; // a lock on the MemberNameTable updates
- extern Mutex* JmethodIdCreation_lock; // a lock on creating JNI method identifiers
- extern Mutex* JfieldIdCreation_lock; // a lock on creating JNI static field identifiers
- extern Monitor* JNICritical_lock; // a lock used while entering and exiting JNI critical regions, allows GC to sometimes get in
---- ./hotspot/src/share/vm/runtime/os.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/os.hpp Wed May 07 19:26:16 2014 -0700
-@@ -330,8 +330,8 @@
-
- static char* non_memory_address_word();
- // reserve, commit and pin the entire memory region
-- static char* reserve_memory_special(size_t size, char* addr = NULL,
-- bool executable = false);
-+ static char* reserve_memory_special(size_t size, size_t alignment,
-+ char* addr, bool executable);
- static bool release_memory_special(char* addr, size_t bytes);
- static void large_page_init();
- static size_t large_page_size();
---- ./hotspot/src/share/vm/runtime/sweeper.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/sweeper.cpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -36,6 +36,7 @@
- #include "runtime/vm_operations.hpp"
- #include "trace/tracing.hpp"
- #include "utilities/events.hpp"
-+#include "utilities/ticks.inline.hpp"
- #include "utilities/xmlstream.hpp"
-
- #ifdef ASSERT
-@@ -148,12 +149,12 @@
-
- int NMethodSweeper::_number_of_flushes = 0; // Total of full traversals caused by full cache
- int NMethodSweeper::_total_nof_methods_reclaimed = 0;
--jlong NMethodSweeper::_total_time_sweeping = 0;
--jlong NMethodSweeper::_total_time_this_sweep = 0;
--jlong NMethodSweeper::_peak_sweep_time = 0;
--jlong NMethodSweeper::_peak_sweep_fraction_time = 0;
--jlong NMethodSweeper::_total_disconnect_time = 0;
--jlong NMethodSweeper::_peak_disconnect_time = 0;
-+Tickspan NMethodSweeper::_total_time_sweeping;
-+Tickspan NMethodSweeper::_total_time_this_sweep;
-+Tickspan NMethodSweeper::_peak_sweep_time;
-+Tickspan NMethodSweeper::_peak_sweep_fraction_time;
-+Tickspan NMethodSweeper::_total_disconnect_time;
-+Tickspan NMethodSweeper::_peak_disconnect_time;
-
- class MarkActivationClosure: public CodeBlobClosure {
- public:
-@@ -192,7 +193,7 @@
- _invocations = NmethodSweepFraction;
- _current = CodeCache::first_nmethod();
- _traversals += 1;
-- _total_time_this_sweep = 0;
-+ _total_time_this_sweep = Tickspan();
-
- if (PrintMethodFlushing) {
- tty->print_cr("### Sweep: stack traversal %d", _traversals);
-@@ -256,8 +257,7 @@
- }
-
- void NMethodSweeper::sweep_code_cache() {
--
-- jlong sweep_start_counter = os::elapsed_counter();
-+ Ticks sweep_start_counter = Ticks::now();
-
- _flushed_count = 0;
- _zombified_count = 0;
-@@ -322,8 +322,8 @@
- }
- }
-
-- jlong sweep_end_counter = os::elapsed_counter();
-- jlong sweep_time = sweep_end_counter - sweep_start_counter;
-+ const Ticks sweep_end_counter = Ticks::now();
-+ const Tickspan sweep_time = sweep_end_counter - sweep_start_counter;
- _total_time_sweeping += sweep_time;
- _total_time_this_sweep += sweep_time;
- _peak_sweep_fraction_time = MAX2(sweep_time, _peak_sweep_fraction_time);
-@@ -344,7 +344,7 @@
-
- #ifdef ASSERT
- if(PrintMethodFlushing) {
-- tty->print_cr("### sweeper: sweep time(%d): " INT64_FORMAT, _invocations, (jlong)sweep_time);
-+ tty->print_cr("### sweeper: sweep time(%d): " INT64_FORMAT, _invocations, (jlong)sweep_time.value());
- }
- #endif
-
-@@ -529,7 +529,7 @@
- }
- }
-
-- jlong disconnect_start_counter = os::elapsed_counter();
-+ Ticks disconnect_start_counter = Ticks::now();
-
- // Traverse the code cache trying to dump the oldest nmethods
- uint curr_max_comp_id = CompileBroker::get_compilation_id();
-@@ -577,8 +577,8 @@
- CompileBroker::set_should_compile_new_jobs(CompileBroker::stop_compilation);
- }
-
-- jlong disconnect_end_counter = os::elapsed_counter();
-- jlong disconnect_time = disconnect_end_counter - disconnect_start_counter;
-+ const Ticks disconnect_end_counter = Ticks::now();
-+ const Tickspan disconnect_time = disconnect_end_counter - disconnect_start_counter;
- _total_disconnect_time += disconnect_time;
- _peak_disconnect_time = MAX2(disconnect_time, _peak_disconnect_time);
-
-@@ -597,7 +597,7 @@
- #ifdef ASSERT
-
- if(PrintMethodFlushing && Verbose) {
-- tty->print_cr("### sweeper: unload time: " INT64_FORMAT, (jlong)disconnect_time);
-+ tty->print_cr("### sweeper: unload time: " INT64_FORMAT, (jlong)disconnect_time.value());
- }
- #endif
- }
---- ./hotspot/src/share/vm/runtime/sweeper.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/sweeper.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -25,6 +25,7 @@
- #ifndef SHARE_VM_RUNTIME_SWEEPER_HPP
- #define SHARE_VM_RUNTIME_SWEEPER_HPP
-
-+#include "utilities/ticks.hpp"
- // An NmethodSweeper is an incremental cleaner for:
- // - cleanup inline caches
- // - reclamation of unreferences zombie nmethods
-@@ -56,12 +57,12 @@
- // Stat counters
- static int _number_of_flushes; // Total of full traversals caused by full cache
- static int _total_nof_methods_reclaimed; // Accumulated nof methods flushed
-- static jlong _total_time_sweeping; // Accumulated time sweeping
-- static jlong _total_time_this_sweep; // Total time this sweep
-- static jlong _peak_sweep_time; // Peak time for a full sweep
-- static jlong _peak_sweep_fraction_time; // Peak time sweeping one fraction
-- static jlong _total_disconnect_time; // Total time cleaning code mem
-- static jlong _peak_disconnect_time; // Peak time cleaning code mem
-+ static Tickspan _total_time_sweeping; // Accumulated time sweeping
-+ static Tickspan _total_time_this_sweep; // Total time this sweep
-+ static Tickspan _peak_sweep_time; // Peak time for a full sweep
-+ static Tickspan _peak_sweep_fraction_time; // Peak time sweeping one fraction
-+ static Tickspan _total_disconnect_time; // Total time cleaning code mem
-+ static Tickspan _peak_disconnect_time; // Peak time cleaning code mem
-
- static void process_nmethod(nmethod *nm);
-
-@@ -71,13 +72,14 @@
- static long traversal_count() { return _traversals; }
- static int number_of_flushes() { return _number_of_flushes; }
- static int total_nof_methods_reclaimed() { return _total_nof_methods_reclaimed; }
-- static jlong total_time_sweeping() { return _total_time_sweeping; }
-- static jlong peak_sweep_time() { return _peak_sweep_time; }
-- static jlong peak_sweep_fraction_time() { return _peak_sweep_fraction_time; }
-- static jlong total_disconnect_time() { return _total_disconnect_time; }
-- static jlong peak_disconnect_time() { return _peak_disconnect_time; }
-+ static const Tickspan total_time_sweeping() { return _total_time_sweeping; }
-+ static const Tickspan peak_sweep_time() { return _peak_sweep_time; }
-+ static const Tickspan peak_sweep_fraction_time() { return _peak_sweep_fraction_time; }
-+ static const Tickspan total_disconnect_time() { return _total_disconnect_time; }
-+ static const Tickspan peak_disconnect_time() { return _peak_disconnect_time; }
-
- #ifdef ASSERT
-+ static bool is_sweeping(nmethod* which) { return _current == which; }
- // Keep track of sweeper activity in the ring buffer
- static void record_sweep(nmethod* nm, int line);
- static void report_events(int id, address entry);
---- ./hotspot/src/share/vm/runtime/thread.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/thread.cpp Wed May 07 19:26:16 2014 -0700
-@@ -3416,9 +3416,10 @@
- }
-
- assert (Universe::is_fully_initialized(), "not initialized");
-- if (VerifyBeforeGC && VerifyGCStartAt == 0) {
-- Universe::heap()->prepare_for_verify();
-- Universe::verify(); // make sure we're starting with a clean slate
-+ if (VerifyDuringStartup) {
-+ // Make sure we're starting with a clean slate.
-+ VM_Verify verify_op;
-+ VMThread::execute(&verify_op);
- }
-
- EXCEPTION_MARK;
-@@ -3504,11 +3505,12 @@
- java_lang_Thread::set_thread_status(thread_object,
- java_lang_Thread::RUNNABLE);
-
-- // The VM preresolve methods to these classes. Make sure that get initialized
-+ // The VM creates & returns objects of this class. Make sure it's initialized.
-+ initialize_class(vmSymbols::java_lang_Class(), CHECK_0);
-+
-+ // The VM preresolves methods to these classes. Make sure that they get initialized
- initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK_0);
- initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK_0);
-- // The VM creates & returns objects of this class. Make sure it's initialized.
-- initialize_class(vmSymbols::java_lang_Class(), CHECK_0);
- call_initializeSystemClass(CHECK_0);
-
- // get the Java runtime name after java.lang.System is initialized
---- ./hotspot/src/share/vm/runtime/virtualspace.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/virtualspace.cpp Wed May 07 19:26:16 2014 -0700
-@@ -42,8 +42,19 @@
-
-
- // ReservedSpace
-+
-+// Dummy constructor
-+ReservedSpace::ReservedSpace() : _base(NULL), _size(0), _noaccess_prefix(0),
-+ _alignment(0), _special(false), _executable(false) {
-+}
-+
- ReservedSpace::ReservedSpace(size_t size) {
-- initialize(size, 0, false, NULL, 0, false);
-+ size_t page_size = os::page_size_for_region(size, size, 1);
-+ bool large_pages = page_size != (size_t)os::vm_page_size();
-+ // Don't force the alignment to be large page aligned,
-+ // since that will waste memory.
-+ size_t alignment = os::vm_allocation_granularity();
-+ initialize(size, alignment, large_pages, NULL, 0, false);
- }
-
- ReservedSpace::ReservedSpace(size_t size, size_t alignment,
-@@ -323,16 +334,18 @@
-
- if (special) {
-
-- base = os::reserve_memory_special(size, requested_address, executable);
-+ base = os::reserve_memory_special(size, alignment, requested_address, executable);
-
- if (base != NULL) {
- if (failed_to_reserve_as_requested(base, requested_address, size, true)) {
- // OS ignored requested address. Try different address.
- return;
- }
-- // Check alignment constraints
-+ // Check alignment constraints.
- assert((uintptr_t) base % alignment == 0,
-- "Large pages returned a non-aligned address");
-+ err_msg("Large pages returned a non-aligned address, base: "
-+ PTR_FORMAT " alignment: " PTR_FORMAT,
-+ base, (void*)(uintptr_t)alignment));
- _special = true;
- } else {
- // failed; try to reserve regular memory below
-@@ -928,4 +941,188 @@
- tty->print_cr(" - [low_b, high_b]: [" INTPTR_FORMAT ", " INTPTR_FORMAT "]", low_boundary(), high_boundary());
- }
-
-+
-+/////////////// Unit tests ///////////////
-+
-+#ifndef PRODUCT
-+
-+#define test_log(...) \
-+ do {\
-+ if (VerboseInternalVMTests) { \
-+ tty->print_cr(__VA_ARGS__); \
-+ tty->flush(); \
-+ }\
-+ } while (false)
-+
-+class TestReservedSpace : AllStatic {
-+ public:
-+ static void small_page_write(void* addr, size_t size) {
-+ size_t page_size = os::vm_page_size();
-+
-+ char* end = (char*)addr + size;
-+ for (char* p = (char*)addr; p < end; p += page_size) {
-+ *p = 1;
-+ }
-+ }
-+
-+ static void release_memory_for_test(ReservedSpace rs) {
-+ if (rs.special()) {
-+ guarantee(os::release_memory_special(rs.base(), rs.size()), "Shouldn't fail");
-+ } else {
-+ guarantee(os::release_memory(rs.base(), rs.size()), "Shouldn't fail");
-+ }
-+ }
-+
-+ static void test_reserved_space1(size_t size, size_t alignment) {
-+ test_log("test_reserved_space1(%p)", (void*) (uintptr_t) size);
-+
-+ assert(is_size_aligned(size, alignment), "Incorrect input parameters");
-+
-+ ReservedSpace rs(size, // size
-+ alignment, // alignment
-+ UseLargePages, // large
-+ NULL, // requested_address
-+ 0); // noacces_prefix
-+
-+ test_log(" rs.special() == %d", rs.special());
-+
-+ assert(rs.base() != NULL, "Must be");
-+ assert(rs.size() == size, "Must be");
-+
-+ assert(is_ptr_aligned(rs.base(), alignment), "aligned sizes should always give aligned addresses");
-+ assert(is_size_aligned(rs.size(), alignment), "aligned sizes should always give aligned addresses");
-+
-+ if (rs.special()) {
-+ small_page_write(rs.base(), size);
-+ }
-+
-+ release_memory_for_test(rs);
-+ }
-+
-+ static void test_reserved_space2(size_t size) {
-+ test_log("test_reserved_space2(%p)", (void*)(uintptr_t)size);
-+
-+ assert(is_size_aligned(size, os::vm_allocation_granularity()), "Must be at least AG aligned");
-+
-+ ReservedSpace rs(size);
-+
-+ test_log(" rs.special() == %d", rs.special());
-+
-+ assert(rs.base() != NULL, "Must be");
-+ assert(rs.size() == size, "Must be");
-+
-+ if (rs.special()) {
-+ small_page_write(rs.base(), size);
-+ }
-+
-+ release_memory_for_test(rs);
-+ }
-+
-+ static void test_reserved_space3(size_t size, size_t alignment, bool maybe_large) {
-+ test_log("test_reserved_space3(%p, %p, %d)",
-+ (void*)(uintptr_t)size, (void*)(uintptr_t)alignment, maybe_large);
-+
-+ assert(is_size_aligned(size, os::vm_allocation_granularity()), "Must be at least AG aligned");
-+ assert(is_size_aligned(size, alignment), "Must be at least aligned against alignment");
-+
-+ bool large = maybe_large && UseLargePages && size >= os::large_page_size();
-+
-+ ReservedSpace rs(size, alignment, large, false);
-+
-+ test_log(" rs.special() == %d", rs.special());
-+
-+ assert(rs.base() != NULL, "Must be");
-+ assert(rs.size() == size, "Must be");
-+
-+ if (rs.special()) {
-+ small_page_write(rs.base(), size);
-+ }
-+
-+ release_memory_for_test(rs);
-+ }
-+
-+
-+ static void test_reserved_space1() {
-+ size_t size = 2 * 1024 * 1024;
-+ size_t ag = os::vm_allocation_granularity();
-+
-+ test_reserved_space1(size, ag);
-+ test_reserved_space1(size * 2, ag);
-+ test_reserved_space1(size * 10, ag);
-+ }
-+
-+ static void test_reserved_space2() {
-+ size_t size = 2 * 1024 * 1024;
-+ size_t ag = os::vm_allocation_granularity();
-+
-+ test_reserved_space2(size * 1);
-+ test_reserved_space2(size * 2);
-+ test_reserved_space2(size * 10);
-+ test_reserved_space2(ag);
-+ test_reserved_space2(size - ag);
-+ test_reserved_space2(size);
-+ test_reserved_space2(size + ag);
-+ test_reserved_space2(size * 2);
-+ test_reserved_space2(size * 2 - ag);
-+ test_reserved_space2(size * 2 + ag);
-+ test_reserved_space2(size * 3);
-+ test_reserved_space2(size * 3 - ag);
-+ test_reserved_space2(size * 3 + ag);
-+ test_reserved_space2(size * 10);
-+ test_reserved_space2(size * 10 + size / 2);
-+ }
-+
-+ static void test_reserved_space3() {
-+ size_t ag = os::vm_allocation_granularity();
-+
-+ test_reserved_space3(ag, ag , false);
-+ test_reserved_space3(ag * 2, ag , false);
-+ test_reserved_space3(ag * 3, ag , false);
-+ test_reserved_space3(ag * 2, ag * 2, false);
-+ test_reserved_space3(ag * 4, ag * 2, false);
-+ test_reserved_space3(ag * 8, ag * 2, false);
-+ test_reserved_space3(ag * 4, ag * 4, false);
-+ test_reserved_space3(ag * 8, ag * 4, false);
-+ test_reserved_space3(ag * 16, ag * 4, false);
-+
-+ if (UseLargePages) {
-+ size_t lp = os::large_page_size();
-+
-+ // Without large pages
-+ test_reserved_space3(lp, ag * 4, false);
-+ test_reserved_space3(lp * 2, ag * 4, false);
-+ test_reserved_space3(lp * 4, ag * 4, false);
-+ test_reserved_space3(lp, lp , false);
-+ test_reserved_space3(lp * 2, lp , false);
-+ test_reserved_space3(lp * 3, lp , false);
-+ test_reserved_space3(lp * 2, lp * 2, false);
-+ test_reserved_space3(lp * 4, lp * 2, false);
-+ test_reserved_space3(lp * 8, lp * 2, false);
-+
-+ // With large pages
-+ test_reserved_space3(lp, ag * 4 , true);
-+ test_reserved_space3(lp * 2, ag * 4, true);
-+ test_reserved_space3(lp * 4, ag * 4, true);
-+ test_reserved_space3(lp, lp , true);
-+ test_reserved_space3(lp * 2, lp , true);
-+ test_reserved_space3(lp * 3, lp , true);
-+ test_reserved_space3(lp * 2, lp * 2, true);
-+ test_reserved_space3(lp * 4, lp * 2, true);
-+ test_reserved_space3(lp * 8, lp * 2, true);
-+ }
-+ }
-+
-+ static void test_reserved_space() {
-+ test_reserved_space1();
-+ test_reserved_space2();
-+ test_reserved_space3();
-+ }
-+};
-+
-+void TestReservedSpace_test() {
-+ TestReservedSpace::test_reserved_space();
-+}
-+
-+#endif // PRODUCT
-+
- #endif
---- ./hotspot/src/share/vm/runtime/virtualspace.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/virtualspace.hpp Wed May 07 19:26:16 2014 -0700
-@@ -90,6 +90,7 @@
-
- public:
- // Constructor
-+ ReservedSpace();
- ReservedSpace(size_t size);
- ReservedSpace(size_t size, size_t alignment, bool large,
- char* requested_address = NULL,
---- ./hotspot/src/share/vm/runtime/vmThread.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/vmThread.cpp Wed May 07 19:26:16 2014 -0700
-@@ -305,7 +305,7 @@
- os::check_heap();
- // Silent verification so as not to pollute normal output,
- // unless we really asked for it.
-- Universe::verify(!(PrintGCDetails || Verbose));
-+ Universe::verify(!(PrintGCDetails || Verbose) || VerifySilently);
- }
-
- CompileBroker::set_should_block();
---- ./hotspot/src/share/vm/runtime/vm_operations.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/vm_operations.cpp Wed May 07 19:26:16 2014 -0700
-@@ -189,7 +189,8 @@
- }
-
- void VM_Verify::doit() {
-- Universe::verify();
-+ Universe::heap()->prepare_for_verify();
-+ Universe::verify(_silent);
- }
-
- bool VM_PrintThreads::doit_prologue() {
---- ./hotspot/src/share/vm/runtime/vm_operations.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/runtime/vm_operations.hpp Wed May 07 19:26:16 2014 -0700
-@@ -303,9 +303,9 @@
-
- class VM_Verify: public VM_Operation {
- private:
-- KlassHandle _dependee;
-+ bool _silent;
- public:
-- VM_Verify() {}
-+ VM_Verify(bool silent = VerifySilently) : _silent(silent) {}
- VMOp_Type type() const { return VMOp_Verify; }
- void doit();
- };
---- ./hotspot/src/share/vm/services/attachListener.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/services/attachListener.cpp Wed May 07 19:26:16 2014 -0700
-@@ -282,6 +282,20 @@
- return JNI_ERR;
- }
- }
-+
-+ if (strncmp(name, "MaxHeapFreeRatio", 17) == 0) {
-+ FormatBuffer<80> err_msg("");
-+ if (!Arguments::verify_MaxHeapFreeRatio(err_msg, value)) {
-+ out->print_cr(err_msg.buffer());
-+ return JNI_ERR;
-+ }
-+ } else if (strncmp(name, "MinHeapFreeRatio", 17) == 0) {
-+ FormatBuffer<80> err_msg("");
-+ if (!Arguments::verify_MinHeapFreeRatio(err_msg, value)) {
-+ out->print_cr(err_msg.buffer());
-+ return JNI_ERR;
-+ }
-+ }
- bool res = CommandLineFlags::uintxAtPut((char*)name, &value, ATTACH_ON_DEMAND);
- if (! res) {
- out->print_cr("setting flag %s failed", name);
-@@ -470,7 +484,17 @@
- vmSymbols::threadgroup_string_void_signature(),
- thread_group,
- string,
-- CHECK);
-+ THREAD);
-+
-+ if (HAS_PENDING_EXCEPTION) {
-+ tty->print_cr("Exception in VM (AttachListener::init) : ");
-+ java_lang_Throwable::print(PENDING_EXCEPTION, tty);
-+ tty->cr();
-+
-+ CLEAR_PENDING_EXCEPTION;
-+
-+ return;
-+ }
-
- KlassHandle group(THREAD, SystemDictionary::ThreadGroup_klass());
- JavaCalls::call_special(&result,
-@@ -479,7 +503,17 @@
- vmSymbols::add_method_name(),
- vmSymbols::thread_void_signature(),
- thread_oop, // ARG 1
-- CHECK);
-+ THREAD);
-+
-+ if (HAS_PENDING_EXCEPTION) {
-+ tty->print_cr("Exception in VM (AttachListener::init) : ");
-+ java_lang_Throwable::print(PENDING_EXCEPTION, tty);
-+ tty->cr();
-+
-+ CLEAR_PENDING_EXCEPTION;
-+
-+ return;
-+ }
-
- { MutexLocker mu(Threads_lock);
- JavaThread* listener_thread = new JavaThread(&attach_listener_thread_entry);
---- ./hotspot/src/share/vm/services/management.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/services/management.cpp Wed May 07 19:26:16 2014 -0700
-@@ -851,8 +851,6 @@
- total_used += u.used();
- total_committed += u.committed();
-
-- // if any one of the memory pool has undefined init_size or max_size,
-- // set it to -1
- if (u.init_size() == (size_t)-1) {
- has_undefined_init_size = true;
- }
-@@ -869,6 +867,15 @@
- }
- }
-
-+ // if any one of the memory pool has undefined init_size or max_size,
-+ // set it to -1
-+ if (has_undefined_init_size) {
-+ total_init = (size_t)-1;
-+ }
-+ if (has_undefined_max_size) {
-+ total_max = (size_t)-1;
-+ }
-+
- // In our current implementation, we make sure that all non-heap
- // pools have defined init and max sizes. Heap pools do not matter,
- // as we never use total_init and total_max for them.
-@@ -1793,6 +1800,18 @@
- succeed = CommandLineFlags::intxAtPut(name, &ivalue, MANAGEMENT);
- } else if (flag->is_uintx()) {
- uintx uvalue = (uintx)new_value.j;
-+
-+ if (strncmp(name, "MaxHeapFreeRatio", 17) == 0) {
-+ FormatBuffer<80> err_msg("");
-+ if (!Arguments::verify_MaxHeapFreeRatio(err_msg, uvalue)) {
-+ THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), err_msg.buffer());
-+ }
-+ } else if (strncmp(name, "MinHeapFreeRatio", 17) == 0) {
-+ FormatBuffer<80> err_msg("");
-+ if (!Arguments::verify_MinHeapFreeRatio(err_msg, uvalue)) {
-+ THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), err_msg.buffer());
-+ }
-+ }
- succeed = CommandLineFlags::uintxAtPut(name, &uvalue, MANAGEMENT);
- } else if (flag->is_uint64_t()) {
- uint64_t uvalue = (uint64_t)new_value.j;
---- ./hotspot/src/share/vm/services/memTracker.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/services/memTracker.hpp Wed May 07 19:26:16 2014 -0700
-@@ -302,6 +302,13 @@
- }
- }
-
-+ static inline void record_virtual_memory_release(address addr, size_t size,
-+ Thread* thread = NULL) {
-+ if (is_on()) {
-+ Tracker tkr(Tracker::Release, thread);
-+ tkr.record(addr, size);
-+ }
-+ }
-
- // record memory type on virtual memory base address
- static inline void record_virtual_memory_type(address base, MEMFLAGS flags,
---- ./hotspot/src/share/vm/trace/noTraceBackend.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/noTraceBackend.hpp Wed May 07 19:26:16 2014 -0700
-@@ -25,9 +25,7 @@
- #define SHARE_VM_TRACE_NOTRACEBACKEND_HPP
-
- #include "prims/jni.h"
--
--typedef jlong TracingTime;
--typedef jlong RelativeTracingTime;
-+#include "trace/traceTime.hpp"
-
- class NoTraceBackend {
- public:
-@@ -44,5 +42,3 @@
- typedef NoTraceBackend Tracing;
-
- #endif
--
--
---- ./hotspot/src/share/vm/trace/trace.xml Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/trace.xml Wed May 07 19:26:16 2014 -0700
-@@ -169,8 +169,8 @@
- <value type="UINT" field="gcId" label="GC ID" relation="GC_ID" />
- <value type="GCNAME" field="name" label="Name" description="The name of the Garbage Collector" />
- <value type="GCCAUSE" field="cause" label="Cause" description="The reason for triggering this Garbage Collection" />
-- <value type="RELATIVE_TICKS" field="sumOfPauses" label="Sum of Pauses" description="Sum of all the times in which Java execution was paused during the garbage collection" />
-- <value type="RELATIVE_TICKS" field="longestPause" label="Longest Pause" description="Longest individual pause during the garbage collection" />
-+ <value type="TICKSPAN" field="sumOfPauses" label="Sum of Pauses" description="Sum of all the times in which Java execution was paused during the garbage collection" />
-+ <value type="TICKSPAN" field="longestPause" label="Longest Pause" description="Longest individual pause during the garbage collection" />
- </event>
-
- <event id="GCParallelOld" path="vm/gc/collector/parold_garbage_collection" label="Parallel Old Garbage Collection"
---- ./hotspot/src/share/vm/trace/traceBackend.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/traceBackend.hpp Wed May 07 19:26:16 2014 -0700
-@@ -26,10 +26,11 @@
-
- #if INCLUDE_TRACE
-
-+#include "runtime/globals.hpp"
-+#include "runtime/os.hpp"
- #include "trace/traceTime.hpp"
- #include "tracefiles/traceEventIds.hpp"
--#include "runtime/globals.hpp"
--#include "runtime/os.hpp"
-+
-
- class TraceBackend {
- public:
-@@ -44,10 +45,6 @@
- return os::elapsed_counter();
- }
-
-- static TracingTime time_adjustment(jlong time) {
-- return time;
-- }
--
- static void on_unloading_classes(BoolObjectClosure* is_alive, int no_of_classes_unloading) {
- }
- };
---- ./hotspot/src/share/vm/trace/traceEvent.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/traceEvent.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2012, 2013, 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
-@@ -36,13 +36,10 @@
- #include "trace/tracing.hpp"
- #include "tracefiles/traceEventIds.hpp"
- #include "tracefiles/traceTypes.hpp"
-+#include "utilities/ticks.hpp"
-
- template<typename T>
- class TraceEvent : public StackObj {
-- protected:
-- jlong _startTime;
-- jlong _endTime;
--
- private:
- bool _started;
- #ifdef ASSERT
-@@ -52,6 +49,18 @@
- bool _ignore_check;
- #endif
-
-+ protected:
-+ jlong _startTime;
-+ jlong _endTime;
-+
-+ void set_starttime(const TracingTime& time) {
-+ _startTime = time;
-+ }
-+
-+ void set_endtime(const TracingTime& time) {
-+ _endTime = time;
-+ }
-+
- public:
- TraceEvent(EventStartTime timing=TIMED) :
- _startTime(0),
-@@ -90,7 +99,7 @@
- return;
- }
- if (_endTime == 0) {
-- static_cast<T *>(this)->set_endtime(Tracing::time());
-+ static_cast<T*>(this)->set_endtime(Tracing::time());
- }
- if (static_cast<T*>(this)->should_write()) {
- static_cast<T*>(this)->writeEvent();
-@@ -98,12 +107,12 @@
- set_commited();
- }
-
-- void set_starttime(jlong time) {
-- _startTime = time;
-+ void set_starttime(const Ticks& time) {
-+ _startTime = time.value();
- }
-
-- void set_endtime(jlong time) {
-- _endTime = time;
-+ void set_endtime(const Ticks& time) {
-+ _endTime = time.value();
- }
-
- TraceEventId id() const {
---- ./hotspot/src/share/vm/trace/traceEventClasses.xsl Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/traceEventClasses.xsl Wed May 07 19:26:16 2014 -0700
-@@ -1,6 +1,6 @@
- <?xml version="1.0" encoding="utf-8"?>
- <!--
-- Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+ Copyright (c) 2012, 2013, 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
-@@ -23,8 +23,8 @@
- -->
-
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-+<xsl:import href="xsl_util.xsl"/>
- <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
--<xsl:import href="xsl_util.xsl"/>
-
- <xsl:template match="/">
- <xsl:call-template name="file-header"/>
-@@ -40,6 +40,7 @@
- #include "runtime/handles.inline.hpp"
- #include "tracefiles/traceTypes.hpp"
- #include "trace/traceEvent.hpp"
-+#include "utilities/ticks.hpp"
-
- #if INCLUDE_TRACE
-
-@@ -54,8 +55,8 @@
- class TraceEvent {
- public:
- TraceEvent() {}
-- void set_starttime(jlong time) const {}
-- void set_endtime(jlong time) const {}
-+ void set_starttime(const Ticks&amp; time) {}
-+ void set_endtime(const Ticks&amp; time) {}
- bool should_commit() const { return false; }
- void commit() const {}
- };
-@@ -174,20 +175,21 @@
-
- <xsl:template match="value[@type='TICKS']" mode="write-setters">
- #if INCLUDE_TRACE
-- <xsl:value-of select="concat('void set_', @field, '(jlong time) { _', @field, ' = time; }')"/>
-+<xsl:value-of select="concat(' void set_', @field, '(const Ticks&amp; time) { _', @field, ' = time; }')"/>
- #else
-- <xsl:value-of select="concat('void set_', @field, '(jlong ignore) {}')"/>
-+<xsl:value-of select="concat(' void set_', @field, '(const Ticks&amp; ignore) {}')"/>
- #endif
- </xsl:template>
-
--<xsl:template match="value[@type='RELATIVE_TICKS']" mode="write-setters">
-+<xsl:template match="value[@type='TICKSPAN']" mode="write-setters">
- #if INCLUDE_TRACE
-- <xsl:value-of select="concat('void set_', @field, '(jlong time) { _', @field, ' = time; }')"/>
-+ <xsl:value-of select="concat(' void set_', @field, '(const Tickspan&amp; time) { _', @field, ' = time; }')"/>
- #else
-- <xsl:value-of select="concat('void set_', @field, '(jlong ignore) {}')"/>
-+ <xsl:value-of select="concat(' void set_', @field, '(const Tickspan&amp; ignore) {}')"/>
- #endif
- </xsl:template>
-
-+
- <xsl:template match="value" mode="write-fields">
- <xsl:variable name="type" select="@type"/>
- <xsl:variable name="wt" select="//primary_type[@symbol=$type]/@type"/>
-@@ -227,7 +229,17 @@
- <xsl:template match="value" mode="write-data">
- <xsl:variable name="type" select="@type"/>
- <xsl:variable name="wt" select="//primary_type[@symbol=$type]/@writetype"/>
-- <xsl:value-of select="concat(' ts.print_val(&quot;', @label, '&quot;, _', @field, ');')"/>
-+ <xsl:choose>
-+ <xsl:when test="@type='TICKSPAN'">
-+ <xsl:value-of select="concat(' ts.print_val(&quot;', @label, '&quot;, _', @field, '.value());')"/>
-+ </xsl:when>
-+ <xsl:when test="@type='TICKS'">
-+ <xsl:value-of select="concat(' ts.print_val(&quot;', @label, '&quot;, _', @field, '.value());')"/>
-+ </xsl:when>
-+ <xsl:otherwise>
-+ <xsl:value-of select="concat(' ts.print_val(&quot;', @label, '&quot;, _', @field, ');')"/>
-+ </xsl:otherwise>
-+ </xsl:choose>
- <xsl:if test="position() != last()">
- <xsl:text>
- ts.print(", ");
---- ./hotspot/src/share/vm/trace/traceEventIds.xsl Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/traceEventIds.xsl Wed May 07 19:26:16 2014 -0700
-@@ -1,6 +1,6 @@
- <?xml version="1.0" encoding="utf-8"?>
- <!--
-- Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+ Copyright (c) 2012, 2013, 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
-@@ -23,8 +23,8 @@
- -->
-
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-+<xsl:import href="xsl_util.xsl"/>
- <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
--<xsl:import href="xsl_util.xsl"/>
-
- <xsl:template match="/">
- <xsl:call-template name="file-header"/>
---- ./hotspot/src/share/vm/trace/traceMacros.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/traceMacros.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2012, 2013, 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
---- ./hotspot/src/share/vm/trace/traceTime.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/traceTime.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2012, 2013, 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
-@@ -28,6 +28,5 @@
- #include "prims/jni.h"
-
- typedef jlong TracingTime;
--typedef jlong RelativeTracingTime;
-
--#endif
-+#endif // SHARE_VM_TRACE_TRACETIME_HPP
---- ./hotspot/src/share/vm/trace/traceTypes.xsl Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/traceTypes.xsl Wed May 07 19:26:16 2014 -0700
-@@ -1,6 +1,6 @@
- <?xml version="1.0" encoding="utf-8"?>
- <!--
-- Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+ Copyright (c) 2012, 2013, 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
-@@ -23,8 +23,8 @@
- -->
-
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-+<xsl:import href="xsl_util.xsl"/>
- <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
--<xsl:import href="xsl_util.xsl"/>
-
- <xsl:template match="/">
- <xsl:call-template name="file-header"/>
-@@ -32,11 +32,13 @@
- #ifndef TRACEFILES_JFRTYPES_HPP
- #define TRACEFILES_JFRTYPES_HPP
-
-+
-+#include "oops/klassOop.hpp"
-+#include "oops/methodOop.hpp"
-+#include "oops/symbol.hpp"
- #include "trace/traceDataTypes.hpp"
- #include "utilities/globalDefinitions.hpp"
--#include "oops/symbol.hpp"
--#include "oops/klassOop.hpp"
--#include "oops/methodOop.hpp"
-+#include "utilities/ticks.hpp"
-
- enum JVMContentType {
- _not_a_content_type = (JVM_CONTENT_TYPES_START - 1),
---- ./hotspot/src/share/vm/trace/tracetypes.xml Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/tracetypes.xml Wed May 07 19:26:16 2014 -0700
-@@ -249,13 +249,13 @@
- <primary_type symbol="NANOS" datatype="LONG" contenttype="NANOS"
- type="s8" sizeop="sizeof(s8)"/>
-
-- <!-- 64-bit signed integer, SEMANTIC value ABSOLUTE TICKS -->
-+ <!-- 64-bit signed integer, SEMANTIC value TICKS -->
- <primary_type symbol="TICKS" datatype="LONG" contenttype="TICKS"
-- type="s8" sizeop="sizeof(s8)"/>
-+ type="Ticks" sizeop="sizeof(s8)"/>
-
-- <!-- 64-bit signed integer, SEMANTIC value RELATIVE TICKS -->
-- <primary_type symbol="RELATIVE_TICKS" datatype="LONG" contenttype="TICKS"
-- type="s8" sizeop="sizeof(s8)"/>
-+ <!-- 64-bit signed integer, SEMANTIC value TICKS duration -->
-+ <primary_type symbol="TICKSPAN" datatype="LONG" contenttype="TICKS"
-+ type="Tickspan" sizeop="sizeof(s8)"/>
-
- <!-- 64-bit unsigned integer, SEMANTIC value ADDRESS (mem loc) -->
- <primary_type symbol="ADDRESS" datatype="U8" contenttype="ADDRESS"
---- ./hotspot/src/share/vm/trace/tracing.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/trace/tracing.hpp Wed May 07 19:26:16 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2012, 2013, 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
---- ./hotspot/src/share/vm/utilities/globalDefinitions.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/utilities/globalDefinitions.hpp Wed May 07 19:26:16 2014 -0700
-@@ -373,6 +373,14 @@
-
- #define align_size_up_(size, alignment) (((size) + ((alignment) - 1)) & ~((alignment) - 1))
-
-+inline bool is_size_aligned(size_t size, size_t alignment) {
-+ return align_size_up_(size, alignment) == size;
-+}
-+
-+inline bool is_ptr_aligned(void* ptr, size_t alignment) {
-+ return align_size_up_((intptr_t)ptr, (intptr_t)alignment) == (intptr_t)ptr;
-+}
-+
- inline intptr_t align_size_up(intptr_t size, intptr_t alignment) {
- return align_size_up_(size, alignment);
- }
-@@ -383,6 +391,14 @@
- return align_size_down_(size, alignment);
- }
-
-+inline void* align_ptr_up(void* ptr, size_t alignment) {
-+ return (void*)align_size_up((intptr_t)ptr, (intptr_t)alignment);
-+}
-+
-+inline void* align_ptr_down(void* ptr, size_t alignment) {
-+ return (void*)align_size_down((intptr_t)ptr, (intptr_t)alignment);
-+}
-+
- // Align objects by rounding up their size, in HeapWord units.
-
- #define align_object_size_(size) align_size_up_(size, MinObjAlignment)
---- ./hotspot/src/share/vm/utilities/growableArray.hpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/utilities/growableArray.hpp Wed May 07 19:26:16 2014 -0700
-@@ -194,6 +194,7 @@
-
- void clear() { _len = 0; }
- int length() const { return _len; }
-+ int max_length() const { return _max; }
- void trunc_to(int l) { assert(l <= _len,"cannot increase length"); _len = l; }
- bool is_empty() const { return _len == 0; }
- bool is_nonempty() const { return _len != 0; }
-@@ -281,6 +282,13 @@
- return -1;
- }
-
-+ int find_from_end(const E& elem) const {
-+ for (int i = _len-1; i >= 0; i--) {
-+ if (_data[i] == elem) return i;
-+ }
-+ return -1;
-+ }
-+
- int find(void* token, bool f(void*, E)) const {
- for (int i = 0; i < _len; i++) {
- if (f(token, _data[i])) return i;
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/src/share/vm/utilities/ticks.cpp Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,68 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+#include "precompiled.hpp"
-+#include "runtime/os.hpp"
-+#include "utilities/ticks.inline.hpp"
-+
-+#ifdef ASSERT
-+ const jlong Ticks::invalid_time_stamp = -2; // 0xFFFF FFFF`FFFF FFFE
-+#endif
-+
-+void Ticks::stamp() {
-+ _stamp_ticks = os::elapsed_counter();
-+}
-+
-+const Ticks Ticks::now() {
-+ Ticks t;
-+ t.stamp();
-+ return t;
-+}
-+
-+Tickspan::Tickspan(const Ticks& end, const Ticks& start) {
-+ assert(end.value() != Ticks::invalid_time_stamp, "end is unstamped!");
-+ assert(start.value() != Ticks::invalid_time_stamp, "start is unstamped!");
-+
-+ assert(end >= start, "negative time!");
-+
-+ _span_ticks = end.value() - start.value();
-+}
-+
-+template <typename ReturnType>
-+static ReturnType time_conversion(const Tickspan& span, TicksToTimeHelper::Unit unit) {
-+ assert(TicksToTimeHelper::SECONDS == unit ||
-+ TicksToTimeHelper::MILLISECONDS == unit, "invalid unit!");
-+
-+ ReturnType frequency_per_unit = (ReturnType)os::elapsed_frequency() / (ReturnType)unit;
-+
-+ return (ReturnType) ((ReturnType)span.value() / frequency_per_unit);
-+}
-+
-+double TicksToTimeHelper::seconds(const Tickspan& span) {
-+ return time_conversion<double>(span, SECONDS);
-+}
-+
-+jlong TicksToTimeHelper::milliseconds(const Tickspan& span) {
-+ return time_conversion<jlong>(span, MILLISECONDS);
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/src/share/vm/utilities/ticks.hpp Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,111 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+#ifndef SHARE_VM_UTILITIES_TICKS_HPP
-+#define SHARE_VM_UTILITIES_TICKS_HPP
-+
-+#include "memory/allocation.hpp"
-+#include "utilities/globalDefinitions.hpp"
-+
-+class Ticks;
-+
-+class Tickspan VALUE_OBJ_CLASS_SPEC {
-+ friend class Ticks;
-+ friend Tickspan operator-(const Ticks& end, const Ticks& start);
-+
-+ private:
-+ jlong _span_ticks;
-+
-+ Tickspan(const Ticks& end, const Ticks& start);
-+
-+ public:
-+ Tickspan() : _span_ticks(0) {}
-+
-+ Tickspan& operator+=(const Tickspan& rhs) {
-+ _span_ticks += rhs._span_ticks;
-+ return *this;
-+ }
-+
-+ jlong value() const {
-+ return _span_ticks;
-+ }
-+
-+};
-+
-+class Ticks VALUE_OBJ_CLASS_SPEC {
-+ private:
-+ jlong _stamp_ticks;
-+
-+ public:
-+ Ticks() : _stamp_ticks(0) {
-+ assert((_stamp_ticks = invalid_time_stamp) == invalid_time_stamp,
-+ "initial unstamped time value assignment");
-+ }
-+
-+ Ticks& operator+=(const Tickspan& span) {
-+ _stamp_ticks += span.value();
-+ return *this;
-+ }
-+
-+ Ticks& operator-=(const Tickspan& span) {
-+ _stamp_ticks -= span.value();
-+ return *this;
-+ }
-+
-+ void stamp();
-+
-+ jlong value() const {
-+ return _stamp_ticks;
-+ }
-+
-+ static const Ticks now();
-+
-+#ifdef ASSERT
-+ static const jlong invalid_time_stamp;
-+#endif
-+
-+#ifndef PRODUCT
-+ // only for internal use by GC VM tests
-+ friend class TimePartitionPhasesIteratorTest;
-+ friend class GCTimerTest;
-+
-+ private:
-+ // implicit type conversion
-+ Ticks(int ticks) : _stamp_ticks(ticks) {}
-+
-+#endif // !PRODUCT
-+
-+};
-+
-+class TicksToTimeHelper : public AllStatic {
-+ public:
-+ enum Unit {
-+ SECONDS = 1,
-+ MILLISECONDS = 1000
-+ };
-+ static double seconds(const Tickspan& span);
-+ static jlong milliseconds(const Tickspan& span);
-+};
-+
-+#endif // SHARE_VM_UTILITIES_TICKS_HPP
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/src/share/vm/utilities/ticks.inline.hpp Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,97 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+#ifndef SHARE_VM_UTILITIES_TICKS_INLINE_HPP
-+#define SHARE_VM_UTILITIES_TICKS_INLINE_HPP
-+
-+#include "utilities/ticks.hpp"
-+
-+inline Tickspan operator+(Tickspan lhs, const Tickspan& rhs) {
-+ lhs += rhs;
-+ return lhs;
-+}
-+
-+inline bool operator==(const Tickspan& lhs, const Tickspan& rhs) {
-+ return lhs.value() == rhs.value();
-+}
-+
-+inline bool operator!=(const Tickspan& lhs, const Tickspan& rhs) {
-+ return !operator==(lhs,rhs);
-+}
-+
-+inline bool operator<(const Tickspan& lhs, const Tickspan& rhs) {
-+ return lhs.value() < rhs.value();
-+}
-+
-+inline bool operator>(const Tickspan& lhs, const Tickspan& rhs) {
-+ return operator<(rhs,lhs);
-+}
-+
-+inline bool operator<=(const Tickspan& lhs, const Tickspan& rhs) {
-+ return !operator>(lhs,rhs);
-+}
-+
-+inline bool operator>=(const Tickspan& lhs, const Tickspan& rhs) {
-+ return !operator<(lhs,rhs);
-+}
-+
-+inline Ticks operator+(Ticks lhs, const Tickspan& span) {
-+ lhs += span;
-+ return lhs;
-+}
-+
-+inline Ticks operator-(Ticks lhs, const Tickspan& span) {
-+ lhs -= span;
-+ return lhs;
-+}
-+
-+inline Tickspan operator-(const Ticks& end, const Ticks& start) {
-+ return Tickspan(end, start);
-+}
-+
-+inline bool operator==(const Ticks& lhs, const Ticks& rhs) {
-+ return lhs.value() == rhs.value();
-+}
-+
-+inline bool operator!=(const Ticks& lhs, const Ticks& rhs) {
-+ return !operator==(lhs,rhs);
-+}
-+
-+inline bool operator<(const Ticks& lhs, const Ticks& rhs) {
-+ return lhs.value() < rhs.value();
-+}
-+
-+inline bool operator>(const Ticks& lhs, const Ticks& rhs) {
-+ return operator<(rhs,lhs);
-+}
-+
-+inline bool operator<=(const Ticks& lhs, const Ticks& rhs) {
-+ return !operator>(lhs,rhs);
-+}
-+
-+inline bool operator>=(const Ticks& lhs, const Ticks& rhs) {
-+ return !operator<(lhs,rhs);
-+}
-+
-+#endif // SHARE_VM_UTILITIES_TICKS_INLINE_HPP
---- ./hotspot/src/share/vm/utilities/vmError.cpp Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/src/share/vm/utilities/vmError.cpp Wed May 07 19:26:16 2014 -0700
-@@ -583,6 +583,13 @@
- while (count++ < StackPrintLimit) {
- fr.print_on_error(st, buf, sizeof(buf));
- st->cr();
-+ // Compiled code may use EBP register on x86 so it looks like
-+ // non-walkable C frame. Use frame.sender() for java frames.
-+ if (_thread && _thread->is_Java_thread() && fr.is_java_frame()) {
-+ RegisterMap map((JavaThread*)_thread, false); // No update
-+ fr = fr.sender(&map);
-+ continue;
-+ }
- if (os::is_first_C_frame(&fr)) break;
- fr = os::get_sender_for_C_frame(&fr);
- }
-@@ -698,18 +705,6 @@
- st->cr();
- }
-
--#ifdef LINUX
-- STEP(193, "(printing large pages allocation errors)")
--
-- if (_verbose) {
-- jint largepage_failures = os::Linux::num_largepage_commit_fails;
-- if (largepage_failures > 0) {
-- st->print_cr("Large page allocation failures have occurred " INT32_FORMAT " times", largepage_failures);
-- st->cr();
-- }
-- }
--#endif
--
- STEP(195, "(printing code cache information)" )
-
- if (_verbose && Universe::is_fully_initialized()) {
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/compiler/8004051/Test8004051.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,56 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/**
-+ * @test
-+ * @bug 8004051
-+ * @bug 8005722
-+ * @summary assert(_oprs_len[mode] < maxNumberOfOperands) failed: array overflow
-+ *
-+ * @run main/othervm -Xcomp -client Test8004051
-+ */
-+
-+public class Test8004051 {
-+ public static void main(String[] argv) {
-+ Object o = new Object();
-+ fillPrimRect(1.1f, 1.2f, 1.3f, 1.4f,
-+ o, o,
-+ 1.5f, 1.6f, 1.7f, 1.8f,
-+ 2.0f, 2.1f, 2.2f, 2.3f,
-+ 2.4f, 2.5f, 2.6f, 2.7f,
-+ 100, 101);
-+ System.out.println("Test passed, test did not assert");
-+ }
-+
-+ static boolean fillPrimRect(float x, float y, float w, float h,
-+ Object rectTex, Object wrapTex,
-+ float bx, float by, float bw, float bh,
-+ float f1, float f2, float f3, float f4,
-+ float f5, float f6, float f7, float f8,
-+ int i1, int i2 ) {
-+ System.out.println(x + " " + y + " " + w + " " + h + " " +
-+ bx + " " + by + " " + bw + " " + bh);
-+ return true;
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/compiler/codegen/LoadWithMask.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,44 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8032207
-+ * @summary Invalid node sizing for loadUS2L_immI16 and loadI2L_immI
-+ * @run main/othervm -server -Xbatch -XX:-TieredCompilation -XX:CompileCommand=compileonly,LoadWithMask.foo LoadWithMask
-+ *
-+ */
-+public class LoadWithMask {
-+ static int x[] = new int[1];
-+ static long foo() {
-+ return x[0] & 0xfff0ffff;
-+ }
-+
-+ public static void main(String[] args) {
-+ x[0] = -1;
-+ long l = 0;
-+ for (int i = 0; i < 100000; ++i) {
-+ l = foo();
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/compiler/codegen/LoadWithMask2.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,55 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8031743
-+ * @summary loadI2L_immI broken for negative memory values
-+ * @run main/othervm -server -Xbatch -XX:-TieredCompilation -XX:CompileCommand=compileonly,*.foo* LoadWithMask2
-+ *
-+ */
-+public class LoadWithMask2 {
-+ static int x;
-+ static long foo1() {
-+ return x & 0xfffffffe;
-+ }
-+ static long foo2() {
-+ return x & 0xff000000;
-+ }
-+ static long foo3() {
-+ return x & 0x8abcdef1;
-+ }
-+
-+ public static void main(String[] args) {
-+ x = -1;
-+ long l = 0;
-+ for (int i = 0; i < 100000; ++i) {
-+ l = foo1() & foo2() & foo3();
-+ }
-+ if (l > 0) {
-+ System.out.println("FAILED");
-+ System.exit(97);
-+ }
-+ System.out.println("PASSED");
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/compiler/gcbarriers/G1CrashTest.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,84 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/**
-+ * @test
-+ * @bug 8023472
-+ * @summary C2 optimization breaks with G1
-+ *
-+ * @run main/othervm -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -Dcount=100000 G1CrashTest
-+ *
-+ * @author pbiswal@palantir.com
-+ */
-+
-+public class G1CrashTest {
-+ static Object[] set = new Object[11];
-+
-+ public static void main(String[] args) throws InterruptedException {
-+ for (int j = 0; j < Integer.getInteger("count"); j++) {
-+ Object key = new Object();
-+ insertKey(key);
-+ if (j > set.length / 2) {
-+ Object[] oldKeys = set;
-+ set = new Object[2 * set.length - 1];
-+ for (Object o : oldKeys) {
-+ if (o != null)
-+ insertKey(o);
-+ }
-+ }
-+ }
-+ }
-+
-+ static void insertKey(Object key) {
-+ int hash = key.hashCode() & 0x7fffffff;
-+ int index = hash % set.length;
-+ Object cur = set[index];
-+ if (cur == null)
-+ set[index] = key;
-+ else
-+ insertKeyRehash(key, index, hash, cur);
-+ }
-+
-+ static void insertKeyRehash(Object key, int index, int hash, Object cur) {
-+ int loopIndex = index;
-+ int firstRemoved = -1;
-+ do {
-+ if (cur == "dead")
-+ firstRemoved = 1;
-+ index--;
-+ if (index < 0)
-+ index += set.length;
-+ cur = set[index];
-+ if (cur == null) {
-+ if (firstRemoved != -1)
-+ set[firstRemoved] = "dead";
-+ else
-+ set[index] = key;
-+ return;
-+ }
-+ } while (index != loopIndex);
-+ if (firstRemoved != -1)
-+ set[firstRemoved] = null;
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/compiler/print/PrintInlining.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,36 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8022585
-+ * @summary VM crashes when ran with -XX:+PrintInlining
-+ * @run main/othervm -Xcomp -XX:+PrintInlining PrintInlining
-+ *
-+ */
-+
-+public class PrintInlining {
-+ public static void main(String[] args) {
-+ System.out.println("Passed");
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/compiler/reflection/ArrayNewInstanceOfVoid.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,44 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8029366
-+ * @summary ShouldNotReachHere error when creating an array with component type of void
-+ */
-+
-+public class ArrayNewInstanceOfVoid {
-+ public static void main(String[] args) {
-+ for (int i = 0; i < 100_000; i++) {
-+ test();
-+ }
-+ }
-+
-+ private static void test() {
-+ try {
-+ java.lang.reflect.Array.newInstance(void.class, 2);
-+ } catch (IllegalArgumentException e) {
-+ // expected
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/compiler/regalloc/C1ObjectSpillInLogicOp.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,45 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8027751
-+ * @summary C1 crashes generating G1 post-barrier in Unsafe.getAndSetObject() intrinsic because of the new value spill
-+ * @run main/othervm -XX:+UseG1GC C1ObjectSpillInLogicOp
-+ *
-+ * G1 barriers use logical operators (xor) on T_OBJECT mixed with T_LONG or T_INT.
-+ * The current implementation of logical operations on x86 in C1 doesn't allow for long operands to be on stack.
-+ * There is a special code in the register allocator that forces long arguments in registers on x86. However T_OBJECT
-+ * can be spilled just fine, and in that case the xor emission will fail.
-+ */
-+
-+import java.util.concurrent.atomic.*;
-+public class C1ObjectSpillInLogicOp {
-+ static public void main(String[] args) {
-+ AtomicReferenceArray<Integer> x = new AtomicReferenceArray(128);
-+ Integer y = new Integer(0);
-+ for (int i = 0; i < 50000; i++) {
-+ x.getAndSet(i % x.length(), y);
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/8000311/Test8000311.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,42 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test Test8000311
-+ * @key gc
-+ * @bug 8000311
-+ * @summary G1: ParallelGCThreads==0 broken
-+ * @run main/othervm -XX:+UseG1GC -XX:ParallelGCThreads=0 -XX:+ResizePLAB -XX:+ExplicitGCInvokesConcurrent Test8000311
-+ * @author filipp.zhinkin@oracle.com
-+ */
-+
-+import java.util.*;
-+
-+public class Test8000311 {
-+ public static void main(String args[]) {
-+ for(int i = 0; i<100; i++) {
-+ byte[] garbage = new byte[1000];
-+ System.gc();
-+ }
-+ }
-+}
---- ./hotspot/test/gc/TestVerifyBeforeGCDuringStartup.java Tue Mar 18 12:31:20 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,45 +0,0 @@
--/*
-- * Copyright (c) 2013, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--/* @test TestVerifyBeforeGCDuringStartup.java
-- * @key gc
-- * @bug 8010463
-- * @summary Simple test run with -XX:+VerifyBeforeGC -XX:-UseTLAB to verify 8010463
-- * @library /testlibrary
-- */
--
--import com.oracle.java.testlibrary.OutputAnalyzer;
--import com.oracle.java.testlibrary.ProcessTools;
--
--public class TestVerifyBeforeGCDuringStartup {
-- public static void main(String args[]) throws Exception {
-- ProcessBuilder pb =
-- ProcessTools.createJavaProcessBuilder(System.getProperty("test.vm.opts"),
-- "-XX:-UseTLAB",
-- "-XX:+UnlockDiagnosticVMOptions",
-- "-XX:+VerifyBeforeGC", "-version");
-- OutputAnalyzer output = new OutputAnalyzer(pb.start());
-- output.shouldContain("[Verifying");
-- output.shouldHaveExitValue(0);
-- }
--}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/TestVerifyDuringStartup.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,45 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/* @test TestVerifyDuringStartup.java
-+ * @key gc
-+ * @bug 8010463
-+ * @summary Simple test run with -XX:+VerifyDuringStartup -XX:-UseTLAB to verify 8010463
-+ * @library /testlibrary
-+ */
-+
-+import com.oracle.java.testlibrary.OutputAnalyzer;
-+import com.oracle.java.testlibrary.ProcessTools;
-+
-+public class TestVerifyDuringStartup {
-+ public static void main(String args[]) throws Exception {
-+ ProcessBuilder pb =
-+ ProcessTools.createJavaProcessBuilder(System.getProperty("test.vm.opts"),
-+ "-XX:-UseTLAB",
-+ "-XX:+UnlockDiagnosticVMOptions",
-+ "-XX:+VerifyDuringStartup", "-version");
-+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
-+ output.shouldContain("[Verifying");
-+ output.shouldHaveExitValue(0);
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/TestVerifySilently.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,84 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/* @test TestVerifySilently.java
-+ * @key gc
-+ * @bug 8032771
-+ * @summary Test silent verification.
-+ * @library /testlibrary
-+ */
-+
-+import com.oracle.java.testlibrary.OutputAnalyzer;
-+import com.oracle.java.testlibrary.ProcessTools;
-+import java.util.ArrayList;
-+import java.util.Collections;
-+
-+class RunSystemGC {
-+ public static void main(String args[]) throws Exception {
-+ System.gc();
-+ }
-+}
-+
-+
-+public class TestVerifySilently {
-+ private static String[] getTestJavaOpts() {
-+ String testVmOptsStr = System.getProperty("test.java.opts");
-+ if (!testVmOptsStr.isEmpty()) {
-+ return testVmOptsStr.split(" ");
-+ } else {
-+ return new String[] {};
-+ }
-+ }
-+
-+ private static OutputAnalyzer runTest(boolean verifySilently) throws Exception {
-+ ArrayList<String> vmOpts = new ArrayList();
-+
-+ Collections.addAll(vmOpts, getTestJavaOpts());
-+ Collections.addAll(vmOpts, new String[] {"-XX:+UnlockDiagnosticVMOptions",
-+ "-XX:+VerifyDuringStartup",
-+ "-XX:+VerifyBeforeGC",
-+ "-XX:+VerifyAfterGC",
-+ "-XX:" + (verifySilently ? "+":"-") + "VerifySilently",
-+ RunSystemGC.class.getName()});
-+ ProcessBuilder pb =
-+ ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
-+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
-+
-+ System.out.println("Output:\n" + output.getOutput());
-+ return output;
-+ }
-+
-+
-+ public static void main(String args[]) throws Exception {
-+
-+ OutputAnalyzer output;
-+
-+ output = runTest(false);
-+ output.shouldContain("[Verifying");
-+ output.shouldHaveExitValue(0);
-+
-+ output = runTest(true);
-+ output.shouldNotContain("[Verifying");
-+ output.shouldHaveExitValue(0);
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,64 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test TestDynMaxHeapFreeRatio
-+ * @bug 8028391
-+ * @summary Verify that MaxHeapFreeRatio flag is manageable
-+ * @library /testlibrary
-+ * @run main TestDynMaxHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 TestDynMaxHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 -XX:-UseAdaptiveSizePolicy TestDynMaxHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 TestDynMaxHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=51 -XX:MaxHeapFreeRatio=52 TestDynMaxHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=75 -XX:MaxHeapFreeRatio=100 TestDynMaxHeapFreeRatio
-+ */
-+import com.oracle.java.testlibrary.TestDynamicVMOption;
-+import com.oracle.java.testlibrary.DynamicVMOptionChecker;
-+
-+public class TestDynMaxHeapFreeRatio extends TestDynamicVMOption {
-+
-+ public static final String MinFreeRatioFlagName = "MinHeapFreeRatio";
-+ public static final String MaxFreeRatioFlagName = "MaxHeapFreeRatio";
-+
-+ public TestDynMaxHeapFreeRatio() {
-+ super(MaxFreeRatioFlagName);
-+ }
-+
-+ public void test() {
-+
-+ int minHeapFreeValue = DynamicVMOptionChecker.getIntValue(MinFreeRatioFlagName);
-+ System.out.println(MinFreeRatioFlagName + " = " + minHeapFreeValue);
-+
-+ testPercentageValues();
-+
-+ checkInvalidValue(Integer.toString(minHeapFreeValue - 1));
-+ checkValidValue(Integer.toString(minHeapFreeValue));
-+ checkValidValue("100");
-+ }
-+
-+ public static void main(String args[]) throws Exception {
-+ new TestDynMaxHeapFreeRatio().test();
-+ }
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,62 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test TestDynMinHeapFreeRatio
-+ * @bug 8028391
-+ * @summary Verify that MinHeapFreeRatio flag is manageable
-+ * @library /testlibrary
-+ * @run main TestDynMinHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=0 -XX:MaxHeapFreeRatio=100 TestDynMinHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 -XX:-UseAdaptiveSizePolicy TestDynMinHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=50 TestDynMinHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=51 -XX:MaxHeapFreeRatio=52 TestDynMinHeapFreeRatio
-+ * @run main/othervm -XX:MinHeapFreeRatio=75 -XX:MaxHeapFreeRatio=100 TestDynMinHeapFreeRatio
-+ */
-+import com.oracle.java.testlibrary.TestDynamicVMOption;
-+import com.oracle.java.testlibrary.DynamicVMOptionChecker;
-+
-+public class TestDynMinHeapFreeRatio extends TestDynamicVMOption {
-+
-+ public static final String MinFreeRatioFlagName = "MinHeapFreeRatio";
-+ public static final String MaxFreeRatioFlagName = "MaxHeapFreeRatio";
-+
-+ public TestDynMinHeapFreeRatio() {
-+ super(MinFreeRatioFlagName);
-+ }
-+
-+ public void test() {
-+ int maxHeapFreeValue = DynamicVMOptionChecker.getIntValue(MaxFreeRatioFlagName);
-+ System.out.println(MaxFreeRatioFlagName + " = " + maxHeapFreeValue);
-+
-+ testPercentageValues();
-+
-+ checkInvalidValue(Integer.toString(maxHeapFreeValue + 1));
-+ checkValidValue(Integer.toString(maxHeapFreeValue));
-+ checkValidValue("0");
-+ }
-+
-+ public static void main(String args[]) throws Exception {
-+ new TestDynMinHeapFreeRatio().test();
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/g1/TestHumongousCodeCacheRoots.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,143 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @key regression
-+ * @key gc
-+ * @bug 8027756
-+ * @library /testlibrary /testlibrary/whitebox
-+ * @build TestHumongousCodeCacheRoots
-+ * @run main ClassFileInstaller sun.hotspot.WhiteBox
-+ * @summary Humongous objects may have references from the code cache
-+ * @run main TestHumongousCodeCacheRoots
-+*/
-+
-+import com.oracle.java.testlibrary.*;
-+import sun.hotspot.WhiteBox;
-+
-+import java.util.ArrayList;
-+import java.util.Arrays;
-+
-+class TestHumongousCodeCacheRootsHelper {
-+
-+ static final int n = 1000000;
-+ static final int[] AA = new int[n];
-+ static final int[] BB = new int[n];
-+
-+ public static void main(String args[]) throws Exception {
-+ // do some work so that the compiler compiles this method, inlining the
-+ // reference to the integer array (which is a humonguous object) into
-+ // the code cache.
-+ for(int i = 0; i < n; i++) {
-+ AA[i] = 0;
-+ BB[i] = 0;
-+ }
-+ // trigger a GC that checks that the verification code allows humongous
-+ // objects with code cache roots; objects should be all live here.
-+ System.gc();
-+
-+ // deoptimize everyhing: this should make all compiled code zombies.
-+ WhiteBox wb = WhiteBox.getWhiteBox();
-+ wb.deoptimizeAll();
-+
-+ // trigger a GC that checks that the verification code allows humongous
-+ // objects with code cache roots; objects should be all live here.
-+ System.gc();
-+
-+ // wait a little for the code cache sweeper to try to clean up zombie nmethods
-+ // and unregister the code roots.
-+ try { Thread.sleep(5000); } catch (InterruptedException ex) { }
-+
-+ // do some work on the arrays to make sure that they need to be live after the GCs
-+ for(int i = 0; i < n; i++) {
-+ AA[i] = 1;
-+ BB[i] = 10;
-+ }
-+
-+ System.out.println();
-+ }
-+}
-+
-+public class TestHumongousCodeCacheRoots {
-+
-+ /**
-+ * Executes a class in a new VM process with the given parameters.
-+ * @param vmargs Arguments to the VM to run
-+ * @param classname Name of the class to run
-+ * @param arguments Arguments to the class
-+ * @param useTestDotJavaDotOpts Use test.java.opts as part of the VM argument string
-+ * @return The OutputAnalyzer with the results for the invocation.
-+ */
-+ public static OutputAnalyzer runWhiteBoxTest(String[] vmargs, String classname, String[] arguments, boolean useTestDotJavaDotOpts) throws Exception {
-+ ArrayList<String> finalargs = new ArrayList<String>();
-+
-+ String[] whiteboxOpts = new String[] {
-+ "-Xbootclasspath/a:.",
-+ "-XX:+UnlockDiagnosticVMOptions", "-XX:+WhiteBoxAPI",
-+ "-cp", System.getProperty("java.class.path"),
-+ };
-+
-+ if (useTestDotJavaDotOpts) {
-+ // System.getProperty("test.java.opts") is '' if no options is set,
-+ // we need to skip such a result
-+ String[] externalVMOpts = new String[0];
-+ if (System.getProperty("test.java.opts") != null && System.getProperty("test.java.opts").length() != 0) {
-+ externalVMOpts = System.getProperty("test.java.opts").split(" ");
-+ }
-+ finalargs.addAll(Arrays.asList(externalVMOpts));
-+ }
-+
-+ finalargs.addAll(Arrays.asList(vmargs));
-+ finalargs.addAll(Arrays.asList(whiteboxOpts));
-+ finalargs.add(classname);
-+ finalargs.addAll(Arrays.asList(arguments));
-+
-+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(finalargs.toArray(new String[0]));
-+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
-+ output.shouldHaveExitValue(0);
-+
-+ return output;
-+ }
-+
-+ public static void runTest(String compiler, String[] other) throws Exception {
-+ ArrayList<String> joined = new ArrayList<String>();
-+ joined.add(compiler);
-+ joined.addAll(Arrays.asList(other));
-+ runWhiteBoxTest(joined.toArray(new String[0]), TestHumongousCodeCacheRootsHelper.class.getName(),
-+ new String[] {}, false);
-+ }
-+
-+ public static void main(String[] args) throws Exception {
-+ final String[] baseArguments = new String[] {
-+ "-XX:+UseG1GC", "-XX:G1HeapRegionSize=1M", "-Xmx100M", // make sure we get a humongous region
-+ "-XX:+UnlockDiagnosticVMOptions",
-+ "-XX:InitiatingHeapOccupancyPercent=1", // strong code root marking
-+ "-XX:+G1VerifyHeapRegionCodeRoots", "-XX:+VerifyAfterGC", // make sure that verification is run
-+ "-XX:NmethodSweepFraction=1", "-XX:NmethodSweepCheckInterval=1", // make the code cache sweep more predictable
-+ };
-+ runTest("-client", baseArguments);
-+ runTest("-server", baseArguments);
-+ }
-+}
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/g1/TestPrintRegionRememberedSetInfo.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,92 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test TestPrintRegionRememberedSetInfo
-+ * @key gc
-+ * @bug 8014240
-+ * @summary Test output of G1PrintRegionRememberedSetInfo
-+ * @library /testlibrary
-+ * @run main TestPrintRegionRememberedSetInfo
-+ * @author thomas.schatzl@oracle.com
-+ */
-+
-+import com.oracle.java.testlibrary.*;
-+import java.lang.Thread;
-+import java.util.ArrayList;
-+import java.util.Arrays;
-+
-+class RunAndWaitForMarking {
-+ public static void main(String[] args) {
-+ System.gc();
-+ try {
-+ Thread.sleep(200);
-+ } catch (InterruptedException e) {
-+ }
-+ }
-+}
-+
-+public class TestPrintRegionRememberedSetInfo {
-+
-+ public static String runTest(String arg) throws Exception {
-+ ArrayList<String> finalargs = new ArrayList<String>();
-+ String[] defaultArgs = new String[] {
-+ "-XX:+UseG1GC",
-+ "-Xmx10m",
-+ "-XX:+ExplicitGCInvokesConcurrent",
-+ "-XX:+UnlockDiagnosticVMOptions",
-+ "-XX:+G1PrintRegionLivenessInfo",
-+ "-XX:G1HeapRegionSize=1M",
-+ "-XX:InitiatingHeapOccupancyPercent=0",
-+ };
-+
-+ finalargs.addAll(Arrays.asList(defaultArgs));
-+ finalargs.add(arg);
-+
-+ finalargs.add(RunAndWaitForMarking.class.getName());
-+
-+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
-+ finalargs.toArray(new String[0]));
-+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
-+ output.shouldHaveExitValue(0);
-+
-+ String result = output.getStdout();
-+ return result;
-+ }
-+
-+ public static void main(String[] args) throws Exception {
-+ String result;
-+
-+ result = runTest("-XX:+G1PrintRegionLivenessInfo");
-+ // check that we got region statistics output
-+ if (result.indexOf("PHASE") == -1) {
-+ throw new RuntimeException("Unexpected output from -XX:+PrintRegionLivenessInfo found.");
-+ }
-+
-+ result = runTest("-XX:-G1PrintRegionLivenessInfo");
-+ if (result.indexOf("remset") != -1) {
-+ throw new RuntimeException("Should find remembered set information in output.");
-+ }
-+ }
-+}
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/g1/TestSummarizeRSetStats.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,85 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test TestSummarizeRSetStats.java
-+ * @bug 8013895
-+ * @library /testlibrary
-+ * @build TestSummarizeRSetStatsTools TestSummarizeRSetStats
-+ * @summary Verify output of -XX:+G1SummarizeRSetStats
-+ * @run main TestSummarizeRSetStats
-+ *
-+ * Test the output of G1SummarizeRSetStats in conjunction with G1SummarizeRSetStatsPeriod.
-+ */
-+
-+public class TestSummarizeRSetStats {
-+
-+ public static void main(String[] args) throws Exception {
-+ String result;
-+
-+ if (!TestSummarizeRSetStatsTools.testingG1GC()) {
-+ return;
-+ }
-+
-+ // no remembered set summary output
-+ result = TestSummarizeRSetStatsTools.runTest(null, 0);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 0, 0);
-+
-+ // no remembered set summary output
-+ result = TestSummarizeRSetStatsTools.runTest(null, 2);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 0, 0);
-+
-+ // no remembered set summary output
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:G1SummarizeRSetStatsPeriod=1" }, 3);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 0, 0);
-+
-+ // single remembered set summary output at the end
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats" }, 0);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 0);
-+
-+ // single remembered set summary output at the end
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats" }, 2);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 0);
-+
-+ // single remembered set summary output
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 0);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 0);
-+
-+ // two times remembered set summary output
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 1);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 2);
-+
-+ // four times remembered set summary output
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 3);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 6);
-+
-+ // three times remembered set summary output
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=2" }, 3);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 4);
-+
-+ // single remembered set summary output
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=100" }, 3);
-+ TestSummarizeRSetStatsTools.expectRSetSummaries(result, 1, 2);
-+ }
-+}
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/g1/TestSummarizeRSetStatsPerRegion.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,55 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test TestSummarizeRSetStatsPerRegion.java
-+ * @bug 8014078
-+ * @library /testlibrary
-+ * @build TestSummarizeRSetStatsTools TestSummarizeRSetStatsPerRegion
-+ * @summary Verify output of -XX:+G1SummarizeRSetStats in regards to per-region type output
-+ * @run main TestSummarizeRSetStatsPerRegion
-+ */
-+
-+import com.oracle.java.testlibrary.*;
-+import java.lang.Thread;
-+import java.util.ArrayList;
-+import java.util.Arrays;
-+
-+public class TestSummarizeRSetStatsPerRegion {
-+
-+ public static void main(String[] args) throws Exception {
-+ String result;
-+
-+ if (!TestSummarizeRSetStatsTools.testingG1GC()) {
-+ return;
-+ }
-+
-+ // single remembered set summary output at the end
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats" }, 0);
-+ TestSummarizeRSetStatsTools.expectPerRegionRSetSummaries(result, 1, 0);
-+
-+ // two times remembered set summary output
-+ result = TestSummarizeRSetStatsTools.runTest(new String[] { "-XX:+G1SummarizeRSetStats", "-XX:G1SummarizeRSetStatsPeriod=1" }, 1);
-+ TestSummarizeRSetStatsTools.expectPerRegionRSetSummaries(result, 1, 2);
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/g1/TestSummarizeRSetStatsThreads.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,83 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test TestSummarizeRSetStatsThreads
-+ * @bug 8025441
-+ * @summary Ensure that various values of worker threads/concurrent
-+ * refinement threads do not crash the VM.
-+ * @key gc
-+ * @library /testlibrary
-+ */
-+
-+import java.util.regex.Matcher;
-+import java.util.regex.Pattern;
-+
-+import com.oracle.java.testlibrary.ProcessTools;
-+import com.oracle.java.testlibrary.OutputAnalyzer;
-+
-+public class TestSummarizeRSetStatsThreads {
-+
-+ private static void runTest(int refinementThreads, int workerThreads) throws Exception {
-+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseG1GC",
-+ "-XX:+UnlockDiagnosticVMOptions",
-+ "-XX:+G1SummarizeRSetStats",
-+ "-XX:G1ConcRefinementThreads=" + refinementThreads,
-+ "-XX:ParallelGCThreads=" + workerThreads,
-+ "-version");
-+
-+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
-+
-+ // check output to contain the string "Concurrent RS threads times (s)" followed by
-+ // the correct number of values in the next line.
-+
-+ // a zero in refinement thread numbers indicates that the value in ParallelGCThreads should be used.
-+ // Additionally use at least one thread.
-+ int expectedNumRefinementThreads = refinementThreads == 0 ? workerThreads : refinementThreads;
-+ expectedNumRefinementThreads = Math.max(1, expectedNumRefinementThreads);
-+ // create the pattern made up of n copies of a floating point number pattern
-+ String numberPattern = String.format("%0" + expectedNumRefinementThreads + "d", 0)
-+ .replace("0", "\\s+\\d+\\.\\d+");
-+ String pattern = "Concurrent RS threads times \\(s\\)$" + numberPattern + "$";
-+ Matcher m = Pattern.compile(pattern, Pattern.MULTILINE).matcher(output.getStdout());
-+
-+ if (!m.find()) {
-+ throw new Exception("Could not find correct output for concurrent RS threads times in stdout," +
-+ " should match the pattern \"" + pattern + "\", but stdout is \n" + output.getStdout());
-+ }
-+ output.shouldHaveExitValue(0);
-+ }
-+
-+ public static void main(String[] args) throws Exception {
-+ if (!TestSummarizeRSetStatsTools.testingG1GC()) {
-+ return;
-+ }
-+ // different valid combinations of number of refinement and gc worker threads
-+ runTest(0, 0);
-+ runTest(0, 5);
-+ runTest(5, 0);
-+ runTest(10, 10);
-+ runTest(1, 2);
-+ runTest(4, 3);
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/gc/g1/TestSummarizeRSetStatsTools.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,154 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * Common helpers for TestSummarizeRSetStats* tests
-+ */
-+
-+import sun.management.ManagementFactoryHelper;
-+import com.sun.management.HotSpotDiagnosticMXBean;
-+import com.sun.management.VMOption;
-+
-+import com.oracle.java.testlibrary.*;
-+import java.util.regex.Matcher;
-+import java.util.regex.Pattern;
-+import java.lang.Thread;
-+import java.util.ArrayList;
-+import java.util.Arrays;
-+
-+class VerifySummaryOutput {
-+ // 4M size, both are directly allocated into the old gen
-+ static Object[] largeObject1 = new Object[1024 * 1024];
-+ static Object[] largeObject2 = new Object[1024 * 1024];
-+
-+ static int[] temp;
-+
-+ public static void main(String[] args) {
-+ // create some cross-references between these objects
-+ for (int i = 0; i < largeObject1.length; i++) {
-+ largeObject1[i] = largeObject2;
-+ }
-+
-+ for (int i = 0; i < largeObject2.length; i++) {
-+ largeObject2[i] = largeObject1;
-+ }
-+
-+ int numGCs = Integer.parseInt(args[0]);
-+
-+ if (numGCs > 0) {
-+ // try to force a minor collection: the young gen is 4M, the
-+ // amount of data allocated below is roughly that (4*1024*1024 +
-+ // some header data)
-+ for (int i = 0; i < 1024 ; i++) {
-+ temp = new int[1024];
-+ }
-+ }
-+
-+ for (int i = 0; i < numGCs - 1; i++) {
-+ System.gc();
-+ }
-+ }
-+}
-+
-+public class TestSummarizeRSetStatsTools {
-+
-+ // the VM is currently run using G1GC, i.e. trying to test G1 functionality.
-+ public static boolean testingG1GC() {
-+ HotSpotDiagnosticMXBean diagnostic = ManagementFactoryHelper.getDiagnosticMXBean();
-+
-+ VMOption option = diagnostic.getVMOption("UseG1GC");
-+ if (option.getValue().equals("false")) {
-+ System.out.println("Skipping this test. It is only a G1 test.");
-+ return false;
-+ }
-+ return true;
-+ }
-+
-+ public static String runTest(String[] additionalArgs, int numGCs) throws Exception {
-+ ArrayList<String> finalargs = new ArrayList<String>();
-+ String[] defaultArgs = new String[] {
-+ "-XX:+UseG1GC",
-+ "-XX:+UseCompressedOops",
-+ "-Xmn4m",
-+ "-Xmx20m",
-+ "-XX:InitiatingHeapOccupancyPercent=100", // we don't want the additional GCs due to initial marking
-+ "-XX:+PrintGC",
-+ "-XX:+UnlockDiagnosticVMOptions",
-+ "-XX:G1HeapRegionSize=1M",
-+ };
-+
-+ finalargs.addAll(Arrays.asList(defaultArgs));
-+
-+ if (additionalArgs != null) {
-+ finalargs.addAll(Arrays.asList(additionalArgs));
-+ }
-+
-+ finalargs.add(VerifySummaryOutput.class.getName());
-+ finalargs.add(String.valueOf(numGCs));
-+
-+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
-+ finalargs.toArray(new String[0]));
-+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
-+
-+ output.shouldHaveExitValue(0);
-+
-+ String result = output.getStdout();
-+ return result;
-+ }
-+
-+ private static void checkCounts(int expected, int actual, String which) throws Exception {
-+ if (expected != actual) {
-+ throw new Exception("RSet summaries mention " + which + " regions an incorrect number of times. Expected " + expected + ", got " + actual);
-+ }
-+ }
-+
-+ public static void expectPerRegionRSetSummaries(String result, int expectedCumulative, int expectedPeriodic) throws Exception {
-+ expectRSetSummaries(result, expectedCumulative, expectedPeriodic);
-+ int actualYoung = result.split("Young regions").length - 1;
-+ int actualHumonguous = result.split("Humonguous regions").length - 1;
-+ int actualFree = result.split("Free regions").length - 1;
-+ int actualOther = result.split("Old regions").length - 1;
-+
-+ // the strings we check for above are printed four times per summary
-+ int expectedPerRegionTypeInfo = (expectedCumulative + expectedPeriodic) * 4;
-+
-+ checkCounts(expectedPerRegionTypeInfo, actualYoung, "Young");
-+ checkCounts(expectedPerRegionTypeInfo, actualHumonguous, "Humonguous");
-+ checkCounts(expectedPerRegionTypeInfo, actualFree, "Free");
-+ checkCounts(expectedPerRegionTypeInfo, actualOther, "Old");
-+ }
-+
-+ public static void expectRSetSummaries(String result, int expectedCumulative, int expectedPeriodic) throws Exception {
-+ int actualTotal = result.split("concurrent refinement").length - 1;
-+ int actualCumulative = result.split("Cumulative RS summary").length - 1;
-+
-+ if (expectedCumulative != actualCumulative) {
-+ throw new Exception("Incorrect amount of RSet summaries at the end. Expected " + expectedCumulative + ", got " + actualCumulative);
-+ }
-+
-+ if (expectedPeriodic != (actualTotal - actualCumulative)) {
-+ throw new Exception("Incorrect amount of per-period RSet summaries at the end. Expected " + expectedPeriodic + ", got " + (actualTotal - actualCumulative));
-+ }
-+ }
-+}
-+
---- ./hotspot/test/runtime/6929067/Test6929067.sh Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/test/runtime/6929067/Test6929067.sh Wed May 07 19:26:16 2014 -0700
-@@ -3,6 +3,7 @@
- ##
- ## @test Test6929067.sh
- ## @bug 6929067
-+## @bug 8021296
- ## @summary Stack guard pages should be removed when thread is detached
- ## @compile T.java
- ## @run shell Test6929067.sh
-@@ -21,6 +22,11 @@
- OS=`uname -s`
- case "$OS" in
- Linux)
-+ gcc_cmd=`which gcc`
-+ if [ "x$gcc_cmd" == "x" ]; then
-+ echo "WARNING: gcc not found. Cannot execute test." 2>&1
-+ exit 0;
-+ fi
- NULL=/dev/null
- PS=":"
- FS="/"
-@@ -119,10 +125,10 @@
- # Check to ensure you have a /usr/lib/libpthread.so if you don't please look
- # for /usr/lib/`uname -m`-linux-gnu version ensure to add that path to below compilation.
-
--gcc -DLINUX ${COMP_FLAG} -o invoke \
-- -I${COMPILEJAVA}/include -I${COMPILEJAVA}/include/linux \
-- -L${COMPILEJAVA}/jre/lib/${ARCH}/${VMTYPE} \
-- -ljvm -lpthread invoke.c
-+$gcc_cmd -DLINUX ${COMP_FLAG} -o invoke \
-+ -I${COMPILEJAVA}/include -I${COMPILEJAVA}/include/linux \
-+ -L${COMPILEJAVA}/jre/lib/${ARCH}/${VMTYPE} \
-+ -ljvm -lpthread invoke.c
-
- ./invoke
- exit $?
---- ./hotspot/test/runtime/7107135/Test7107135.sh Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/test/runtime/7107135/Test7107135.sh Wed May 07 19:26:16 2014 -0700
-@@ -27,6 +27,7 @@
- ##
- ## @test Test7107135.sh
- ## @bug 7107135
-+## @bug 8021296
- ## @summary Stack guard pages lost after loading library with executable stack.
- ## @run shell Test7107135.sh
- ##
-@@ -45,6 +46,11 @@
- case "$OS" in
- Linux)
- echo "Testing on Linux"
-+ gcc_cmd=`which gcc`
-+ if [ "x$gcc_cmd" == "x" ]; then
-+ echo "WARNING: gcc not found. Cannot execute test." 2>&1
-+ exit 0;
-+ fi
- ;;
- *)
- NULL=NUL
-@@ -62,7 +68,10 @@
- cp ${TESTSRC}${FS}*.java ${THIS_DIR}
- ${TESTJAVA}${FS}bin${FS}javac *.java
-
--gcc -fPIC -shared -c -o test.o -I${TESTJAVA}${FS}include -I${TESTJAVA}${FS}include${FS}linux ${TESTSRC}${FS}test.c
-+$gcc_cmd -fPIC -shared -c -o test.o \
-+ -I${TESTJAVA}${FS}include -I${TESTJAVA}${FS}include${FS}linux \
-+ ${TESTSRC}${FS}test.c
-+
- ld -shared -z execstack -o libtest-rwx.so test.o
- ld -shared -z noexecstack -o libtest-rw.so test.o
-
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/runtime/jsig/Test8017498.sh Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,94 @@
-+#!/bin/sh
-+
-+#
-+# Copyright (c) 2013, 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
-+# under the terms of the GNU General Public License version 2 only, as
-+# published by the Free Software Foundation.
-+#
-+# This code is distributed in the hope that it will be useful, but WITHOUT
-+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+# version 2 for more details (a copy is included in the LICENSE file that
-+# accompanied this code).
-+#
-+# You should have received a copy of the GNU General Public License version
-+# 2 along with this work; if not, write to the Free Software Foundation,
-+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+#
-+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+# or visit www.oracle.com if you need additional information or have any
-+# questions.
-+#
-+
-+##
-+## @test Test8017498.sh
-+## @bug 8017498
-+## @bug 8020791
-+## @bug 8021296
-+## @summary sigaction(sig) results in process hang/timed-out if sig is much greater than SIGRTMAX
-+## @run shell/timeout=30 Test8017498.sh
-+##
-+
-+if [ "${TESTSRC}" = "" ]
-+then
-+ TESTSRC=${PWD}
-+ echo "TESTSRC not set. Using "${TESTSRC}" as default"
-+fi
-+echo "TESTSRC=${TESTSRC}"
-+## Adding common setup Variables for running shell tests.
-+. ${TESTSRC}/../../test_env.sh
-+
-+# set platform-dependent variables
-+OS=`uname -s`
-+case "$OS" in
-+ Linux)
-+ echo "Testing on Linux"
-+ gcc_cmd=`which gcc`
-+ if [ "x$gcc_cmd" == "x" ]; then
-+ echo "WARNING: gcc not found. Cannot execute test." 2>&1
-+ exit 0;
-+ fi
-+ if [ "$VM_BITS" = "64" ]
-+ then
-+ MY_LD_PRELOAD=${TESTJAVA}${FS}jre${FS}lib${FS}amd64${FS}libjsig.so
-+ else
-+ MY_LD_PRELOAD=${TESTJAVA}${FS}jre${FS}lib${FS}i386${FS}libjsig.so
-+ fi
-+ echo MY_LD_PRELOAD = ${MY_LD_PRELOAD}
-+ ;;
-+ *)
-+ echo "Test passed; only valid for Linux"
-+ exit 0;
-+ ;;
-+esac
-+
-+THIS_DIR=.
-+
-+cp ${TESTSRC}${FS}*.java ${THIS_DIR}
-+${TESTJAVA}${FS}bin${FS}javac *.java
-+
-+$gcc_cmd -DLINUX -fPIC -shared \
-+ -o ${TESTSRC}${FS}libTestJNI.so \
-+ -I${TESTJAVA}${FS}include \
-+ -I${TESTJAVA}${FS}include${FS}linux \
-+ ${TESTSRC}${FS}TestJNI.c
-+
-+# run the java test in the background
-+cmd="LD_PRELOAD=$MY_LD_PRELOAD \
-+ ${TESTJAVA}${FS}bin${FS}java \
-+ -Djava.library.path=${TESTSRC}${FS} -server TestJNI 100"
-+echo "$cmd > test.out 2>&1"
-+eval $cmd > test.out 2>&1
-+
-+grep "old handler" test.out > ${NULL}
-+if [ $? = 0 ]
-+then
-+ echo "Test Passed"
-+ exit 0
-+fi
-+
-+echo "Test Failed"
-+exit 1
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/runtime/jsig/TestJNI.c Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,55 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+#include <stdio.h>
-+#include <jni.h>
-+#include <signal.h>
-+#include <sys/ucontext.h>
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+void sig_handler(int sig, siginfo_t *info, ucontext_t *context) {
-+
-+ printf( " HANDLER (1) " );
-+}
-+
-+JNIEXPORT void JNICALL Java_TestJNI_doSomething(JNIEnv *env, jclass klass, jint val) {
-+ struct sigaction act;
-+ struct sigaction oact;
-+
-+ act.sa_flags = SA_ONSTACK|SA_RESTART|SA_SIGINFO;
-+ sigfillset(&act.sa_mask);
-+ act.sa_handler = SIG_DFL;
-+ act.sa_sigaction = (void (*)())sig_handler;
-+ sigaction(0x20+val, &act, &oact);
-+
-+ printf( " doSomething(%d) " , val);
-+ printf( " old handler = %p " , oact.sa_handler);
-+}
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/runtime/jsig/TestJNI.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,42 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+public class TestJNI {
-+ static {
-+ System.loadLibrary("TestJNI");
-+ }
-+ public static native void doSomething(int val);
-+ public static void main(String[] args) {
-+ int intArg = 43;
-+ if (args.length > 0) {
-+ try {
-+ intArg = Integer.parseInt(args[0]);
-+ } catch (NumberFormatException e) {
-+ System.err.println("arg " + args[0] + " must be an integer");
-+ System.exit(1);
-+ }
-+ }
-+ TestJNI.doSomething(intArg);
-+ }
-+}
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/runtime/memory/LargePages/TestLargePagesFlags.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,389 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/* @test TestLargePagesFlags
-+ * @summary Tests how large pages are choosen depending on the given large pages flag combinations.
-+ * @library /testlibrary
-+ * @run main TestLargePagesFlags
-+ */
-+
-+import com.oracle.java.testlibrary.OutputAnalyzer;
-+import com.oracle.java.testlibrary.Platform;
-+import com.oracle.java.testlibrary.ProcessTools;
-+import java.util.ArrayList;
-+
-+public class TestLargePagesFlags {
-+
-+ public static void main(String [] args) throws Exception {
-+ if (!Platform.isLinux()) {
-+ System.out.println("Skipping. TestLargePagesFlags has only been implemented for Linux.");
-+ return;
-+ }
-+
-+ testUseTransparentHugePages();
-+ testUseHugeTLBFS();
-+ testUseSHM();
-+ testCombinations();
-+ }
-+
-+ public static void testUseTransparentHugePages() throws Exception {
-+ if (!canUse(UseTransparentHugePages(true))) {
-+ System.out.println("Skipping testUseTransparentHugePages");
-+ return;
-+ }
-+
-+ // -XX:-UseLargePages overrides all other flags.
-+ new FlagTester()
-+ .use(UseLargePages(false),
-+ UseTransparentHugePages(true))
-+ .expect(
-+ UseLargePages(false),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+ // Explicitly turn on UseTransparentHugePages.
-+ new FlagTester()
-+ .use(UseTransparentHugePages(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(true),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseTransparentHugePages(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(true),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+ // Setting a specific large pages flag will turn
-+ // off heuristics to choose large pages type.
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseTransparentHugePages(false))
-+ .expect(
-+ UseLargePages(false),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+ // Don't turn on UseTransparentHugePages
-+ // unless the user explicitly asks for them.
-+ new FlagTester()
-+ .use(UseLargePages(true))
-+ .expect(
-+ UseTransparentHugePages(false));
-+ }
-+
-+ public static void testUseHugeTLBFS() throws Exception {
-+ if (!canUse(UseHugeTLBFS(true))) {
-+ System.out.println("Skipping testUseHugeTLBFS");
-+ return;
-+ }
-+
-+ // -XX:-UseLargePages overrides all other flags.
-+ new FlagTester()
-+ .use(UseLargePages(false),
-+ UseHugeTLBFS(true))
-+ .expect(
-+ UseLargePages(false),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+ // Explicitly turn on UseHugeTLBFS.
-+ new FlagTester()
-+ .use(UseHugeTLBFS(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(true),
-+ UseSHM(false));
-+
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseHugeTLBFS(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(true),
-+ UseSHM(false));
-+
-+ // Setting a specific large pages flag will turn
-+ // off heuristics to choose large pages type.
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseHugeTLBFS(false))
-+ .expect(
-+ UseLargePages(false),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+ // Using UseLargePages will default to UseHugeTLBFS large pages.
-+ new FlagTester()
-+ .use(UseLargePages(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(true),
-+ UseSHM(false));
-+ }
-+
-+ public static void testUseSHM() throws Exception {
-+ if (!canUse(UseSHM(true))) {
-+ System.out.println("Skipping testUseSHM");
-+ return;
-+ }
-+
-+ // -XX:-UseLargePages overrides all other flags.
-+ new FlagTester()
-+ .use(UseLargePages(false),
-+ UseSHM(true))
-+ .expect(
-+ UseLargePages(false),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+ // Explicitly turn on UseSHM.
-+ new FlagTester()
-+ .use(UseSHM(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(true)) ;
-+
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseSHM(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(true)) ;
-+
-+ // Setting a specific large pages flag will turn
-+ // off heuristics to choose large pages type.
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseSHM(false))
-+ .expect(
-+ UseLargePages(false),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+ // Setting UseLargePages can allow the system to choose
-+ // UseHugeTLBFS instead of UseSHM, but never UseTransparentHugePages.
-+ new FlagTester()
-+ .use(UseLargePages(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(false));
-+ }
-+
-+ public static void testCombinations() throws Exception {
-+ if (!canUse(UseSHM(true)) || !canUse(UseHugeTLBFS(true))) {
-+ System.out.println("Skipping testUseHugeTLBFSAndUseSHMCombination");
-+ return;
-+ }
-+
-+ // UseHugeTLBFS takes precedence over SHM.
-+
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseHugeTLBFS(true),
-+ UseSHM(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(true),
-+ UseSHM(false));
-+
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseHugeTLBFS(false),
-+ UseSHM(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(true));
-+
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseHugeTLBFS(true),
-+ UseSHM(false))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(true),
-+ UseSHM(false));
-+
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseHugeTLBFS(false),
-+ UseSHM(false))
-+ .expect(
-+ UseLargePages(false),
-+ UseTransparentHugePages(false),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+
-+ if (!canUse(UseTransparentHugePages(true))) {
-+ return;
-+ }
-+
-+ // UseTransparentHugePages takes precedence.
-+
-+ new FlagTester()
-+ .use(UseLargePages(true),
-+ UseTransparentHugePages(true),
-+ UseHugeTLBFS(true),
-+ UseSHM(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(true),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+
-+ new FlagTester()
-+ .use(UseTransparentHugePages(true),
-+ UseHugeTLBFS(true),
-+ UseSHM(true))
-+ .expect(
-+ UseLargePages(true),
-+ UseTransparentHugePages(true),
-+ UseHugeTLBFS(false),
-+ UseSHM(false));
-+ }
-+
-+ private static class FlagTester {
-+ private Flag [] useFlags;
-+
-+ public FlagTester use(Flag... useFlags) {
-+ this.useFlags = useFlags;
-+ return this;
-+ }
-+
-+ public void expect(Flag... expectedFlags) throws Exception {
-+ if (useFlags == null) {
-+ throw new IllegalStateException("Must run use() before expect()");
-+ }
-+
-+ OutputAnalyzer output = executeNewJVM(useFlags);
-+
-+ for (Flag flag : expectedFlags) {
-+ System.out.println("Looking for: " + flag.flagString());
-+ String strValue = output.firstMatch(".* " + flag.name() + " .* :?= (\\S+).*", 1);
-+
-+ if (strValue == null) {
-+ throw new RuntimeException("Flag " + flag.name() + " couldn't be found");
-+ }
-+
-+ if (!flag.value().equals(strValue)) {
-+ throw new RuntimeException("Wrong value for: " + flag.name()
-+ + " expected: " + flag.value()
-+ + " got: " + strValue);
-+ }
-+ }
-+
-+ output.shouldHaveExitValue(0);
-+ }
-+ }
-+
-+ private static OutputAnalyzer executeNewJVM(Flag... flags) throws Exception {
-+ ArrayList<String> args = new ArrayList<>();
-+ for (Flag flag : flags) {
-+ args.add(flag.flagString());
-+ }
-+ args.add("-XX:+PrintFlagsFinal");
-+ args.add("-version");
-+
-+ ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args.toArray(new String[args.size()]));
-+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
-+
-+ return output;
-+ }
-+
-+ private static boolean canUse(Flag flag) {
-+ try {
-+ new FlagTester().use(flag).expect(flag);
-+ } catch (Exception e) {
-+ return false;
-+ }
-+
-+ return true;
-+ }
-+
-+ private static Flag UseLargePages(boolean value) {
-+ return new BooleanFlag("UseLargePages", value);
-+ }
-+
-+ private static Flag UseTransparentHugePages(boolean value) {
-+ return new BooleanFlag("UseTransparentHugePages", value);
-+ }
-+
-+ private static Flag UseHugeTLBFS(boolean value) {
-+ return new BooleanFlag("UseHugeTLBFS", value);
-+ }
-+
-+ private static Flag UseSHM(boolean value) {
-+ return new BooleanFlag("UseSHM", value);
-+ }
-+
-+ private static class BooleanFlag implements Flag {
-+ private String name;
-+ private boolean value;
-+
-+ BooleanFlag(String name, boolean value) {
-+ this.name = name;
-+ this.value = value;
-+ }
-+
-+ public String flagString() {
-+ return "-XX:" + (value ? "+" : "-") + name;
-+ }
-+
-+ public String name() {
-+ return name;
-+ }
-+
-+ public String value() {
-+ return Boolean.toString(value);
-+ }
-+ }
-+
-+ private static interface Flag {
-+ public String flagString();
-+ public String name();
-+ public String value();
-+ }
-+}
---- ./hotspot/test/testlibrary/OutputAnalyzerTest.java Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/test/testlibrary/OutputAnalyzerTest.java Wed May 07 19:26:16 2014 -0700
-@@ -172,5 +172,22 @@
- } catch (RuntimeException e) {
- // expected
- }
-+
-+ {
-+ String aaaa = "aaaa";
-+ String result = output.firstMatch(aaaa);
-+ if (!aaaa.equals(result)) {
-+ throw new Exception("firstMatch(String) faild to match. Expected: " + aaaa + " got: " + result);
-+ }
-+ }
-+
-+ {
-+ String aa = "aa";
-+ String aa_grouped_aa = aa + "(" + aa + ")";
-+ String result = output.firstMatch(aa_grouped_aa, 1);
-+ if (!aa.equals(result)) {
-+ throw new Exception("firstMatch(String, int) failed to match. Expected: " + aa + " got: " + result);
-+ }
-+ }
- }
- }
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/testlibrary/com/oracle/java/testlibrary/DynamicVMOptionChecker.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,111 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+package com.oracle.java.testlibrary;
-+
-+import com.sun.management.HotSpotDiagnosticMXBean;
-+import com.sun.management.VMOption;
-+import java.lang.management.ManagementFactory;
-+
-+/**
-+ * Simple class to check writeability, invalid and valid values for VMOption
-+ */
-+public class DynamicVMOptionChecker {
-+
-+ /**
-+ * Reads VM option from PlatformMXBean and parse it to integer value
-+ *
-+ * @param name of option
-+ * @return parsed value
-+ */
-+ public static int getIntValue(String name) {
-+
-+ VMOption option = ManagementFactory.
-+ getPlatformMXBean(HotSpotDiagnosticMXBean.class).
-+ getVMOption(name);
-+
-+ return Integer.parseInt(option.getValue());
-+ }
-+
-+ /**
-+ * Checks that VM option is dynamically writable
-+ *
-+ * @param name
-+ * @throws RuntimeException if option if not writable
-+ * @return always true
-+ */
-+ public static boolean checkIsWritable(String name) {
-+ VMOption option = ManagementFactory.
-+ getPlatformMXBean(HotSpotDiagnosticMXBean.class).
-+ getVMOption(name);
-+
-+ if (!option.isWriteable()) {
-+ throw new RuntimeException(name + " is not writable");
-+ }
-+
-+ return true;
-+ }
-+
-+ /**
-+ * Checks that value cannot be set
-+ *
-+ * @param name of flag
-+ * @param value string representation of value to set
-+ * @throws RuntimeException on error - when expected exception hasn't been thrown
-+ */
-+ public static void checkInvalidValue(String name, String value) {
-+ // should throw
-+ try {
-+ ManagementFactory.
-+ getPlatformMXBean(HotSpotDiagnosticMXBean.class).
-+ setVMOption(name, value);
-+
-+ } catch (IllegalArgumentException e) {
-+ return;
-+ }
-+
-+ throw new RuntimeException("Expected IllegalArgumentException was not thrown, " + name + "= " + value);
-+ }
-+
-+ /**
-+ * Checks that value can be set
-+ *
-+ * @param name of flag to set
-+ * @param value string representation of value to set
-+ * @throws RuntimeException on error - when value in VM is not equal to origin
-+ */
-+ public static void checkValidValue(String name, String value) {
-+ ManagementFactory.
-+ getPlatformMXBean(HotSpotDiagnosticMXBean.class).
-+ setVMOption(name, value);
-+
-+ VMOption option = ManagementFactory.
-+ getPlatformMXBean(HotSpotDiagnosticMXBean.class).
-+ getVMOption(name);
-+
-+ if (!option.getValue().equals(value)) {
-+ throw new RuntimeException("Actual value of " + name + " \"" + option.getValue()
-+ + "\" not equal origin \"" + value + "\"");
-+ }
-+ }
-+
-+}
---- ./hotspot/test/testlibrary/com/oracle/java/testlibrary/OutputAnalyzer.java Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/test/testlibrary/com/oracle/java/testlibrary/OutputAnalyzer.java Wed May 07 19:26:16 2014 -0700
-@@ -241,7 +241,38 @@
- }
-
- /**
-- * Verifiy the exit value of the process
-+ * Get the captured group of the first string matching the pattern.
-+ * stderr is searched before stdout.
-+ *
-+ * @param pattern The multi-line pattern to match
-+ * @param group The group to capture
-+ * @return The matched string or null if no match was found
-+ */
-+ public String firstMatch(String pattern, int group) {
-+ Matcher stderrMatcher = Pattern.compile(pattern, Pattern.MULTILINE).matcher(stderr);
-+ Matcher stdoutMatcher = Pattern.compile(pattern, Pattern.MULTILINE).matcher(stdout);
-+ if (stderrMatcher.find()) {
-+ return stderrMatcher.group(group);
-+ }
-+ if (stdoutMatcher.find()) {
-+ return stdoutMatcher.group(group);
-+ }
-+ return null;
-+ }
-+
-+ /**
-+ * Get the first string matching the pattern.
-+ * stderr is searched before stdout.
-+ *
-+ * @param pattern The multi-line pattern to match
-+ * @return The matched string or null if no match was found
-+ */
-+ public String firstMatch(String pattern) {
-+ return firstMatch(pattern, 0);
-+ }
-+
-+ /**
-+ * Verify the exit value of the process
- *
- * @param expectedExitValue Expected exit value from process
- * @throws RuntimeException If the exit value from the process did not match the expected value
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./hotspot/test/testlibrary/com/oracle/java/testlibrary/TestDynamicVMOption.java Wed May 07 19:26:16 2014 -0700
-@@ -0,0 +1,95 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+package com.oracle.java.testlibrary;
-+
-+/**
-+ * Simple class to check writeability, invalid and valid values for concrete VMOption
-+ */
-+public class TestDynamicVMOption {
-+
-+ private final String name;
-+ private final int value;
-+
-+ /**
-+ * Constructor
-+ *
-+ * @param name of VM option to test
-+ */
-+ public TestDynamicVMOption(String name) {
-+ this.name = name;
-+ this.value = DynamicVMOptionChecker.getIntValue(name);
-+ System.out.println(this.name + " = " + this.value);
-+ }
-+
-+ /**
-+ * Checks that this value can accept valid percentage values and cannot accept invalid percentage values
-+ *
-+ * @throws RuntimeException
-+ */
-+ public void testPercentageValues() {
-+ checkInvalidValue(Integer.toString(Integer.MIN_VALUE));
-+ checkInvalidValue(Integer.toString(Integer.MAX_VALUE));
-+ checkInvalidValue("-10");
-+ checkInvalidValue("190");
-+ }
-+
-+ /**
-+ * Reads VM option from PlatformMXBean and parse it to integer value
-+ *
-+ * @return value
-+ */
-+ public int getIntValue() {
-+ return DynamicVMOptionChecker.getIntValue(this.name);
-+ }
-+
-+ /**
-+ * Checks that this VM option is dynamically writable
-+ *
-+ * @throws RuntimeException if option if not writable
-+ * @return true
-+ */
-+ public boolean checkIsWritable() throws RuntimeException {
-+ return DynamicVMOptionChecker.checkIsWritable(this.name);
-+ }
-+
-+ /**
-+ * Checks that value for this VM option cannot be set
-+ *
-+ * @param value to check
-+ * @throws RuntimeException on error - when expected exception hasn't been thrown
-+ */
-+ public void checkInvalidValue(String value) {
-+ DynamicVMOptionChecker.checkInvalidValue(this.name, value);
-+ }
-+
-+ /**
-+ * Checks that value for this VM option can be set
-+ *
-+ * @param value to check
-+ * @throws RuntimeException on error - when value in VM is not equal to origin
-+ */
-+ public void checkValidValue(String value) {
-+ DynamicVMOptionChecker.checkValidValue(this.name, value);
-+ }
-+
-+}
---- ./hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java Tue Mar 18 12:31:20 2014 -0700
-+++ ./hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java Wed May 07 19:26:16 2014 -0700
-@@ -78,4 +78,7 @@
- public native void NMTUncommitMemory(long addr, long size);
- public native void NMTReleaseMemory(long addr, long size);
- public native boolean NMTWaitForDataMerge();
-+
-+ // Compiler
-+ public native void deoptimizeAll();
- }
---- ./jaxp/.hgtags Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/.hgtags Wed May 07 19:26:26 2014 -0700
-@@ -359,6 +359,7 @@
- 66363323f14d85d4ab28e883a3323b9d72dea5fd jdk7u40-b42
- c0bd71414ea513f54f23965936a837fca093ac91 jdk7u40-b43
- 91bc4534851265291bb3b16452a0968d6909979f jdk7u40-b60
-+d9b92749a0f4c8e6c6f4fe11210c2a02d70bae74 jdk7u60-b00
- c500d4ec41ff2117eabfa33e640b6df2f21deb3d jdk7u40-b61
- 9e3f8ab9d17be6b1a4a097fcc5bc5412013d3e86 jdk7u40-b62
- 1a7e2024963d3a8d6cde209de0967ac43418b82a jdk7u45-b01
-@@ -417,3 +418,26 @@
- f3f02e67d867ae25cd4f3b9bc39a4fd17f593126 jdk7u55-b11
- 708a1872f5bb8ba58ecc9fcbf4e12e6fa4783998 jdk7u55-b12
- 14719f73596f5c90e3f46c0f4312f32e5b105edd jdk7u55-b13
-+01f26830f88cf4f10897416fe1f4f372efcdecf5 jdk7u55-b30
-+26187a65c765b3177f1b7ff0638259bf66f9ec47 jdk7u55-b14
-+5be97f6c25d9eb3ef0a05fc860964cb3d27134b0 jdk7u55-b31
-+d9b92749a0f4c8e6c6f4fe11210c2a02d70bae74 jdk7u60-b00
-+ad39e88c503948fc4fc01e97c75b6e3c24599d23 jdk7u60-b01
-+050986fd54e3ec4515032ee938bc59e86772b6c0 jdk7u60-b02
-+359b79d99538d17eeb90927a1e4883fcec31661f jdk7u60-b03
-+7215972c2c30d0fa469a459a3e4fcee6bc93991d jdk7u60-b04
-+673ea3822e59de18ae5771de7a280c6ae435ef86 jdk7u60-b05
-+fd1cb0040a1d05086ca3bf32f10e1efd43f05116 jdk7u60-b06
-+cd7c8fa7a057e62e094cdde78dd632de54cedb8c jdk7u60-b07
-+b19c0f18b5a508be894aead53617688342690b01 jdk7u60-b08
-+4bfece8a5148947d268611cc1b4485e92960064e jdk7u60-b09
-+28a6c0b3b22580101bf750383c2e48d34dea2124 jdk7u60-b10
-+e57490e0b99917ea8e1da1bb4d0c57fd5b7705f9 jdk7u60-b11
-+a9574b35f0af409fa1665aadd9b2997a0f9878dc jdk7u60-b12
-+92cf0b5c1c3e9b61d36671d8fb5070716e0f016b jdk7u60-b13
-+2814f43a6c73414dcb2b799e1a52d5b44688590d jdk7u60-b14
-+10eed57b66336660f71f7524f2283478bdf373dc jdk7u60-b15
-+fefd2d5c524b0be78876d9b98d926abda2828e79 jdk7u60-b16
-+ba6b0b5dfe5a0f50fac95c488c8a5400ea07d4f8 jdk7u60-b18
-+ba6b0b5dfe5a0f50fac95c488c8a5400ea07d4f8 jdk7u60-b17
-+581752d32aebea959fec84e8ae692e1f63d2c4a8 jdk7u60-b19
---- ./jaxp/src/com/sun/org/apache/xalan/internal/XalanConstants.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/XalanConstants.java Wed May 07 19:26:26 2014 -0700
-@@ -188,6 +188,19 @@
- ORACLE_JAXP_PROPERTY_PREFIX + "xmlSecurityPropertyManager";
-
- /**
-+ * Feature enableExtensionFunctions
-+ */
-+ public static final String ORACLE_ENABLE_EXTENSION_FUNCTION =
-+ ORACLE_JAXP_PROPERTY_PREFIX + "enableExtensionFunctions";
-+ public static final String SP_ORACLE_ENABLE_EXTENSION_FUNCTION = "javax.xml.enableExtensionFunctions";
-+
-+ /**
-+ * Values for a feature
-+ */
-+ public static final String FEATURE_TRUE = "true";
-+ public static final String FEATURE_FALSE = "false";
-+
-+ /**
- * Check if we're in jdk8 or above
- */
- public static final boolean IS_JDK8_OR_ABOVE = isJavaVersionAtLeast(8);
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.java Wed May 07 19:26:26 2014 -0700
-@@ -472,7 +472,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1413,13 +1419,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java Wed May 07 19:26:26 2014 -0700
-@@ -471,7 +471,13 @@
-
- // Error messages...
-
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /** Error message ID that has a null message, but takes in a single object. */
- {"ER0000" , "{0}" },
-@@ -1412,13 +1418,6 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The int to message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- // ================= INFRASTRUCTURE ======================
-
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/FeatureManager.java Wed May 07 19:26:26 2014 -0700
-@@ -0,0 +1,124 @@
-+/*
-+ * Copyright (c) 2011, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.org.apache.xalan.internal.utils;
-+
-+
-+import com.sun.org.apache.xalan.internal.XalanConstants;
-+
-+/**
-+ * This class manages security related properties
-+ *
-+ */
-+public final class FeatureManager extends FeaturePropertyBase {
-+
-+ /**
-+ * States of the settings of a property, in the order: default value, value
-+ * set by FEATURE_SECURE_PROCESSING, jaxp.properties file, jaxp system
-+ * properties, and jaxp api properties
-+ */
-+ public static enum State {
-+ //this order reflects the overriding order
-+ DEFAULT, FSP, JAXPDOTPROPERTIES, SYSTEMPROPERTY, APIPROPERTY
-+ }
-+
-+ /**
-+ * Xalan Features
-+ */
-+ public static enum Feature {
-+ ORACLE_ENABLE_EXTENSION_FUNCTION(XalanConstants.ORACLE_ENABLE_EXTENSION_FUNCTION,
-+ "true");
-+
-+ final String name;
-+ final String defaultValue;
-+
-+ Feature(String name, String value) {
-+ this.name = name;
-+ this.defaultValue = value;
-+ }
-+
-+ public boolean equalsName(String propertyName) {
-+ return (propertyName == null) ? false : name.equals(propertyName);
-+ }
-+
-+ String defaultValue() {
-+ return defaultValue;
-+ }
-+ }
-+
-+ /**
-+ * Default constructor. Establishes default values
-+ */
-+ public FeatureManager() {
-+ values = new String[Feature.values().length];
-+ for (Feature feature : Feature.values()) {
-+ values[feature.ordinal()] = feature.defaultValue();
-+ }
-+ //read system properties or jaxp.properties
-+ readSystemProperties();
-+ }
-+
-+
-+ /**
-+ * Check if the feature is enabled
-+ * @param feature name of the feature
-+ * @return true if enabled, false otherwise
-+ */
-+ public boolean isFeatureEnabled(Feature feature) {
-+ return Boolean.parseBoolean(values[feature.ordinal()]);
-+ }
-+
-+ /**
-+ * Check if the feature is enabled
-+ * @param propertyName name of the feature
-+ * @return true if enabled, false otherwise
-+ */
-+ public boolean isFeatureEnabled(String propertyName) {
-+ return Boolean.parseBoolean(values[getIndex(propertyName)]);
-+ }
-+
-+ /**
-+ * Get the index by property name
-+ * @param propertyName property name
-+ * @return the index of the property if found; return -1 if not
-+ */
-+ public int getIndex(String propertyName){
-+ for (Feature feature : Feature.values()) {
-+ if (feature.equalsName(propertyName)) {
-+ return feature.ordinal();
-+ }
-+ }
-+ return -1;
-+ }
-+
-+ /**
-+ * Read from system properties, or those in jaxp.properties
-+ */
-+ private void readSystemProperties() {
-+ getSystemProperty(Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
-+ XalanConstants.SP_ORACLE_ENABLE_EXTENSION_FUNCTION);
-+ }
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/FeaturePropertyBase.java Wed May 07 19:26:26 2014 -0700
-@@ -0,0 +1,215 @@
-+/*
-+ * Copyright (c) 2011, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.org.apache.xalan.internal.utils;
-+
-+import com.sun.org.apache.xalan.internal.XalanConstants;
-+
-+/**
-+ * This is the base class for features and properties
-+ *
-+ */
-+public abstract class FeaturePropertyBase {
-+
-+ /**
-+ * States of the settings of a property, in the order: default value, value
-+ * set by FEATURE_SECURE_PROCESSING, jaxp.properties file, jaxp system
-+ * properties, and jaxp api properties
-+ */
-+ public static enum State {
-+ //this order reflects the overriding order
-+ DEFAULT, FSP, JAXPDOTPROPERTIES, SYSTEMPROPERTY, APIPROPERTY
-+ }
-+
-+
-+ /**
-+ * Values of the properties as defined in enum Properties
-+ */
-+ String[] values = null;
-+ /**
-+ * States of the settings for each property in Properties above
-+ */
-+ State[] states = {State.DEFAULT, State.DEFAULT};
-+
-+
-+ /**
-+ * Set the value for a specific property.
-+ *
-+ * @param property the property
-+ * @param state the state of the property
-+ * @param value the value of the property
-+ */
-+ public void setValue(Enum property, State state, String value) {
-+ //only update if it shall override
-+ if (state.compareTo(states[property.ordinal()]) >= 0) {
-+ values[property.ordinal()] = value;
-+ states[property.ordinal()] = state;
-+ }
-+ }
-+
-+ /**
-+ * Set the value of a property by its index
-+ * @param index the index of the property
-+ * @param state the state of the property
-+ * @param value the value of the property
-+ */
-+ public void setValue(int index, State state, String value) {
-+ //only update if it shall override
-+ if (state.compareTo(states[index]) >= 0) {
-+ values[index] = value;
-+ states[index] = state;
-+ }
-+ }
-+
-+ /**
-+ * Set value by property name and state
-+ * @param propertyName property name
-+ * @param state the state of the property
-+ * @param value the value of the property
-+ * @return true if the property is managed by the security property manager;
-+ * false if otherwise.
-+ */
-+ public boolean setValue(String propertyName, State state, Object value) {
-+ int index = getIndex(propertyName);
-+ if (index > -1) {
-+ setValue(index, state, (String)value);
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Set value by property name and state
-+ * @param propertyName property name
-+ * @param state the state of the property
-+ * @param value the value of the property
-+ * @return true if the property is managed by the security property manager;
-+ * false if otherwise.
-+ */
-+ public boolean setValue(String propertyName, State state, boolean value) {
-+ int index = getIndex(propertyName);
-+ if (index > -1) {
-+ if (value) {
-+ setValue(index, state, XalanConstants.FEATURE_TRUE);
-+ } else {
-+ setValue(index, state, XalanConstants.FEATURE_FALSE);
-+ }
-+ return true;
-+ }
-+ return false;
-+ }
-+
-+ /**
-+ * Return the value of the specified property
-+ *
-+ * @param property the property
-+ * @return the value of the property
-+ */
-+ public String getValue(Enum property) {
-+ return values[property.ordinal()];
-+ }
-+
-+ /**
-+ * Return the value of the specified property
-+ *
-+ * @param property the property
-+ * @return the value of the property
-+ */
-+ public String getValue(String property) {
-+ int index = getIndex(property);
-+ if (index > -1) {
-+ return getValueByIndex(index);
-+ }
-+ return null;
-+ }
-+
-+ /**
-+ * Return the value of the specified property.
-+ *
-+ * @param propertyName the property name
-+ * @return the value of the property as a string. If a property is managed
-+ * by this manager, its value shall not be null.
-+ */
-+ public String getValueAsString(String propertyName) {
-+ int index = getIndex(propertyName);
-+ if (index > -1) {
-+ return getValueByIndex(index);
-+ }
-+
-+ return null;
-+ }
-+
-+ /**
-+ * Return the value of a property by its ordinal
-+ * @param index the index of a property
-+ * @return value of a property
-+ */
-+ public String getValueByIndex(int index) {
-+ return values[index];
-+ }
-+
-+ /**
-+ * Get the index by property name
-+ * @param propertyName property name
-+ * @return the index of the property if found; return -1 if not
-+ */
-+ public abstract int getIndex(String propertyName);
-+
-+ public <E extends Enum<E>> int getIndex(Class<E> property, String propertyName) {
-+ for (Enum<E> enumItem : property.getEnumConstants()) {
-+ if (enumItem.toString().equals(propertyName)) {
-+ //internally, ordinal is used as index
-+ return enumItem.ordinal();
-+ }
-+ }
-+ return -1;
-+ };
-+
-+
-+ /**
-+ * Read from system properties, or those in jaxp.properties
-+ *
-+ * @param property the property
-+ * @param systemProperty the name of the system property
-+ */
-+ void getSystemProperty(Enum property, String systemProperty) {
-+ try {
-+ String value = SecuritySupport.getSystemProperty(systemProperty);
-+ if (value != null) {
-+ values[property.ordinal()] = value;
-+ states[property.ordinal()] = State.SYSTEMPROPERTY;
-+ return;
-+ }
-+
-+ value = SecuritySupport.readJAXPProperty(systemProperty);
-+ if (value != null) {
-+ values[property.ordinal()] = value;
-+ states[property.ordinal()] = State.JAXPDOTPROPERTIES;
-+ }
-+ } catch (NumberFormatException e) {
-+ //invalid setting ignored
-+ }
-+ }
-+}
---- ./jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityManager.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityManager.java Wed May 07 19:26:26 2014 -0700
-@@ -1,42 +1,28 @@
- /*
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
-- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
-+ * This code is free software; you can redistribute it and/or modify it
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
- *
-- * The contents of this file are subject to the terms of either the GNU
-- * General Public License Version 2 only ("GPL") or the Common Development
-- * and Distribution License("CDDL") (collectively, the "License"). You
-- * may not use this file except in compliance with the License. You can
-- * obtain a copy of the License at
-- * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
-- * or packager/legal/LICENSE.txt. See the License for the specific
-- * language governing permissions and limitations under the License.
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
- *
-- * When distributing the software, include this License Header Notice in each
-- * file and include the License file at packager/legal/LICENSE.txt.
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
-- * GPL Classpath Exception:
-- * Oracle designates this particular file as subject to the "Classpath"
-- * exception as provided by Oracle in the GPL Version 2 section of the License
-- * file that accompanied this code.
-- *
-- * Modifications:
-- * If applicable, add the following below the License Header, with the fields
-- * enclosed by brackets [] replaced by your own identifying information:
-- * "Portions Copyright [year] [name of copyright owner]"
-- *
-- * Contributor(s):
-- * If you wish your version of this file to be governed by only the CDDL or
-- * only the GPL Version 2, indicate your decision by adding "[Contributor]
-- * elects to include this software in this distribution under the [CDDL or GPL
-- * Version 2] license." If you don't indicate a single choice of license, a
-- * recipient has the option to distribute your version of this file under
-- * either the CDDL, the GPL Version 2 or to extend the choice of license to
-- * its licensees as provided above. However, if you add GPL Version 2 code
-- * and therefore, elected the GPL Version 2 license, then the option applies
-- * only if the new code is made subject to such option by the copyright
-- * holder.
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
- */
-+
- package com.sun.org.apache.xalan.internal.utils;
-
- import com.sun.org.apache.xalan.internal.XalanConstants;
---- ./jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityPropertyManager.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityPropertyManager.java Wed May 07 19:26:26 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2013, 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
-@@ -33,20 +33,10 @@
- * This class manages security related properties
- *
- */
--public final class XMLSecurityPropertyManager {
-+public final class XMLSecurityPropertyManager extends FeaturePropertyBase {
-
- /**
-- * States of the settings of a property, in the order: default value, value
-- * set by FEATURE_SECURE_PROCESSING, jaxp.properties file, jaxp system
-- * properties, and jaxp api properties
-- */
-- public static enum State {
-- //this order reflects the overriding order
-- DEFAULT, FSP, JAXPDOTPROPERTIES, SYSTEMPROPERTY, APIPROPERTY
-- }
--
-- /**
-- * Limits managed by the security manager
-+ * Properties managed by the security property manager
- */
- public static enum Property {
- ACCESS_EXTERNAL_DTD(XMLConstants.ACCESS_EXTERNAL_DTD,
-@@ -73,15 +63,6 @@
-
-
- /**
-- * Values of the properties as defined in enum Properties
-- */
-- private final String[] values;
-- /**
-- * States of the settings for each property in Properties above
-- */
-- private State[] states = {State.DEFAULT, State.DEFAULT};
--
-- /**
- * Default constructor. Establishes default values
- */
- public XMLSecurityPropertyManager() {
-@@ -94,86 +75,6 @@
- }
-
- /**
-- * Set limit by property name and state
-- * @param propertyName property name
-- * @param state the state of the property
-- * @param value the value of the property
-- * @return true if the property is managed by the security property manager;
-- * false if otherwise.
-- */
-- public boolean setValue(String propertyName, State state, Object value) {
-- int index = getIndex(propertyName);
-- if (index > -1) {
-- setValue(index, state, (String)value);
-- return true;
-- }
-- return false;
-- }
--
-- /**
-- * Set the value for a specific property.
-- *
-- * @param property the property
-- * @param state the state of the property
-- * @param value the value of the property
-- */
-- public void setValue(Property property, State state, String value) {
-- //only update if it shall override
-- if (state.compareTo(states[property.ordinal()]) >= 0) {
-- values[property.ordinal()] = value;
-- states[property.ordinal()] = state;
-- }
-- }
--
-- /**
-- * Set the value of a property by its index
-- * @param index the index of the property
-- * @param state the state of the property
-- * @param value the value of the property
-- */
-- public void setValue(int index, State state, String value) {
-- //only update if it shall override
-- if (state.compareTo(states[index]) >= 0) {
-- values[index] = value;
-- states[index] = state;
-- }
-- }
--
-- /**
-- * Return the value of the specified property
-- *
-- * @param propertyName the property name
-- * @return the value of the property as a string
-- */
-- public String getValue(String propertyName) {
-- int index = getIndex(propertyName);
-- if (index > -1) {
-- return getValueByIndex(index);
-- }
--
-- return null;
-- }
--
-- /**
-- * Return the value of the specified property
-- *
-- * @param property the property
-- * @return the value of the property
-- */
-- public String getValue(Property property) {
-- return values[property.ordinal()];
-- }
--
-- /**
-- * Return the value of a property by its ordinal
-- * @param index the index of a property
-- * @return value of a property
-- */
-- public String getValueByIndex(int index) {
-- return values[index];
-- }
--
-- /**
- * Get the index by property name
- * @param propertyName property name
- * @return the index of the property if found; return -1 if not
-@@ -198,28 +99,4 @@
- XalanConstants.SP_ACCESS_EXTERNAL_STYLESHEET);
- }
-
-- /**
-- * Read from system properties, or those in jaxp.properties
-- *
-- * @param property the property
-- * @param systemProperty the name of the system property
-- */
-- private void getSystemProperty(Property property, String systemProperty) {
-- try {
-- String value = SecuritySupport.getSystemProperty(systemProperty);
-- if (value != null) {
-- values[property.ordinal()] = value;
-- states[property.ordinal()] = State.SYSTEMPROPERTY;
-- return;
-- }
--
-- value = SecuritySupport.readJAXPProperty(systemProperty);
-- if (value != null) {
-- values[property.ordinal()] = value;
-- states[property.ordinal()] = State.JAXPDOTPROPERTIES;
-- }
-- } catch (NumberFormatException e) {
-- //invalid setting ignored
-- }
-- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java Wed May 07 19:26:26 2014 -0700
-@@ -23,6 +23,7 @@
-
- package com.sun.org.apache.xalan.internal.xsltc.cmdline;
-
-+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
- import java.io.File;
- import java.net.URL;
- import java.util.Vector;
-@@ -77,7 +78,7 @@
- final GetOpt getopt = new GetOpt(args, "o:d:j:p:uxhsinv");
- if (args.length < 1) printUsage();
-
-- final XSLTC xsltc = new XSLTC(true);
-+ final XSLTC xsltc = new XSLTC(true, new FeatureManager());
- xsltc.init();
-
- int c;
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java Wed May 07 19:26:26 2014 -0700
-@@ -42,6 +42,7 @@
- import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
- import com.sun.org.apache.bcel.internal.generic.NEW;
- import com.sun.org.apache.bcel.internal.generic.PUSH;
-+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
- import com.sun.org.apache.xalan.internal.xsltc.compiler.util.BooleanType;
- import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator;
- import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
-@@ -717,6 +718,8 @@
- final ConstantPoolGen cpg = classGen.getConstantPool();
- final InstructionList il = methodGen.getInstructionList();
- final boolean isSecureProcessing = classGen.getParser().getXSLTC().isSecureProcessing();
-+ final boolean isExtensionFunctionEnabled = classGen.getParser().getXSLTC()
-+ .getFeature(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION);
- int index;
-
- // Translate calls to methods in the BasisLibrary
-@@ -760,7 +763,7 @@
- il.append(new INVOKESTATIC(index));
- }
- else if (_isExtConstructor) {
-- if (isSecureProcessing)
-+ if (isSecureProcessing && !isExtensionFunctionEnabled)
- translateUnallowedExtension(cpg, il);
-
- final String clazz =
-@@ -822,7 +825,7 @@
- }
- // Invoke function calls that are handled in separate classes
- else {
-- if (isSecureProcessing)
-+ if (isSecureProcessing && !isExtensionFunctionEnabled)
- translateUnallowedExtension(cpg, il);
-
- final String clazz = _chosenMethod.getDeclaringClass().getName();
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java Wed May 07 19:26:26 2014 -0700
-@@ -43,6 +43,8 @@
-
- import com.sun.org.apache.bcel.internal.classfile.JavaClass;
- import com.sun.org.apache.xalan.internal.XalanConstants;
-+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
-+import com.sun.org.apache.xalan.internal.utils.FeatureManager.Feature;
- import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
- import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
- import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
-@@ -148,11 +150,14 @@
-
- private XMLSecurityManager _xmlSecurityManager;
-
-+ private final FeatureManager _featureManager;
-+
- /**
- * XSLTC compiler constructor
- */
-- public XSLTC(boolean useServicesMechanism) {
-+ public XSLTC(boolean useServicesMechanism, FeatureManager featureManager) {
- _parser = new Parser(this, useServicesMechanism);
-+ _featureManager = featureManager;
- }
-
- /**
-@@ -182,6 +187,15 @@
- _useServicesMechanism = flag;
- }
-
-+ /**
-+ * Return the value of the specified feature
-+ * @param name name of the feature
-+ * @return true if the feature is enabled, false otherwise
-+ */
-+ public boolean getFeature(Feature name) {
-+ return _featureManager.isFeatureEnabled(name);
-+ }
-+
- /**
- * Return allowed protocols for accessing external stylesheet.
- */
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "More than one stylesheet defined in the same file."},
-
-@@ -1012,12 +1018,5 @@
-
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ca.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ca.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "S'ha definit m\u00e9s d'un full d'estils en el mateix fitxer."},
-
-@@ -853,12 +859,5 @@
- "FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_cs.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_cs.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "V\u00edce ne\u017e jedna p\u0159edloha stylu je definov\u00e1na ve stejn\u00e9m souboru."},
-
-@@ -853,12 +859,5 @@
- "FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "Mehrere Stylesheets in derselben Datei definiert."},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING: Feature kann nicht auf \"false\" gesetzt werden, wenn Security Manager vorhanden ist."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_es.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_es.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "Se ha definido m\u00E1s de una hoja de estilo en el mismo archivo."},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING: no se puede definir la funci\u00F3n en false cuando est\u00E1 presente el gestor de seguridad."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_fr.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_fr.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "Plusieurs feuilles de style d\u00E9finies dans le m\u00EAme fichier."},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING : impossible de d\u00E9finir la fonctionnalit\u00E9 sur False en pr\u00E9sence du gestionnaire de s\u00E9curit\u00E9."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_it.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_it.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "Sono stati definiti pi\u00F9 fogli di stile nello stesso file."},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING: impossibile impostare la funzione su false se \u00E8 presente Security Manager."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "\u540C\u3058\u30D5\u30A1\u30A4\u30EB\u306B\u8907\u6570\u306E\u30B9\u30BF\u30A4\u30EB\u30B7\u30FC\u30C8\u304C\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u3059\u3002"},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING: \u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30FB\u30DE\u30CD\u30FC\u30B8\u30E3\u304C\u5B58\u5728\u3059\u308B\u3068\u304D\u3001\u6A5F\u80FD\u3092false\u306B\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093\u3002"}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ko.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ko.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "\uB3D9\uC77C\uD55C \uD30C\uC77C\uC5D0 \uC2A4\uD0C0\uC77C\uC2DC\uD2B8\uAC00 \uB450 \uAC1C \uC774\uC0C1 \uC815\uC758\uB418\uC5C8\uC2B5\uB2C8\uB2E4."},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING: \uBCF4\uC548 \uAD00\uB9AC\uC790\uAC00 \uC788\uC744 \uACBD\uC6B0 \uAE30\uB2A5\uC744 false\uB85C \uC124\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_pt_BR.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_pt_BR.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "Mais de uma folha de estilos definida no mesmo arquivo."},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING: N\u00E3o \u00E9 poss\u00EDvel definir o recurso como falso quando o gerenciador de seguran\u00E7a est\u00E1 presente."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sk.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sk.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "Viac ne\u017e jeden \u0161t\u00fdl dokumentu bol definovan\u00fd v rovnakom s\u00fabore."},
-
-@@ -853,12 +859,5 @@
- "FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sv.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sv.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "Fler \u00E4n en formatmall har definierats i samma fil."},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING: Funktionen kan inte anges till false om s\u00E4kerhetshanteraren anv\u00E4nds."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_CN.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_CN.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "\u540C\u4E00\u6587\u4EF6\u4E2D\u5B9A\u4E49\u4E86\u591A\u4E2A\u6837\u5F0F\u8868\u3002"},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING: \u5B58\u5728 Security Manager \u65F6, \u65E0\u6CD5\u5C06\u6B64\u529F\u80FD\u8BBE\u7F6E\u4E3A\u201C\u5047\u201D\u3002"}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_TW.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_TW.java Wed May 07 19:26:26 2014 -0700
-@@ -90,7 +90,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
- {ErrorMsg.MULTIPLE_STYLESHEET_ERR,
- "\u76F8\u540C\u6A94\u6848\u4E2D\u5B9A\u7FA9\u4E86\u8D85\u904E\u4E00\u500B\u6A23\u5F0F\u8868\u3002"},
-
-@@ -913,12 +919,5 @@
- "FEATURE_SECURE_PROCESSING: \u5B89\u5168\u7BA1\u7406\u7A0B\u5F0F\u5B58\u5728\u6642\uFF0C\u7121\u6CD5\u5C07\u529F\u80FD\u8A2D\u70BA\u507D\u3002"}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java Wed May 07 19:26:26 2014 -0700
-@@ -955,6 +955,9 @@
- if (Double.isNaN(d) || Double.isInfinite(d))
- return(Double.toString(d));
-
-+ //Convert -0.0 to +0.0 other values remains the same
-+ d = d + 0.0;
-+
- // Use the XPath formatter to ignore locales
- StringBuffer result = threadLocalStringBuffer.get();
- result.setLength(0);
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "Use of the extension element ''{0}'' is not allowed when the secure processing feature is set to true."},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ca.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ca.java Wed May 07 19:26:26 2014 -0700
-@@ -79,7 +79,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -223,13 +229,6 @@
- "No s''ha pogut resoldre la refer\u00e8ncia d''URI ''{0}''."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_cs.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_cs.java Wed May 07 19:26:26 2014 -0700
-@@ -79,7 +79,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -223,13 +229,6 @@
- "Nelze p\u0159elo\u017eit odkazy URI ''{0}''."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_de.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_de.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "Verwendung des Erweiterungselements \"{0}\" ist nicht zul\u00E4ssig, wenn das Feature f\u00FCr die sichere Verarbeitung auf \"true\" gesetzt ist."},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_es.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_es.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "El uso del elemento de extensi\u00F3n ''{0}'' no est\u00E1 permitido cuando la funci\u00F3n de procesamiento seguro se ha definido en true."},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_fr.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_fr.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "L''utilisation de l''\u00E9l\u00E9ment d''extension ''{0}'' n''est pas autoris\u00E9e lorsque la fonctionnalit\u00E9 de traitement s\u00E9curis\u00E9 est d\u00E9finie sur True."},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_it.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_it.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "Non \u00E8 consentito utilizzare l''elemento di estensione ''{0}'' se la funzione di elaborazione sicura \u00E8 impostata su true."},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ja.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ja.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "\u30BB\u30AD\u30E5\u30A2\u51E6\u7406\u6A5F\u80FD\u304Ctrue\u306B\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u3068\u304D\u3001\u62E1\u5F35\u8981\u7D20''{0}''\u306E\u4F7F\u7528\u306F\u8A31\u53EF\u3055\u308C\u307E\u305B\u3093\u3002"},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ko.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ko.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "\uBCF4\uC548 \uCC98\uB9AC \uAE30\uB2A5\uC774 true\uB85C \uC124\uC815\uB41C \uACBD\uC6B0 \uD655\uC7A5 \uC694\uC18C ''{0}''\uC744(\uB97C) \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_pt_BR.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_pt_BR.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "O uso do elemento da extens\u00E3o ''{0}'' n\u00E3o ser\u00E1 permitido quando o recurso de processamento seguro for definido como verdadeiro."},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sk.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sk.java Wed May 07 19:26:26 2014 -0700
-@@ -79,7 +79,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -223,13 +229,6 @@
- "Nebolo mo\u017en\u00e9 rozl\u00ed\u0161i\u0165 referenciu URI ''{0}''."}
- };
-
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sv.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sv.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "Anv\u00E4ndning av till\u00E4ggselementet ''{0}'' \u00E4r inte till\u00E5tet n\u00E4r s\u00E4ker bearbetning till\u00E4mpas."},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_CN.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_CN.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "\u5F53\u5B89\u5168\u5904\u7406\u529F\u80FD\u8BBE\u7F6E\u4E3A\u201C\u771F\u201D\u65F6, \u4E0D\u5141\u8BB8\u4F7F\u7528\u6269\u5C55\u5143\u7D20 ''{0}''\u3002"},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_TW.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_TW.java Wed May 07 19:26:26 2014 -0700
-@@ -81,7 +81,13 @@
- */
-
- // These message should be read from a locale-specific resource bundle
-- private static final Object[][] _contents = new Object[][] {
-+ /** Get the lookup table for error messages.
-+ *
-+ * @return The message lookup table.
-+ */
-+ public Object[][] getContents()
-+ {
-+ return new Object[][] {
-
- /*
- * Note to translators: the substitution text in the following message
-@@ -276,13 +282,6 @@
- {BasisLibrary.UNALLOWED_EXTENSION_ELEMENT_ERR,
- "\u7576\u5B89\u5168\u8655\u7406\u529F\u80FD\u8A2D\u70BA\u771F\u6642\uFF0C\u4E0D\u5141\u8A31\u4F7F\u7528\u64F4\u5145\u5957\u4EF6\u5143\u7D20 ''{0}''\u3002"},
- };
-- /** Get the lookup table for error messages.
-- *
-- * @return The message lookup table.
-- */
-- public Object[][] getContents()
-- {
-- return _contents;
- }
-
- }
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java Wed May 07 19:26:26 2014 -0700
-@@ -95,7 +95,7 @@
- _tfactory = tfactory;
-
- // Instantiate XSLTC and get reference to parser object
-- XSLTC xsltc = new XSLTC(tfactory.useServicesMechnism());
-+ XSLTC xsltc = new XSLTC(tfactory.useServicesMechnism(), tfactory.getFeatureManager());
- if (tfactory.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING))
- xsltc.setSecureProcessing(true);
-
---- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java Wed May 07 19:26:26 2014 -0700
-@@ -23,6 +23,23 @@
-
- package com.sun.org.apache.xalan.internal.xsltc.trax;
-
-+import com.sun.org.apache.xalan.internal.XalanConstants;
-+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
-+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
-+import com.sun.org.apache.xalan.internal.utils.FeaturePropertyBase;
-+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
-+import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
-+import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
-+import com.sun.org.apache.xalan.internal.utils.XMLSecurityPropertyManager;
-+import com.sun.org.apache.xalan.internal.utils.XMLSecurityPropertyManager.Property;
-+import com.sun.org.apache.xalan.internal.utils.FeaturePropertyBase.State;
-+import com.sun.org.apache.xalan.internal.xsltc.compiler.Constants;
-+import com.sun.org.apache.xalan.internal.xsltc.compiler.SourceLoader;
-+import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
-+import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
-+import com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager;
-+import com.sun.org.apache.xml.internal.utils.StopParseException;
-+import com.sun.org.apache.xml.internal.utils.StylesheetPIHandler;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
-@@ -37,11 +54,9 @@
- import java.util.Vector;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipFile;
--
- import javax.xml.XMLConstants;
-+import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
--import javax.xml.parsers.SAXParser;
--import javax.xml.parsers.ParserConfigurationException;
-
- import javax.xml.transform.ErrorListener;
- import javax.xml.transform.Source;
-@@ -58,27 +73,9 @@
- import javax.xml.transform.sax.SAXTransformerFactory;
- import javax.xml.transform.sax.TemplatesHandler;
- import javax.xml.transform.sax.TransformerHandler;
-+import javax.xml.transform.stax.*;
- import javax.xml.transform.stream.StreamResult;
- import javax.xml.transform.stream.StreamSource;
--import javax.xml.transform.stax.*;
--
--import com.sun.org.apache.xml.internal.utils.StylesheetPIHandler;
--import com.sun.org.apache.xml.internal.utils.StopParseException;
--
--import com.sun.org.apache.xalan.internal.XalanConstants;
--import com.sun.org.apache.xalan.internal.xsltc.compiler.Constants;
--import com.sun.org.apache.xalan.internal.xsltc.compiler.SourceLoader;
--import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
--import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
--import com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager;
--import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
--import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
--import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
--import com.sun.org.apache.xalan.internal.utils.XMLSecurityPropertyManager;
--import com.sun.org.apache.xalan.internal.utils.XMLSecurityPropertyManager.Property;
--import com.sun.org.apache.xalan.internal.utils.XMLSecurityPropertyManager.State;
--import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
--
- import org.xml.sax.InputSource;
- import org.xml.sax.XMLFilter;
- import org.xml.sax.XMLReader;
-@@ -240,6 +237,8 @@
- private XMLSecurityPropertyManager _xmlSecurityPropertyMgr;
- private XMLSecurityManager _xmlSecurityManager;
-
-+ private final FeatureManager _featureManager;
-+
- /**
- * javax.xml.transform.sax.TransformerFactory implementation.
- */
-@@ -254,10 +253,13 @@
- private TransformerFactoryImpl(boolean useServicesMechanism) {
- this.m_DTMManagerClass = XSLTCDTMManager.getDTMManagerClass(useServicesMechanism);
- this._useServicesMechanism = useServicesMechanism;
-+ _featureManager = new FeatureManager();
-
- if (System.getSecurityManager() != null) {
- _isSecureMode = true;
- _isNotSecureProcessing = false;
-+ _featureManager.setValue(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
-+ FeaturePropertyBase.State.FSP, XalanConstants.FEATURE_FALSE);
- }
-
- _xmlSecurityPropertyMgr = new XMLSecurityPropertyManager();
-@@ -513,6 +515,10 @@
- Property.ACCESS_EXTERNAL_STYLESHEET);
- }
-
-+ if (value && _featureManager != null) {
-+ _featureManager.setValue(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
-+ FeaturePropertyBase.State.FSP, XalanConstants.FEATURE_FALSE);
-+ }
- return;
- }
- else if (name.equals(XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
-@@ -521,6 +527,11 @@
- _useServicesMechanism = value;
- }
- else {
-+ if (_featureManager != null &&
-+ _featureManager.setValue(name, State.APIPROPERTY, value)) {
-+ return;
-+ }
-+
- // unknown feature
- ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_UNSUPPORTED_FEATURE, name);
- throw new TransformerConfigurationException(err.toString());
-@@ -569,6 +580,13 @@
- return !_isNotSecureProcessing;
- }
-
-+ /** Check to see if the property is managed by the security manager **/
-+ String propertyValue = (_featureManager != null) ?
-+ _featureManager.getValueAsString(name) : null;
-+ if (propertyValue != null) {
-+ return Boolean.parseBoolean(propertyValue);
-+ }
-+
- // Feature not supported
- return false;
- }
-@@ -579,6 +597,13 @@
- return _useServicesMechanism;
- }
-
-+ /**
-+ * @return the feature manager
-+ */
-+ public FeatureManager getFeatureManager() {
-+ return _featureManager;
-+ }
-+
- /**
- * javax.xml.transform.sax.TransformerFactory implementation.
- * Get the object that is used by default during the transformation to
-@@ -859,7 +884,7 @@
- }
-
- // Create and initialize a stylesheet compiler
-- final XSLTC xsltc = new XSLTC(_useServicesMechanism);
-+ final XSLTC xsltc = new XSLTC(_useServicesMechanism, _featureManager);
- if (_debug) xsltc.setDebug(true);
- if (_enableInlining)
- xsltc.setTemplateInlining(true);
---- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/XPath.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/XPath.java Wed May 07 19:26:26 2014 -0700
-@@ -1422,7 +1422,7 @@
- }
- ch = data.charAt(currentOffset);
- } while (ch == ' ' || ch == 0x0A || ch == 0x09 || ch == 0x0D);
-- if (currentOffset == endOffset || ch == '|') {
-+ if (currentOffset == endOffset || ch == '|' || ch == '/') {
- addToken(tokens, XPath.Tokens.EXPRTOKEN_PERIOD);
- starIsMultiplyOperator = true;
- break;
---- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.java Wed May 07 19:26:26 2014 -0700
-@@ -20,6 +20,8 @@
-
- package com.sun.org.apache.xerces.internal.jaxp;
-
-+import com.sun.org.apache.xerces.internal.util.SAXMessageFormatter;
-+import java.util.Locale;
- import org.xml.sax.SAXException;
- import org.xml.sax.SAXParseException;
- import org.xml.sax.helpers.DefaultHandler;
-@@ -30,6 +32,11 @@
- class DefaultValidationErrorHandler extends DefaultHandler {
- static private int ERROR_COUNT_LIMIT = 10;
- private int errorCount = 0;
-+ private Locale locale = Locale.getDefault();
-+
-+ public DefaultValidationErrorHandler(Locale locale) {
-+ this.locale = locale;
-+ }
-
- // XXX Fix message i18n
- public void error(SAXParseException e) throws SAXException {
-@@ -38,11 +45,8 @@
- return;
- } else if (errorCount == 0) {
- // Print a warning before the first error
-- System.err.println("Warning: validation was turned on but an org.xml.sax.ErrorHandler was not");
-- System.err.println("set, which is probably not what is desired. Parser will use a default");
-- System.err.println("ErrorHandler to print the first " +
-- ERROR_COUNT_LIMIT + " errors. Please call");
-- System.err.println("the 'setErrorHandler' method to fix this.");
-+ System.err.println(SAXMessageFormatter.formatMessage(locale,
-+ "errorHandlerNotSet", new Object [] {errorCount}));
- }
-
- String systemId = e.getSystemId();
---- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java Wed May 07 19:26:26 2014 -0700
-@@ -140,7 +140,7 @@
- // validation errors with a warning telling the user to set an
- // ErrorHandler
- if (dbf.isValidating()) {
-- fInitErrorHandler = new DefaultValidationErrorHandler();
-+ fInitErrorHandler = new DefaultValidationErrorHandler(domParser.getXMLParserConfiguration().getLocale());
- setErrorHandler(fInitErrorHandler);
- }
- else {
---- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java Wed May 07 19:26:26 2014 -0700
-@@ -20,15 +20,6 @@
-
- package com.sun.org.apache.xerces.internal.jaxp;
-
--import java.io.IOException;
--import java.util.HashMap;
--import java.util.Hashtable;
--import java.util.Iterator;
--import java.util.Map;
--
--import javax.xml.XMLConstants;
--import javax.xml.validation.Schema;
--
- import com.sun.org.apache.xerces.internal.impl.Constants;
- import com.sun.org.apache.xerces.internal.impl.validation.ValidationManager;
- import com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator;
-@@ -46,6 +37,14 @@
- import com.sun.org.apache.xerces.internal.xs.AttributePSVI;
- import com.sun.org.apache.xerces.internal.xs.ElementPSVI;
- import com.sun.org.apache.xerces.internal.xs.PSVIProvider;
-+import java.io.IOException;
-+import java.util.HashMap;
-+import java.util.Hashtable;
-+import java.util.Iterator;
-+import java.util.Locale;
-+import java.util.Map;
-+import javax.xml.XMLConstants;
-+import javax.xml.validation.Schema;
- import org.xml.sax.EntityResolver;
- import org.xml.sax.ErrorHandler;
- import org.xml.sax.HandlerBase;
-@@ -186,7 +185,7 @@
- // validation errors with a warning telling the user to set an
- // ErrorHandler.
- if (spf.isValidating()) {
-- fInitErrorHandler = new DefaultValidationErrorHandler();
-+ fInitErrorHandler = new DefaultValidationErrorHandler(xmlReader.getLocale());
- xmlReader.setErrorHandler(fInitErrorHandler);
- }
- else {
-@@ -685,6 +684,10 @@
- return super.getProperty(name);
- }
-
-+ Locale getLocale() {
-+ return fConfiguration.getLocale();
-+ }
-+
- private void setSchemaValidatorFeature(String name, boolean value)
- throws SAXNotRecognizedException, SAXNotSupportedException {
- try {
---- ./jaxp/src/com/sun/org/apache/xerces/internal/util/URI.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xerces/internal/util/URI.java Wed May 07 19:26:26 2014 -0700
-@@ -689,9 +689,13 @@
- if (!initializeAuthority(uriSpec.substring(startPos, index))) {
- index = startPos - 2;
- }
-- }
-- else {
-+ } else if (index < uriSpecLen) {
-+ //Same as java.net.URI:
-+ // DEVIATION: Allow empty authority prior to non-empty
-+ // path, query component or fragment identifier
- m_host = "";
-+ } else {
-+ throw new MalformedURIException("Expected authority.");
- }
- }
-
---- ./jaxp/src/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java Wed May 07 19:26:26 2014 -0700
-@@ -211,7 +211,7 @@
- if (i > 0) {
- return uri.substring(i+1, uri.length());
- }
-- return "";
-+ return uri;
- }
-
- /**
---- ./jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.java Wed May 07 19:26:26 2014 -0700
-@@ -105,15 +105,15 @@
- */
- public Node item(int index) {
- if (m_iter != null) {
-- int node;
-+ int node = 0;
- int count = m_cachedNodes.size();
-
- if (count > index) {
- node = m_cachedNodes.elementAt(index);
- return m_dtm.getNode(node);
- } else if (m_last == -1) {
-- while (((node = m_iter.next()) != DTMAxisIterator.END)
-- && count <= index) {
-+ while (count <= index
-+ && ((node = m_iter.next()) != DTMAxisIterator.END)) {
- m_cachedNodes.addElement(node);
- count++;
- }
---- ./jaxp/src/com/sun/org/apache/xpath/internal/XPathContext.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xpath/internal/XPathContext.java Wed May 07 19:26:26 2014 -0700
-@@ -103,8 +103,7 @@
- * the DTMManager, it really is a proxy for this object, which
- * is the real DTMManager.
- */
-- protected DTMManager m_dtmManager = DTMManager.newInstance(
-- com.sun.org.apache.xpath.internal.objects.XMLStringFactoryImpl.getFactory());
-+ protected DTMManager m_dtmManager = null;
-
- /**
- * Return the DTMManager object. Though XPathContext context extends
---- ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java Wed May 07 19:26:26 2014 -0700
-@@ -33,6 +33,7 @@
- import com.sun.org.apache.xpath.internal.objects.XNodeSet;
- import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
- import com.sun.org.apache.xalan.internal.res.XSLMessages;
-+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
-
- import com.sun.org.apache.xpath.internal.functions.FuncExtFunction;
- import java.util.Vector;
-@@ -54,9 +55,12 @@
- }
-
- public JAXPExtensionsProvider(XPathFunctionResolver resolver,
-- boolean featureSecureProcessing ) {
-+ boolean featureSecureProcessing, FeatureManager featureManager ) {
- this.resolver = resolver;
-- this.extensionInvocationDisabled = featureSecureProcessing;
-+ if (featureSecureProcessing &&
-+ !featureManager.isFeatureEnabled(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION)) {
-+ this.extensionInvocationDisabled = true;
-+ }
- }
-
- /**
---- ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java Wed May 07 19:26:26 2014 -0700
-@@ -30,6 +30,7 @@
- import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
- import com.sun.org.apache.xalan.internal.res.XSLMessages;
- import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
-+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
-
- import javax.xml.namespace.NamespaceContext;
- import javax.xml.namespace.QName;
-@@ -67,33 +68,36 @@
- private boolean featureSecureProcessing = false;
-
- private boolean useServicesMechanism = true;
-+
-+ private final FeatureManager featureManager;
-+
- /** Protected constructor to prevent direct instantiation; use compile()
- * from the context.
- */
-- protected XPathExpressionImpl() { };
-+ protected XPathExpressionImpl() {
-+ this(null, null, null, null,
-+ false, true, new FeatureManager());
-+ };
-
- protected XPathExpressionImpl(com.sun.org.apache.xpath.internal.XPath xpath,
- JAXPPrefixResolver prefixResolver,
- XPathFunctionResolver functionResolver,
- XPathVariableResolver variableResolver ) {
-- this.xpath = xpath;
-- this.prefixResolver = prefixResolver;
-- this.functionResolver = functionResolver;
-- this.variableResolver = variableResolver;
-- this.featureSecureProcessing = false;
-+ this(xpath, prefixResolver, functionResolver, variableResolver,
-+ false, true, new FeatureManager());
- };
-
- protected XPathExpressionImpl(com.sun.org.apache.xpath.internal.XPath xpath,
-- JAXPPrefixResolver prefixResolver,
-- XPathFunctionResolver functionResolver,
-- XPathVariableResolver variableResolver,
-- boolean featureSecureProcessing, boolean useServicesMechanism ) {
-+ JAXPPrefixResolver prefixResolver,XPathFunctionResolver functionResolver,
-+ XPathVariableResolver variableResolver, boolean featureSecureProcessing,
-+ boolean useServicesMechanism, FeatureManager featureManager ) {
- this.xpath = xpath;
- this.prefixResolver = prefixResolver;
- this.functionResolver = functionResolver;
- this.variableResolver = variableResolver;
- this.featureSecureProcessing = featureSecureProcessing;
- this.useServicesMechanism = useServicesMechanism;
-+ this.featureManager = featureManager;
- };
-
- public void setXPath (com.sun.org.apache.xpath.internal.XPath xpath ) {
-@@ -111,7 +115,7 @@
- com.sun.org.apache.xpath.internal.XPathContext xpathSupport = null;
- if ( functionResolver != null ) {
- JAXPExtensionsProvider jep = new JAXPExtensionsProvider(
-- functionResolver, featureSecureProcessing );
-+ functionResolver, featureSecureProcessing, featureManager );
- xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext( jep );
- } else {
- xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext();
---- ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java Wed May 07 19:26:26 2014 -0700
-@@ -24,6 +24,8 @@
- import com.sun.org.apache.xalan.internal.XalanConstants;
- import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
- import com.sun.org.apache.xalan.internal.res.XSLMessages;
-+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
-+import com.sun.org.apache.xalan.internal.utils.FeaturePropertyBase;
-
- import javax.xml.XMLConstants;
- import javax.xml.xpath.XPathFactory;
-@@ -68,6 +70,8 @@
-
- private boolean _useServicesMechanism = true;
-
-+ private final FeatureManager _featureManager;
-+
- public XPathFactoryImpl() {
- this(true);
- }
-@@ -77,9 +81,12 @@
- }
-
- public XPathFactoryImpl(boolean useServicesMechanism) {
-+ _featureManager = new FeatureManager();
- if (System.getSecurityManager() != null) {
- _isSecureMode = true;
- _isNotSecureProcessing = false;
-+ _featureManager.setValue(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
-+ FeaturePropertyBase.State.FSP, XalanConstants.FEATURE_FALSE);
- }
- this._useServicesMechanism = useServicesMechanism;
- }
-@@ -131,7 +138,8 @@
- public javax.xml.xpath.XPath newXPath() {
- return new com.sun.org.apache.xpath.internal.jaxp.XPathImpl(
- xPathVariableResolver, xPathFunctionResolver,
-- !_isNotSecureProcessing, _useServicesMechanism );
-+ !_isNotSecureProcessing, _useServicesMechanism,
-+ _featureManager );
- }
-
- /**
-@@ -181,6 +189,10 @@
- }
-
- _isNotSecureProcessing = !value;
-+ if (value && _featureManager != null) {
-+ _featureManager.setValue(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
-+ FeaturePropertyBase.State.FSP, XalanConstants.FEATURE_FALSE);
-+ }
-
- // all done processing feature
- return;
-@@ -192,6 +204,11 @@
- return;
- }
-
-+ if (_featureManager != null &&
-+ _featureManager.setValue(name, FeaturePropertyBase.State.APIPROPERTY, value)) {
-+ return;
-+ }
-+
- // unknown feature
- String fmsg = XSLMessages.createXPATHMessage(
- XPATHErrorResources.ER_FEATURE_UNKNOWN,
-@@ -240,6 +257,14 @@
- if (name.equals(XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
- return _useServicesMechanism;
- }
-+
-+ /** Check to see if the property is managed by the security manager **/
-+ String propertyValue = (_featureManager != null) ?
-+ _featureManager.getValueAsString(name) : null;
-+ if (propertyValue != null) {
-+ return _featureManager.isFeatureEnabled(name);
-+ }
-+
- // unknown feature
- String fmsg = XSLMessages.createXPATHMessage(
- XPATHErrorResources.ER_GETTING_UNKNOWN_FEATURE,
---- ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java Wed May 07 19:26:26 2014 -0700
-@@ -35,6 +35,7 @@
- import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
- import com.sun.org.apache.xalan.internal.res.XSLMessages;
- import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
-+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
-
- import org.w3c.dom.Node;
- import org.w3c.dom.Document;
-@@ -70,18 +71,20 @@
- // extensions function need to throw XPathFunctionException
- private boolean featureSecureProcessing = false;
- private boolean useServiceMechanism = true;
-+ private final FeatureManager featureManager;
-
- XPathImpl( XPathVariableResolver vr, XPathFunctionResolver fr ) {
-- this.origVariableResolver = this.variableResolver = vr;
-- this.origFunctionResolver = this.functionResolver = fr;
-+ this(vr, fr, false, true, new FeatureManager());
- }
-
- XPathImpl( XPathVariableResolver vr, XPathFunctionResolver fr,
-- boolean featureSecureProcessing, boolean useServiceMechanism ) {
-+ boolean featureSecureProcessing, boolean useServiceMechanism,
-+ FeatureManager featureManager) {
- this.origVariableResolver = this.variableResolver = vr;
- this.origFunctionResolver = this.functionResolver = fr;
- this.featureSecureProcessing = featureSecureProcessing;
- this.useServiceMechanism = useServiceMechanism;
-+ this.featureManager = featureManager;
- }
-
- /**
-@@ -190,7 +193,7 @@
- com.sun.org.apache.xpath.internal.XPathContext xpathSupport = null;
- if ( functionResolver != null ) {
- JAXPExtensionsProvider jep = new JAXPExtensionsProvider(
-- functionResolver, featureSecureProcessing );
-+ functionResolver, featureSecureProcessing, featureManager );
- xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext( jep );
- } else {
- xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext();
-@@ -391,7 +394,7 @@
- // Can have errorListener
- XPathExpressionImpl ximpl = new XPathExpressionImpl (xpath,
- prefixResolver, functionResolver, variableResolver,
-- featureSecureProcessing, useServiceMechanism );
-+ featureSecureProcessing, useServiceMechanism, featureManager );
- return ximpl;
- } catch ( javax.xml.transform.TransformerException te ) {
- throw new XPathExpressionException ( te ) ;
---- ./jaxp/src/javax/xml/xpath/XPathException.java Tue Mar 18 12:34:22 2014 -0700
-+++ ./jaxp/src/javax/xml/xpath/XPathException.java Wed May 07 19:26:26 2014 -0700
-@@ -26,6 +26,11 @@
- package javax.xml.xpath;
-
- import java.io.PrintWriter;
-+import java.io.IOException;
-+import java.io.ObjectInputStream;
-+import java.io.ObjectOutputStream;
-+import java.io.ObjectStreamField;
-+import java.io.InvalidClassException;
-
- /**
- * <code>XPathException</code> represents a generic XPath exception.</p>
-@@ -36,7 +41,9 @@
- */
- public class XPathException extends Exception {
-
-- private final Throwable cause;
-+ private static final ObjectStreamField[] serialPersistentFields = {
-+ new ObjectStreamField( "cause", Throwable.class )
-+ };
-
- /**
- * <p>Stream Unique Identifier.</p>
-@@ -62,7 +69,6 @@
- if ( message == null ) {
- throw new NullPointerException ( "message can't be null");
- }
-- this.cause = null;
- }
-
- /**
-@@ -77,8 +83,7 @@
- * @throws NullPointerException if <code>cause</code> is <code>null</code>.
- */
- public XPathException(Throwable cause) {
-- super();
-- this.cause = cause;
-+ super(cause);
- if ( cause == null ) {
- throw new NullPointerException ( "cause can't be null");
- }
-@@ -90,7 +95,47 @@
- * @return Cause of this XPathException.
- */
- public Throwable getCause() {
-- return cause;
-+ return super.getCause();
-+ }
-+
-+ /**
-+ * Writes "cause" field to the stream.
-+ * The cause is got from the parent class.
-+ *
-+ * @param out stream used for serialization.
-+ * @throws IOException thrown by <code>ObjectOutputStream</code>
-+ *
-+ */
-+ private void writeObject(ObjectOutputStream out)
-+ throws IOException
-+ {
-+ ObjectOutputStream.PutField fields = out.putFields();
-+ fields.put("cause", (Throwable) super.getCause());
-+ out.writeFields();
-+ }
-+
-+ /**
-+ * Reads the "cause" field from the stream.
-+ * And initializes the "cause" if it wasn't
-+ * done before.
-+ *
-+ * @param in stream used for deserialization
-+ * @throws IOException thrown by <code>ObjectInputStream</code>
-+ * @throws ClassNotFoundException thrown by <code>ObjectInputStream</code>
-+ */
-+ private void readObject(ObjectInputStream in)
-+ throws IOException, ClassNotFoundException
-+ {
-+ ObjectInputStream.GetField fields = in.readFields();
-+ Throwable scause = (Throwable) fields.get("cause", null);
-+
-+ if (super.getCause() == null && scause != null) {
-+ try {
-+ super.initCause(scause);
-+ } catch(IllegalStateException e) {
-+ throw new InvalidClassException("Inconsistent state: two causes");
-+ }
-+ }
- }
-
- /**
---- ./jaxws/.hgtags Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/.hgtags Wed May 07 19:26:28 2014 -0700
-@@ -417,3 +417,26 @@
- 0db5b891d1ba10211da0a8158551b35f00da7684 jdk7u55-b11
- 3834eb921dfd8d29d917a0c57bb9fdd9aa58c209 jdk7u55-b12
- 3b0da73591b1ea23c48aa7babc34ed776fc183f0 jdk7u55-b13
-+5d726bf8fedc1f10d250e980653315919b7602f2 jdk7u55-b30
-+81d0f297557c4a876727cabeb2bfcdf066a1fc9d jdk7u55-b14
-+2d103c97c9bd0b3357e6d5e2b5b9ffb64c271288 jdk7u55-b31
-+cb5f95263f620967f5097c5ff8e0b27cfb9e8c44 jdk7u60-b00
-+f675dfce1e61a6ed01732ae7cfbae941791cba74 jdk7u60-b01
-+8a3b9e8492a5ac4e2e0c166dbfc5d058be244377 jdk7u60-b02
-+d4ba4e1ed3ecdef1ef7c3b7aaf62ff69fc105cb2 jdk7u60-b03
-+bef313c7ff7a7a829f8f6a305bf0c3738ad99795 jdk7u60-b04
-+30afd3e2e7044b2aa87ce00ab4301990e6d94d27 jdk7u60-b05
-+dc6017fb9cde43bce92d403abc2821b741cf977c jdk7u60-b06
-+0380cb9d4dc27ed8e2c4fc3502e3d94b0ae0c02d jdk7u60-b07
-+d3896e59b04dc4022c3e0d04e8750b281249bbd2 jdk7u60-b08
-+c85645aa77cedabeeb6e01373cdd81afd56c602e jdk7u60-b09
-+79501d4561e4cfa96fd77e2e92eb6a1b6ad61005 jdk7u60-b10
-+5d848774565b5e188d7ba915ce1cb09d8f3fdb87 jdk7u60-b11
-+9d34f726e35b321072ce5bd0aad2e513b9fc972f jdk7u60-b12
-+d941a701cf5ca11b2777fd1d0238e05e3c963e89 jdk7u60-b13
-+43b5a7cf08e7ee018b1fa42a89510b4c381dc4c5 jdk7u60-b14
-+d00389bf5439e5c42599604d2ebc909d26df8dcf jdk7u60-b15
-+2fc16d3a321212abc0cc93462b22c4be7f693ab9 jdk7u60-b16
-+b312ec543dc09db784e161eb89607d4afd4cab1e jdk7u60-b18
-+b312ec543dc09db784e161eb89607d4afd4cab1e jdk7u60-b17
-+1d21eb9011a060c7761c9a8a53e69d58bbea4893 jdk7u60-b19
---- ./jaxws/src/share/jaxws_classes/com/sun/org/glassfish/external/statistics/impl/BoundedRangeStatisticImpl.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/org/glassfish/external/statistics/impl/BoundedRangeStatisticImpl.java Wed May 07 19:26:28 2014 -0700
-@@ -26,6 +26,7 @@
-
-
- package com.sun.org.glassfish.external.statistics.impl;
-+
- import com.sun.org.glassfish.external.statistics.BoundedRangeStatistic;
- import java.util.Map;
- import java.lang.reflect.*;
---- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/modeler/annotation/WebServiceVisitor.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/modeler/annotation/WebServiceVisitor.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -204,24 +204,24 @@
- }
- portName = ClassNameInfo.getName(
- d.getSimpleName().replace(
-- SIGC_INNERCLASS,
-- SIGC_UNDERSCORE));;
-- packageName = d.getPackage().getQualifiedName();
-- portName = webService != null && webService.name() != null && webService.name().length() >0 ?
-- webService.name() : portName;
-- serviceName = ClassNameInfo.getName(d.getQualifiedName())+SERVICE;
-- serviceName = webService != null && webService.serviceName() != null &&
-- webService.serviceName().length() > 0 ?
-- webService.serviceName() : serviceName;
-- wsdlNamespace = seiContext.getNamespaceURI();
-- typeNamespace = wsdlNamespace;
-+ SIGC_INNERCLASS,
-+ SIGC_UNDERSCORE));;
-+ packageName = d.getPackage().getQualifiedName();
-+ portName = webService != null && webService.name() != null && webService.name().length() >0 ?
-+ webService.name() : portName;
-+ serviceName = ClassNameInfo.getName(d.getQualifiedName())+SERVICE;
-+ serviceName = webService != null && webService.serviceName() != null &&
-+ webService.serviceName().length() > 0 ?
-+ webService.serviceName() : serviceName;
-+ wsdlNamespace = seiContext.getNamespaceURI();
-+ typeNamespace = wsdlNamespace;
-
-- SOAPBinding soapBinding = d.getAnnotation(SOAPBinding.class);
-- if (soapBinding != null) {
-- pushedSOAPBinding = pushSOAPBinding(soapBinding, d, d);
-- } else if (d.equals(typeDecl)) {
-- pushedSOAPBinding = pushSOAPBinding(new MySOAPBinding(), d, d);
-- }
-+ SOAPBinding soapBinding = d.getAnnotation(SOAPBinding.class);
-+ if (soapBinding != null) {
-+ pushedSOAPBinding = pushSOAPBinding(soapBinding, d, d);
-+ } else if (d.equals(typeDecl)) {
-+ pushedSOAPBinding = pushSOAPBinding(new MySOAPBinding(), d, d);
-+ }
- }
-
- public static boolean sameStyle(SOAPBinding.Style style, SOAPStyle soapStyle) {
-@@ -235,7 +235,7 @@
- }
-
- protected boolean pushSOAPBinding(SOAPBinding soapBinding, Declaration bindingDecl,
-- TypeDeclaration classDecl) {
-+ TypeDeclaration classDecl) {
- boolean changed = false;
- if (!sameStyle(soapBinding.style(), soapStyle)) {
- changed = true;
-@@ -293,7 +293,7 @@
-
- // abstract protected boolean shouldProcessWebService(WebService webService, InterfaceDeclaration intf);
-
--// abstract protected boolean shouldProcessWebService(WebService webService, ClassDeclaration decl);
-+ // abstract protected boolean shouldProcessWebService(WebService webService, ClassDeclaration decl);
- protected boolean shouldProcessWebService(WebService webService, InterfaceDeclaration intf) {
- hasWebMethods = false;
- if (webService == null)
-@@ -315,9 +315,9 @@
- return false;
- hasWebMethods = hasWebMethods(classDecl);
- SOAPBinding soapBinding = classDecl.getAnnotation(SOAPBinding.class);
-- if(soapBinding != null && soapBinding.style() == SOAPBinding.Style.RPC && soapBinding.parameterStyle() == SOAPBinding.ParameterStyle.BARE) {
-- builder.onError(classDecl.getPosition(), WebserviceapMessages.localizableWEBSERVICEAP_INVALID_SOAPBINDING_PARAMETERSTYLE(soapBinding, classDecl));
-- return false;
-+ if(soapBinding != null && soapBinding.style() == SOAPBinding.Style.RPC && soapBinding.parameterStyle() == SOAPBinding.ParameterStyle.BARE) {
-+ builder.onError(classDecl.getPosition(), WebserviceapMessages.localizableWEBSERVICEAP_INVALID_SOAPBINDING_PARAMETERSTYLE(soapBinding, classDecl));
-+ return false;
- }
- return isLegalImplementation(webService, classDecl);
- }
-@@ -345,8 +345,8 @@
- if (webMethod.exclude()) {
- if (webMethod.operationName().length() > 0)
- builder.onError(method.getPosition(), WebserviceapMessages.localizableWEBSERVICEAP_INVALID_WEBMETHOD_ELEMENT_WITH_EXCLUDE("operationName", d.getQualifiedName(), method.toString()));
-- if (webMethod.action().length() > 0)
-- builder.onError(method.getPosition(), WebserviceapMessages.localizableWEBSERVICEAP_INVALID_WEBMETHOD_ELEMENT_WITH_EXCLUDE("action", d.getQualifiedName(), method.toString()));
-+ if (webMethod.action().length() > 0)
-+ builder.onError(method.getPosition(), WebserviceapMessages.localizableWEBSERVICEAP_INVALID_WEBMETHOD_ELEMENT_WITH_EXCLUDE("action", d.getQualifiedName(), method.toString()));
- } else {
- return true;
- }
-@@ -382,7 +382,7 @@
- }
-
- private InterfaceDeclaration getEndpointInterfaceDecl(String endpointInterfaceName,
-- ClassDeclaration d) {
-+ ClassDeclaration d) {
- InterfaceDeclaration intTypeDecl = null;
- for (InterfaceType interfaceType : d.getSuperinterfaces()) {
- if (endpointInterfaceName.equals(interfaceType.toString())) {
-@@ -488,7 +488,7 @@
- Collection<Modifier> modifiers = classDecl.getModifiers();
- if (!modifiers.contains(Modifier.PUBLIC)){
- builder.onError(classDecl.getPosition(), WebserviceapMessages.localizableWEBSERVICEAP_WEBSERVICE_CLASS_NOT_PUBLIC(classDecl.getQualifiedName()));
-- return false;
-+ return false;
- }
- if (modifiers.contains(Modifier.FINAL) && !isStateful) {
- builder.onError(classDecl.getPosition(), WebserviceapMessages.localizableWEBSERVICEAP_WEBSERVICE_CLASS_IS_FINAL(classDecl.getQualifiedName()));
-@@ -538,7 +538,7 @@
- }
-
- protected boolean classImplementsSEI(ClassDeclaration classDecl,
-- InterfaceDeclaration intfDecl) {
-+ InterfaceDeclaration intfDecl) {
- for (InterfaceType interfaceType : classDecl.getSuperinterfaces()) {
- if (interfaceType.getDeclaration().equals(intfDecl))
- return true;
-@@ -637,8 +637,8 @@
- */
- if (!isLegalType(method.getReturnType())) {
- builder.onError(method.getPosition(), WebserviceapMessages.localizableWEBSERVICEAP_METHOD_RETURN_TYPE_CANNOT_IMPLEMENT_REMOTE(typeDecl.getQualifiedName(),
-- method.getSimpleName(),
-- method.getReturnType()));
-+ method.getSimpleName(),
-+ method.getReturnType()));
- }
- boolean isOneway = method.getAnnotation(Oneway.class) != null;
- if (isOneway && !isValidOnewayMethod(method, typeDecl))
-@@ -684,14 +684,14 @@
- }
-
- protected boolean isLegalParameter(ParameterDeclaration param,
-- MethodDeclaration method,
-- TypeDeclaration typeDecl,
-- int paramIndex) {
-+ MethodDeclaration method,
-+ TypeDeclaration typeDecl,
-+ int paramIndex) {
- if (!isLegalType(param.getType())) {
- builder.onError(param.getPosition(), WebserviceapMessages.localizableWEBSERVICEAP_METHOD_PARAMETER_TYPES_CANNOT_IMPLEMENT_REMOTE(typeDecl.getQualifiedName(),
-- method.getSimpleName(),
-- param.getSimpleName(),
-- param.getType().toString()));
-+ method.getSimpleName(),
-+ param.getSimpleName(),
-+ param.getType().toString()));
- return false;
- }
- TypeMirror holderType;
---- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wscompile/WsimportTool.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wscompile/WsimportTool.java Wed May 07 19:26:28 2014 -0700
-@@ -334,7 +334,7 @@
- if(options.verbose) {
- listener.message(WscompileMessages.WSIMPORT_ARCHIVE_ARTIFACT(f, options.clientjar));
- }
-- String entry = f.getCanonicalPath().substring(base.length()+1);
-+ String entry = f.getCanonicalPath().substring(base.length()+1).replace(File.separatorChar, '/');
- BufferedInputStream bis = new BufferedInputStream(
- new FileInputStream(f));
- JarEntry jarEntry = new JarEntry(entry);
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/ModelBuilder.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/ModelBuilder.java Wed May 07 19:26:28 2014 -0700
-@@ -160,8 +160,8 @@
- res = Messages.INCOMPATIBLE_API_VERSION;
-
- throw new LinkageError( res.format(
-- Which.which(XmlSchema.class),
-- Which.which(ModelBuilder.class)
-+ Which.which(XmlSchema.class),
-+ Which.which(ModelBuilder.class)
- ));
- }
- }
-@@ -176,8 +176,8 @@
- } catch (NoSuchMethodError e) {
- // we seem to be getting 1.0 runtime
- throw new LinkageError( Messages.RUNNING_WITH_1_0_RUNTIME.format(
-- Which.which(WhiteSpaceProcessor.class),
-- Which.which(ModelBuilder.class)
-+ Which.which(WhiteSpaceProcessor.class),
-+ Which.which(ModelBuilder.class)
- ));
- }
- }
-@@ -293,7 +293,7 @@
-
- if(nav.isArray(t)) { // no need for checking byte[], because above typeInfoset.getTypeInfo() would return non-null
- ArrayInfoImpl<T,C,F,M> ai =
-- createArrayInfo(upstream, t);
-+ createArrayInfo(upstream, t);
- addTypeName(ai);
- typeInfoSet.add(ai);
- return ai;
-@@ -329,7 +329,7 @@
- }
-
- protected ElementInfoImpl<T,C,F,M> createElementInfo(
-- RegistryInfoImpl<T,C,F,M> registryInfo, M m) throws IllegalAnnotationException {
-+ RegistryInfoImpl<T,C,F,M> registryInfo, M m) throws IllegalAnnotationException {
- return new ElementInfoImpl<T,C,F,M>(this,registryInfo,m);
- }
-
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/mimepull/MemoryData.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/mimepull/MemoryData.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/mimepull/TempFiles.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/mimepull/TempFiles.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/WSServiceDelegate.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/WSServiceDelegate.java Wed May 07 19:26:28 2014 -0700
-@@ -22,6 +22,7 @@
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-+
- package com.sun.xml.internal.ws.client;
-
- import com.sun.istack.internal.NotNull;
-@@ -140,8 +141,8 @@
- /**
- * Information about SEI, keyed by their interface type.
- */
-- // private final Map<Class,SEIPortInfo> seiContext = new HashMap<Class,SEIPortInfo>();
-- private final Map<QName,SEIPortInfo> seiContext = new HashMap<QName,SEIPortInfo>();
-+ // private final Map<Class,SEIPortInfo> seiContext = new HashMap<Class,SEIPortInfo>();
-+ private final Map<QName,SEIPortInfo> seiContext = new HashMap<QName,SEIPortInfo>();
-
- // This executor is used for all the async invocations for all proxies
- // created from this service. But once the proxy is created, then changing
-@@ -166,8 +167,8 @@
-
- public WSServiceDelegate(URL wsdlDocumentLocation, QName serviceName, Class<? extends Service> serviceClass) {
- this(
-- wsdlDocumentLocation==null ? null : new StreamSource(wsdlDocumentLocation.toExternalForm()),
-- serviceName,serviceClass);
-+ wsdlDocumentLocation==null ? null : new StreamSource(wsdlDocumentLocation.toExternalForm()),
-+ serviceName,serviceClass);
- }
-
- /**
-@@ -204,10 +205,10 @@
- if(wsdl == null){
- if(serviceClass != Service.class){
- WebServiceClient wsClient = AccessController.doPrivileged(new PrivilegedAction<WebServiceClient>() {
-- public WebServiceClient run() {
-- return serviceClass.getAnnotation(WebServiceClient.class);
-- }
-- });
-+ public WebServiceClient run() {
-+ return serviceClass.getAnnotation(WebServiceClient.class);
-+ }
-+ });
- String wsdlLocation = wsClient.wsdlLocation();
- wsdlLocation = JAXWSUtils.absolutize(JAXWSUtils.getFileOrURLName(wsdlLocation));
- wsdl = new StreamSource(wsdlLocation);
-@@ -221,8 +222,8 @@
- service = model.getService(this.serviceName);
- if (service == null)
- throw new WebServiceException(
-- ClientMessages.INVALID_SERVICE_NAME(this.serviceName,
-- buildNameList(model.getServices().keySet())));
-+ ClientMessages.INVALID_SERVICE_NAME(this.serviceName,
-+ buildNameList(model.getServices().keySet())));
- // fill in statically known ports
- for (WSDLPortImpl port : service.getPorts())
- ports.put(port.getName(), new PortInfo(this, port));
-@@ -255,7 +256,7 @@
- private WSDLModelImpl parseWSDL(URL wsdlDocumentLocation, Source wsdlSource) {
- try {
- return RuntimeWSDLParser.parse(wsdlDocumentLocation, wsdlSource, createDefaultCatalogResolver(),
-- true, getContainer(), ServiceFinder.find(WSDLParserExtension.class).toArray());
-+ true, getContainer(), ServiceFinder.find(WSDLParserExtension.class).toArray());
- } catch (IOException e) {
- throw new WebServiceException(e);
- } catch (XMLStreamException e) {
-@@ -345,7 +346,7 @@
- //get the first port corresponding to the SEI
- WSDLPortImpl port = wsdlService.getMatchingPort(portTypeName);
- if (port == null)
-- throw new WebServiceException(ClientMessages.UNDEFINED_PORT_TYPE(portTypeName));
-+ throw new WebServiceException(ClientMessages.UNDEFINED_PORT_TYPE(portTypeName));
- QName portName = port.getName();
- return getPort(portName, portInterface,features);
- }
-@@ -431,8 +432,8 @@
- binding.setMode(mode);
- Dispatch<Object> dispatch = Stubs.createJAXBDispatch(
- port, binding, jaxbContext, mode,wsepr);
-- serviceInterceptor.postCreateDispatch((WSBindingProvider)dispatch);
-- return dispatch;
-+ serviceInterceptor.postCreateDispatch((WSBindingProvider)dispatch);
-+ return dispatch;
- }
-
- @Override
-@@ -583,7 +584,7 @@
-
- if (wsdlService.get(portName)==null) {
- throw new WebServiceException(
-- ClientMessages.INVALID_PORT_NAME(portName,buildWsdlPortNames()));
-+ ClientMessages.INVALID_PORT_NAME(portName,buildWsdlPortNames()));
- }
-
- BindingImpl binding = eif.createBinding(webServiceFeatures,portInterface);
-@@ -681,7 +682,7 @@
- return wsdlService;
- }
-
-- class DaemonThreadFactory implements ThreadFactory {
-+ class DaemonThreadFactory implements ThreadFactory {
- public Thread newThread(Runnable r) {
- Thread daemonThread = new Thread(r);
- daemonThread.setDaemon(Boolean.TRUE);
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/AssertionSet.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/AssertionSet.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/AssertionValidationProcessor.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/AssertionValidationProcessor.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/ComplexAssertion.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/ComplexAssertion.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/EffectivePolicyModifier.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/EffectivePolicyModifier.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/NestedPolicy.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/NestedPolicy.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/Policy.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/Policy.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyAssertion.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyAssertion.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyConstants.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyConstants.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyException.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyException.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyIntersector.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyIntersector.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMap.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMap.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapExtender.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapExtender.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapKey.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapKey.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapKeyHandler.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapKeyHandler.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapMutator.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapMutator.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMerger.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMerger.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyScope.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyScope.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicySubject.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicySubject.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/SimpleAssertion.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/SimpleAssertion.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/package-info.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/package-info.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/PolicyLogger.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/PolicyLogger.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/RuntimePolicyUtilsException.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/RuntimePolicyUtilsException.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/ServiceConfigurationError.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/ServiceConfigurationError.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/ServiceFinder.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/ServiceFinder.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/package-info.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/package-info.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/AssertionData.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/AssertionData.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/CompactModelGenerator.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/CompactModelGenerator.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/DefaultPolicyAssertionCreator.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/DefaultPolicyAssertionCreator.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/ModelNode.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/ModelNode.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/NormalizedModelGenerator.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/NormalizedModelGenerator.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelGenerator.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelGenerator.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelMarshaller.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelMarshaller.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelTranslator.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelTranslator.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelUnmarshaller.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelUnmarshaller.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyReferenceData.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyReferenceData.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicySourceModel.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicySourceModel.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicySourceModelContext.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicySourceModelContext.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/XmlPolicyModelMarshaller.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/XmlPolicyModelMarshaller.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/XmlPolicyModelUnmarshaller.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/XmlPolicyModelUnmarshaller.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/package-info.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/package-info.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/package-info.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/package-info.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/wspolicy/NamespaceVersion.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/wspolicy/NamespaceVersion.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/wspolicy/XmlToken.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/wspolicy/XmlToken.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/AbstractQNameValidator.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/AbstractQNameValidator.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/AssertionCreationException.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/AssertionCreationException.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/PolicyAssertionCreator.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/PolicyAssertionCreator.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/PolicyAssertionValidator.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/PolicyAssertionValidator.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/PrefixMapper.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/PrefixMapper.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/package-info.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/package-info.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/subject/PolicyMapKeyConverter.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/subject/PolicyMapKeyConverter.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/subject/WsdlBindingSubject.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/subject/WsdlBindingSubject.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/subject/package-info.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/subject/package-info.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/AttachmentPart.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/AttachmentPart.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/Detail.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/Detail.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/DetailEntry.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/DetailEntry.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/FactoryFinder.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/FactoryFinder.java Wed May 07 19:26:28 2014 -0700
-@@ -40,11 +40,12 @@
- */
- private static Object newInstance(String className,
- ClassLoader classLoader)
-- throws SOAPException
-+ throws SOAPException
- {
- try {
- Class spiClass = safeLoadClass(className, classLoader);
- return spiClass.newInstance();
-+
- } catch (ClassNotFoundException x) {
- throw new SOAPException("Provider " + className + " not found", x);
- } catch (Exception x) {
-@@ -66,7 +67,7 @@
- * @exception SOAPException if there is a SOAP error
- */
- static Object find(String factoryId)
-- throws SOAPException
-+ throws SOAPException
- {
- return find(factoryId, null, false);
- }
-@@ -92,7 +93,7 @@
- * @exception SOAPException if there is a SOAP error
- */
- static Object find(String factoryId, String fallbackClassName)
-- throws SOAPException
-+ throws SOAPException
- {
- return find(factoryId, fallbackClassName, true);
- }
-@@ -122,7 +123,7 @@
- * @exception SOAPException if there is a SOAP error
- */
- static Object find(String factoryId, String defaultClassName,
-- boolean tryFallback) throws SOAPException {
-+ boolean tryFallback) throws SOAPException {
- ClassLoader classLoader;
- try {
- classLoader = Thread.currentThread().getContextClassLoader();
-@@ -133,7 +134,7 @@
- // Use the system property first
- try {
- String systemProp =
-- System.getProperty( factoryId );
-+ System.getProperty( factoryId );
- if( systemProp!=null) {
- return newInstance(systemProp, classLoader);
- }
-@@ -144,7 +145,7 @@
- try {
- String javah=System.getProperty( "java.home" );
- String configFile = javah + File.separator +
-- "lib" + File.separator + "jaxm.properties";
-+ "lib" + File.separator + "jaxm.properties";
- File f=new File( configFile );
- if( f.exists()) {
- Properties props=new Properties();
-@@ -167,13 +168,13 @@
-
- if( is!=null ) {
- BufferedReader rd =
-- new BufferedReader(new InputStreamReader(is, "UTF-8"));
-+ new BufferedReader(new InputStreamReader(is, "UTF-8"));
-
- String factoryClassName = rd.readLine();
- rd.close();
-
- if (factoryClassName != null &&
-- ! "".equals(factoryClassName)) {
-+ ! "".equals(factoryClassName)) {
- return newInstance(factoryClassName, classLoader);
- }
- }
-@@ -188,7 +189,7 @@
- // (built in) factory if specified.
- if (defaultClassName == null) {
- throw new SOAPException(
-- "Provider for " + factoryId + " cannot be found", null);
-+ "Provider for " + factoryId + " cannot be found", null);
- }
- return newInstance(defaultClassName, classLoader);
- }
-@@ -200,7 +201,7 @@
- * Class.forName() on it so it will be loaded by the bootstrap class loader.
- */
- private static Class safeLoadClass(String className,
-- ClassLoader classLoader)
-+ ClassLoader classLoader)
- throws ClassNotFoundException {
- try {
- // make sure that the current thread has an access to the package of the given name.
-@@ -218,7 +219,7 @@
- return classLoader.loadClass(className);
- } catch (SecurityException se) {
- // (only) default implementation can be loaded
-- // using bootstrap class loader ...
-+ // using bootstrap class loader:
- if (isDefaultImplementation(className))
- return Class.forName(className);
-
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/MessageFactory.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/MessageFactory.java Wed May 07 19:26:28 2014 -0700
-@@ -96,8 +96,9 @@
- * @see SAAJMetaFactory
- */
-
-- public static MessageFactory newInstance()
-- throws SOAPException {
-+ public static MessageFactory newInstance() throws SOAPException {
-+
-+
- try {
- MessageFactory factory = (MessageFactory) FactoryFinder.find(
- MESSAGE_FACTORY_PROPERTY,
-@@ -107,8 +108,8 @@
- if (factory != null) {
- return factory;
- }
-+ return newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
-
-- return newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
- } catch (Exception ex) {
- throw new SOAPException(
- "Unable to create message factory for SOAP: "
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/MimeHeader.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/MimeHeader.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/MimeHeaders.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/MimeHeaders.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/Name.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/Name.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/Node.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/Node.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SAAJResult.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SAAJResult.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPBody.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPBody.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPBodyElement.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPBodyElement.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPConnection.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPConnection.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPConstants.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPConstants.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPElement.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPElement.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPElementFactory.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPElementFactory.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPEnvelope.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPEnvelope.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPException.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPException.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPFactory.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPFactory.java Wed May 07 19:26:28 2014 -0700
-@@ -261,7 +261,8 @@
- throws SOAPException
- {
- try {
-- SOAPFactory factory = (SOAPFactory) FactoryFinder.find(SOAP_FACTORY_PROPERTY, DEFAULT_SOAP_FACTORY, false);
-+ SOAPFactory factory = (SOAPFactory) FactoryFinder.find(
-+ SOAP_FACTORY_PROPERTY, DEFAULT_SOAP_FACTORY, false);
- if (factory != null)
- return factory;
- return newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPFault.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPFault.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPFaultElement.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPFaultElement.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPHeader.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPHeader.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPHeaderElement.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPHeaderElement.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPMessage.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPMessage.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPPart.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPPart.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jaxws/src/share/jaxws_classes/javax/xml/soap/Text.java Tue Mar 18 12:34:51 2014 -0700
-+++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/Text.java Wed May 07 19:26:28 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2012, 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
---- ./jdk/.hgtags Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/.hgtags Wed May 07 19:26:47 2014 -0700
-@@ -401,3 +401,26 @@
- 2d80b7cd7aae76f0909a210414317dcf846ad651 jdk7u55-b11
- 07be5d5508733ed37c11fcd21a13ae3c8288313b jdk7u55-b12
- 92fd166252c2701092a510002f4cf9285a20473d jdk7u55-b13
-+4a5651c84b1e6cf26dc9b19f00747e5004efba68 jdk7u55-b30
-+ffd99c5975217a14609851602c5f5dc005234aba jdk7u55-b14
-+88f1bf248cc520e0bf7ef17bc862f87aab958373 jdk7u55-b31
-+db5a29c812ee25c34ce9cd97de6e0dae284a4e34 jdk7u60-b00
-+def34c4a798678c424786a8f0d0508e90185958d jdk7u60-b01
-+ff67c89658525e8903fb870861ed3645befd6bc5 jdk7u60-b02
-+b1bcc999a8f1b4b4452b59c6636153bb0154cf5a jdk7u60-b03
-+efc8886310cbccb941f826acfad2ad51a2891be5 jdk7u60-b04
-+4fb749a3110727d5334c69793578a3254a053bf5 jdk7u60-b05
-+46ca1ce7550f1463d60c3eacaf7b8cdc44b0c66e jdk7u60-b06
-+d5a2f60006e3c4243abeee0f623e5c3f79372fd8 jdk7u60-b07
-+0dd27693876d66d176457749d0f2161b219eba2d jdk7u60-b08
-+7b571638b0f51bcbe04c088dfff569b4cba6bbdf jdk7u60-b09
-+fb4981489b09594d2449527e2d511834cf8ad370 jdk7u60-b10
-+c2bb87dae8a08eab6f4f336ce5a59865aa0214d6 jdk7u60-b11
-+1a90de8005e3de2475fd9355dcdb6f5e60bf89cc jdk7u60-b12
-+b06d4ed71ae0bc6e13f5a8437cb6388f17c66e84 jdk7u60-b13
-+b7fbd9b4febf8961091fdf451d3da477602a8f1d jdk7u60-b14
-+04882f9a073e8de153ec7ad32486569fd9a087ec jdk7u60-b15
-+41547583c3a035c3924ffedfa8704e58d69e5c50 jdk7u60-b16
-+e484202d9a4104840d758a21b2bba1250e766343 jdk7u60-b18
-+e484202d9a4104840d758a21b2bba1250e766343 jdk7u60-b17
-+7190843ddaf4f3ad158c3071be0f4ca42a5802dc jdk7u60-b19
---- ./jdk/make/bridge/AccessBridgeJava/Makefile Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/bridge/AccessBridgeJava/Makefile Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- #
--# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2013, 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
-@@ -51,7 +51,7 @@
- #
- # Java files to compile.
- #
--FILES_java = com/sun/java/accessibility/AccessBridge.java
-+FILES_java = com/sun/java/accessibility/AccessBridgeLoader.java com/sun/java/accessibility/AccessBridge.java
-
- #
- # Location for the newly built classfiles.
-@@ -68,7 +68,7 @@
- build: prebuild
-
- prebuild:
-- $(CP) $(CLOSED_PLATFORM_SRC)/classes/com/sun/java/accessibility/$(ABPLATFORM)/AccessBridge.java \
-+ $(CP) $(CLOSED_PLATFORM_SRC)/classes/com/sun/java/accessibility/$(ABPLATFORM)/AccessBridgeLoader.java \
- $(CLOSED_PLATFORM_SRC)/classes/com/sun/java/accessibility
-
- all : build $(JARFILE)
---- ./jdk/make/com/oracle/Makefile Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/com/oracle/Makefile Wed May 07 19:26:47 2014 -0700
-@@ -30,22 +30,8 @@
- #SUBDIRS_MAKEFLAGS += JAVAC_LINT_OPTIONS=-Xlint:all,-deprecation,-path
- include $(BUILDDIR)/common/Defs.gmk
-
--JFR_SRCDIRS_EXIST := $(shell \
-- if [ -d $(CLOSED_SHARE_SRC)/native/oracle/jfr ] ; then \
-- echo true; \
-- else \
-- echo false; \
-- fi)
--
--JFR =
--ifndef OPENJDK
-- ifndef JAVASE_EMBEDDED
-- ifeq ($(JFR_SRCDIRS_EXIST), true)
-- ifneq (${ARCH},arm)
-- JFR = jfr
-- endif
-- endif
-- endif
-+ifeq ($(BUILD_JFR), true)
-+ JFR = jfr
- endif
-
- # build com/oracle/security/ucrypto on Solaris platform for non-OpenJDK builds
---- ./jdk/make/common/Defs-macosx.gmk Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/common/Defs-macosx.gmk Wed May 07 19:26:47 2014 -0700
-@@ -397,11 +397,14 @@
- INCLUDE_SA = true
- endif
-
--ifdef CROSS_COMPILE_ARCH
-- # X11 headers are not under /usr/include
-- OTHER_CFLAGS += -I$(OPENWIN_HOME)/include
-- OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include
-- OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include
--endif
-+# X11 headers are not under /usr/include
-+OTHER_CFLAGS += -I$(OPENWIN_HOME)/include
-+OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include
-+OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include
-+
-+# Use unlimited select
-+OTHER_CFLAGS += -D_DARWIN_UNLIMITED_SELECT
-+OTHER_CXXFLAGS += -D_DARWIN_UNLIMITED_SELECT
-+OTHER_CPPFLAGS += -D_DARWIN_UNLIMITED_SELECT
-
- LIB_LOCATION ?= $(LIBDIR)
---- ./jdk/make/common/Release-macosx.gmk Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/common/Release-macosx.gmk Wed May 07 19:26:47 2014 -0700
-@@ -58,6 +58,9 @@
- jdk-bundle-setup:
- $(RM) -r $(JDK_BUNDLE_DIR)
-
-+jdk-server-bundle-setup:
-+ $(RM) -r $(JDK_SERVER_BUNDLE_DIR)
-+
- jre-bundle-files:
- $(MKDIR) -p $(JRE_BUNDLE_DIR)/MacOS
- ln -s ../Home/lib/jli/libjli.dylib $(JRE_BUNDLE_DIR)/MacOS/
-@@ -79,6 +82,6 @@
- $(SED) -e "s/@@ID@@/$(BUNDLE_ID_JDK)/g" -e "s/@@NAME@@/$(BUNDE_NAME_JDK)/g" -e "s/@@INFO@@/$(BUNDLE_INFO_JDK)/g" -e "s/@@PLATFORM_VERSION@@/$(BUNDLE_PLATFORM_VERSION)/g" -e "s/@@VERSION@@/$(BUNDLE_VERSION)/g" -e "s/@@VENDOR@@/$(BUNDLE_VENDOR)/g" < $(MACOSX_SRC)/bundle/JDK-Info.plist > $(JDK_SERVER_BUNDLE_DIR)/Info.plist
- /usr/bin/SetFile -a B $(JDK_SERVER_BUNDLE_DIR)/../
-
--EXTRA_IMAGE_TARGETS += jre-bundle-setup jdk-bundle-setup jre-bundle-files jdk-bundle-files jdk-server-bundle-files
-+EXTRA_IMAGE_TARGETS += jre-bundle-setup jdk-bundle-setup jdk-server-bundle-setup jre-bundle-files jdk-bundle-files jdk-server-bundle-files
-
- .PHONY: $(EXTRA_JRE_TARGETS) $(EXTRA_IMAGE_TARGETS)
---- ./jdk/make/common/Release.gmk Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/common/Release.gmk Wed May 07 19:26:47 2014 -0700
-@@ -402,25 +402,9 @@
- sun/tools/jinfo \
- sun/tools/jmap
-
--JFR_SRCDIRS_EXIST := $(shell \
-- if [ -d $(CLOSED_SHARE_SRC)/classes/com/oracle/jrockit/jfr ] ; then \
-- echo true; \
-- else \
-- echo false; \
-- fi)
--
--BUILD_JFR=
--ifndef OPENJDK
--ifndef JAVASE_EMBEDDED
--ifeq ($(JFR_SRCDIRS_EXIST), true)
--BUILD_JFR=true
--endif
--endif
--endif
--
- # classes that go into jfr.jar
- JFR_CLASSES_DIRS=
--ifdef BUILD_JFR
-+ifeq ($(BUILD_JFR), true)
- JFR_CLASSES_DIRS= \
- com/oracle/jrockit/jfr \
- oracle/jrockit/jfr \
-@@ -629,7 +613,7 @@
- $(ECHO) "sun/tools/jstack/" >> $@
- $(ECHO) "sun/tools/jinfo/" >> $@
- $(ECHO) "sun/tools/jmap/" >> $@
--ifdef BUILD_JFR
-+ifeq ($(BUILD_JFR), true)
- $(ECHO) "com/oracle/jrockit/jfr/" >> $@
- $(ECHO) "com/oracle/jrockit/jfr/client/" >> $@
- $(ECHO) "com/oracle/jrockit/jfr/management/" >> $@
-@@ -668,7 +652,7 @@
-
- # Create jfr.jar
- JFR_JAR=
--ifdef BUILD_JFR
-+ifeq ($(BUILD_JFR), true)
- JFR_JAR=$(ABS_TEMPDIR)/jfr-orig.jar
- $(JFR_JAR): $(OTHER_JAR_MANIFEST_FILE)
- $(prep-target)
---- ./jdk/make/java/java/FILES_c.gmk Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/java/java/FILES_c.gmk Wed May 07 19:26:47 2014 -0700
-@@ -37,7 +37,6 @@
- FileInputStream.c \
- FileInputStream_md.c \
- FileOutputStream_md.c \
-- Finalizer.c \
- Float.c \
- Object.c \
- ObjectOutputStream.c \
---- ./jdk/make/java/java/Makefile Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/java/java/Makefile Wed May 07 19:26:47 2014 -0700
-@@ -102,6 +102,7 @@
- java/util/prefs/MacOSXPreferencesFactory.java
-
- CFLAGS_$(VARIANT)/java_props_md.o = -Os -x objective-c
-+CFLAGS_$(VARIANT)/java_props_macosx.o = -Os -x objective-c
- endif
-
- #
-@@ -222,6 +223,7 @@
- ifeq ($(PLATFORM), macosx)
- OTHER_LDLIBS += \
- -framework CoreFoundation \
-+ -framework Foundation \
- -framework Security \
- -framework SystemConfiguration
- endif
---- ./jdk/make/java/java/mapfile-vers Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/java/java/mapfile-vers Wed May 07 19:26:47 2014 -0700
-@@ -121,6 +121,7 @@
- Java_java_io_UnixFileSystem_setReadOnly;
- Java_java_io_UnixFileSystem_setPermission;
- Java_java_lang_Class_forName0;
-+ Java_java_lang_Class_getCheckMemberAccessMethod;
- Java_java_lang_Class_getPrimitiveClass;
- Java_java_lang_Class_isAssignableFrom;
- Java_java_lang_Class_isInstance;
-@@ -140,7 +141,6 @@
- Java_java_lang_Double_doubleToRawLongBits;
- Java_java_lang_reflect_Proxy_defineClass0;
- Java_java_lang_Shutdown_runAllFinalizers;
-- Java_java_lang_ref_Finalizer_invokeFinalizeMethod;
- Java_java_lang_Float_intBitsToFloat;
- Java_java_lang_Float_floatToRawIntBits;
- Java_java_lang_StrictMath_IEEEremainder;
---- ./jdk/make/java/java/reorder-i586 Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/java/java/reorder-i586 Wed May 07 19:26:47 2014 -0700
-@@ -77,7 +77,6 @@
- text: .text%JNU_GetEnv;
- text: .text%Java_java_io_UnixFileSystem_checkAccess;
- text: .text%Java_sun_reflect_NativeMethodAccessorImpl_invoke0;
--text: .text%Java_java_lang_ref_Finalizer_invokeFinalizeMethod;
- text: .text%Java_java_io_FileInputStream_available;
- text: .text%Java_java_lang_reflect_Array_newArray;
- text: .text%Java_java_lang_Throwable_getStackTraceDepth;
---- ./jdk/make/java/java/reorder-sparc Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/java/java/reorder-sparc Wed May 07 19:26:47 2014 -0700
-@@ -87,7 +87,6 @@
- text: .text%throwFileNotFoundException;
- text: .text%JNU_NotifyAll;
- # Test LoadFrame
--text: .text%Java_java_lang_ref_Finalizer_invokeFinalizeMethod;
- text: .text%JNU_CallMethodByName;
- text: .text%JNU_CallMethodByNameV;
- text: .text%Java_java_io_UnixFileSystem_createDirectory;
---- ./jdk/make/java/java/reorder-sparcv9 Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/java/java/reorder-sparcv9 Wed May 07 19:26:47 2014 -0700
-@@ -77,7 +77,6 @@
- text: .text%Java_java_security_AccessController_doPrivileged__Ljava_security_PrivilegedAction_2Ljava_security_AccessControlContext_2;
- text: .text%JNU_GetEnv;
- text: .text%Java_java_io_UnixFileSystem_checkAccess;
--text: .text%Java_java_lang_ref_Finalizer_invokeFinalizeMethod;
- text: .text%Java_java_lang_reflect_Array_newArray;
- text: .text%Java_java_lang_Throwable_getStackTraceDepth;
- text: .text%Java_java_lang_Throwable_getStackTraceElement;
---- ./jdk/make/sun/awt/Makefile Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/awt/Makefile Wed May 07 19:26:47 2014 -0700
-@@ -191,6 +191,10 @@
- sun/awt/windows/awtLocalization.properties
- endif
-
-+ifeq ($(PLATFORM), macosx)
-+ NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES += \
-+ sun/awt/resources/awtosx.properties
-+endif
- #
- # Rules
- #
---- ./jdk/make/sun/javazic/tzdata/VERSION Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/VERSION Wed May 07 19:26:47 2014 -0700
-@@ -21,4 +21,4 @@
- # or visit www.oracle.com if you need additional information or have any
- # questions.
- #
--tzdata2013i
-+tzdata2014b
---- ./jdk/make/sun/javazic/tzdata/africa Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/africa Wed May 07 19:26:47 2014 -0700
-@@ -891,7 +891,10 @@
- # Another source (specifying the time for start and end in the decree):
- # http://www.lemag.ma/Heure-d-ete-au-Maroc-jusqu-au-27-octobre_a75620.html
-
--# From Paul Eggert (2013-10-03):
-+# From Sebastien Willemijns (2014-03-18):
-+# http://www.afriquinfos.com/articles/2014/3/18/maroc-heure-dete-avancez-tous-horloges-247891.asp
-+
-+# From Paul Eggert (2014-03-19):
- # To estimate what the Moroccan government will do in future years,
- # transition dates for 2014 through 2038 were determined by running
- # the following program under GNU Emacs 24.3:
---- ./jdk/make/sun/javazic/tzdata/antarctica Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/antarctica Wed May 07 19:26:47 2014 -0700
-@@ -253,24 +253,41 @@
- # year-round base
- # Scott Base, Ross Island, since 1957-01.
- # See Pacific/Auckland.
--#
--# These rules for New Zealand are stolen from the 'australasia' file.
--# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
--Rule NZAQ 1974 only - Nov 3 2:00s 1:00 D
--Rule NZAQ 1975 1988 - Oct lastSun 2:00s 1:00 D
--Rule NZAQ 1989 only - Oct 8 2:00s 1:00 D
--Rule NZAQ 1990 2006 - Oct Sun>=1 2:00s 1:00 D
--Rule NZAQ 1975 only - Feb 23 2:00s 0 S
--Rule NZAQ 1976 1989 - Mar Sun>=1 2:00s 0 S
--Rule NZAQ 1990 2007 - Mar Sun>=15 2:00s 0 S
--Rule NZAQ 2007 max - Sep lastSun 2:00s 1:00 D
--Rule NZAQ 2008 max - Apr Sun>=1 2:00s 0 S
-
- # Norway - territories
- # Bouvet (never inhabited)
- #
- # claims
- # Peter I Island (never inhabited)
-+#
-+# year-round base
-+# Troll, Queen Maud Land, -720041+0023206, since 2005-02-12
-+#
-+# From Paul-Inge Flakstad (2014-03-10):
-+# I recently had a long dialog about this with the developer of timegenie.com.
-+# In the absence of specific dates, he decided to choose some likely ones:
-+# GMT +1 - From March 1 to the last Sunday in March
-+# GMT +2 - From the last Sunday in March until the last Sunday in October
-+# GMT +1 - From the last Sunday in October until November 7
-+# GMT +0 - From November 7 until March 1
-+# The dates for switching to and from UTC+0 will probably not be absolutely
-+# correct, but they should be quite close to the actual dates.
-+#
-+# From Paul Eggert (2014-03-21):
-+# The CET-switching Troll rules require zic from tzcode 2014b or later, so as
-+# suggested by Bengt-Inge Larsson comment them out for now, and approximate
-+# with only UTC and CEST. Uncomment them when 2014b is more prevalent.
-+#
-+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-+#Rule Troll 2005 max - Mar 1 1:00u 1:00 CET
-+Rule Troll 2005 max - Mar lastSun 1:00u 2:00 CEST
-+#Rule Troll 2005 max - Oct lastSun 1:00u 1:00 CET
-+#Rule Troll 2004 max - Nov 7 1:00u 0:00 UTC
-+# Remove the following line when uncommenting the above '#Rule' lines.
-+Rule Troll 2004 max - Oct lastSun 1:00u 0:00 UTC
-+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-+Zone Antarctica/Troll 0 - zzz 2005 Feb 12
-+ 0:00 Troll %s
-
- # Poland - year-round base
- # Arctowski, King George Island, -620945-0582745, since 1977
---- ./jdk/make/sun/javazic/tzdata/asia Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/asia Wed May 07 19:26:47 2014 -0700
-@@ -1113,8 +1113,13 @@
- Rule Zion 1986 only - Sep 7 0:00 0 S
- Rule Zion 1987 only - Apr 15 0:00 1:00 D
- Rule Zion 1987 only - Sep 13 0:00 0 S
--Rule Zion 1988 only - Apr 9 0:00 1:00 D
--Rule Zion 1988 only - Sep 3 0:00 0 S
-+
-+# From Avigdor Finkelstein (2014-03-05):
-+# I check the Parliament (Knesset) records and there it's stated that the
-+# [1988] transition should take place on Saturday night, when the Sabbath
-+# ends and changes to Sunday.
-+Rule Zion 1988 only - Apr 10 0:00 1:00 D
-+Rule Zion 1988 only - Sep 4 0:00 0 S
-
- # From Ephraim Silverberg
- # (1997-03-04, 1998-03-16, 1998-12-28, 2000-01-17, 2000-07-25, 2004-12-22,
---- ./jdk/make/sun/javazic/tzdata/australasia Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/australasia Wed May 07 19:26:47 2014 -0700
-@@ -377,16 +377,18 @@
- # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155
-
- # From the Fijian Government Media Center (2013-08-30) via David Wheeler:
--# Fiji will start daylight savings on Sunday 27th October, 2013 and end at 3am
--# on Sunday 19th January, 2014.... move clocks forward by one hour from 2am
-+# Fiji will start daylight savings on Sunday 27th October, 2013 ...
-+# move clocks forward by one hour from 2am
- # http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-SUNDAY,-27th-OCTOBER-201.aspx
--#
--# From Paul Eggert (2013-09-09):
-+
-+# From Steffen Thorsen (2013-01-10):
-+# Fiji will end DST on 2014-01-19 02:00:
-+# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVINGS-TO-END-THIS-MONTH-%281%29.aspx
-+
-+# From Paul Eggert (2014-01-10):
- # For now, guess that Fiji springs forward the Sunday before the fourth
--# Monday in October. This matches both recent practice and
--# timeanddate.com's current spring-forward prediction.
--# For the January 2014 transition we guessed right while timeanddate.com
--# guessed wrong, so leave the fall-back prediction alone.
-+# Monday in October, and springs back the penultimate Sunday in January.
-+# This is ad hoc, but matches recent practice.
-
- # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
- Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
-@@ -395,7 +397,8 @@
- Rule Fiji 2010 only - Mar lastSun 3:00 0 -
- Rule Fiji 2010 max - Oct Sun>=21 2:00 1:00 S
- Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
--Rule Fiji 2012 max - Jan Sun>=18 3:00 0 -
-+Rule Fiji 2012 2013 - Jan Sun>=18 3:00 0 -
-+Rule Fiji 2014 max - Jan Sun>=18 2:00 0 -
- # Zone NAME GMTOFF RULES FORMAT [UNTIL]
- Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva
- 12:00 Fiji FJ%sT # Fiji Time
-@@ -783,14 +786,29 @@
-
- # Johnston
- #
--# From Paul Eggert (2013-09-03):
-+# From Paul Eggert (2014-03-11):
-+# Sometimes Johnston kept Hawaii time, and sometimes it was an hour behind.
-+# Details are uncertain. We have no data for Johnston after 1970, so
-+# treat it like Hawaii for now.
-+#
- # In his memoirs of June 6th to October 4, 1945
- # <http://www.315bw.org/Herb_Bach.htm> (2005), Herbert C. Bach writes,
- # "We started our letdown to Kwajalein Atoll and landed there at 5:00 AM
- # Johnston time, 1:30 AM Kwajalein time." This was in June 1945, and
- # confirms that Johnston kept the same time as Honolulu in summer 1945.
--# We have no better information, so for now, assume this has been true
--# indefinitely into the past.
-+#
-+# From Lyle McElhaney (2014-03-11):
-+# [W]hen JI was being used for that [atomic bomb] testing, the time being used
-+# was not Hawaiian time but rather the same time being used on the ships,
-+# which had a GMT offset of -11 hours. This apparently applied to at least the
-+# time from Operation Newsreel (Hardtack I/Teak shot, 1958-08-01) to the last
-+# Operation Fishbowl shot (Tightrope, 1962-11-04).... [See] Herman Hoerlin,
-+# "The United States High-Altitude Test Experience: A Review Emphasizing the
-+# Impact on the Environment", Los Alamos LA-6405, Oct 1976
-+# <http://www.fas.org/sgp/othergov/doe/lanl/docs1/00322994.pdf>.
-+# See the table on page 4 where he lists GMT and local times for the tests; a
-+# footnote for the JI tests reads that local time is "JI time = Hawaii Time
-+# Minus One Hour".
- #
- # See 'northamerica' for Pacific/Johnston.
-
---- ./jdk/make/sun/javazic/tzdata/europe Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/europe Wed May 07 19:26:47 2014 -0700
-@@ -2768,14 +2768,18 @@
- # According to the articles linked below, Turkey will change into summer
- # time zone (GMT+3) on March 28, 2011 at 3:00 a.m. instead of March 27.
- # This change is due to a nationwide exam on 27th.
--#
--# <a href="http://www.worldbulletin.net/?aType=haber&ArticleID=70872">
- # http://www.worldbulletin.net/?aType=haber&ArticleID=70872
--# </a>
- # Turkish:
--# <a href="http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373">
- # http://www.hurriyet.com.tr/ekonomi/17230464.asp?gid=373
--# </a>
-+
-+# From Faruk Pasin (2014-02-14):
-+# The DST for Turkey has been changed for this year because of the
-+# Turkish Local election....
-+# http://www.sabah.com.tr/Ekonomi/2014/02/12/yaz-saatinde-onemli-degisiklik
-+# ... so Turkey will move clocks forward one hour on March 31 at 3:00 a.m.
-+# From Paul Eggert (2014-02-17):
-+# Here is an English-language source:
-+# http://www.worldbulletin.net/turkey/129016/turkey-switches-to-daylight-saving-time-march-31
-
- # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
- Rule Turkey 1916 only - May 1 0:00 1:00 S
-@@ -2844,6 +2848,8 @@
- 2:00 Turkey EE%sT 2007
- 2:00 EU EE%sT 2011 Mar 27 1:00u
- 2:00 - EET 2011 Mar 28 1:00u
-+ 2:00 EU EE%sT 2014 Mar 30 1:00u
-+ 2:00 - EET 2014 Mar 31 1:00u
- 2:00 EU EE%sT
- Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
-
-@@ -2865,19 +2871,13 @@
- # approval from 266 deputies.
- #
- # Ukraine abolishes transter back to the winter time (in Russian)
--# <a href="http://news.mail.ru/politics/6861560/">
- # http://news.mail.ru/politics/6861560/
--# </a>
- #
- # The Ukrainians will no longer change the clock (in Russian)
--# <a href="http://www.segodnya.ua/news/14290482.html">
- # http://www.segodnya.ua/news/14290482.html
--# </a>
- #
- # Deputies cancelled the winter time (in Russian)
--# <a href="http://www.pravda.com.ua/rus/news/2011/09/20/6600616/">
- # http://www.pravda.com.ua/rus/news/2011/09/20/6600616/
--# </a>
- #
- # From Philip Pizzey (2011-10-18):
- # Today my Ukrainian colleagues have informed me that the
-@@ -2888,18 +2888,39 @@
- # As far as I understand, the recent change to the Ukrainian time zone
- # (Europe/Kiev) to introduce permanent daylight saving time (similar
- # to Russia) was reverted today:
--#
--# <a href="http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995">
- # http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995
--# </a>
- #
- # Also reported by Alexander Bokovoy (2011-10-18) who also noted:
- # The law documents themselves are at
-+# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
-+
-+# From Vladimir in Moscow via Alois Treindl re Kiev time 1991/2 (2014-02-28):
-+# First in Ukraine they changed Time zone from UTC+3 to UTC+2 with DST:
-+# 03 25 1990 02:00 -03.00 1 Time Zone 3 with DST
-+# 07 01 1990 02:00 -02.00 1 Time Zone 2 with DST
-+# * Ukrainian Government's Resolution of 18.06.1990, No. 134.
-+# http://search.ligazakon.ua/l_doc2.nsf/link1/T001500.html
- #
--# <a href="http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484">
--# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
--# </a>
--
-+# They did not end DST in September, 1990 (according to the law,
-+# "summer time" was still in action):
-+# 09 30 1990 03:00 -02.00 1 Time Zone 2 with DST
-+# * Ukrainian Government's Resolution of 21.09.1990, No. 272.
-+# http://search.ligazakon.ua/l_doc2.nsf/link1/KP900272.html
-+#
-+# Again no change in March, 1991 ("summer time" in action):
-+# 03 31 1991 02:00 -02.00 1 Time Zone 2 with DST
-+#
-+# DST ended in September 1991 ("summer time" ended):
-+# 09 29 1991 03:00 -02.00 0 Time Zone 2, no DST
-+# * Ukrainian Government's Resolution of 25.09.1991, No. 225.
-+# http://www.uazakon.com/documents/date_21/pg_iwgdoc.htm
-+# This is an answer.
-+#
-+# Since 1992 they had normal DST procedure:
-+# 03 29 1992 02:00 -02.00 1 DST started
-+# 09 27 1992 03:00 -02.00 0 DST ended
-+# * Ukrainian Government's Resolution of 20.03.1992, No. 139.
-+# http://www.uazakon.com/documents/date_8u/pg_grcasa.htm
-
- # Zone NAME GMTOFF RULES FORMAT [UNTIL]
- # Most of Ukraine since 1970 has been like Kiev.
-@@ -2910,9 +2931,8 @@
- 2:00 - EET 1930 Jun 21
- 3:00 - MSK 1941 Sep 20
- 1:00 C-Eur CE%sT 1943 Nov 6
-- 3:00 Russia MSK/MSD 1990
-- 3:00 - MSK 1990 Jul 1 2:00
-- 2:00 - EET 1992
-+ 3:00 Russia MSK/MSD 1990 Jul 1 2:00
-+ 2:00 1:00 EEST 1991 Sep 29 3:00
- 2:00 E-Eur EE%sT 1995
- 2:00 EU EE%sT
- # Ruthenia used CET 1990/1991.
-@@ -2966,7 +2986,11 @@
- # Assume it happened in March by not changing the clocks.
- 3:00 Russia MSK/MSD 1997
- 3:00 - MSK 1997 Mar lastSun 1:00u
-- 2:00 EU EE%sT
-+# From Alexander Krivenyshev (2014-03-17):
-+# time change at 2:00 (2am) on March 30, 2014
-+# http://vz.ru/news/2014/3/17/677464.html
-+ 2:00 EU EE%sT 2014 Mar 30 2:00
-+ 4:00 - MSK
-
- # Vatican City
- # See Europe/Rome.
---- ./jdk/make/sun/javazic/tzdata/leapseconds Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/leapseconds Wed May 07 19:26:47 2014 -0700
-@@ -20,7 +20,7 @@
- # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- # or visit www.oracle.com if you need additional information or have any
- # questions.
--
-+#
- # Allowance for leapseconds added to each timezone file.
-
- # This file is in the public domain.
---- ./jdk/make/sun/javazic/tzdata/northamerica Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/northamerica Wed May 07 19:26:47 2014 -0700
-@@ -414,9 +414,10 @@
- # US Pacific time, represented by Los Angeles
- #
- # California, northern Idaho (Benewah, Bonner, Boundary, Clearwater,
--# Idaho, Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties,
--# and the northern three-quarters of Idaho county),
--# most of Nevada, most of Oregon, and Washington
-+# Kootenai, Latah, Lewis, Nez Perce, and Shoshone counties, Idaho county
-+# north of the Salmon River, and the towns of Burgdorf and Warren),
-+# Nevada (except West Wendover), Oregon (except the northern 3/4 of
-+# Malheur county), and Washington
- #
- # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
- Rule CA 1948 only - Mar 14 2:00 1:00 D
---- ./jdk/make/sun/javazic/tzdata/southamerica Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/southamerica Wed May 07 19:26:47 2014 -0700
-@@ -1298,6 +1298,13 @@
- # start date is 2013-09-08 00:00....
- # http://www.gob.cl/informa/2013/02/15/gobierno-anuncia-fechas-de-cambio-de-hora-para-el-ano-2013.htm
-
-+# From Jose Miguel Garrido (2014-02-19):
-+# Today appeared in the Diario Oficial a decree amending the time change
-+# dates to 2014.
-+# DST End: last Saturday of April 2014 (Sun 27 Apr 2014 03:00 UTC)
-+# DST Start: first Saturday of September 2014 (Sun 07 Sep 2014 04:00 UTC)
-+# http://www.diariooficial.interior.gob.cl//media/2014/02/19/do-20140219.pdf
-+
- # NOTE: ChileAQ rules for Antarctic bases are stored separately in the
- # 'antarctica' file.
-
-@@ -1631,6 +1638,9 @@
- # From Carlos Raul Perasso (2013-03-15):
- # The change in Paraguay is now final. Decree number 10780
- # http://www.presidencia.gov.py/uploads/pdf/presidencia-3b86ff4b691c79d4f5927ca964922ec74772ce857c02ca054a52a37b49afc7fb.pdf
-+# From Carlos Raul Perasso (2014-02-28):
-+# Decree 1264 can be found at:
-+# http://www.presidencia.gov.py/archivos/documentos/DECRETO1264_ey9r8zai.pdf
- Rule Para 2013 max - Mar Sun>=22 0:00 0 -
-
- # Zone NAME GMTOFF RULES FORMAT [UNTIL]
-@@ -1689,18 +1699,19 @@
- Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
- -4:00 - AST
-
-+# These all agree with Trinidad and Tobago since 1970.
- Link America/Port_of_Spain America/Anguilla
- Link America/Port_of_Spain America/Dominica
- Link America/Port_of_Spain America/Grenada
- Link America/Port_of_Spain America/Guadeloupe
--Link America/Port_of_Spain America/Marigot
-+Link America/Port_of_Spain America/Marigot # St Martin (French part)
- Link America/Port_of_Spain America/Montserrat
- Link America/Port_of_Spain America/St_Barthelemy
--Link America/Port_of_Spain America/St_Kitts
-+Link America/Port_of_Spain America/St_Kitts # St Kitts & Nevis
- Link America/Port_of_Spain America/St_Lucia
--Link America/Port_of_Spain America/St_Thomas
-+Link America/Port_of_Spain America/St_Thomas # Virgin Islands (US)
- Link America/Port_of_Spain America/St_Vincent
--Link America/Port_of_Spain America/Tortola
-+Link America/Port_of_Spain America/Tortola # Virgin Islands (UK)
-
- # Uruguay
- # From Paul Eggert (1993-11-18):
---- ./jdk/make/sun/javazic/tzdata/zone.tab Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/javazic/tzdata/zone.tab Wed May 07 19:26:47 2014 -0700
-@@ -74,6 +74,7 @@
- AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok
- AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Terre Adelie
- AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
-+AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land
- AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
- AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF)
- AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN)
-@@ -366,6 +367,7 @@
- RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
- RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
- RU +5312+05009 Europe/Samara Moscow+00 - Samara, Udmurtia
-+RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
- RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
- RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
- RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
-@@ -421,7 +423,6 @@
- UA +5026+03031 Europe/Kiev most locations
- UA +4837+02218 Europe/Uzhgorod Ruthenia
- UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk
--UA +4457+03406 Europe/Simferopol central Crimea
- UG +0019+03225 Africa/Kampala
- UM +1645-16931 Pacific/Johnston Johnston Atoll
- UM +2813-17722 Pacific/Midway Midway Islands
---- ./jdk/make/sun/nio/cs/Makefile Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/make/sun/nio/cs/Makefile Wed May 07 19:26:47 2014 -0700
-@@ -85,9 +85,6 @@
- #
- # Extra rules to build character converters.
-
--SERVICE_DESCRIPTION = java.nio.charset.spi.CharsetProvider
--SERVICE_DESCRIPTION_PATH = META-INF/services/$(SERVICE_DESCRIPTION)
--
- GENCSDATASRC = $(BUILDDIR)/tools/CharsetMapping
- GENCSSRCDIR = $(BUILDDIR)/tools/src/build/tools/charsetmapping
- GENCSEXT = $(GENSRCDIR)/sun/nio/cs/ext
-@@ -116,10 +113,6 @@
- $(GENCSSRCDIR)/HKSCS.java
- $(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) dbcs
-
--$(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH): \
-- $(SHARE_SRC)/classes/sun/nio/cs/ext/$(SERVICE_DESCRIPTION_PATH)
-- $(install-file)
--
- # no compression unless requested
- ifndef COMPRESS_JARS
- CREATE_JAR_OPTS_NOMANIFEST = cf0
-@@ -127,10 +120,9 @@
- CREATE_JAR_OPTS_NOMANIFEST = cf
- endif
-
--$(CHARSETS_JAR): $(FILES_class) $(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH) $(FILES_DAT)
-+$(CHARSETS_JAR): $(FILES_class) $(FILES_DAT)
- $(BOOT_JAR_CMD) $(CREATE_JAR_OPTS_NOMANIFEST) $(CHARSETS_JAR) \
- -C $(CLASSDESTDIR) sun \
-- -C $(CLASSDESTDIR) $(SERVICE_DESCRIPTION_PATH) \
- $(BOOT_JAR_JFLAGS)
- @$(java-vm-cleanup)
-
---- ./jdk/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java Wed May 07 19:26:47 2014 -0700
-@@ -31,6 +31,7 @@
- import javax.swing.*;
- import javax.swing.plaf.MenuBarUI;
-
-+import com.apple.laf.ScreenMenuBar;
- import sun.lwawt.macosx.CMenuBar;
-
- import com.apple.laf.AquaMenuBarUI;
-@@ -72,12 +73,15 @@
- // scan the current frames, and see if any are foreground
- final Frame[] frames = Frame.getFrames();
- for (final Frame frame : frames) {
-- if (frame.isVisible() && !isFrameMinimized(frame)) return;
-+ if (frame.isVisible() && !isFrameMinimized(frame)) {
-+ return;
-+ }
- }
-
- // if we have no foreground frames, then we have to "kick" the menubar
- final JFrame pingFrame = new JFrame();
- pingFrame.getRootPane().putClientProperty("Window.alpha", new Float(0.0f));
-+ pingFrame.setUndecorated(true);
- pingFrame.setVisible(true);
- pingFrame.toFront();
- pingFrame.setVisible(false);
-@@ -101,7 +105,6 @@
- // Aqua was not installed
- throw new IllegalStateException("Application.setDefaultMenuBar() only works with the Aqua Look and Feel");
- }
--/* TODO: disabled until ScreenMenuBar is working
-
- final AquaMenuBarUI aquaUI = (AquaMenuBarUI)ui;
- final ScreenMenuBar screenMenuBar = aquaUI.getScreenMenuBar();
-@@ -118,8 +121,7 @@
- }
-
- // grab the pointer to the CMenuBar, and retain it in native
-- nativeSetDefaultMenuBar(((CMenuBar)peer).getNativeMenuBarPeer());
--*/
-+ nativeSetDefaultMenuBar(((CMenuBar)peer).getModel());
- }
-
- void setAboutMenuItemVisible(final boolean present) {
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/src/macosx/classes/sun/awt/resources/awtosx.properties Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,71 @@
-+#
-+# OS X specific AWT properties
-+#
-+
-+# Modifier names
-+AWT.shift=\u21e7
-+AWT.control=\u2303
-+AWT.alt=\u2325
-+AWT.meta=\u2318
-+AWT.altGraph=\u2325
-+
-+# Key names
-+AWT.enter=\u23ce
-+AWT.backSpace=\u232b
-+AWT.tab=\u21e5
-+AWT.cancel=\u238b
-+AWT.clear=\u2327
-+AWT.capsLock=\u21ea
-+AWT.escape=\u238b
-+AWT.space=\u2423
-+AWT.pgup=\u21de
-+AWT.pgdn=\u21df
-+AWT.end=\u2198
-+AWT.home=\u2196
-+AWT.left=\u2190
-+AWT.up=\u2191
-+AWT.right=\u2192
-+AWT.down=\u2193
-+AWT.comma=,
-+AWT.period=.
-+AWT.slash=/
-+AWT.semicolon=;
-+AWT.equals=\u003d
-+AWT.openBracket=[
-+AWT.backSlash=\\
-+AWT.closeBracket=]
-+AWT.multiply=\u2328 *
-+AWT.add=\u2328 +
-+AWT.separator=\u2328 ,
-+AWT.separater=\u2328 ,
-+AWT.subtract=\u2328 -
-+AWT.decimal=\u2328 .
-+AWT.divide=\u2328 /
-+AWT.delete=\u2326
-+AWT.printScreen=\u2399
-+AWT.backQuote=`
-+AWT.quote='
-+AWT.ampersand=&
-+AWT.asterisk=*
-+AWT.quoteDbl="
-+AWT.Less=<
-+AWT.greater=>
-+AWT.braceLeft=[
-+AWT.braceRight=]
-+AWT.at=@
-+AWT.colon=:
-+AWT.circumflex=^
-+AWT.dollar=$
-+AWT.euro=\u20ac
-+AWT.exclamationMark=!
-+AWT.invertedExclamationMark=\u00a1
-+AWT.leftParenthesis=(
-+AWT.numberSign=#
-+AWT.plus=+
-+AWT.minus=-
-+AWT.rightParenthesis=)
-+AWT.underscore=_
-+
-+# Numeric Keypad
-+AWT.numpad=\u2328
-+
---- ./jdk/src/macosx/classes/sun/lwawt/macosx/CDropTargetContextPeer.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CDropTargetContextPeer.java Wed May 07 19:26:47 2014 -0700
-@@ -26,6 +26,7 @@
- package sun.lwawt.macosx;
-
- import java.awt.*;
-+import java.awt.dnd.DropTarget;
-
- import sun.awt.dnd.SunDropTargetContextPeer;
- import sun.awt.dnd.SunDropTargetEvent;
-@@ -38,7 +39,7 @@
- private long fNativeDropTransfer = 0;
- private long fNativeDataAvailable = 0;
- private Object fNativeData = null;
-- private boolean insideTarget = true;
-+ private DropTarget insideTarget = null;
-
- Object awtLockAccess = new Object();
-
-@@ -88,26 +89,19 @@
- return fNativeData;
- }
-
-- // We need to take care of dragExit message because for some reason it is not being
-- // generated for lightweight components
-+ // We need to take care of dragEnter and dragExit messages because
-+ // native system generates them only for heavyweights
- @Override
- protected void processMotionMessage(SunDropTargetEvent event, boolean operationChanged) {
-- Component eventSource = (Component)event.getComponent();
-- Point screenPoint = event.getPoint();
-- SwingUtilities.convertPointToScreen(screenPoint, eventSource);
-- Rectangle screenBounds = new Rectangle(eventSource.getLocationOnScreen().x,
-- eventSource.getLocationOnScreen().y,
-- eventSource.getWidth(), eventSource.getHeight());
-- if(insideTarget) {
-- if(!screenBounds.contains(screenPoint)) {
-+ boolean eventInsideTarget = isEventInsideTarget(event);
-+ if (event.getComponent().getDropTarget() == insideTarget) {
-+ if (!eventInsideTarget) {
- processExitMessage(event);
-- insideTarget = false;
- return;
- }
- } else {
-- if(screenBounds.contains(screenPoint)) {
-+ if (eventInsideTarget) {
- processEnterMessage(event);
-- insideTarget = true;
- } else {
- return;
- }
-@@ -115,17 +109,52 @@
- super.processMotionMessage(event, operationChanged);
- }
-
-+ /**
-+ * Could be called when DnD enters a heavyweight or synthesized in processMotionMessage
-+ */
-+ @Override
-+ protected void processEnterMessage(SunDropTargetEvent event) {
-+ Component c = event.getComponent();
-+ DropTarget dt = event.getComponent().getDropTarget();
-+ if (isEventInsideTarget(event)
-+ && dt != insideTarget
-+ && c.isShowing()
-+ && dt != null
-+ && dt.isActive()) {
-+ insideTarget = dt;
-+ super.processEnterMessage(event);
-+ }
-+ }
-+
-+ /**
-+ * Could be called when DnD exits a heavyweight or synthesized in processMotionMessage
-+ */
-+ @Override
-+ protected void processExitMessage(SunDropTargetEvent event) {
-+ if (event.getComponent().getDropTarget() == insideTarget) {
-+ insideTarget = null;
-+ super.processExitMessage(event);
-+ }
-+ }
-+
- @Override
- protected void processDropMessage(SunDropTargetEvent event) {
-- Component eventSource = (Component)event.getComponent();
-+ if (isEventInsideTarget(event)) {
-+ super.processDropMessage(event);
-+ insideTarget = null;
-+ }
-+ }
-+
-+ private boolean isEventInsideTarget(SunDropTargetEvent event) {
-+ Component eventSource = event.getComponent();
- Point screenPoint = event.getPoint();
- SwingUtilities.convertPointToScreen(screenPoint, eventSource);
-- Rectangle screenBounds = new Rectangle(eventSource.getLocationOnScreen().x,
-- eventSource.getLocationOnScreen().y,
-- eventSource.getWidth(), eventSource.getHeight());
-- if(screenBounds.contains(screenPoint)) {
-- super.processDropMessage(event);
-- }
-+ Point locationOnScreen = eventSource.getLocationOnScreen();
-+ Rectangle screenBounds = new Rectangle(locationOnScreen.x,
-+ locationOnScreen.y,
-+ eventSource.getWidth(),
-+ eventSource.getHeight());
-+ return screenBounds.contains(screenPoint);
- }
-
- @Override
---- ./jdk/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java Wed May 07 19:26:47 2014 -0700
-@@ -43,7 +43,7 @@
- return target;
- }
-
-- long getModel() {
-+ public long getModel() {
- return modelPtr;
- }
-
---- ./jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java Wed May 07 19:26:47 2014 -0700
-@@ -44,6 +44,8 @@
- import sun.lwawt.LWWindowPeer.PeerType;
- import sun.security.action.GetBooleanAction;
-
-+import sun.util.CoreResourceBundleControl;
-+
-
- class NamedCursor extends Cursor {
- NamedCursor(String name) {
-@@ -68,13 +70,26 @@
-
- static {
- System.err.flush();
-- java.security.AccessController.doPrivileged(new java.security.PrivilegedAction<Object>() {
-- public Object run() {
-+ ResourceBundle platformResources = java.security.AccessController.doPrivileged(
-+ new java.security.PrivilegedAction<ResourceBundle>() {
-+ public ResourceBundle run() {
-+ ResourceBundle platformResources = null;
-+ try {
-+ platformResources =
-+ ResourceBundle.getBundle("sun.awt.resources.awtosx",
-+ CoreResourceBundleControl.getRBControlInstance());
-+ } catch (MissingResourceException e) {
-+ // No resource file; defaults will be used.
-+ }
-+
- System.loadLibrary("awt");
- System.loadLibrary("fontmanager");
-- return null;
-+ return platformResources;
- }
- });
-+
-+ AWTAccessor.getToolkitAccessor().setPlatformResources(platformResources);
-+
- if (!GraphicsEnvironment.isHeadless()) {
- initIDs();
- }
---- ./jdk/src/macosx/lib/flavormap.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/lib/flavormap.properties Wed May 07 19:26:47 2014 -0700
-@@ -76,5 +76,6 @@
- text/uri-list=application/x-java-file-list;class=java.util.List
- PNG=image/x-java-image;class=java.awt.Image
- JFIF=image/x-java-image;class=java.awt.Image
-+TIFF=image/x-java-image;class=java.awt.Image
- RICH_TEXT=text/rtf
- HTML=text/html;charset=utf-8;eoln="\r\n";terminators=1
---- ./jdk/src/macosx/native/java/util/SCDynamicStoreConfig.m Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/native/java/util/SCDynamicStoreConfig.m Wed May 07 19:26:47 2014 -0700
-@@ -103,7 +103,6 @@
- CFTypeRef realmInfo = SCDynamicStoreCopyValue(store, (CFStringRef) [NSString stringWithFormat:@"Kerberos:%@", realm]);
-
- if (CFGetTypeID(realmInfo) != CFDictionaryGetTypeID()) {
-- NSLog(@"Unexpected CFType for realm Info: %lu", CFGetTypeID(realmInfo));
- return nil;
- }
-
-@@ -140,7 +139,6 @@
-
- SCDynamicStoreRef store = SCDynamicStoreCreate(NULL, CFSTR("java"), _SCDynamicStoreCallBack, NULL);
- if (store == NULL) {
-- NSLog(@"Unable to load SCDynamicStore to install NotificationCallback");
- return;
- }
-
-@@ -171,19 +169,11 @@
-
- SCDynamicStoreRef store = SCDynamicStoreCreate(NULL, CFSTR("java-kerberos"), NULL, NULL);
- if (store == NULL) {
-- NSLog(@"Unable to load SCDynamicStore");
-- return NULL;
-- }
--
-- // Create the store if it is NULL and set it.
-- if (store == NULL) {
-- NSLog(@"Invalid value for SCDynamicStore");
- return NULL;
- }
-
- CFTypeRef realms = SCDynamicStoreCopyValue(store, (CFStringRef) KERBEROS_DEFAULT_REALMS);
- if (realms == NULL || CFGetTypeID(realms) != CFArrayGetTypeID()) {
-- NSLog(@"Unable to load realm info from SCDynamicStore");
- if (realms) CFRelease(realms);
- CFRelease(store);
- return NULL;
-@@ -192,7 +182,6 @@
- CFTypeRef realmMappings = SCDynamicStoreCopyValue(store, (CFStringRef) KERBEROS_DEFAULT_REALM_MAPPINGS);
-
- if (realmMappings == NULL || CFGetTypeID(realmMappings) != CFArrayGetTypeID()) {
-- NSLog(@"Unable to load realm mapping info from SCDynamicStore");
- if (realmMappings) CFRelease(realmMappings);
- CFRelease(realms);
- CFRelease(store);
---- ./jdk/src/macosx/native/sun/awt/AWTEvent.m Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/native/sun/awt/AWTEvent.m Wed May 07 19:26:47 2014 -0700
-@@ -382,7 +382,7 @@
- {
- TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource();
- CFDataRef uchr = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData);
-- if (uchr == nil) { return; }
-+ if (uchr == nil) { return 0; }
- const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout*)CFDataGetBytePtr(uchr);
- // Carbon modifiers should be used instead of NSEvent modifiers
- UInt32 modifierKeyState = (GetCurrentEventKeyModifiers() >> 8) & 0xFF;
---- ./jdk/src/macosx/native/sun/awt/AWTWindow.m Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/native/sun/awt/AWTWindow.m Wed May 07 19:26:47 2014 -0700
-@@ -30,6 +30,7 @@
- #import "sun_lwawt_macosx_CPlatformWindow.h"
- #import "com_apple_eawt_event_GestureHandler.h"
- #import "com_apple_eawt_FullScreenHandler.h"
-+#import "ApplicationDelegate.h"
-
- #import "AWTWindow.h"
- #import "AWTView.h"
-@@ -585,17 +586,26 @@
- AWT_ASSERT_APPKIT_THREAD;
- [AWTToolkit eventCountPlusPlus];
- AWTWindow *opposite = [AWTWindow lastKeyWindow];
--
-+
- // Finds appropriate menubar in our hierarchy,
- AWTWindow *awtWindow = self;
- while (awtWindow.ownerWindow != nil) {
- awtWindow = awtWindow.ownerWindow;
- }
-+
- CMenuBar *menuBar = nil;
-+ BOOL isDisabled = NO;
- if ([awtWindow.nsWindow isVisible]){
- menuBar = awtWindow.javaMenuBar;
-+ isDisabled = !awtWindow.isEnabled;
- }
-- [CMenuBar activate:menuBar modallyDisabled:!awtWindow.isEnabled];
-+
-+ if (menuBar == nil) {
-+ menuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar];
-+ isDisabled = NO;
-+ }
-+
-+ [CMenuBar activate:menuBar modallyDisabled:isDisabled];
-
- [AWTWindow setLastKeyWindow:nil];
-
-@@ -608,6 +618,14 @@
- [AWTToolkit eventCountPlusPlus];
- [self.javaMenuBar deactivate];
-
-+ // In theory, this might cause flickering if the window gaining focus
-+ // has its own menu. However, I couldn't reproduce it on practice, so
-+ // perhaps this is a non issue.
-+ CMenuBar* defaultMenu = [[ApplicationDelegate sharedDelegate] defaultMenuBar];
-+ if (defaultMenu != nil) {
-+ [CMenuBar activate:defaultMenu modallyDisabled:NO];
-+ }
-+
- // the new key window
- NSWindow *keyWindow = [NSApp keyWindow];
- AWTWindow *opposite = nil;
-@@ -875,11 +893,19 @@
-
- AWTWindow *window = (AWTWindow*)[nsWindow delegate];
-
-- if ([nsWindow isKeyWindow]) [window.javaMenuBar deactivate];
-+ if ([nsWindow isKeyWindow]) {
-+ [window.javaMenuBar deactivate];
-+ }
-+
- window.javaMenuBar = menuBar;
-
-+ CMenuBar* actualMenuBar = menuBar;
-+ if (actualMenuBar == nil) {
-+ actualMenuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar];
-+ }
-+
- if ([nsWindow isKeyWindow]) {
-- [CMenuBar activate:window.javaMenuBar modallyDisabled:NO];
-+ [CMenuBar activate:actualMenuBar modallyDisabled:NO];
- }
- }];
-
---- ./jdk/src/macosx/native/sun/awt/CDropTarget.m Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/native/sun/awt/CDropTarget.m Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- sDraggingExited = FALSE;
- sDraggingLocation = [sender draggingLocation];
- NSPoint javaLocation = [fView convertPoint:sDraggingLocation fromView:nil];
-+ javaLocation.y = fView.window.frame.size.height - javaLocation.y;
-+
- DLog5(@"+ dragEnter: loc native %f, %f, java %f, %f\n", sDraggingLocation.x, sDraggingLocation.y, javaLocation.x, javaLocation.y);
-
- ////////// BEGIN Calculate the current drag actions //////////
-@@ -570,8 +572,7 @@
- // Should we notify Java things have changed?
- if (sDraggingError == FALSE && notifyJava) {
- NSPoint javaLocation = [fView convertPoint:sDraggingLocation fromView:nil];
-- // For some reason even after the convertPoint drag events come with the y coordinate reverted
-- javaLocation.y = fView.window.frame.size.height - javaLocation.y;
-+ javaLocation.y = fView.window.frame.size.height - javaLocation.y;
- //DLog5(@" : dragMoved: loc native %f, %f, java %f, %f\n", sDraggingLocation.x, sDraggingLocation.y, javaLocation.x, javaLocation.y);
-
- jlongArray formats = sDraggingFormats;
---- ./jdk/src/macosx/native/sun/awt/CMenuItem.m Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/macosx/native/sun/awt/CMenuItem.m Wed May 07 19:26:47 2014 -0700
-@@ -70,9 +70,15 @@
- JNIEnv *env = [ThreadUtilities getJNIEnv];
- JNF_COCOA_ENTER(env);
-
-- // If we are called as a result of user pressing a shorcut, do nothing,
-- // because AWTView has already sent corresponding key event to the Java
-- // layer from performKeyEquivalent
-+ // If we are called as a result of user pressing a shortcut, do nothing,
-+ // because AVTView has already sent corresponding key event to the Java
-+ // layer from performKeyEquivalent.
-+ // There is an exception from the rule above, though: if a window with
-+ // a menu gets minimized by user and there are no other windows to take
-+ // focus, the window's menu won't be removed from the global menu bar.
-+ // However, the Java layer won't handle invocation by a shortcut coming
-+ // from this "frameless" menu, because there are no active windows. This
-+ // means we have to handle it here.
- NSEvent *currEvent = [[NSApplication sharedApplication] currentEvent];
- if ([currEvent type] == NSKeyDown) {
- NSString *menuKey = [sender keyEquivalent];
-@@ -91,7 +97,8 @@
- eventKey = [NSString stringWithCharacters: &newChar length: 1];
- }
-
-- if ([menuKey isEqualToString:eventKey]) {
-+ NSWindow *keyWindow = [NSApp keyWindow];
-+ if ([menuKey isEqualToString:eventKey] && keyWindow != nil) {
- return;
- }
- }
-@@ -289,7 +296,7 @@
-
- case java_awt_event_KeyEvent_VK_HELP : macKey = NSHelpFunctionKey; break;
- case java_awt_event_KeyEvent_VK_TAB : macKey = NSTabCharacter; break;
-- case java_awt_event_KeyEvent_VK_ENTER : macKey = NSCarriageReturnCharacter; break;
-+ case java_awt_event_KeyEvent_VK_ENTER : macKey = NSNewlineCharacter; break;
- case java_awt_event_KeyEvent_VK_BACK_SPACE : macKey = NSBackspaceCharacter; break;
- case java_awt_event_KeyEvent_VK_DELETE : macKey = NSDeleteCharacter; break;
- case java_awt_event_KeyEvent_VK_CLEAR : macKey = NSClearDisplayFunctionKey; break;
---- ./jdk/src/share/back/SDE.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/back/SDE.c Wed May 07 19:26:47 2014 -0700
-@@ -28,6 +28,12 @@
- #include "util.h"
- #include "SDE.h"
-
-+#ifdef __APPLE__
-+/* use setjmp/longjmp versions that do not save/restore the signal mask */
-+#define setjmp _setjmp
-+#define longjmp _longjmp
-+#endif
-+
- /**
- * This SourceDebugExtension code does not
- * allow concurrent translation - due to caching method.
---- ./jdk/src/share/back/export/sys.h Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/back/export/sys.h Wed May 07 19:26:47 2014 -0700
-@@ -37,7 +37,7 @@
-
- /* Implemented in linker_md.c */
-
--void dbgsysBuildLibName(char *, int, char *, char *);
-+void dbgsysBuildLibName(char *, int, const char *, const char *);
- void * dbgsysLoadLibrary(const char *, char *err_buf, int err_buflen);
- void dbgsysUnloadLibrary(void *);
- void * dbgsysFindLibraryEntry(void *, const char *);
---- ./jdk/src/share/back/transport.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/back/transport.c Wed May 07 19:26:47 2014 -0700
-@@ -97,12 +97,12 @@
-
- /* Load transport library (directory=="" means do system search) */
- static void *
--loadTransportLibrary(char *libdir, char *name)
-+loadTransportLibrary(const char *libdir, const char *name)
- {
- void *handle;
- char libname[MAXPATHLEN+2];
- char buf[MAXPATHLEN*2+100];
-- char *plibdir;
-+ const char *plibdir;
-
- /* Convert libdir from UTF-8 to platform encoding */
- plibdir = NULL;
-@@ -117,6 +117,9 @@
-
- /* Construct library name (simple name or full path) */
- dbgsysBuildLibName(libname, sizeof(libname), plibdir, name);
-+ if (strlen(libname) == 0) {
-+ return NULL;
-+ }
-
- /* dlopen (unix) / LoadLibrary (windows) the transport library */
- handle = dbgsysLoadLibrary(libname, buf, sizeof(buf));
-@@ -128,12 +131,12 @@
- * JDK 1.2 javai.c v1.61
- */
- static jdwpError
--loadTransport(char *name, jdwpTransportEnv **transportPtr)
-+loadTransport(const char *name, jdwpTransportEnv **transportPtr)
- {
- JNIEnv *env;
- jdwpTransport_OnLoad_t onLoad;
- void *handle;
-- char *libdir;
-+ const char *libdir;
-
- /* Make sure library name is not empty */
- if (name == NULL) {
---- ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_de.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_de.properties Wed May 07 19:26:47 2014 -0700
-@@ -17,7 +17,7 @@
- awtcomponent=AWT-Komponente
- checkbox=Kontrollk\u00E4stchen
- colorchooser=Farbauswahl
--columnheader=Spalten-Header
-+columnheader=Spaltenheader
- combobox=Kombinationsfeld
- canvas=Leinwand
- desktopicon=Desktopsymbol
-@@ -46,7 +46,7 @@
- pushbutton=Schaltfl\u00E4che
- radiobutton=Optionsfeld
- rootpane=Root-Bereich
--rowheader=Zeilen-Header
-+rowheader=Zeilenheader
- scrollbar=Bildlaufleiste
- scrollpane=Bildlaufbereich
- separator=Trennzeichen
---- ./jdk/src/share/classes/com/sun/beans/decoder/ArrayElementHandler.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/beans/decoder/ArrayElementHandler.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2008, 2013 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
-@@ -110,6 +110,20 @@
- }
-
- /**
-+ * Tests whether the value of this element can be used
-+ * as an argument of the element that contained in this one.
-+ *
-+ * @return {@code true} if the value of this element can be used
-+ * as an argument of the element that contained in this one,
-+ * {@code false} otherwise
-+ */
-+ @Override
-+ protected boolean isArgument() {
-+ return true; // hack for compatibility
-+ }
-+
-+
-+ /**
- * Creates an instance of the array.
- *
- * @param type the base class
---- ./jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java Wed May 07 19:26:47 2014 -0700
-@@ -24,11 +24,12 @@
- */
- package com.sun.beans.finder;
-
--import com.sun.beans.WeakCache;
-+import com.sun.beans.util.Cache;
-
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Modifier;
-
-+import static com.sun.beans.util.Cache.Kind.SOFT;
- import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
-
- /**
-@@ -41,7 +42,18 @@
- * @author Sergey A. Malenkov
- */
- public final class ConstructorFinder extends AbstractFinder<Constructor<?>> {
-- private static final WeakCache<Signature, Constructor<?>> CACHE = new WeakCache<Signature, Constructor<?>>();
-+ private static final Cache<Signature, Constructor<?>> CACHE = new Cache<Signature, Constructor<?>>(SOFT, SOFT) {
-+ @Override
-+ public Constructor create(Signature signature) {
-+ try {
-+ ConstructorFinder finder = new ConstructorFinder(signature.getArgs());
-+ return finder.find(signature.getType().getConstructors());
-+ }
-+ catch (Exception exception) {
-+ throw new SignatureException(exception);
-+ }
-+ }
-+ };
-
- /**
- * Finds public constructor
-@@ -69,13 +81,12 @@
- PrimitiveWrapperMap.replacePrimitivesWithWrappers(args);
- Signature signature = new Signature(type, args);
-
-- Constructor<?> constructor = CACHE.get(signature);
-- if (constructor != null) {
-- return constructor;
-+ try {
-+ return CACHE.get(signature);
- }
-- constructor = new ConstructorFinder(args).find(type.getConstructors());
-- CACHE.put(signature, constructor);
-- return constructor;
-+ catch (SignatureException exception) {
-+ throw exception.toNoSuchMethodException("Constructor is not found");
-+ }
- }
-
- /**
---- ./jdk/src/share/classes/com/sun/beans/finder/MethodFinder.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/beans/finder/MethodFinder.java Wed May 07 19:26:47 2014 -0700
-@@ -25,7 +25,7 @@
- package com.sun.beans.finder;
-
- import com.sun.beans.TypeResolver;
--import com.sun.beans.WeakCache;
-+import com.sun.beans.util.Cache;
-
- import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
-@@ -33,6 +33,7 @@
- import java.lang.reflect.Type;
- import java.util.Arrays;
-
-+import static com.sun.beans.util.Cache.Kind.SOFT;
- import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
-
- /**
-@@ -45,7 +46,18 @@
- * @author Sergey A. Malenkov
- */
- public final class MethodFinder extends AbstractFinder<Method> {
-- private static final WeakCache<Signature, Method> CACHE = new WeakCache<Signature, Method>();
-+ private static final Cache<Signature, Method> CACHE = new Cache<Signature, Method>(SOFT, SOFT) {
-+ @Override
-+ public Method create(Signature signature) {
-+ try {
-+ MethodFinder finder = new MethodFinder(signature.getName(), signature.getArgs());
-+ return findAccessibleMethod(finder.find(signature.getType().getMethods()));
-+ }
-+ catch (Exception exception) {
-+ throw new SignatureException(exception);
-+ }
-+ }
-+ };
-
- /**
- * Finds public method (static or non-static)
-@@ -65,16 +77,13 @@
- PrimitiveWrapperMap.replacePrimitivesWithWrappers(args);
- Signature signature = new Signature(type, name, args);
-
-- Method method = CACHE.get(signature);
-- boolean cached = method != null;
-- if (cached && isPackageAccessible(method.getDeclaringClass())) {
-- return method;
-+ try {
-+ Method method = CACHE.get(signature);
-+ return (method == null) || isPackageAccessible(method.getDeclaringClass()) ? method : CACHE.create(signature);
- }
-- method = findAccessibleMethod(new MethodFinder(name, args).find(type.getMethods()));
-- if (!cached) {
-- CACHE.put(signature, method);
-+ catch (SignatureException exception) {
-+ throw exception.toNoSuchMethodException("Method '" + name + "' is not found");
- }
-- return method;
- }
-
- /**
---- ./jdk/src/share/classes/com/sun/beans/finder/Signature.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/beans/finder/Signature.java Wed May 07 19:26:47 2014 -0700
-@@ -62,6 +62,18 @@
- this.args = args;
- }
-
-+ Class<?> getType() {
-+ return this.type;
-+ }
-+
-+ String getName() {
-+ return this.name;
-+ }
-+
-+ Class<?>[] getArgs() {
-+ return this.args;
-+ }
-+
- /**
- * Indicates whether some other object is "equal to" this one.
- *
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/src/share/classes/com/sun/beans/finder/SignatureException.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,41 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+package com.sun.beans.finder;
-+
-+final class SignatureException extends RuntimeException {
-+ SignatureException(Throwable cause) {
-+ super(cause);
-+ }
-+
-+ NoSuchMethodException toNoSuchMethodException(String message) {
-+ Throwable throwable = getCause();
-+ if (throwable instanceof NoSuchMethodException) {
-+ return (NoSuchMethodException) throwable;
-+ }
-+ NoSuchMethodException exception = new NoSuchMethodException(message);
-+ exception.initCause(throwable);
-+ return exception;
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/src/share/classes/com/sun/beans/util/Cache.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,613 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+package com.sun.beans.util;
-+
-+import java.lang.ref.ReferenceQueue;
-+import java.lang.ref.SoftReference;
-+import java.lang.ref.WeakReference;
-+import java.util.Objects;
-+
-+/**
-+ * Hash table based implementation of the cache,
-+ * which allows to use weak or soft references for keys and values.
-+ * An entry in a {@code Cache} will automatically be removed
-+ * when its key or value is no longer in ordinary use.
-+ *
-+ * @author Sergey Malenkov
-+ * @since 1.8
-+ */
-+public abstract class Cache<K,V> {
-+ private static final int MAXIMUM_CAPACITY = 1 << 30; // maximum capacity MUST be a power of two <= 1<<30
-+
-+ private final boolean identity; // defines whether the identity comparison is used
-+ private final Kind keyKind; // a reference kind for the cache keys
-+ private final Kind valueKind; // a reference kind for the cache values
-+
-+ private final ReferenceQueue<Object> queue = new ReferenceQueue<>(); // queue for references to remove
-+
-+ private volatile CacheEntry<K,V>[] table = newTable(1 << 3); // table's length MUST be a power of two
-+ private int threshold = 6; // the next size value at which to resize
-+ private int size; // the number of key-value mappings contained in this map
-+
-+ /**
-+ * Creates a corresponding value for the specified key.
-+ *
-+ * @param key a key that can be used to create a value
-+ * @return a corresponding value for the specified key
-+ */
-+ public abstract V create(K key);
-+
-+ /**
-+ * Constructs an empty {@code Cache}.
-+ * The default initial capacity is 8.
-+ * The default load factor is 0.75.
-+ *
-+ * @param keyKind a reference kind for keys
-+ * @param valueKind a reference kind for values
-+ *
-+ * @throws NullPointerException if {@code keyKind} or {@code valueKind} are {@code null}
-+ */
-+ public Cache(Kind keyKind, Kind valueKind) {
-+ this(keyKind, valueKind, false);
-+ }
-+
-+ /**
-+ * Constructs an empty {@code Cache}
-+ * with the specified comparison method.
-+ * The default initial capacity is 8.
-+ * The default load factor is 0.75.
-+ *
-+ * @param keyKind a reference kind for keys
-+ * @param valueKind a reference kind for values
-+ * @param identity defines whether reference-equality
-+ * is used in place of object-equality
-+ *
-+ * @throws NullPointerException if {@code keyKind} or {@code valueKind} are {@code null}
-+ */
-+ public Cache(Kind keyKind, Kind valueKind, boolean identity) {
-+ Objects.requireNonNull(keyKind, "keyKind");
-+ Objects.requireNonNull(valueKind, "valueKind");
-+ this.keyKind = keyKind;
-+ this.valueKind = valueKind;
-+ this.identity = identity;
-+ }
-+
-+ /**
-+ * Returns the value to which the specified key is mapped,
-+ * or {@code null} if there is no mapping for the key.
-+ *
-+ * @param key the key whose cached value is to be returned
-+ * @return a value to which the specified key is mapped,
-+ * or {@code null} if there is no mapping for {@code key}
-+ *
-+ * @throws NullPointerException if {@code key} is {@code null}
-+ * or corresponding value is {@code null}
-+ */
-+ public final V get(K key) {
-+ Objects.requireNonNull(key, "key");
-+ removeStaleEntries();
-+ int hash = hash(key);
-+ // unsynchronized search improves performance
-+ // the null value does not mean that there are no needed entry
-+ CacheEntry<K,V>[] table = this.table; // unsynchronized access
-+ V current = getEntryValue(key, hash, table[index(hash, table)]);
-+ if (current != null) {
-+ return current;
-+ }
-+ synchronized (this.queue) {
-+ // synchronized search improves stability
-+ // we must create and add new value if there are no needed entry
-+ int index = index(hash, this.table);
-+ current = getEntryValue(key, hash, this.table[index]);
-+ if (current != null) {
-+ return current;
-+ }
-+ V value = create(key);
-+ Objects.requireNonNull(value, "value");
-+ this.table[index] = new CacheEntry<>(hash, key, value, this.table[index]);
-+ if (++this.size >= this.threshold) {
-+ if (this.table.length == MAXIMUM_CAPACITY) {
-+ this.threshold = Integer.MAX_VALUE;
-+ } else {
-+ removeStaleEntries();
-+ table = newTable(this.table.length << 1);
-+ transfer(this.table, table);
-+ // If ignoring null elements and processing ref queue caused massive
-+ // shrinkage, then restore old table. This should be rare, but avoids
-+ // unbounded expansion of garbage-filled tables.
-+ if (this.size >= this.threshold / 2) {
-+ this.table = table;
-+ this.threshold <<= 1;
-+ } else {
-+ transfer(table, this.table);
-+ }
-+ removeStaleEntries();
-+ }
-+ }
-+ return value;
-+ }
-+ }
-+
-+ /**
-+ * Removes the cached value that corresponds to the specified key.
-+ *
-+ * @param key the key whose mapping is to be removed from this cache
-+ */
-+ public final void remove(K key) {
-+ if (key != null) {
-+ synchronized (this.queue) {
-+ removeStaleEntries();
-+ int hash = hash(key);
-+ int index = index(hash, this.table);
-+ CacheEntry<K,V> prev = this.table[index];
-+ CacheEntry<K,V> entry = prev;
-+ while (entry != null) {
-+ CacheEntry<K,V> next = entry.next;
-+ if (entry.matches(hash, key)) {
-+ if (entry == prev) {
-+ this.table[index] = next;
-+ } else {
-+ prev.next = next;
-+ }
-+ entry.unlink();
-+ break;
-+ }
-+ prev = entry;
-+ entry = next;
-+ }
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Removes all of the mappings from this cache.
-+ * It will be empty after this call returns.
-+ */
-+ public final void clear() {
-+ synchronized (this.queue) {
-+ int index = this.table.length;
-+ while (0 < index--) {
-+ CacheEntry<K,V> entry = this.table[index];
-+ while (entry != null) {
-+ CacheEntry<K,V> next = entry.next;
-+ entry.unlink();
-+ entry = next;
-+ }
-+ this.table[index] = null;
-+ }
-+ while (null != this.queue.poll()) {
-+ // Clear out the reference queue.
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Retrieves object hash code and applies a supplemental hash function
-+ * to the result hash, which defends against poor quality hash functions.
-+ * This is critical because {@code Cache} uses power-of-two length hash tables,
-+ * that otherwise encounter collisions for hashCodes that do not differ
-+ * in lower bits.
-+ *
-+ * @param key the object which hash code is to be calculated
-+ * @return a hash code value for the specified object
-+ */
-+ private int hash(Object key) {
-+ if (this.identity) {
-+ int hash = System.identityHashCode(key);
-+ return (hash << 1) - (hash << 8);
-+ }
-+ int hash = key.hashCode();
-+ // This function ensures that hashCodes that differ only by
-+ // constant multiples at each bit position have a bounded
-+ // number of collisions (approximately 8 at default load factor).
-+ hash ^= (hash >>> 20) ^ (hash >>> 12);
-+ return hash ^ (hash >>> 7) ^ (hash >>> 4);
-+ }
-+
-+ /**
-+ * Returns index of the specified hash code in the given table.
-+ * Note that the table size must be a power of two.
-+ *
-+ * @param hash the hash code
-+ * @param table the table
-+ * @return an index of the specified hash code in the given table
-+ */
-+ private static int index(int hash, Object[] table) {
-+ return hash & (table.length - 1);
-+ }
-+
-+ /**
-+ * Creates a new array for the cache entries.
-+ *
-+ * @param size requested capacity MUST be a power of two
-+ * @return a new array for the cache entries
-+ */
-+ @SuppressWarnings("unchecked")
-+ private CacheEntry<K,V>[] newTable(int size) {
-+ return (CacheEntry<K,V>[]) new CacheEntry[size];
-+ }
-+
-+ private V getEntryValue(K key, int hash, CacheEntry<K,V> entry) {
-+ while (entry != null) {
-+ if (entry.matches(hash, key)) {
-+ return entry.value.getReferent();
-+ }
-+ entry = entry.next;
-+ }
-+ return null;
-+ }
-+
-+ private void removeStaleEntries() {
-+ Object reference = this.queue.poll();
-+ if (reference != null) {
-+ synchronized (this.queue) {
-+ do {
-+ if (reference instanceof Ref) {
-+ Ref ref = (Ref) reference;
-+ @SuppressWarnings("unchecked")
-+ CacheEntry<K,V> owner = (CacheEntry<K,V>) ref.getOwner();
-+ if (owner != null) {
-+ int index = index(owner.hash, this.table);
-+ CacheEntry<K,V> prev = this.table[index];
-+ CacheEntry<K,V> entry = prev;
-+ while (entry != null) {
-+ CacheEntry<K,V> next = entry.next;
-+ if (entry == owner) {
-+ if (entry == prev) {
-+ this.table[index] = next;
-+ } else {
-+ prev.next = next;
-+ }
-+ entry.unlink();
-+ break;
-+ }
-+ prev = entry;
-+ entry = next;
-+ }
-+ }
-+ }
-+ reference = this.queue.poll();
-+ }
-+ while (reference != null);
-+ }
-+ }
-+ }
-+
-+ private void transfer(CacheEntry<K,V>[] oldTable, CacheEntry<K,V>[] newTable) {
-+ int oldIndex = oldTable.length;
-+ while (0 < oldIndex--) {
-+ CacheEntry<K,V> entry = oldTable[oldIndex];
-+ oldTable[oldIndex] = null;
-+ while (entry != null) {
-+ CacheEntry<K,V> next = entry.next;
-+ if (entry.key.isStale() || entry.value.isStale()) {
-+ entry.unlink();
-+ } else {
-+ int newIndex = index(entry.hash, newTable);
-+ entry.next = newTable[newIndex];
-+ newTable[newIndex] = entry;
-+ }
-+ entry = next;
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Represents a cache entry (key-value pair).
-+ */
-+ private final class CacheEntry<K,V> {
-+ private final int hash;
-+ private final Ref<K> key;
-+ private final Ref<V> value;
-+ private volatile CacheEntry<K,V> next;
-+
-+ /**
-+ * Constructs an entry for the cache.
-+ *
-+ * @param hash the hash code calculated for the entry key
-+ * @param key the entry key
-+ * @param value the initial value of the entry
-+ * @param next the next entry in a chain
-+ */
-+ private CacheEntry(int hash, K key, V value, CacheEntry<K,V> next) {
-+ this.hash = hash;
-+ this.key = Cache.this.keyKind.create(this, key, Cache.this.queue);
-+ this.value = Cache.this.valueKind.create(this, value, Cache.this.queue);
-+ this.next = next;
-+ }
-+
-+ /**
-+ * Determines whether the entry has the given key with the given hash code.
-+ *
-+ * @param hash an expected hash code
-+ * @param object an object to be compared with the entry key
-+ * @return {@code true} if the entry has the given key with the given hash code;
-+ * {@code false} otherwise
-+ */
-+ private boolean matches(int hash, Object object) {
-+ if (this.hash != hash) {
-+ return false;
-+ }
-+ Object key = this.key.getReferent();
-+ return (key == object) || !Cache.this.identity && (key != null) && key.equals(object);
-+ }
-+
-+ /**
-+ * Marks the entry as actually removed from the cache.
-+ */
-+ private void unlink() {
-+ this.next = null;
-+ this.key.removeOwner();
-+ this.value.removeOwner();
-+ Cache.this.size--;
-+ }
-+ }
-+
-+ /**
-+ * Basic interface for references.
-+ * It defines the operations common for the all kind of references.
-+ *
-+ * @param <T> the type of object to refer
-+ */
-+ private static interface Ref<T> {
-+ /**
-+ * Returns the object that possesses information about the reference.
-+ *
-+ * @return the owner of the reference or {@code null} if the owner is unknown
-+ */
-+ Object getOwner();
-+
-+ /**
-+ * Returns the object to refer.
-+ *
-+ * @return the referred object or {@code null} if it was collected
-+ */
-+ T getReferent();
-+
-+ /**
-+ * Determines whether the referred object was taken by the garbage collector or not.
-+ *
-+ * @return {@code true} if the referred object was collected
-+ */
-+ boolean isStale();
-+
-+ /**
-+ * Marks this reference as removed from the cache.
-+ */
-+ void removeOwner();
-+ }
-+
-+ /**
-+ * Represents a reference kind.
-+ */
-+ public static enum Kind {
-+ STRONG {
-+ <T> Ref<T> create(Object owner, T value, ReferenceQueue<? super T> queue) {
-+ return new Strong<>(owner, value);
-+ }
-+ },
-+ SOFT {
-+ <T> Ref<T> create(Object owner, T referent, ReferenceQueue<? super T> queue) {
-+ return (referent == null)
-+ ? new Strong<>(owner, referent)
-+ : new Soft<>(owner, referent, queue);
-+ }
-+ },
-+ WEAK {
-+ <T> Ref<T> create(Object owner, T referent, ReferenceQueue<? super T> queue) {
-+ return (referent == null)
-+ ? new Strong<>(owner, referent)
-+ : new Weak<>(owner, referent, queue);
-+ }
-+ };
-+
-+ /**
-+ * Creates a reference to the specified object.
-+ *
-+ * @param <T> the type of object to refer
-+ * @param owner the owner of the reference, if needed
-+ * @param referent the object to refer
-+ * @param queue the queue to register the reference with,
-+ * or {@code null} if registration is not required
-+ * @return the reference to the specified object
-+ */
-+ abstract <T> Ref<T> create(Object owner, T referent, ReferenceQueue<? super T> queue);
-+
-+ /**
-+ * This is an implementation of the {@link Cache.Ref} interface
-+ * that uses the strong references that prevent their referents
-+ * from being made finalizable, finalized, and then reclaimed.
-+ *
-+ * @param <T> the type of object to refer
-+ */
-+ private static final class Strong<T> implements Ref<T> {
-+ private Object owner;
-+ private final T referent;
-+
-+ /**
-+ * Creates a strong reference to the specified object.
-+ *
-+ * @param owner the owner of the reference, if needed
-+ * @param referent the non-null object to refer
-+ */
-+ private Strong(Object owner, T referent) {
-+ this.owner = owner;
-+ this.referent = referent;
-+ }
-+
-+ /**
-+ * Returns the object that possesses information about the reference.
-+ *
-+ * @return the owner of the reference or {@code null} if the owner is unknown
-+ */
-+ public Object getOwner() {
-+ return this.owner;
-+ }
-+
-+ /**
-+ * Returns the object to refer.
-+ *
-+ * @return the referred object
-+ */
-+ public T getReferent() {
-+ return this.referent;
-+ }
-+
-+ /**
-+ * Determines whether the referred object was taken by the garbage collector or not.
-+ *
-+ * @return {@code true} if the referred object was collected
-+ */
-+ public boolean isStale() {
-+ return false;
-+ }
-+
-+ /**
-+ * Marks this reference as removed from the cache.
-+ */
-+ public void removeOwner() {
-+ this.owner = null;
-+ }
-+ }
-+
-+ /**
-+ * This is an implementation of the {@link Cache.Ref} interface
-+ * that uses the soft references that are cleared at the discretion
-+ * of the garbage collector in response to a memory request.
-+ *
-+ * @param <T> the type of object to refer
-+ * @see java.lang.ref.SoftReference
-+ */
-+ private static final class Soft<T> extends SoftReference<T> implements Ref<T> {
-+ private Object owner;
-+
-+ /**
-+ * Creates a soft reference to the specified object.
-+ *
-+ * @param owner the owner of the reference, if needed
-+ * @param referent the non-null object to refer
-+ * @param queue the queue to register the reference with,
-+ * or {@code null} if registration is not required
-+ */
-+ private Soft(Object owner, T referent, ReferenceQueue<? super T> queue) {
-+ super(referent, queue);
-+ this.owner = owner;
-+ }
-+
-+ /**
-+ * Returns the object that possesses information about the reference.
-+ *
-+ * @return the owner of the reference or {@code null} if the owner is unknown
-+ */
-+ public Object getOwner() {
-+ return this.owner;
-+ }
-+
-+ /**
-+ * Returns the object to refer.
-+ *
-+ * @return the referred object or {@code null} if it was collected
-+ */
-+ public T getReferent() {
-+ return get();
-+ }
-+
-+ /**
-+ * Determines whether the referred object was taken by the garbage collector or not.
-+ *
-+ * @return {@code true} if the referred object was collected
-+ */
-+ public boolean isStale() {
-+ return null == get();
-+ }
-+
-+ /**
-+ * Marks this reference as removed from the cache.
-+ */
-+ public void removeOwner() {
-+ this.owner = null;
-+ }
-+ }
-+
-+ /**
-+ * This is an implementation of the {@link Cache.Ref} interface
-+ * that uses the weak references that do not prevent their referents
-+ * from being made finalizable, finalized, and then reclaimed.
-+ *
-+ * @param <T> the type of object to refer
-+ * @see java.lang.ref.WeakReference
-+ */
-+ private static final class Weak<T> extends WeakReference<T> implements Ref<T> {
-+ private Object owner;
-+
-+ /**
-+ * Creates a weak reference to the specified object.
-+ *
-+ * @param owner the owner of the reference, if needed
-+ * @param referent the non-null object to refer
-+ * @param queue the queue to register the reference with,
-+ * or {@code null} if registration is not required
-+ */
-+ private Weak(Object owner, T referent, ReferenceQueue<? super T> queue) {
-+ super(referent, queue);
-+ this.owner = owner;
-+ }
-+
-+ /**
-+ * Returns the object that possesses information about the reference.
-+ *
-+ * @return the owner of the reference or {@code null} if the owner is unknown
-+ */
-+ public Object getOwner() {
-+ return this.owner;
-+ }
-+
-+ /**
-+ * Returns the object to refer.
-+ *
-+ * @return the referred object or {@code null} if it was collected
-+ */
-+ public T getReferent() {
-+ return get();
-+ }
-+
-+ /**
-+ * Determines whether the referred object was taken by the garbage collector or not.
-+ *
-+ * @return {@code true} if the referred object was collected
-+ */
-+ public boolean isStale() {
-+ return null == get();
-+ }
-+
-+ /**
-+ * Marks this reference as removed from the cache.
-+ */
-+ public void removeOwner() {
-+ this.owner = null;
-+ }
-+ }
-+ }
-+}
---- ./jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2001, 2013, 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
-@@ -278,10 +278,11 @@
- (JFIFMarkerSegment) findMarkerSegment
- (JFIFMarkerSegment.class, true);
- if (jfif == null) {
-- throw new IIOException
-- ("ICC APP2 encountered without prior JFIF!");
-+ newGuy = new MarkerSegment(buffer);
-+ newGuy.loadData(buffer);
-+ } else {
-+ jfif.addICC(buffer);
- }
-- jfif.addICC(buffer);
- // newGuy remains null
- } else {
- newGuy = new MarkerSegment(buffer);
---- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_fr.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_fr.properties Wed May 07 19:26:47 2014 -0700
-@@ -25,8 +25,8 @@
- FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier :
- FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau.
- FileChooser.upFolderAccessibleName=Monter
--FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine
--FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine
-+FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire de base
-+FileChooser.homeFolderAccessibleName=R\u00E9pertoire de base
- FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier.
- FileChooser.newFolderAccessibleName=Nouveau dossier
- FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier
---- ./jdk/src/share/classes/com/sun/java/util/jar/pack/Code.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/java/util/jar/pack/Code.java Wed May 07 19:26:47 2014 -0700
-@@ -146,7 +146,6 @@
- int verbose = getPackage().verbose;
- if (verbose > 2)
- System.out.println("Reference scan "+this);
-- Class cls = thisClass();
- refs.addAll(Arrays.asList(handler_class));
- if (fixups != null) {
- fixups.visitRefs(refs);
---- ./jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java Wed May 07 19:26:47 2014 -0700
-@@ -670,53 +670,55 @@
- return new String(sig);
- }
-
-- static private int skipClassNameChars(String sig, int i) {
-- int len = sig.length();
-- for (; i < len; i++) {
-- char ch = sig.charAt(i);
-- if (ch <= ' ') break;
-- if (ch >= ';' && ch <= '@') break;
-- }
-- return i;
-+ static private int skipTo(char semi, String sig, int i) {
-+ i = sig.indexOf(semi, i);
-+ return (i >= 0) ? i : sig.length();
- }
-
- static String[] structureSignature(String sig) {
-- sig = sig.intern();
--
-- int formLen = 0;
-- int nparts = 1;
-- for (int i = 0; i < sig.length(); i++) {
-- char ch = sig.charAt(i);
-- formLen++;
-- if (ch == 'L') {
-- nparts++;
-- int i2 = skipClassNameChars(sig, i+1);
-- i = i2-1; // keep the semicolon in the form
-- int i3 = sig.indexOf('<', i+1);
-- if (i3 > 0 && i3 < i2)
-- i = i3-1;
-- }
-- }
-- char[] form = new char[formLen];
-- if (nparts == 1) {
-+ int firstl = sig.indexOf('L');
-+ if (firstl < 0) {
- String[] parts = { sig };
- return parts;
- }
-- String[] parts = new String[nparts];
-- int j = 0;
-- int k = 1;
-- for (int i = 0; i < sig.length(); i++) {
-- char ch = sig.charAt(i);
-- form[j++] = ch;
-- if (ch == 'L') {
-- int i2 = skipClassNameChars(sig, i+1);
-- parts[k++] = sig.substring(i+1, i2);
-- i = i2;
-- --i; // keep the semicolon in the form
-+ // Segment the string like sig.split("L\\([^;<]*\\)").
-+ // N.B.: Previous version of this code did a more complex match,
-+ // to next ch < ' ' or ch in [';'..'@']. The only important
-+ // characters are ';' and '<', since they are part of the
-+ // signature syntax.
-+ // Examples:
-+ // "(Ljava/lang/Object;IJLLoo;)V" => {"(L;IJL;)V", "java/lang/Object", "Loo"}
-+ // "Ljava/util/List<Ljava/lang/String;>;" => {"L<L;>;", "java/util/List", "java/lang/String"}
-+ char[] form = null;
-+ String[] parts = null;
-+ for (int pass = 0; pass <= 1; pass++) {
-+ // pass 0 is a sizing pass, pass 1 packs the arrays
-+ int formPtr = 0;
-+ int partPtr = 1;
-+ int nextsemi = 0, nextangl = 0; // next ';' or '<', or zero, or sigLen
-+ int lastj = 0;
-+ for (int i = firstl + 1, j; i > 0; i = sig.indexOf('L', j) + 1) {
-+ // sig[i-1] is 'L', while sig[j] will be the first ';' or '<' after it
-+ // each part is in sig[i .. j-1]
-+ if (nextsemi < i) nextsemi = skipTo(';', sig, i);
-+ if (nextangl < i) nextangl = skipTo('<', sig, i);
-+ j = (nextsemi < nextangl ? nextsemi : nextangl);
-+ if (pass != 0) {
-+ sig.getChars(lastj, i, form, formPtr);
-+ parts[partPtr] = sig.substring(i, j);
-+ }
-+ formPtr += (i - lastj);
-+ partPtr += 1;
-+ lastj = j;
- }
-+ if (pass != 0) {
-+ sig.getChars(lastj, sig.length(), form, formPtr);
-+ break;
-+ }
-+ formPtr += (sig.length() - lastj);
-+ form = new char[formPtr];
-+ parts = new String[partPtr];
- }
-- assert(j == formLen);
-- assert(k == parts.length);
- parts[0] = new String(form);
- //assert(flattenSignature(parts).equals(sig));
- return parts;
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/src/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,131 @@
-+/*
-+ * Copyright (c) 2005, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.java.util.jar.pack;
-+
-+import java.util.ListResourceBundle;
-+
-+public class DriverResource_ja extends ListResourceBundle {
-+ public static final String VERSION ="VERSION";
-+ public static final String BAD_ARGUMENT ="BAD_ARGUMENT";
-+ public static final String BAD_OPTION ="BAD_OPTION";
-+ public static final String BAD_REPACK_OUTPUT="BAD_REPACK_OUTPUT";
-+ public static final String DETECTED_ZIP_COMMENT="DETECTED_ZIP_COMMENT";
-+ public static final String SKIP_FOR_REPACKED ="SKIP_FOR_REPACKED";
-+ public static final String WRITE_PACK_FILE ="WRITE_PACK_FILE";
-+ public static final String WIRTE_PACKGZ_FILE="WIRTE_PACKGZ_FILE";
-+ public static final String SKIP_FOR_MOVE_FAILED="SKIP_FOR_MOVE_FAILED";
-+ public static final String PACK_HELP="PACK_HELP";
-+ public static final String UNPACK_HELP ="UNPACK_HELP";
-+ public static final String MORE_INFO = "MORE_INFO";
-+ public static final String DUPLICATE_OPTION = "DUPLICATE_OPTION";
-+ public static final String BAD_SPEC = "BAD_SPEC";
-+
-+ //The following string is duplicate in PACK and UNPACK comment,which was draw out to ruduce translation work.
-+ private static final String PARAMETER_V = " -v, --verbose increase program verbosity";
-+ private static final String PARAMETER_Q = " -q, --quiet set verbosity to lowest level";
-+ private static final String PARAMETER_LF = " -l{F}, --log-file={F} output to the given log file, or '-' for System.out";
-+ private static final String PARAMETER_H = " -?, -h, --help print this message";
-+ private static final String PARAMETER_VER = " -V, --version print program version";
-+ private static final String PARAMETER_J = " -J{X} pass option X to underlying Java VM";
-+
-+
-+ //The following are outputs of command 'pack200' and 'unpack200'.
-+ //Don't translate command arguments ,words with a prefix of '-' or '--'.
-+ //
-+ private static final Object[][] resource= {
-+ {VERSION,"{0}\u30D0\u30FC\u30B8\u30E7\u30F3{1}"},//parameter 0:class name;parameter 1: version value
-+ {BAD_ARGUMENT,"\u7121\u52B9\u306A\u5F15\u6570: {0}"},
-+ {BAD_OPTION,"\u7121\u52B9\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: {0}={1}"},//parameter 0:option name;parameter 1:option value
-+ {BAD_REPACK_OUTPUT,"\u7121\u52B9\u306A--repack\u51FA\u529B: {0}"},//parameter 0:filename
-+ {DETECTED_ZIP_COMMENT,"\u691C\u51FA\u3055\u308C\u305FZIP\u30B3\u30E1\u30F3\u30C8: {0}"},//parameter 0:comment
-+ {SKIP_FOR_REPACKED,"\u3059\u3067\u306B\u518D\u5727\u7E2E\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u30B9\u30AD\u30C3\u30D7\u3057\u3066\u3044\u307E\u3059: {0}"},//parameter 0:filename
-+ {WRITE_PACK_FILE,"*.pack\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304D\u8FBC\u3080\u306B\u306F\u3001--no-gzip\u3092\u6307\u5B9A\u3057\u307E\u3059: {0}"},//parameter 0:filename
-+ {WIRTE_PACKGZ_FILE,"*.pack.gz\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304D\u8FBC\u3080\u306B\u306F\u3001--gzip\u3092\u6307\u5B9A\u3057\u307E\u3059: {0}"},//parameter 0:filename
-+ {SKIP_FOR_MOVE_FAILED,"\u79FB\u52D5\u304C\u5931\u6557\u3057\u305F\u305F\u3081\u89E3\u51CD\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u3066\u3044\u307E\u3059: {0}"},//parameter 0:filename
-+ {PACK_HELP,new String[]{
-+ "\u4F7F\u7528\u65B9\u6CD5: pack200 [-opt... | --option=value]... x.pack[.gz] y.jar",
-+ "",
-+ "\u5727\u7E2E\u30AA\u30D7\u30B7\u30E7\u30F3",
-+ " -g\u3001--no-gzip \u30D7\u30EC\u30FC\u30F3\u306A*.pack\u30D5\u30A1\u30A4\u30EB\u3092\u5727\u7E2E\u305B\u305A\u306B\u51FA\u529B\u3057\u307E\u3059",
-+ " --gzip (\u30C7\u30D5\u30A9\u30EB\u30C8)\u5727\u7E2E\u51FA\u529B\u3092gzip\u3067\u5F8C\u51E6\u7406\u3057\u307E\u3059",
-+ " -G\u3001--strip-debug \u5727\u7E2E\u4E2D\u306B\u30C7\u30D0\u30C3\u30B0\u5C5E\u6027\u3092\u524A\u9664\u3057\u307E\u3059",
-+ " -O\u3001--no-keep-file-order \u30D5\u30A1\u30A4\u30EB\u306E\u9806\u5E8F\u4ED8\u3051\u60C5\u5831\u3092\u8EE2\u9001\u3057\u307E\u305B\u3093",
-+ " --keep-file-order (\u30C7\u30D5\u30A9\u30EB\u30C8)\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u306E\u9806\u5E8F\u4ED8\u3051\u3092\u4FDD\u6301\u3057\u307E\u3059",
-+ " -S{N}\u3001--segment-limit={N} \u30BB\u30B0\u30E1\u30F3\u30C8\u5236\u9650\u3092\u51FA\u529B\u3057\u307E\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8N=1Mb)",
-+ " -E{N}\u3001--effort={N} \u5727\u7E2E\u306E\u8A66\u884C(\u30C7\u30D5\u30A9\u30EB\u30C8N=5)",
-+ " -H{h}\u3001--deflate-hint={h} \u30C7\u30D5\u30EC\u30FC\u30C8\u30FB\u30D2\u30F3\u30C8\u3092\u8EE2\u9001\u3057\u307E\u3059: true\u3001false\u307E\u305F\u306Fkeep(\u30C7\u30D5\u30A9\u30EB\u30C8)",
-+ " -m{V}\u3001--modification-time={V} \u5909\u66F4\u6642\u9593\u3092\u8EE2\u9001\u3057\u307E\u3059: latest\u307E\u305F\u306Fkeep(\u30C7\u30D5\u30A9\u30EB\u30C8)",
-+ " -P{F}\u3001--pass-file={F} \u6307\u5B9A\u3055\u308C\u305F\u5727\u7E2E\u3055\u308C\u3066\u3044\u306A\u3044\u5165\u529B\u8981\u7D20\u3092\u8EE2\u9001\u3057\u307E\u3059",
-+ " -U{a}\u3001--unknown-attribute={a} \u4E0D\u660E\u306E\u5C5E\u6027\u30A2\u30AF\u30B7\u30E7\u30F3: error\u3001strip\u307E\u305F\u306Fpass(\u30C7\u30D5\u30A9\u30EB\u30C8)",
-+ " -C{N}={L}\u3001--class-attribute={N}={L} (\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u5C5E\u6027)",
-+ " -F{N}={L}\u3001--field-attribute={N}={L} (\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u5C5E\u6027)",
-+ " -M{N}={L}\u3001--method-attribute={N}={L} (\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u5C5E\u6027)",
-+ " -D{N}={L}\u3001--code-attribute={N}={L} (\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u5C5E\u6027)",
-+ " -f{F}\u3001--config-file={F} Pack200.Packer\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u30D5\u30A1\u30A4\u30EBF\u3092\u8AAD\u307F\u8FBC\u307F\u307E\u3059",
-+ PARAMETER_V ,
-+ PARAMETER_Q ,
-+ PARAMETER_LF ,
-+ PARAMETER_H ,
-+ PARAMETER_VER ,
-+ PARAMETER_J,
-+ "",
-+ "\u6CE8\u610F:",
-+ " -P\u3001-C\u3001-F\u3001-M\u304A\u3088\u3073-D\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u7D2F\u7A4D\u3055\u308C\u307E\u3059\u3002",
-+ " \u5C5E\u6027\u5B9A\u7FA9\u306E\u4F8B: -C SourceFile=RUH .",
-+ " Config.\u30D5\u30A1\u30A4\u30EB\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u3001Pack200 API\u306B\u3088\u3063\u3066\u5B9A\u7FA9\u3055\u308C\u307E\u3059\u3002",
-+ " -S\u3001-E\u3001-H\u3001-m\u3001-U\u306E\u5024\u306E\u610F\u5473\u306F\u3001Pack200 API\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
-+ " \u30EC\u30A4\u30A2\u30A6\u30C8\u5B9A\u7FA9(RUH\u306A\u3069)\u306FJSR 200\u306B\u3088\u3063\u3066\u5B9A\u7FA9\u3055\u308C\u307E\u3059\u3002",
-+ "",
-+ "\u518D\u5727\u7E2E\u30E2\u30FC\u30C9\u3067\u306F\u3001JAR\u30D5\u30A1\u30A4\u30EB\u304C\u5727\u7E2E/\u89E3\u51CD\u30B5\u30A4\u30AF\u30EB\u3067\u66F4\u65B0\u3055\u308C\u307E\u3059:",
-+ " pack200 [-r|--repack] [-opt | --option=value]... [repackedy.jar] y.jar\n"
-+ }
-+ },
-+ {UNPACK_HELP,new String[]{
-+ "\u4F7F\u7528\u65B9\u6CD5: unpack200 [-opt... | --option=value]... x.pack[.gz] y.jar\n",
-+ "",
-+ "\u89E3\u51CD\u30AA\u30D7\u30B7\u30E7\u30F3",
-+ " -H{h}\u3001--deflate-hint={h} \u8EE2\u9001\u3055\u308C\u305F\u30C7\u30D5\u30EC\u30FC\u30C8\u30FB\u30D2\u30F3\u30C8\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3057\u307E\u3059: true\u3001false\u307E\u305F\u306Fkeep(\u30C7\u30D5\u30A9\u30EB\u30C8)",
-+ " -r\u3001--remove-pack-file \u89E3\u51CD\u5F8C\u306B\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u3092\u524A\u9664\u3057\u307E\u3059",
-+ PARAMETER_V ,
-+ PARAMETER_Q ,
-+ PARAMETER_LF ,
-+ PARAMETER_H ,
-+ PARAMETER_VER ,
-+ PARAMETER_J,
-+ }
-+ },
-+
-+ {MORE_INFO,"(\u8A73\u7D30\u306F\u3001{0} --help\u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002)"},//parameter 0:command name
-+ {DUPLICATE_OPTION,"\u91CD\u8907\u30AA\u30D7\u30B7\u30E7\u30F3: {0}"},//parameter 0:option
-+ {BAD_SPEC,"{0}\u306E\u7121\u52B9\u306A\u4ED5\u69D8: {1}"},//parameter 0:option;parameter 1:specifier
-+ };
-+
-+ protected Object[][] getContents() {
-+ return resource;
-+ }
-+
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/src/share/classes/com/sun/java/util/jar/pack/DriverResource_zh_CN.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,131 @@
-+/*
-+ * Copyright (c) 2005, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package com.sun.java.util.jar.pack;
-+
-+import java.util.ListResourceBundle;
-+
-+public class DriverResource_zh_CN extends ListResourceBundle {
-+ public static final String VERSION ="VERSION";
-+ public static final String BAD_ARGUMENT ="BAD_ARGUMENT";
-+ public static final String BAD_OPTION ="BAD_OPTION";
-+ public static final String BAD_REPACK_OUTPUT="BAD_REPACK_OUTPUT";
-+ public static final String DETECTED_ZIP_COMMENT="DETECTED_ZIP_COMMENT";
-+ public static final String SKIP_FOR_REPACKED ="SKIP_FOR_REPACKED";
-+ public static final String WRITE_PACK_FILE ="WRITE_PACK_FILE";
-+ public static final String WIRTE_PACKGZ_FILE="WIRTE_PACKGZ_FILE";
-+ public static final String SKIP_FOR_MOVE_FAILED="SKIP_FOR_MOVE_FAILED";
-+ public static final String PACK_HELP="PACK_HELP";
-+ public static final String UNPACK_HELP ="UNPACK_HELP";
-+ public static final String MORE_INFO = "MORE_INFO";
-+ public static final String DUPLICATE_OPTION = "DUPLICATE_OPTION";
-+ public static final String BAD_SPEC = "BAD_SPEC";
-+
-+ //The following string is duplicate in PACK and UNPACK comment,which was draw out to ruduce translation work.
-+ private static final String PARAMETER_V = " -v, --verbose increase program verbosity";
-+ private static final String PARAMETER_Q = " -q, --quiet set verbosity to lowest level";
-+ private static final String PARAMETER_LF = " -l{F}, --log-file={F} output to the given log file, or '-' for System.out";
-+ private static final String PARAMETER_H = " -?, -h, --help print this message";
-+ private static final String PARAMETER_VER = " -V, --version print program version";
-+ private static final String PARAMETER_J = " -J{X} pass option X to underlying Java VM";
-+
-+
-+ //The following are outputs of command 'pack200' and 'unpack200'.
-+ //Don't translate command arguments ,words with a prefix of '-' or '--'.
-+ //
-+ private static final Object[][] resource= {
-+ {VERSION,"{0}\u7248\u672C {1}"},//parameter 0:class name;parameter 1: version value
-+ {BAD_ARGUMENT,"\u9519\u8BEF\u53C2\u6570: {0}"},
-+ {BAD_OPTION,"\u9519\u8BEF\u9009\u9879: {0}={1}"},//parameter 0:option name;parameter 1:option value
-+ {BAD_REPACK_OUTPUT,"--repack \u8F93\u51FA\u9519\u8BEF: {0}"},//parameter 0:filename
-+ {DETECTED_ZIP_COMMENT,"\u68C0\u6D4B\u5230 ZIP \u6CE8\u91CA: {0}"},//parameter 0:comment
-+ {SKIP_FOR_REPACKED,"\u7531\u4E8E\u5DF2\u91CD\u65B0\u6253\u5305\u800C\u8DF3\u8FC7: {0}"},//parameter 0:filename
-+ {WRITE_PACK_FILE,"\u8981\u5199\u5165 *.pack \u6587\u4EF6, \u8BF7\u6307\u5B9A --no-gzip: {0}"},//parameter 0:filename
-+ {WIRTE_PACKGZ_FILE,"\u8981\u5199\u5165 *.pack.gz \u6587\u4EF6, \u8BF7\u6307\u5B9A --gzip: {0}"},//parameter 0:filename
-+ {SKIP_FOR_MOVE_FAILED,"\u7531\u4E8E\u79FB\u52A8\u5931\u8D25\u800C\u8DF3\u8FC7\u91CD\u65B0\u6253\u5305: {0}"},//parameter 0:filename
-+ {PACK_HELP,new String[]{
-+ "\u7528\u6CD5: pack200 [-opt... | --option=value]... x.pack[.gz] y.jar",
-+ "",
-+ "\u6253\u5305\u9009\u9879",
-+ " -g, --no-gzip \u8F93\u51FA\u65E0\u683C\u5F0F\u7684 *.pack \u6587\u4EF6, \u4E0D\u538B\u7F29",
-+ " --gzip (\u9ED8\u8BA4\u503C) \u4F7F\u7528 gzip \u5BF9\u6253\u5305\u8FDB\u884C\u540E\u5904\u7406",
-+ " -G, --strip-debug \u6253\u5305\u65F6\u5220\u9664\u8C03\u8BD5\u5C5E\u6027",
-+ " -O, --no-keep-file-order \u4E0D\u4F20\u8F93\u6587\u4EF6\u6392\u5E8F\u4FE1\u606F",
-+ " --keep-file-order (\u9ED8\u8BA4\u503C) \u4FDD\u7559\u8F93\u5165\u6587\u4EF6\u6392\u5E8F",
-+ " -S{N}, --segment-limit={N} \u8F93\u51FA\u6BB5\u9650\u5236 (\u9ED8\u8BA4\u503C N=1Mb)",
-+ " -E{N}, --effort={N} \u6253\u5305\u6548\u679C (\u9ED8\u8BA4\u503C N=5)",
-+ " -H{h}, --deflate-hint={h} \u4F20\u8F93\u538B\u7F29\u63D0\u793A: true, false \u6216 keep (\u9ED8\u8BA4\u503C)",
-+ " -m{V}, --modification-time={V} \u4F20\u8F93 modtimes: latest \u6216 keep (\u9ED8\u8BA4\u503C)",
-+ " -P{F}, --pass-file={F} \u4F20\u8F93\u672A\u89E3\u538B\u7F29\u7684\u7ED9\u5B9A\u8F93\u5165\u5143\u7D20",
-+ " -U{a}, --unknown-attribute={a} \u672A\u77E5\u5C5E\u6027\u64CD\u4F5C: error, strip \u6216 pass (\u9ED8\u8BA4\u503C)",
-+ " -C{N}={L}, --class-attribute={N}={L} (\u7528\u6237\u5B9A\u4E49\u7684\u5C5E\u6027)",
-+ " -F{N}={L}, --field-attribute={N}={L} (\u7528\u6237\u5B9A\u4E49\u7684\u5C5E\u6027)",
-+ " -M{N}={L}, --method-attribute={N}={L} (\u7528\u6237\u5B9A\u4E49\u7684\u5C5E\u6027)",
-+ " -D{N}={L}, --code-attribute={N}={L} (\u7528\u6237\u5B9A\u4E49\u7684\u5C5E\u6027)",
-+ " -f{F}, --config-file={F} \u8BFB\u53D6\u6587\u4EF6 F \u7684 Pack200.Packer \u5C5E\u6027",
-+ PARAMETER_V ,
-+ PARAMETER_Q ,
-+ PARAMETER_LF ,
-+ PARAMETER_H ,
-+ PARAMETER_VER ,
-+ PARAMETER_J,
-+ "",
-+ "\u6CE8:",
-+ " -P, -C, -F, -M \u548C -D \u9009\u9879\u7D2F\u8BA1\u3002",
-+ " \u793A\u4F8B\u5C5E\u6027\u5B9A\u4E49: -C SourceFile=RUH\u3002",
-+ " Config. \u6587\u4EF6\u5C5E\u6027\u7531 Pack200 API \u5B9A\u4E49\u3002",
-+ " \u6709\u5173 -S, -E, -H-, -m, -U \u503C\u7684\u542B\u4E49, \u8BF7\u53C2\u9605 Pack200 API\u3002",
-+ " \u5E03\u5C40\u5B9A\u4E49 (\u4F8B\u5982 RUH) \u7531 JSR 200 \u5B9A\u4E49\u3002",
-+ "",
-+ "\u91CD\u65B0\u6253\u5305\u6A21\u5F0F\u901A\u8FC7\u6253\u5305/\u89E3\u5305\u5468\u671F\u66F4\u65B0 JAR \u6587\u4EF6:",
-+ " pack200 [-r|--repack] [-opt | --option=value]... [repackedy.jar] y.jar\n"
-+ }
-+ },
-+ {UNPACK_HELP,new String[]{
-+ "\u7528\u6CD5: unpack200 [-opt... | --option=value]... x.pack[.gz] y.jar\n",
-+ "",
-+ "\u89E3\u5305\u9009\u9879",
-+ " -H{h}, --deflate-hint={h} \u8986\u76D6\u5DF2\u4F20\u8F93\u7684\u538B\u7F29\u63D0\u793A: true, false \u6216 keep (\u9ED8\u8BA4\u503C)",
-+ " -r, --remove-pack-file \u89E3\u5305\u4E4B\u540E\u5220\u9664\u8F93\u5165\u6587\u4EF6",
-+ PARAMETER_V ,
-+ PARAMETER_Q ,
-+ PARAMETER_LF ,
-+ PARAMETER_H ,
-+ PARAMETER_VER ,
-+ PARAMETER_J,
-+ }
-+ },
-+
-+ {MORE_INFO,"(\u6709\u5173\u8BE6\u7EC6\u4FE1\u606F, \u8BF7\u8FD0\u884C {0} --help\u3002)"},//parameter 0:command name
-+ {DUPLICATE_OPTION,"\u91CD\u590D\u7684\u9009\u9879: {0}"},//parameter 0:option
-+ {BAD_SPEC,"{0}\u7684\u89C4\u8303\u9519\u8BEF: {1}"},//parameter 0:option;parameter 1:specifier
-+ };
-+
-+ protected Object[][] getContents() {
-+ return resource;
-+ }
-+
-+
-+}
---- ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties Wed May 07 19:26:47 2014 -0700
-@@ -140,7 +140,7 @@
- #WebRowSetXmlReader exception
- wrsxmlreader.invalidcp = Ende von RowSet wurde erreicht. Ung\u00FCltige Cursorposition
- wrsxmlreader.readxml = readXML: {0}
--wrsxmlreader.parseerr = ** Parsing-Fehler: {0}, Zeile: {1} , URI: {2}
-+wrsxmlreader.parseerr = ** Parsingfehler: {0}, Zeile: {1} , URI: {2}
-
- #WebRowSetXmlWriter exceptions
- wrsxmlwriter.ioex = IOException: {0}
---- ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ja.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ja.properties Wed May 07 19:26:47 2014 -0700
-@@ -51,8 +51,8 @@
- cachedrowsetimpl.last = last: TYPE_FORWARD_ONLY
- cachedrowsetimpl.absolute = absolute: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E
- cachedrowsetimpl.relative = relative: \u7121\u52B9\u306A\u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E
--cachedrowsetimpl.asciistream = ascii\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F
--cachedrowsetimpl.binstream = \u30D0\u30A4\u30CA\u30EA\u30FB\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F
-+cachedrowsetimpl.asciistream = ascii\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u304C\u5931\u6557\u3057\u307E\u3057\u305F
-+cachedrowsetimpl.binstream = \u30D0\u30A4\u30CA\u30EA\u30FB\u30B9\u30C8\u30EA\u30FC\u30E0\u306E\u8AAD\u8FBC\u307F\u304C\u5931\u6557\u3057\u307E\u3057\u305F
- cachedrowsetimpl.failedins = \u884C\u306E\u633F\u5165\u306B\u5931\u6557
- cachedrowsetimpl.updateins = \u633F\u5165\u884C\u306B\u304A\u3044\u3066updateRow\u304C\u547C\u3073\u51FA\u3055\u308C\u307E\u3057\u305F
- cachedrowsetimpl.movetoins = moveToInsertRow: CONCUR_READ_ONLY
-@@ -101,7 +101,7 @@
-
- #JdbcRowSetImpl exceptions
- jdbcrowsetimpl.invalstate = \u7121\u52B9\u306A\u72B6\u614B
--jdbcrowsetimpl.connect = JdbcRowSet(connect): JNDI\u304C\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093
-+jdbcrowsetimpl.connect = JdbcRowSet (connect): JNDI\u304C\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093
- jdbcrowsetimpl.paramtype = \u30D1\u30E9\u30E1\u30FC\u30BF\u30FB\u30BF\u30A4\u30D7\u3092\u63A8\u5B9A\u3067\u304D\u307E\u305B\u3093
- jdbcrowsetimpl.matchcols = \u4E00\u81F4\u5217\u304C\u5217\u306E\u30BB\u30C3\u30C8\u3068\u540C\u3058\u3067\u306F\u3042\u308A\u307E\u305B\u3093
- jdbcrowsetimpl.setmatchcols = \u4E00\u81F4\u5217\u3092\u53D6\u5F97\u3059\u308B\u524D\u306B\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
---- ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_sv.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_sv.properties Wed May 07 19:26:47 2014 -0700
-@@ -29,11 +29,11 @@
- cachedrowsetimpl.nullhash = Kan inte instansiera CachedRowSetImpl. Null-hashtabell skickades till konstruktor
- cachedrowsetimpl.invalidop = En ogiltig \u00E5tg\u00E4rd utf\u00F6rdes p\u00E5 infogad rad
- cachedrowsetimpl.accfailed = acceptChanges utf\u00F6rdes inte
--cachedrowsetimpl.invalidcp = Mark\u00F6rpositionen \u00E4r ogiltig
-+cachedrowsetimpl.invalidcp = Ogiltigt mark\u00F6rl\u00E4ge
- cachedrowsetimpl.illegalop = En otill\u00E5ten \u00E5tg\u00E4rd utf\u00F6rdes p\u00E5 en icke infogad rad
- cachedrowsetimpl.clonefail = Kloningen utf\u00F6rdes inte: {0}
--cachedrowsetimpl.invalidcol = Kolumnindexet \u00E4r ogiltigt
--cachedrowsetimpl.invalcolnm = Kolumnnamnet \u00E4r ogiltigt
-+cachedrowsetimpl.invalidcol = Ogiltigt kolumnindex
-+cachedrowsetimpl.invalcolnm = Ogiltigt kolumnnamn
- cachedrowsetimpl.boolfail = getBoolen utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
- cachedrowsetimpl.bytefail = getByte utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
- cachedrowsetimpl.shortfail = getShort utf\u00F6rdes inte f\u00F6r v\u00E4rdet ({0}) i kolumnen {1}
-@@ -60,7 +60,7 @@
- cachedrowsetimpl.movetoins2 = moveToInsertRow: ogiltigt antal kolumner
- cachedrowsetimpl.tablename = Tabellnamnet kan inte vara null
- cachedrowsetimpl.keycols = Ogiltiga nyckelkolumner
--cachedrowsetimpl.invalidcol = Kolumnindexet \u00E4r ogiltigt
-+cachedrowsetimpl.invalidcol = Ogiltigt kolumnindex
- cachedrowsetimpl.opnotsupp = Databasen har inte st\u00F6d f\u00F6r denna \u00E5tg\u00E4rd
- cachedrowsetimpl.matchcols = Matchningskolumnerna \u00E4r inte samma som de som st\u00E4llts in
- cachedrowsetimpl.setmatchcols = St\u00E4ll in matchningskolumnerna innan du h\u00E4mtar dem
-@@ -81,7 +81,7 @@
-
- # WebRowSetImpl exceptions
- webrowsetimpl.nullhash = Kan inte instansiera WebRowSetImpl. Null-hashtabell skickades till konstruktor.
--webrowsetimpl.invalidwr = Ogiltig f\u00F6rfattare
-+webrowsetimpl.invalidwr = Ogiltig skrivfunktion
- webrowsetimpl.invalidrd = Ogiltig l\u00E4sare
-
- #FilteredRowSetImpl exceptions
---- ./jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java Wed May 07 19:26:47 2014 -0700
-@@ -875,8 +875,7 @@
- char[] tmpPassword = ((PasswordCallback)
- callbacks[0]).getPassword();
- if (tmpPassword == null) {
-- // treat a NULL password as an empty password
-- tmpPassword = new char[0];
-+ throw new LoginException("No password provided");
- }
- password = new char[tmpPassword.length];
- System.arraycopy(tmpPassword, 0,
---- ./jdk/src/share/classes/com/sun/security/sasl/util/AbstractSaslImpl.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/security/sasl/util/AbstractSaslImpl.java Wed May 07 19:26:47 2014 -0700
-@@ -252,11 +252,12 @@
-
-
- /**
-- * Outputs a byte array and converts
-+ * Outputs a byte array. Can be null.
- */
- protected static final void traceOutput(String srcClass, String srcMethod,
- String traceTag, byte[] output) {
-- traceOutput(srcClass, srcMethod, traceTag, output, 0, output.length);
-+ traceOutput(srcClass, srcMethod, traceTag, output, 0,
-+ output == null ? 0 : output.length);
- }
-
- protected static final void traceOutput(String srcClass, String srcMethod,
-@@ -272,13 +273,20 @@
- lev = Level.FINEST;
- }
-
-- ByteArrayOutputStream out = new ByteArrayOutputStream(len);
-- new HexDumpEncoder().encodeBuffer(
-- new ByteArrayInputStream(output, offset, len), out);
-+ String content;
-+
-+ if (output != null) {
-+ ByteArrayOutputStream out = new ByteArrayOutputStream(len);
-+ new HexDumpEncoder().encodeBuffer(
-+ new ByteArrayInputStream(output, offset, len), out);
-+ content = out.toString();
-+ } else {
-+ content = "NULL";
-+ }
-
- // Message id supplied by caller as part of traceTag
- logger.logp(lev, srcClass, srcMethod, "{0} ( {1} ): {2}",
-- new Object[] {traceTag, new Integer(origlen), out.toString()});
-+ new Object[] {traceTag, new Integer(origlen), content});
- } catch (Exception e) {
- logger.logp(Level.WARNING, srcClass, srcMethod,
- "SASLIMPL09:Error generating trace output: {0}", e);
---- ./jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_fr.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_fr.properties Wed May 07 19:26:47 2014 -0700
-@@ -25,8 +25,8 @@
- FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier :
- FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau.
- FileChooser.upFolderAccessibleName=Monter
--FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine
--FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine
-+FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire de base
-+FileChooser.homeFolderAccessibleName=R\u00E9pertoire de base
- FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier.
- FileChooser.newFolderAccessibleName=Nouveau dossier
- FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier
---- ./jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_fr.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_fr.properties Wed May 07 19:26:47 2014 -0700
-@@ -25,8 +25,8 @@
- FileChooser.filesOfTypeLabel.textAndMnemonic=&Type de fichier :
- FileChooser.upFolderToolTip.textAndMnemonic=Remonte d'un niveau.
- FileChooser.upFolderAccessibleName=Monter
--FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire d'origine
--FileChooser.homeFolderAccessibleName=R\u00E9pertoire d'origine
-+FileChooser.homeFolderToolTip.textAndMnemonic=R\u00E9pertoire de base
-+FileChooser.homeFolderAccessibleName=R\u00E9pertoire de base
- FileChooser.newFolderToolTip.textAndMnemonic=Cr\u00E9e un dossier.
- FileChooser.newFolderAccessibleName=Nouveau dossier
- FileChooser.newFolderActionLabel.textAndMnemonic=Nouveau dossier
---- ./jdk/src/share/classes/com/sun/tools/jdi/resources/jdi_ja.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/com/sun/tools/jdi/resources/jdi_ja.properties Wed May 07 19:26:47 2014 -0700
-@@ -47,6 +47,6 @@
- memory_listening.name = VM\u3078\u306E\u63A5\u7D9A\u3092\u30EA\u30B9\u30CB\u30F3\u30B0\u3059\u308B\u305F\u3081\u306E\u5171\u6709\u30E1\u30E2\u30EA\u30FC\u9818\u57DF\u540D
- memory_listening.name.label = \u540D\u524D
- memory_listening.description = \u305D\u306E\u4ED6\u306EVM\u306B\u3088\u308A\u958B\u59CB\u3055\u308C\u308B\u5171\u6709\u30E1\u30E2\u30EA\u30FC\u63A5\u7D9A\u3092\u53D7\u3051\u5165\u308C\u307E\u3059
--process_attaching.description = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9\u306B\u30D7\u30ED\u30BB\u30B9ID(pid)\u3092\u4F7F\u7528\u3057\u3066\u63A5\u7D9A\u3057\u307E\u3059
-+process_attaching.description = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9\u306B\u30D7\u30ED\u30BB\u30B9ID (pid)\u3092\u4F7F\u7528\u3057\u3066\u63A5\u7D9A\u3057\u307E\u3059
- process_attaching.pid = pid
--process_attaching.pid.label = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9ID(pid)
-+process_attaching.pid.label = \u30C7\u30D0\u30C3\u30B0\u3059\u308B\u30D7\u30ED\u30BB\u30B9ID (pid)
---- ./jdk/src/share/classes/java/awt/AWTException.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/awt/AWTException.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1995, 1997, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1995, 2013, 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
-@@ -26,7 +26,7 @@
-
-
- /**
-- * Signals that an Absract Window Toolkit exception has occurred.
-+ * Signals that an Abstract Window Toolkit exception has occurred.
- *
- * @author Arthur van Hoff
- */
---- ./jdk/src/share/classes/java/awt/Component.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/awt/Component.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1995, 2013, 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
-@@ -972,6 +972,10 @@
- public AccessControlContext getAccessControlContext(Component comp) {
- return comp.getAccessControlContext();
- }
-+
-+ public void revalidateSynchronously(Component comp) {
-+ comp.revalidateSynchronously();
-+ }
- });
- }
-
-@@ -2963,6 +2967,13 @@
- * @since 1.7
- */
- public void revalidate() {
-+ revalidateSynchronously();
-+ }
-+
-+ /**
-+ * Revalidates the component synchronously.
-+ */
-+ final void revalidateSynchronously() {
- synchronized (getTreeLock()) {
- invalidate();
-
---- ./jdk/src/share/classes/java/awt/Toolkit.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/awt/Toolkit.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1995, 2013, 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
-@@ -56,6 +56,7 @@
- import sun.awt.NullComponentPeer;
- import sun.awt.PeerEvent;
- import sun.awt.SunToolkit;
-+import sun.awt.AWTAccessor;
- import sun.security.util.SecurityConstants;
-
- import sun.util.CoreResourceBundleControl;
-@@ -1607,6 +1608,12 @@
- * here, so that only one copy is maintained.
- */
- private static ResourceBundle resources;
-+ private static ResourceBundle platformResources;
-+
-+ // called by platform toolkit
-+ private static void setPlatformResources(ResourceBundle bundle) {
-+ platformResources = bundle;
-+ }
-
- /**
- * Initialize JNI field and method ids
-@@ -1650,6 +1657,13 @@
- }
-
- static {
-+ AWTAccessor.setToolkitAccessor(
-+ new AWTAccessor.ToolkitAccessor() {
-+ @Override
-+ public void setPlatformResources(ResourceBundle bundle) {
-+ Toolkit.setPlatformResources(bundle);
-+ }
-+ });
- java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction() {
- public Object run() {
-@@ -1677,6 +1691,14 @@
- * This method returns defaultValue if the property is not found.
- */
- public static String getProperty(String key, String defaultValue) {
-+ // first try platform specific bundle
-+ if (platformResources != null) {
-+ try {
-+ return platformResources.getString(key);
-+ } catch (MissingResourceException e) {}
-+ }
-+
-+ // then shared one
- if (resources != null) {
- try {
- return resources.getString(key);
-@@ -2544,7 +2566,7 @@
- Runnable updater = new Runnable() {
- public void run() {
- PropertyChangeSupport pcs = (PropertyChangeSupport)
-- AppContext.getAppContext().get(PROP_CHANGE_SUPPORT_KEY);
-+ AppContext.getAppContext().get(PROP_CHANGE_SUPPORT_KEY);
- if (null != pcs) {
- pcs.firePropertyChange(evt);
- }
---- ./jdk/src/share/classes/java/lang/AbstractStringBuilder.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/lang/AbstractStringBuilder.java Wed May 07 19:26:47 2014 -0700
-@@ -1273,7 +1273,7 @@
- * specified substring, starting at the specified index. The integer
- * returned is the smallest value <tt>k</tt> for which:
- * <blockquote><pre>
-- * k >= Math.min(fromIndex, str.length()) &&
-+ * k >= Math.min(fromIndex, this.length()) &&
- * this.toString().startsWith(str, k)
- * </pre></blockquote>
- * If no such value of <i>k</i> exists, then -1 is returned.
-@@ -1317,7 +1317,7 @@
- * specified substring. The integer returned is the largest value <i>k</i>
- * such that:
- * <blockquote><pre>
-- * k <= Math.min(fromIndex, str.length()) &&
-+ * k <= Math.min(fromIndex, this.length()) &&
- * this.toString().startsWith(str, k)
- * </pre></blockquote>
- * If no such value of <i>k</i> exists, then -1 is returned.
---- ./jdk/src/share/classes/java/lang/Class.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/lang/Class.java Wed May 07 19:26:47 2014 -0700
-@@ -2207,14 +2207,53 @@
- */
- static native Class getPrimitiveClass(String name);
-
-- private static boolean isCheckMemberAccessOverridden(SecurityManager smgr) {
-- if (smgr.getClass() == SecurityManager.class) return false;
-+ private static class SecurityManagerHelper {
-+ final SecurityManager sm;
-+ final boolean overrideCheckMemberAccess;
-+ SecurityManagerHelper(SecurityManager sm) {
-+ this.sm = sm;
-
-- Class<?>[] paramTypes = new Class<?>[] {Class.class, int.class};
-- return smgr.getClass().getMethod0("checkMemberAccess", paramTypes).
-- getDeclaringClass() != SecurityManager.class;
-+ boolean overridden = false;
-+ if (sm.getClass() != SecurityManager.class) {
-+ try {
-+ overridden = getCheckMemberAccessMethod(sm.getClass()).
-+ getDeclaringClass() != SecurityManager.class;
-+ } catch (NoSuchMethodError e) {
-+ // fall back to invoke sm.checkMemberAccess for the member access check
-+ }
-+ }
-+ this.overrideCheckMemberAccess = overridden;
-+ }
-+
- }
-
-+ private static volatile SecurityManagerHelper smHelper;
-+ private static boolean isCheckMemberAccessOverridden(SecurityManager sm) {
-+ if (sm.getClass() == SecurityManager.class) return false;
-+
-+ SecurityManagerHelper helper = smHelper;
-+ if (helper == null || helper.sm != sm) {
-+ helper = new SecurityManagerHelper(sm);
-+ smHelper = helper;
-+ }
-+ return helper.overrideCheckMemberAccess;
-+ }
-+
-+ /**
-+ * Finds the checkMemberAccess method of the given SecurityManager class.
-+ *
-+ * This method calls JNI_GetMethodID to look up the checkMemberAccess method
-+ * instead of Class.getMethod0 that may cause loading of classes referenced
-+ * by the SecurityManager subclass and cause ClassCircularityError.
-+ *
-+ * JNI_GetMethodID may throw NoSuchMethodError if the given class
-+ * has a static checkMemberAccess method.
-+ *
-+ * @throws NoSuchMethodError if the method cannot be found.
-+ */
-+ private static native Method getCheckMemberAccessMethod(Class<? extends SecurityManager> c)
-+ throws NoSuchMethodError;
-+
-
- /*
- * Check if client is allowed to access members. If access is denied,
---- ./jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Wed May 07 19:26:47 2014 -0700
-@@ -74,7 +74,6 @@
- new Entry(0x00CC, new char[]{0x0069, 0x0307, 0x0300}, new char[]{0x00CC}, "lt", 0), // # LATIN CAPITAL LETTER I WITH GRAVE
- new Entry(0x00CD, new char[]{0x0069, 0x0307, 0x0301}, new char[]{0x00CD}, "lt", 0), // # LATIN CAPITAL LETTER I WITH ACUTE
- new Entry(0x0128, new char[]{0x0069, 0x0307, 0x0303}, new char[]{0x0128}, "lt", 0), // # LATIN CAPITAL LETTER I WITH TILDE
-- new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, "lt", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE
-
- //# ================================================================================
- //# Turkish and Azeri
-@@ -85,10 +84,7 @@
- new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "tr", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I
- new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "az", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I
- new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN SMALL LETTER I
-- new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN SMALL LETTER I
-- //# ================================================================================
-- //# Other
-- new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, "en", 0), // # LATIN CAPITALLETTER I WITH DOT ABOVE
-+ new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "az", 0) // # LATIN SMALL LETTER I
- };
-
- // A hash table that contains the above entries
---- ./jdk/src/share/classes/java/lang/String.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/lang/String.java Wed May 07 19:26:47 2014 -0700
-@@ -2461,21 +2461,14 @@
- }
- if (localeDependent || srcChar == '\u03A3') { // GREEK CAPITAL LETTER SIGMA
- lowerChar = ConditionalSpecialCasing.toLowerCaseEx(this, i, locale);
-- } else if (srcChar == '\u0130') { // LATIN CAPITAL LETTER I DOT
-- lowerChar = Character.ERROR;
- } else {
- lowerChar = Character.toLowerCase(srcChar);
- }
- if ((lowerChar == Character.ERROR)
- || (lowerChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) {
- if (lowerChar == Character.ERROR) {
-- if (!localeDependent && srcChar == '\u0130') {
-- lowerCharArray =
-- ConditionalSpecialCasing.toLowerCaseCharArray(this, i, Locale.ENGLISH);
-- } else {
-- lowerCharArray =
-- ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale);
-- }
-+ lowerCharArray =
-+ ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale);
- } else if (srcCount == 2) {
- resultOffset += Character.toChars(lowerChar, result, i + resultOffset) - srcCount;
- continue;
---- ./jdk/src/share/classes/java/lang/System.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/lang/System.java Wed May 07 19:26:47 2014 -0700
-@@ -1206,6 +1206,9 @@
- public Thread newThreadWithAcc(Runnable target, AccessControlContext acc) {
- return new Thread(target, acc);
- }
-+ public void invokeFinalize(Object o) throws Throwable {
-+ o.finalize();
-+ }
- });
- }
- }
---- ./jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java Wed May 07 19:26:47 2014 -0700
-@@ -53,7 +53,8 @@
- if (!member.isResolved())
- throw new InternalError();
-
-- if (member.getDeclaringClass().isInterface() && !member.isAbstract()) {
-+ if (member.getDeclaringClass().isInterface() &&
-+ member.isMethod() && !member.isAbstract()) {
- // Check for corner case: invokeinterface of Object method
- MemberName m = new MemberName(Object.class, member.getName(), member.getMethodType(), member.getReferenceKind());
- m = MemberName.getFactory().resolveOrNull(m.getReferenceKind(), m, null);
---- ./jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java Wed May 07 19:26:47 2014 -0700
-@@ -742,7 +742,8 @@
- GuardWithCatch gguard = new GuardWithCatch(gtarget, exType, gcatcher);
- if (gtarget == null || gcatcher == null) throw new InternalError();
- MethodHandle ginvoker = GuardWithCatch.VARARGS_INVOKE.bindReceiver(gguard);
-- return makeCollectArguments(ginvoker, ValueConversions.varargsArray(nargs), 0, false);
-+ MethodHandle gcollect = makeCollectArguments(ginvoker, ValueConversions.varargsArray(nargs), 0, false);
-+ return makePairwiseConvert(gcollect, type, 2);
- }
- }
-
---- ./jdk/src/share/classes/java/lang/ref/Finalizer.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/lang/ref/Finalizer.java Wed May 07 19:26:47 2014 -0700
-@@ -27,17 +27,14 @@
-
- import java.security.PrivilegedAction;
- import java.security.AccessController;
--
-+import sun.misc.JavaLangAccess;
-+import sun.misc.SharedSecrets;
-+import sun.misc.VM;
-
- final class Finalizer extends FinalReference { /* Package-private; must be in
- same package as the Reference
- class */
-
-- /* A native method that invokes an arbitrary object's finalize method is
-- required since the finalize method is protected
-- */
-- static native void invokeFinalizeMethod(Object o) throws Throwable;
--
- private static ReferenceQueue queue = new ReferenceQueue();
- private static Finalizer unfinalized = null;
- private static final Object lock = new Object();
-@@ -90,7 +87,7 @@
- new Finalizer(finalizee);
- }
-
-- private void runFinalizer() {
-+ private void runFinalizer(JavaLangAccess jla) {
- synchronized (this) {
- if (hasBeenFinalized()) return;
- remove();
-@@ -98,7 +95,8 @@
- try {
- Object finalizee = this.get();
- if (finalizee != null && !(finalizee instanceof java.lang.Enum)) {
-- invokeFinalizeMethod(finalizee);
-+ jla.invokeFinalize(finalizee);
-+
- /* Clear stack slot containing this variable, to decrease
- the chances of false retention with a conservative GC */
- finalizee = null;
-@@ -141,16 +139,21 @@
-
- /* Called by Runtime.runFinalization() */
- static void runFinalization() {
-+ if (!VM.isBooted()) {
-+ return;
-+ }
-+
- forkSecondaryFinalizer(new Runnable() {
- private volatile boolean running;
- public void run() {
- if (running)
- return;
-+ final JavaLangAccess jla = SharedSecrets.getJavaLangAccess();
- running = true;
- for (;;) {
- Finalizer f = (Finalizer)queue.poll();
- if (f == null) break;
-- f.runFinalizer();
-+ f.runFinalizer(jla);
- }
- }
- });
-@@ -158,11 +161,16 @@
-
- /* Invoked by java.lang.Shutdown */
- static void runAllFinalizers() {
-+ if (!VM.isBooted()) {
-+ return;
-+ }
-+
- forkSecondaryFinalizer(new Runnable() {
- private volatile boolean running;
- public void run() {
- if (running)
- return;
-+ final JavaLangAccess jla = SharedSecrets.getJavaLangAccess();
- running = true;
- for (;;) {
- Finalizer f;
-@@ -171,7 +179,7 @@
- if (f == null) break;
- unfinalized = f.next;
- }
-- f.runFinalizer();
-+ f.runFinalizer(jla);
- }}});
- }
-
-@@ -183,13 +191,25 @@
- public void run() {
- if (running)
- return;
-+
-+ // Finalizer thread starts before System.initializeSystemClass
-+ // is called. Wait until JavaLangAccess is available
-+ while (!VM.isBooted()) {
-+ // delay until VM completes initialization
-+ try {
-+ VM.awaitBooted();
-+ } catch (InterruptedException x) {
-+ // ignore and continue
-+ }
-+ }
-+ final JavaLangAccess jla = SharedSecrets.getJavaLangAccess();
- running = true;
- for (;;) {
- try {
- Finalizer f = (Finalizer)queue.remove();
-- f.runFinalizer();
-+ f.runFinalizer(jla);
- } catch (InterruptedException x) {
-- continue;
-+ // ignore and continue
- }
- }
- }
---- ./jdk/src/share/classes/java/lang/reflect/Proxy.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/lang/reflect/Proxy.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1999, 2013, 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
-@@ -25,19 +25,15 @@
-
- package java.lang.reflect;
-
--import java.lang.ref.Reference;
- import java.lang.ref.WeakReference;
-+import java.lang.reflect.WeakCache.BiFunction;
- import java.security.AccessController;
- import java.security.Permission;
- import java.security.PrivilegedAction;
- import java.util.Arrays;
--import java.util.Collections;
--import java.util.HashMap;
--import java.util.HashSet;
-+import java.util.IdentityHashMap;
- import java.util.Map;
--import java.util.Set;
--import java.util.List;
--import java.util.WeakHashMap;
-+import java.util.concurrent.atomic.AtomicLong;
- import sun.misc.ProxyGenerator;
- import sun.reflect.CallerSensitive;
- import sun.reflect.Reflection;
-@@ -230,27 +226,15 @@
-
- private static final long serialVersionUID = -2222568056686623797L;
-
-- /** prefix for all proxy class names */
-- private final static String proxyClassNamePrefix = "$Proxy";
--
- /** parameter types of a proxy class constructor */
-- private final static Class[] constructorParams =
-+ private static final Class<?>[] constructorParams =
- { InvocationHandler.class };
-
-- /** maps a class loader to the proxy class cache for that loader */
-- private static Map<ClassLoader, Map<List<String>, Object>> loaderToCache
-- = new WeakHashMap<>();
--
-- /** marks that a particular proxy class is currently being generated */
-- private static Object pendingGenerationMarker = new Object();
--
-- /** next number to use for generation of unique proxy class names */
-- private static long nextUniqueNumber = 0;
-- private static Object nextUniqueNumberLock = new Object();
--
-- /** set of all generated proxy classes, for isProxyClass implementation */
-- private static Map<Class<?>, Void> proxyClasses =
-- Collections.synchronizedMap(new WeakHashMap<Class<?>, Void>());
-+ /**
-+ * a cache of proxy classes
-+ */
-+ private static final WeakCache<ClassLoader, Class<?>[], Class<?>>
-+ proxyClassCache = new WeakCache<>(new KeyFactory(), new ProxyClassFactory());
-
- /**
- * the invocation handler for this proxy instance.
-@@ -464,131 +448,190 @@
- throw new IllegalArgumentException("interface limit exceeded");
- }
-
-- Class<?> proxyClass = null;
-+ // If the proxy class defined by the given loader implementing
-+ // the given interfaces exists, this will simply return the cached copy;
-+ // otherwise, it will create the proxy class via the ProxyClassFactory
-+ return proxyClassCache.get(loader, interfaces);
-+ }
-
-- /* collect interface names to use as key for proxy class cache */
-- String[] interfaceNames = new String[interfaces.length];
-+ /*
-+ * a key used for proxy class with 0 implemented interfaces
-+ */
-+ private static final Object key0 = new Object();
-
-- // for detecting duplicates
-- Set<Class<?>> interfaceSet = new HashSet<>();
-+ /*
-+ * Key1 and Key2 are optimized for the common use of dynamic proxies
-+ * that implement 1 or 2 interfaces.
-+ */
-
-- for (int i = 0; i < interfaces.length; i++) {
-- /*
-- * Verify that the class loader resolves the name of this
-- * interface to the same Class object.
-- */
-- String interfaceName = interfaces[i].getName();
-- Class<?> interfaceClass = null;
-- try {
-- interfaceClass = Class.forName(interfaceName, false, loader);
-- } catch (ClassNotFoundException e) {
-+ /*
-+ * a key used for proxy class with 1 implemented interface
-+ */
-+ private static final class Key1 extends WeakReference<Class<?>> {
-+ private final int hash;
-+
-+ Key1(Class<?> intf) {
-+ super(intf);
-+ this.hash = intf.hashCode();
-+ }
-+
-+ @Override
-+ public int hashCode() {
-+ return hash;
-+ }
-+
-+ @Override
-+ public boolean equals(Object obj) {
-+ Class<?> intf;
-+ return this == obj ||
-+ obj != null &&
-+ obj.getClass() == Key1.class &&
-+ (intf = get()) != null &&
-+ intf == ((Key1) obj).get();
-+ }
-+ }
-+
-+ /*
-+ * a key used for proxy class with 2 implemented interfaces
-+ */
-+ private static final class Key2 extends WeakReference<Class<?>> {
-+ private final int hash;
-+ private final WeakReference<Class<?>> ref2;
-+
-+ Key2(Class<?> intf1, Class<?> intf2) {
-+ super(intf1);
-+ hash = 31 * intf1.hashCode() + intf2.hashCode();
-+ ref2 = new WeakReference<Class<?>>(intf2);
-+ }
-+
-+ @Override
-+ public int hashCode() {
-+ return hash;
-+ }
-+
-+ @Override
-+ public boolean equals(Object obj) {
-+ Class<?> intf1, intf2;
-+ return this == obj ||
-+ obj != null &&
-+ obj.getClass() == Key2.class &&
-+ (intf1 = get()) != null &&
-+ intf1 == ((Key2) obj).get() &&
-+ (intf2 = ref2.get()) != null &&
-+ intf2 == ((Key2) obj).ref2.get();
-+ }
-+ }
-+
-+ /*
-+ * a key used for proxy class with any number of implemented interfaces
-+ * (used here for 3 or more only)
-+ */
-+ private static final class KeyX {
-+ private final int hash;
-+ private final WeakReference<Class<?>>[] refs;
-+
-+ KeyX(Class<?>[] interfaces) {
-+ hash = Arrays.hashCode(interfaces);
-+ refs = new WeakReference[interfaces.length];
-+ for (int i = 0; i < interfaces.length; i++) {
-+ refs[i] = new WeakReference(interfaces[i]);
- }
-- if (interfaceClass != interfaces[i]) {
-- throw new IllegalArgumentException(
-- interfaces[i] + " is not visible from class loader");
-+ }
-+
-+ @Override
-+ public int hashCode() {
-+ return hash;
-+ }
-+
-+ @Override
-+ public boolean equals(Object obj) {
-+ return this == obj ||
-+ obj != null &&
-+ obj.getClass() == KeyX.class &&
-+ equals(refs, ((KeyX) obj).refs);
-+ }
-+
-+ private static boolean equals(WeakReference<Class<?>>[] refs1,
-+ WeakReference<Class<?>>[] refs2) {
-+ if (refs1.length != refs2.length) {
-+ return false;
-+ }
-+ for (int i = 0; i < refs1.length; i++) {
-+ Class<?> intf = refs1[i].get();
-+ if (intf == null || intf != refs2[i].get()) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+ }
-+
-+ /**
-+ * A function that maps an array of interfaces to an optimal key where
-+ * Class objects representing interfaces are weakly referenced.
-+ */
-+ private static final class KeyFactory
-+ implements BiFunction<ClassLoader, Class<?>[], Object>
-+ {
-+ @Override
-+ public Object apply(ClassLoader classLoader, Class<?>[] interfaces) {
-+ switch (interfaces.length) {
-+ case 1: return new Key1(interfaces[0]); // the most frequent
-+ case 2: return new Key2(interfaces[0], interfaces[1]);
-+ case 0: return key0;
-+ default: return new KeyX(interfaces);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * A factory function that generates, defines and returns the proxy class given
-+ * the ClassLoader and array of interfaces.
-+ */
-+ private static final class ProxyClassFactory
-+ implements BiFunction<ClassLoader, Class<?>[], Class<?>>
-+ {
-+ // prefix for all proxy class names
-+ private static final String proxyClassNamePrefix = "$Proxy";
-+
-+ // next number to use for generation of unique proxy class names
-+ private static final AtomicLong nextUniqueNumber = new AtomicLong();
-+
-+ @Override
-+ public Class<?> apply(ClassLoader loader, Class<?>[] interfaces) {
-+
-+ Map<Class<?>, Boolean> interfaceSet = new IdentityHashMap<>(interfaces.length);
-+ for (Class<?> intf : interfaces) {
-+ /*
-+ * Verify that the class loader resolves the name of this
-+ * interface to the same Class object.
-+ */
-+ Class<?> interfaceClass = null;
-+ try {
-+ interfaceClass = Class.forName(intf.getName(), false, loader);
-+ } catch (ClassNotFoundException e) {
-+ }
-+ if (interfaceClass != intf) {
-+ throw new IllegalArgumentException(
-+ intf + " is not visible from class loader");
-+ }
-+ /*
-+ * Verify that the Class object actually represents an
-+ * interface.
-+ */
-+ if (!interfaceClass.isInterface()) {
-+ throw new IllegalArgumentException(
-+ interfaceClass.getName() + " is not an interface");
-+ }
-+ /*
-+ * Verify that this interface is not a duplicate.
-+ */
-+ if (interfaceSet.put(interfaceClass, Boolean.TRUE) != null) {
-+ throw new IllegalArgumentException(
-+ "repeated interface: " + interfaceClass.getName());
-+ }
- }
-
-- /*
-- * Verify that the Class object actually represents an
-- * interface.
-- */
-- if (!interfaceClass.isInterface()) {
-- throw new IllegalArgumentException(
-- interfaceClass.getName() + " is not an interface");
-- }
--
-- /*
-- * Verify that this interface is not a duplicate.
-- */
-- if (interfaceSet.contains(interfaceClass)) {
-- throw new IllegalArgumentException(
-- "repeated interface: " + interfaceClass.getName());
-- }
-- interfaceSet.add(interfaceClass);
--
-- interfaceNames[i] = interfaceName;
-- }
--
-- /*
-- * Using string representations of the proxy interfaces as
-- * keys in the proxy class cache (instead of their Class
-- * objects) is sufficient because we require the proxy
-- * interfaces to be resolvable by name through the supplied
-- * class loader, and it has the advantage that using a string
-- * representation of a class makes for an implicit weak
-- * reference to the class.
-- */
-- List<String> key = Arrays.asList(interfaceNames);
--
-- /*
-- * Find or create the proxy class cache for the class loader.
-- */
-- Map<List<String>, Object> cache;
-- synchronized (loaderToCache) {
-- cache = loaderToCache.get(loader);
-- if (cache == null) {
-- cache = new HashMap<>();
-- loaderToCache.put(loader, cache);
-- }
-- /*
-- * This mapping will remain valid for the duration of this
-- * method, without further synchronization, because the mapping
-- * will only be removed if the class loader becomes unreachable.
-- */
-- }
--
-- /*
-- * Look up the list of interfaces in the proxy class cache using
-- * the key. This lookup will result in one of three possible
-- * kinds of values:
-- * null, if there is currently no proxy class for the list of
-- * interfaces in the class loader,
-- * the pendingGenerationMarker object, if a proxy class for the
-- * list of interfaces is currently being generated,
-- * or a weak reference to a Class object, if a proxy class for
-- * the list of interfaces has already been generated.
-- */
-- synchronized (cache) {
-- /*
-- * Note that we need not worry about reaping the cache for
-- * entries with cleared weak references because if a proxy class
-- * has been garbage collected, its class loader will have been
-- * garbage collected as well, so the entire cache will be reaped
-- * from the loaderToCache map.
-- */
-- do {
-- Object value = cache.get(key);
-- if (value instanceof Reference) {
-- proxyClass = (Class<?>) ((Reference) value).get();
-- }
-- if (proxyClass != null) {
-- // proxy class already generated: return it
-- return proxyClass;
-- } else if (value == pendingGenerationMarker) {
-- // proxy class being generated: wait for it
-- try {
-- cache.wait();
-- } catch (InterruptedException e) {
-- /*
-- * The class generation that we are waiting for should
-- * take a small, bounded time, so we can safely ignore
-- * thread interrupts here.
-- */
-- }
-- continue;
-- } else {
-- /*
-- * No proxy class for this list of interfaces has been
-- * generated or is being generated, so we will go and
-- * generate it now. Mark it as pending generation.
-- */
-- cache.put(key, pendingGenerationMarker);
-- break;
-- }
-- } while (true);
-- }
--
-- try {
- String proxyPkg = null; // package to define proxy class in
-
- /*
-@@ -596,10 +639,10 @@
- * proxy class will be defined in the same package. Verify that
- * all non-public proxy interfaces are in the same package.
- */
-- for (int i = 0; i < interfaces.length; i++) {
-- int flags = interfaces[i].getModifiers();
-+ for (Class<?> intf : interfaces) {
-+ int flags = intf.getModifiers();
- if (!Modifier.isPublic(flags)) {
-- String name = interfaces[i].getName();
-+ String name = intf.getName();
- int n = name.lastIndexOf('.');
- String pkg = ((n == -1) ? "" : name.substring(0, n + 1));
- if (proxyPkg == null) {
-@@ -616,60 +659,31 @@
- proxyPkg = ReflectUtil.PROXY_PACKAGE + ".";
- }
-
-- {
-+ /*
-+ * Choose a name for the proxy class to generate.
-+ */
-+ long num = nextUniqueNumber.getAndIncrement();
-+ String proxyName = proxyPkg + proxyClassNamePrefix + num;
-+
-+ /*
-+ * Generate the specified proxy class.
-+ */
-+ byte[] proxyClassFile = ProxyGenerator.generateProxyClass(
-+ proxyName, interfaces);
-+ try {
-+ return defineClass0(loader, proxyName,
-+ proxyClassFile, 0, proxyClassFile.length);
-+ } catch (ClassFormatError e) {
- /*
-- * Choose a name for the proxy class to generate.
-+ * A ClassFormatError here means that (barring bugs in the
-+ * proxy class generation code) there was some other
-+ * invalid aspect of the arguments supplied to the proxy
-+ * class creation (such as virtual machine limitations
-+ * exceeded).
- */
-- long num;
-- synchronized (nextUniqueNumberLock) {
-- num = nextUniqueNumber++;
-- }
-- String proxyName = proxyPkg + proxyClassNamePrefix + num;
-- /*
-- * Verify that the class loader hasn't already
-- * defined a class with the chosen name.
-- */
--
-- /*
-- * Generate the specified proxy class.
-- */
-- byte[] proxyClassFile = ProxyGenerator.generateProxyClass(
-- proxyName, interfaces);
-- try {
-- proxyClass = defineClass0(loader, proxyName,
-- proxyClassFile, 0, proxyClassFile.length);
-- } catch (ClassFormatError e) {
-- /*
-- * A ClassFormatError here means that (barring bugs in the
-- * proxy class generation code) there was some other
-- * invalid aspect of the arguments supplied to the proxy
-- * class creation (such as virtual machine limitations
-- * exceeded).
-- */
-- throw new IllegalArgumentException(e.toString());
-- }
-- }
-- // add to set of all generated proxy classes, for isProxyClass
-- proxyClasses.put(proxyClass, null);
--
-- } finally {
-- /*
-- * We must clean up the "pending generation" state of the proxy
-- * class cache entry somehow. If a proxy class was successfully
-- * generated, store it in the cache (with a weak reference);
-- * otherwise, remove the reserved entry. In all cases, notify
-- * all waiters on reserved entries in this cache.
-- */
-- synchronized (cache) {
-- if (proxyClass != null) {
-- cache.put(key, new WeakReference<Class<?>>(proxyClass));
-- } else {
-- cache.remove(key);
-- }
-- cache.notifyAll();
-+ throw new IllegalArgumentException(e.toString());
- }
- }
-- return proxyClass;
- }
-
- /**
-@@ -773,11 +787,7 @@
- * @throws NullPointerException if {@code cl} is {@code null}
- */
- public static boolean isProxyClass(Class<?> cl) {
-- if (cl == null) {
-- throw new NullPointerException();
-- }
--
-- return proxyClasses.containsKey(cl);
-+ return Proxy.class.isAssignableFrom(cl) && proxyClassCache.containsValue(cl);
- }
-
- /**
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/src/share/classes/java/lang/reflect/WeakCache.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,393 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+package java.lang.reflect;
-+
-+import java.lang.ref.ReferenceQueue;
-+import java.lang.ref.WeakReference;
-+import java.util.Objects;
-+import java.util.concurrent.ConcurrentHashMap;
-+import java.util.concurrent.ConcurrentMap;
-+
-+/**
-+ * Cache mapping pairs of {@code (key, sub-key) -> value}. Keys and values are
-+ * weakly but sub-keys are strongly referenced. Keys are passed directly to
-+ * {@link #get} method which also takes a {@code parameter}. Sub-keys are
-+ * calculated from keys and parameters using the {@code subKeyFactory} function
-+ * passed to the constructor. Values are calculated from keys and parameters
-+ * using the {@code valueFactory} function passed to the constructor.
-+ * Keys can be {@code null} and are compared by identity while sub-keys returned by
-+ * {@code subKeyFactory} or values returned by {@code valueFactory}
-+ * can not be null. Sub-keys are compared using their {@link #equals} method.
-+ * Entries are expunged from cache lazily on each invocation to {@link #get},
-+ * {@link #containsValue} or {@link #size} methods when the WeakReferences to
-+ * keys are cleared. Cleared WeakReferences to individual values don't cause
-+ * expunging, but such entries are logically treated as non-existent and
-+ * trigger re-evaluation of {@code valueFactory} on request for their
-+ * key/subKey.
-+ *
-+ * @author Peter Levart
-+ * @param <K> type of keys
-+ * @param <P> type of parameters
-+ * @param <V> type of values
-+ */
-+final class WeakCache<K, P, V> {
-+
-+ interface BiFunction<T, U, R> {
-+
-+ /**
-+ * Applies this function to the given arguments.
-+ *
-+ * @param t the first function argument
-+ * @param u the second function argument
-+ * @return the function result
-+ */
-+ R apply(T t, U u);
-+ }
-+
-+ interface Supplier<T> {
-+ T get();
-+ }
-+
-+ private final ReferenceQueue<K> refQueue
-+ = new ReferenceQueue<>();
-+ // the key type is Object for supporting null key
-+ private final ConcurrentMap<Object, ConcurrentMap<Object, Supplier<V>>> map
-+ = new ConcurrentHashMap<>();
-+ private final ConcurrentMap<Supplier<V>, Boolean> reverseMap
-+ = new ConcurrentHashMap<>();
-+ private final BiFunction<K, P, ?> subKeyFactory;
-+ private final BiFunction<K, P, V> valueFactory;
-+
-+ /**
-+ * Construct an instance of {@code WeakCache}
-+ *
-+ * @param subKeyFactory a function mapping a pair of
-+ * {@code (key, parameter) -> sub-key}
-+ * @param valueFactory a function mapping a pair of
-+ * {@code (key, parameter) -> value}
-+ * @throws NullPointerException if {@code subKeyFactory} or
-+ * {@code valueFactory} is null.
-+ */
-+ public WeakCache(BiFunction<K, P, ?> subKeyFactory,
-+ BiFunction<K, P, V> valueFactory) {
-+ this.subKeyFactory = Objects.requireNonNull(subKeyFactory);
-+ this.valueFactory = Objects.requireNonNull(valueFactory);
-+ }
-+
-+ /**
-+ * Look-up the value through the cache. This always evaluates the
-+ * {@code subKeyFactory} function and optionally evaluates
-+ * {@code valueFactory} function if there is no entry in the cache for given
-+ * pair of (key, subKey) or the entry has already been cleared.
-+ *
-+ * @param key possibly null key
-+ * @param parameter parameter used together with key to create sub-key and
-+ * value (should not be null)
-+ * @return the cached value (never null)
-+ * @throws NullPointerException if {@code parameter} passed in or
-+ * {@code sub-key} calculated by
-+ * {@code subKeyFactory} or {@code value}
-+ * calculated by {@code valueFactory} is null.
-+ */
-+ public V get(K key, P parameter) {
-+ Objects.requireNonNull(parameter);
-+
-+ expungeStaleEntries();
-+
-+ Object cacheKey = CacheKey.valueOf(key, refQueue);
-+
-+ // lazily install the 2nd level valuesMap for the particular cacheKey
-+ ConcurrentMap<Object, Supplier<V>> valuesMap = map.get(cacheKey);
-+ if (valuesMap == null) {
-+ ConcurrentMap<Object, Supplier<V>> oldValuesMap
-+ = map.putIfAbsent(cacheKey,
-+ valuesMap = new ConcurrentHashMap<>());
-+ if (oldValuesMap != null) {
-+ valuesMap = oldValuesMap;
-+ }
-+ }
-+
-+ // create subKey and retrieve the possible Supplier<V> stored by that
-+ // subKey from valuesMap
-+ Object subKey = Objects.requireNonNull(subKeyFactory.apply(key, parameter));
-+ Supplier<V> supplier = valuesMap.get(subKey);
-+ Factory factory = null;
-+
-+ while (true) {
-+ if (supplier != null) {
-+ // supplier might be a Factory or a CacheValue<V> instance
-+ V value = supplier.get();
-+ if (value != null) {
-+ return value;
-+ }
-+ }
-+ // else no supplier in cache
-+ // or a supplier that returned null (could be a cleared CacheValue
-+ // or a Factory that wasn't successful in installing the CacheValue)
-+
-+ // lazily construct a Factory
-+ if (factory == null) {
-+ factory = new Factory(key, parameter, subKey, valuesMap);
-+ }
-+
-+ if (supplier == null) {
-+ supplier = valuesMap.putIfAbsent(subKey, factory);
-+ if (supplier == null) {
-+ // successfully installed Factory
-+ supplier = factory;
-+ }
-+ // else retry with winning supplier
-+ } else {
-+ if (valuesMap.replace(subKey, supplier, factory)) {
-+ // successfully replaced
-+ // cleared CacheEntry / unsuccessful Factory
-+ // with our Factory
-+ supplier = factory;
-+ } else {
-+ // retry with current supplier
-+ supplier = valuesMap.get(subKey);
-+ }
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Checks whether the specified non-null value is already present in this
-+ * {@code WeakCache}. The check is made using identity comparison regardless
-+ * of whether value's class overrides {@link Object#equals} or not.
-+ *
-+ * @param value the non-null value to check
-+ * @return true if given {@code value} is already cached
-+ * @throws NullPointerException if value is null
-+ */
-+ public boolean containsValue(V value) {
-+ Objects.requireNonNull(value);
-+
-+ expungeStaleEntries();
-+ return reverseMap.containsKey(new LookupValue<>(value));
-+ }
-+
-+ /**
-+ * Returns the current number of cached entries that
-+ * can decrease over time when keys/values are GC-ed.
-+ */
-+ public int size() {
-+ expungeStaleEntries();
-+ return reverseMap.size();
-+ }
-+
-+ private void expungeStaleEntries() {
-+ CacheKey<K> cacheKey;
-+ while ((cacheKey = (CacheKey<K>)refQueue.poll()) != null) {
-+ cacheKey.expungeFrom(map, reverseMap);
-+ }
-+ }
-+
-+ /**
-+ * A factory {@link Supplier} that implements the lazy synchronized
-+ * construction of the value and installment of it into the cache.
-+ */
-+ private final class Factory implements Supplier<V> {
-+
-+ private final K key;
-+ private final P parameter;
-+ private final Object subKey;
-+ private final ConcurrentMap<Object, Supplier<V>> valuesMap;
-+
-+ Factory(K key, P parameter, Object subKey,
-+ ConcurrentMap<Object, Supplier<V>> valuesMap) {
-+ this.key = key;
-+ this.parameter = parameter;
-+ this.subKey = subKey;
-+ this.valuesMap = valuesMap;
-+ }
-+
-+ @Override
-+ public synchronized V get() { // serialize access
-+ // re-check
-+ Supplier<V> supplier = valuesMap.get(subKey);
-+ if (supplier != this) {
-+ // something changed while we were waiting:
-+ // might be that we were replaced by a CacheValue
-+ // or were removed because of failure ->
-+ // return null to signal WeakCache.get() to retry
-+ // the loop
-+ return null;
-+ }
-+ // else still us (supplier == this)
-+
-+ // create new value
-+ V value = null;
-+ try {
-+ value = Objects.requireNonNull(valueFactory.apply(key, parameter));
-+ } finally {
-+ if (value == null) { // remove us on failure
-+ valuesMap.remove(subKey, this);
-+ }
-+ }
-+ // the only path to reach here is with non-null value
-+ assert value != null;
-+
-+ // wrap value with CacheValue (WeakReference)
-+ CacheValue<V> cacheValue = new CacheValue<>(value);
-+
-+ // try replacing us with CacheValue (this should always succeed)
-+ if (valuesMap.replace(subKey, this, cacheValue)) {
-+ // put also in reverseMap
-+ reverseMap.put(cacheValue, Boolean.TRUE);
-+ } else {
-+ throw new AssertionError("Should not reach here");
-+ }
-+
-+ // successfully replaced us with new CacheValue -> return the value
-+ // wrapped by it
-+ return value;
-+ }
-+ }
-+
-+ /**
-+ * Common type of value suppliers that are holding a referent.
-+ * The {@link #equals} and {@link #hashCode} of implementations is defined
-+ * to compare the referent by identity.
-+ */
-+ private interface Value<V> extends Supplier<V> {}
-+
-+ /**
-+ * An optimized {@link Value} used to look-up the value in
-+ * {@link WeakCache#containsValue} method so that we are not
-+ * constructing the whole {@link CacheValue} just to look-up the referent.
-+ */
-+ private static final class LookupValue<V> implements Value<V> {
-+ private final V value;
-+
-+ LookupValue(V value) {
-+ this.value = value;
-+ }
-+
-+ @Override
-+ public V get() {
-+ return value;
-+ }
-+
-+ @Override
-+ public int hashCode() {
-+ return System.identityHashCode(value); // compare by identity
-+ }
-+
-+ @Override
-+ public boolean equals(Object obj) {
-+ return obj == this ||
-+ obj instanceof Value &&
-+ this.value == ((Value<?>) obj).get(); // compare by identity
-+ }
-+ }
-+
-+ /**
-+ * A {@link Value} that weakly references the referent.
-+ */
-+ private static final class CacheValue<V>
-+ extends WeakReference<V> implements Value<V>
-+ {
-+ private final int hash;
-+
-+ CacheValue(V value) {
-+ super(value);
-+ this.hash = System.identityHashCode(value); // compare by identity
-+ }
-+
-+ @Override
-+ public int hashCode() {
-+ return hash;
-+ }
-+
-+ @Override
-+ public boolean equals(Object obj) {
-+ V value;
-+ return obj == this ||
-+ obj instanceof Value &&
-+ // cleared CacheValue is only equal to itself
-+ (value = get()) != null &&
-+ value == ((Value<?>) obj).get(); // compare by identity
-+ }
-+ }
-+
-+ /**
-+ * CacheKey containing a weakly referenced {@code key}. It registers
-+ * itself with the {@code refQueue} so that it can be used to expunge
-+ * the entry when the {@link WeakReference} is cleared.
-+ */
-+ private static final class CacheKey<K> extends WeakReference<K> {
-+
-+ // a replacement for null keys
-+ private static final Object NULL_KEY = new Object();
-+
-+ static <K> Object valueOf(K key, ReferenceQueue<K> refQueue) {
-+ return key == null
-+ // null key means we can't weakly reference it,
-+ // so we use a NULL_KEY singleton as cache key
-+ ? NULL_KEY
-+ // non-null key requires wrapping with a WeakReference
-+ : new CacheKey<>(key, refQueue);
-+ }
-+
-+ private final int hash;
-+
-+ private CacheKey(K key, ReferenceQueue<K> refQueue) {
-+ super(key, refQueue);
-+ this.hash = System.identityHashCode(key); // compare by identity
-+ }
-+
-+ @Override
-+ public int hashCode() {
-+ return hash;
-+ }
-+
-+ @Override
-+ public boolean equals(Object obj) {
-+ K key;
-+ return obj == this ||
-+ obj != null &&
-+ obj.getClass() == this.getClass() &&
-+ // cleared CacheKey is only equal to itself
-+ (key = this.get()) != null &&
-+ // compare key by identity
-+ key == ((CacheKey<K>) obj).get();
-+ }
-+
-+ void expungeFrom(ConcurrentMap<?, ? extends ConcurrentMap<?, ?>> map,
-+ ConcurrentMap<?, Boolean> reverseMap) {
-+ // removing just by key is always safe here because after a CacheKey
-+ // is cleared and enqueue-ed it is only equal to itself
-+ // (see equals method)...
-+ ConcurrentMap<?, ?> valuesMap = map.remove(this);
-+ // remove also from reverseMap if needed
-+ if (valuesMap != null) {
-+ for (Object cacheValue : valuesMap.values()) {
-+ reverseMap.remove(cacheValue);
-+ }
-+ }
-+ }
-+ }
-+}
---- ./jdk/src/share/classes/java/net/IDN.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/net/IDN.java Wed May 07 19:26:47 2014 -0700
-@@ -271,13 +271,17 @@
- if (useSTD3ASCIIRules) {
- for (int i = 0; i < dest.length(); i++) {
- int c = dest.charAt(i);
-- if (!isLDHChar(c)) {
-- throw new IllegalArgumentException("Contains non-LDH characters");
-+ if (isNonLDHAsciiCodePoint(c)) {
-+ throw new IllegalArgumentException(
-+ "Contains non-LDH ASCII characters");
- }
- }
-
-- if (dest.charAt(0) == '-' || dest.charAt(dest.length() - 1) == '-') {
-- throw new IllegalArgumentException("Has leading or trailing hyphen");
-+ if (dest.charAt(0) == '-' ||
-+ dest.charAt(dest.length() - 1) == '-') {
-+
-+ throw new IllegalArgumentException(
-+ "Has leading or trailing hyphen");
- }
- }
-
-@@ -380,26 +384,20 @@
- //
- // LDH stands for "letter/digit/hyphen", with characters restricted to the
- // 26-letter Latin alphabet <A-Z a-z>, the digits <0-9>, and the hyphen
-- // <->
-- // non-LDH = 0..0x2C, 0x2E..0x2F, 0x3A..0x40, 0x56..0x60, 0x7B..0x7F
-+ // <->.
-+ // Non LDH refers to characters in the ASCII range, but which are not
-+ // letters, digits or the hypen.
- //
-- private static boolean isLDHChar(int ch){
-- // high runner case
-- if(ch > 0x007A){
-- return false;
-- }
-- //['-' '0'..'9' 'A'..'Z' 'a'..'z']
-- if((ch == 0x002D) ||
-- (0x0030 <= ch && ch <= 0x0039) ||
-- (0x0041 <= ch && ch <= 0x005A) ||
-- (0x0061 <= ch && ch <= 0x007A)
-- ){
-- return true;
-- }
-- return false;
-+ // non-LDH = 0..0x2C, 0x2E..0x2F, 0x3A..0x40, 0x5B..0x60, 0x7B..0x7F
-+ //
-+ private static boolean isNonLDHAsciiCodePoint(int ch){
-+ return (0x0000 <= ch && ch <= 0x002C) ||
-+ (0x002E <= ch && ch <= 0x002F) ||
-+ (0x003A <= ch && ch <= 0x0040) ||
-+ (0x005B <= ch && ch <= 0x0060) ||
-+ (0x007B <= ch && ch <= 0x007F);
- }
-
--
- //
- // search dots in a string and return the index of that character;
- // or if there is no dots, return the length of input string
---- ./jdk/src/share/classes/java/nio/charset/Charset.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/nio/charset/Charset.java Wed May 07 19:26:47 2014 -0700
-@@ -426,39 +426,32 @@
- }
-
- /* The extended set of charsets */
-- private static Object extendedProviderLock = new Object();
-- private static boolean extendedProviderProbed = false;
-- private static CharsetProvider extendedProvider = null;
--
-- private static void probeExtendedProvider() {
-- AccessController.doPrivileged(new PrivilegedAction<Object>() {
-- public Object run() {
-- try {
-- Class epc
-- = Class.forName("sun.nio.cs.ext.ExtendedCharsets");
-- extendedProvider = (CharsetProvider)epc.newInstance();
-- } catch (ClassNotFoundException x) {
-- // Extended charsets not available
-- // (charsets.jar not present)
-- } catch (InstantiationException x) {
-- throw new Error(x);
-- } catch (IllegalAccessException x) {
-- throw new Error(x);
-- }
-- return null;
-- }
-- });
-+ private static class ExtendedProviderHolder {
-+ static final CharsetProvider extendedProvider = extendedProvider();
-+ // returns ExtendedProvider, if installed
-+ private static CharsetProvider extendedProvider() {
-+ return AccessController.doPrivileged(
-+ new PrivilegedAction<CharsetProvider>() {
-+ public CharsetProvider run() {
-+ try {
-+ Class<?> epc
-+ = Class.forName("sun.nio.cs.ext.ExtendedCharsets");
-+ return (CharsetProvider)epc.newInstance();
-+ } catch (ClassNotFoundException x) {
-+ // Extended charsets not available
-+ // (charsets.jar not present)
-+ } catch (InstantiationException |
-+ IllegalAccessException x) {
-+ throw new Error(x);
-+ }
-+ return null;
-+ }
-+ });
-+ }
- }
-
- private static Charset lookupExtendedCharset(String charsetName) {
-- CharsetProvider ecp = null;
-- synchronized (extendedProviderLock) {
-- if (!extendedProviderProbed) {
-- probeExtendedProvider();
-- extendedProviderProbed = true;
-- }
-- ecp = extendedProvider;
-- }
-+ CharsetProvider ecp = ExtendedProviderHolder.extendedProvider;
- return (ecp != null) ? ecp.charsetForName(charsetName) : null;
- }
-
-@@ -588,6 +581,9 @@
- new TreeMap<String,Charset>(
- ASCIICaseInsensitiveComparator.CASE_INSENSITIVE_ORDER);
- put(standardProvider.charsets(), m);
-+ CharsetProvider ecp = ExtendedProviderHolder.extendedProvider;
-+ if (ecp != null)
-+ put(ecp.charsets(), m);
- for (Iterator i = providers(); i.hasNext();) {
- CharsetProvider cp = (CharsetProvider)i.next();
- put(cp.charsets(), m);
---- ./jdk/src/share/classes/java/nio/file/Files.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/nio/file/Files.java Wed May 07 19:26:47 2014 -0700
-@@ -28,6 +28,8 @@
- import java.nio.file.attribute.*;
- import java.nio.file.spi.FileSystemProvider;
- import java.nio.file.spi.FileTypeDetector;
-+import java.nio.channels.Channels;
-+import java.nio.channels.FileChannel;
- import java.nio.channels.SeekableByteChannel;
- import java.io.InputStream;
- import java.io.OutputStream;
-@@ -2896,41 +2898,63 @@
- }
-
- /**
-- * Read all the bytes from an input stream. The {@code initialSize}
-- * parameter indicates the initial size of the byte[] to allocate.
-+ * The maximum size of array to allocate.
-+ * Some VMs reserve some header words in an array.
-+ * Attempts to allocate larger arrays may result in
-+ * OutOfMemoryError: Requested array size exceeds VM limit
-+ */
-+ private static final int MAX_BUFFER_SIZE = Integer.MAX_VALUE - 8;
-+
-+ /**
-+ * Reads all the bytes from an input stream. Uses {@code initialSize} as a hint
-+ * about how many bytes the stream will have.
-+ *
-+ * @param source
-+ * the input stream to read from
-+ * @param initialSize
-+ * the initial size of the byte array to allocate
-+ *
-+ * @return a byte array containing the bytes read from the file
-+ *
-+ * @throws IOException
-+ * if an I/O error occurs reading from the stream
-+ * @throws OutOfMemoryError
-+ * if an array of the required size cannot be allocated
- */
- private static byte[] read(InputStream source, int initialSize)
-- throws IOException
-+ throws IOException
- {
- int capacity = initialSize;
- byte[] buf = new byte[capacity];
- int nread = 0;
-- int rem = buf.length;
- int n;
-- // read to EOF which may read more or less than initialSize (eg: file
-- // is truncated while we are reading)
-- while ((n = source.read(buf, nread, rem)) > 0) {
-- nread += n;
-- rem -= n;
-- assert rem >= 0;
-- if (rem == 0) {
-- // need larger buffer
-- int newCapacity = capacity << 1;
-- if (newCapacity < 0) {
-- if (capacity == Integer.MAX_VALUE)
-- throw new OutOfMemoryError("Required array size too large");
-- newCapacity = Integer.MAX_VALUE;
-- }
-- rem = newCapacity - capacity;
-- buf = Arrays.copyOf(buf, newCapacity);
-- capacity = newCapacity;
-+ for (;;) {
-+ // read to EOF which may read more or less than initialSize (eg: file
-+ // is truncated while we are reading)
-+ while ((n = source.read(buf, nread, capacity - nread)) > 0)
-+ nread += n;
-+
-+ // if last call to source.read() returned -1, we are done
-+ // otherwise, try to read one more byte; if that failed we're done too
-+ if (n < 0 || (n = source.read()) < 0)
-+ break;
-+
-+ // one more byte was read; need to allocate a larger buffer
-+ if (capacity <= MAX_BUFFER_SIZE - capacity) {
-+ capacity = Math.max(capacity << 1, BUFFER_SIZE);
-+ } else {
-+ if (capacity == MAX_BUFFER_SIZE)
-+ throw new OutOfMemoryError("Required array size too large");
-+ capacity = MAX_BUFFER_SIZE;
- }
-+ buf = Arrays.copyOf(buf, capacity);
-+ buf[nread++] = (byte)n;
- }
- return (capacity == nread) ? buf : Arrays.copyOf(buf, nread);
- }
-
- /**
-- * Read all the bytes from a file. The method ensures that the file is
-+ * Reads all the bytes from a file. The method ensures that the file is
- * closed when all bytes have been read or an I/O error, or other runtime
- * exception, is thrown.
- *
-@@ -2954,12 +2978,13 @@
- * method is invoked to check read access to the file.
- */
- public static byte[] readAllBytes(Path path) throws IOException {
-- long size = size(path);
-- if (size > (long)Integer.MAX_VALUE)
-- throw new OutOfMemoryError("Required array size too large");
-+ try (SeekableByteChannel sbc = Files.newByteChannel(path);
-+ InputStream in = Channels.newInputStream(sbc)) {
-+ long size = sbc.size();
-+ if (size > (long)MAX_BUFFER_SIZE)
-+ throw new OutOfMemoryError("Required array size too large");
-
-- try (InputStream in = newInputStream(path)) {
-- return read(in, (int)size);
-+ return read(in, (int)size);
- }
- }
-
---- ./jdk/src/share/classes/java/util/ComparableTimSort.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/util/ComparableTimSort.java Wed May 07 19:26:47 2014 -0700
-@@ -131,7 +131,7 @@
- */
- int stackLen = (len < 120 ? 5 :
- len < 1542 ? 10 :
-- len < 119151 ? 19 : 40);
-+ len < 119151 ? 24 : 40);
- runBase = new int[stackLen];
- runLen = new int[stackLen];
- }
---- ./jdk/src/share/classes/java/util/HashMap.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/util/HashMap.java Wed May 07 19:26:47 2014 -0700
-@@ -300,13 +300,9 @@
-
- private static int roundUpToPowerOf2(int number) {
- // assert number >= 0 : "number must be non-negative";
-- int rounded = number >= MAXIMUM_CAPACITY
-+ return number >= MAXIMUM_CAPACITY
- ? MAXIMUM_CAPACITY
-- : (rounded = Integer.highestOneBit(number)) != 0
-- ? (Integer.bitCount(number) > 1) ? rounded << 1 : rounded
-- : 1;
--
-- return rounded;
-+ : (number > 1) ? Integer.highestOneBit((number - 1) << 1) : 1;
- }
-
- /**
---- ./jdk/src/share/classes/java/util/TimSort.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/util/TimSort.java Wed May 07 19:26:47 2014 -0700
-@@ -158,7 +158,7 @@
- */
- int stackLen = (len < 120 ? 5 :
- len < 1542 ? 10 :
-- len < 119151 ? 19 : 40);
-+ len < 119151 ? 24 : 40);
- runBase = new int[stackLen];
- runLen = new int[stackLen];
- }
---- ./jdk/src/share/classes/java/util/TimeZone.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/util/TimeZone.java Wed May 07 19:26:47 2014 -0700
-@@ -168,7 +168,7 @@
- // TimeZone.setDefault maintains the compatible behavior of the AppContext-based
- // default setting for untrusted code if allowSetDefault is true.
- private static final boolean allowSetDefault = AccessController.doPrivileged(
-- new sun.security.action.GetPropertyAction("jdk.util.TimeZone.allowSetDefault")) != null;
-+ new sun.security.action.GetPropertyAction("jdk.util.TimeZone.allowSetDefault")) != null;
-
- /**
- * Gets the time zone offset, for current date, modified in case of
-@@ -738,17 +738,16 @@
- if (allowSetDefault) {
- // JavaAWTAccess provides access implementation-private methods without using reflection.
- JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess();
-- if (javaAWTAccess == null) {
-+ if (System.getSecurityManager() == null || javaAWTAccess == null) {
- return mainAppContextDefault;
-+ } else if (javaAWTAccess.isDisposed()) {
-+ return null;
- } else {
-- if (!javaAWTAccess.isDisposed()) {
-- TimeZone tz = (TimeZone)
-- javaAWTAccess.get(TimeZone.class);
-- if (tz == null && javaAWTAccess.isMainAppContext()) {
-- return mainAppContextDefault;
-- } else {
-- return tz;
-- }
-+ TimeZone tz = (TimeZone) javaAWTAccess.get(TimeZone.class);
-+ if (tz == null && javaAWTAccess.isMainAppContext()) {
-+ return mainAppContextDefault;
-+ } else {
-+ return tz;
- }
- }
- }
-@@ -770,14 +769,12 @@
- if (allowSetDefault) {
- // JavaAWTAccess provides access implementation-private methods without using reflection.
- JavaAWTAccess javaAWTAccess = SharedSecrets.getJavaAWTAccess();
-- if (javaAWTAccess == null) {
-+ if (System.getSecurityManager() == null || javaAWTAccess == null) {
- mainAppContextDefault = tz;
-- } else {
-- if (!javaAWTAccess.isDisposed()) {
-- javaAWTAccess.put(TimeZone.class, tz);
-- if (javaAWTAccess.isMainAppContext()) {
-- mainAppContextDefault = null;
-- }
-+ } else if (!javaAWTAccess.isDisposed()) {
-+ javaAWTAccess.put(TimeZone.class, tz);
-+ if (javaAWTAccess.isMainAppContext()) {
-+ mainAppContextDefault = null;
- }
- }
- }
---- ./jdk/src/share/classes/java/util/jar/JarFile.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/util/jar/JarFile.java Wed May 07 19:26:47 2014 -0700
-@@ -38,6 +38,7 @@
- import sun.security.action.GetPropertyAction;
- import sun.security.util.ManifestEntryVerifier;
- import sun.misc.SharedSecrets;
-+import sun.security.util.SignatureFileVerifier;
-
- /**
- * The <code>JarFile</code> class is used to read the contents of a jar file
-@@ -329,11 +330,13 @@
- String[] names = getMetaInfEntryNames();
- if (names != null) {
- for (int i = 0; i < names.length; i++) {
-- JarEntry e = getJarEntry(names[i]);
-- if (e == null) {
-- throw new JarException("corrupted jar file");
-- }
-- if (!e.isDirectory()) {
-+ String uname = names[i].toUpperCase(Locale.ENGLISH);
-+ if (MANIFEST_NAME.equals(uname)
-+ || SignatureFileVerifier.isBlockOrSF(uname)) {
-+ JarEntry e = getJarEntry(names[i]);
-+ if (e == null) {
-+ throw new JarException("corrupted jar file");
-+ }
- if (mev == null) {
- mev = new ManifestEntryVerifier
- (getManifestFromReference());
---- ./jdk/src/share/classes/java/util/jar/JarVerifier.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/util/jar/JarVerifier.java Wed May 07 19:26:47 2014 -0700
-@@ -32,6 +32,7 @@
- import java.security.cert.CertificateException;
- import java.util.zip.ZipEntry;
-
-+import sun.misc.JarIndex;
- import sun.security.util.ManifestDigester;
- import sun.security.util.ManifestEntryVerifier;
- import sun.security.util.SignatureFileVerifier;
-@@ -139,13 +140,22 @@
- return;
- }
-
-+ if (uname.equals(JarFile.MANIFEST_NAME) ||
-+ uname.equals(JarIndex.INDEX_NAME)) {
-+ return;
-+ }
-+
- if (SignatureFileVerifier.isBlockOrSF(uname)) {
- /* We parse only DSA, RSA or EC PKCS7 blocks. */
- parsingBlockOrSF = true;
- baos.reset();
- mev.setEntry(null, je);
-+ return;
- }
-- return;
-+
-+ // If a META-INF entry is not MF or block or SF, they should
-+ // be normal entries. According to 2 above, no more block or
-+ // SF will appear. Let's doneWithMeta.
- }
- }
-
---- ./jdk/src/share/classes/java/util/logging/Level.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/util/logging/Level.java Wed May 07 19:26:47 2014 -0700
-@@ -27,6 +27,7 @@
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
-+import java.util.Locale;
- import java.util.Map;
- import java.util.ResourceBundle;
-
-@@ -63,7 +64,7 @@
- */
-
- public class Level implements java.io.Serializable {
-- private static String defaultBundle = "sun.util.logging.resources.logging";
-+ private static final String defaultBundle = "sun.util.logging.resources.logging";
-
- /**
- * @serial The non-localized name of the level.
-@@ -81,7 +82,8 @@
- private final String resourceBundleName;
-
- // localized level name
-- private String localizedLevelName;
-+ private transient String localizedLevelName;
-+ private transient Locale cachedLocale;
-
- /**
- * OFF is a special level that can be used to turn off logging.
-@@ -209,6 +211,7 @@
- this.value = value;
- this.resourceBundleName = resourceBundleName;
- this.localizedLevelName = resourceBundleName == null ? name : null;
-+ this.cachedLocale = null;
- KnownLevel.add(this);
- }
-
-@@ -250,17 +253,71 @@
- return this.name;
- }
-
-- final synchronized String getLocalizedLevelName() {
-+ private String computeLocalizedLevelName(Locale newLocale) {
-+ ResourceBundle rb = ResourceBundle.getBundle(resourceBundleName, newLocale);
-+ final String localizedName = rb.getString(name);
-+
-+ final boolean isDefaultBundle = defaultBundle.equals(resourceBundleName);
-+ if (!isDefaultBundle) return localizedName;
-+
-+ // This is a trick to determine whether the name has been translated
-+ // or not. If it has not been translated, we need to use Locale.ROOT
-+ // when calling toUpperCase().
-+ final Locale rbLocale = rb.getLocale();
-+ final Locale locale =
-+ Locale.ROOT.equals(rbLocale)
-+ || name.equals(localizedName.toUpperCase(Locale.ROOT))
-+ ? Locale.ROOT : rbLocale;
-+
-+ // ALL CAPS in a resource bundle's message indicates no translation
-+ // needed per Oracle translation guideline. To workaround this
-+ // in Oracle JDK implementation, convert the localized level name
-+ // to uppercase for compatibility reason.
-+ return Locale.ROOT.equals(locale) ? name : localizedName.toUpperCase(locale);
-+ }
-+
-+ // Avoid looking up the localizedLevelName twice if we already
-+ // have it.
-+ final String getCachedLocalizedLevelName() {
-+
- if (localizedLevelName != null) {
-- return localizedLevelName;
-+ if (cachedLocale != null) {
-+ if (cachedLocale.equals(Locale.getDefault())) {
-+ // OK: our cached value was looked up with the same
-+ // locale. We can use it.
-+ return localizedLevelName;
-+ }
-+ }
- }
-
-+ if (resourceBundleName == null) {
-+ // No resource bundle: just use the name.
-+ return name;
-+ }
-+
-+ // We need to compute the localized name.
-+ // Either because it's the first time, or because our cached
-+ // value is for a different locale. Just return null.
-+ return null;
-+ }
-+
-+ final synchronized String getLocalizedLevelName() {
-+
-+ // See if we have a cached localized name
-+ final String cachedLocalizedName = getCachedLocalizedLevelName();
-+ if (cachedLocalizedName != null) {
-+ return cachedLocalizedName;
-+ }
-+
-+ // No cached localized name or cache invalid.
-+ // Need to compute the localized name.
-+ final Locale newLocale = Locale.getDefault();
- try {
-- ResourceBundle rb = ResourceBundle.getBundle(resourceBundleName);
-- localizedLevelName = rb.getString(name);
-+ localizedLevelName = computeLocalizedLevelName(newLocale);
- } catch (Exception ex) {
- localizedLevelName = name;
- }
-+ cachedLocale = newLocale;
- return localizedLevelName;
- }
-
-@@ -318,6 +375,7 @@
- *
- * @return the non-localized name of the Level, for example "INFO".
- */
-+ @Override
- public final String toString() {
- return name;
- }
-@@ -420,6 +478,7 @@
- * Compare two objects for value equality.
- * @return true if and only if the two objects have the same level value.
- */
-+ @Override
- public boolean equals(Object ox) {
- try {
- Level lx = (Level)ox;
-@@ -433,6 +492,7 @@
- * Generate a hashcode.
- * @return a hashcode based on the level value
- */
-+ @Override
- public int hashCode() {
- return this.value;
- }
---- ./jdk/src/share/classes/java/util/logging/LogManager.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/util/logging/LogManager.java Wed May 07 19:26:47 2014 -0700
-@@ -149,7 +149,15 @@
- // The global LogManager object
- private static LogManager manager;
-
-- private Properties props = new Properties();
-+ // 'props' is assigned within a lock but accessed without it.
-+ // Declaring it volatile makes sure that another thread will not
-+ // be able to see a partially constructed 'props' object.
-+ // (seeing a partially constructed 'props' object can result in
-+ // NPE being thrown in Hashtable.get(), because it leaves the door
-+ // open for props.getProperties() to be called before the construcor
-+ // of Hashtable is actually completed).
-+ private volatile Properties props = new Properties();
-+
- private PropertyChangeSupport changes
- = new PropertyChangeSupport(LogManager.class);
- private final static Level defaultLevel = Level.INFO;
-@@ -540,7 +548,7 @@
- if (logger == null) {
- // Hashtable holds stale weak reference
- // to a logger which has been GC-ed.
-- removeLogger(name);
-+ ref.dispose();
- }
- return logger;
- }
-@@ -627,7 +635,7 @@
- // It's possible that the Logger was GC'ed after a
- // drainLoggerRefQueueBounded() call so allow
- // a new one to be registered.
-- removeLogger(name);
-+ ref.dispose();
- } else {
- // We already have a registered logger with the given name.
- return false;
-@@ -673,10 +681,10 @@
- return true;
- }
-
-- // note: all calls to removeLogger are synchronized on LogManager's
-- // intrinsic lock
-- void removeLogger(String name) {
-- namedLoggers.remove(name);
-+ synchronized void removeLoggerRef(String name, LoggerWeakRef ref) {
-+ if (namedLoggers.get(name) == ref) {
-+ namedLoggers.remove(name);
-+ }
- }
-
- synchronized Enumeration<String> getLoggerNames() {
-@@ -854,6 +862,7 @@
- private String name; // for namedLoggers cleanup
- private LogNode node; // for loggerRef cleanup
- private WeakReference<Logger> parentRef; // for kids cleanup
-+ private boolean disposed = false; // avoid calling dispose twice
-
- LoggerWeakRef(Logger logger) {
- super(logger, loggerRefQueue);
-@@ -863,14 +872,45 @@
-
- // dispose of this LoggerWeakRef object
- void dispose() {
-- if (node != null) {
-- // if we have a LogNode, then we were a named Logger
-- // so clear namedLoggers weak ref to us
-- node.context.removeLogger(name);
-- name = null; // clear our ref to the Logger's name
-+ // Avoid calling dispose twice. When a Logger is gc'ed, its
-+ // LoggerWeakRef will be enqueued.
-+ // However, a new logger of the same name may be added (or looked
-+ // up) before the queue is drained. When that happens, dispose()
-+ // will be called by addLocalLogger() or findLogger().
-+ // Later when the queue is drained, dispose() will be called again
-+ // for the same LoggerWeakRef. Marking LoggerWeakRef as disposed
-+ // avoids processing the data twice (even though the code should
-+ // now be reentrant).
-+ synchronized(this) {
-+ // Note to maintainers:
-+ // Be careful not to call any method that tries to acquire
-+ // another lock from within this block - as this would surely
-+ // lead to deadlocks, given that dispose() can be called by
-+ // multiple threads, and from within different synchronized
-+ // methods/blocks.
-+ if (disposed) return;
-+ disposed = true;
-+ }
-
-- node.loggerRef = null; // clear LogNode's weak ref to us
-- node = null; // clear our ref to LogNode
-+ final LogNode n = node;
-+ if (n != null) {
-+ // n.loggerRef can only be safely modified from within
-+ // a lock on LoggerContext. removeLoggerRef is already
-+ // synchronized on LoggerContext so calling
-+ // n.context.removeLoggerRef from within this lock is safe.
-+ synchronized (n.context) {
-+ // if we have a LogNode, then we were a named Logger
-+ // so clear namedLoggers weak ref to us
-+ n.context.removeLoggerRef(name, this);
-+ name = null; // clear our ref to the Logger's name
-+
-+ // LogNode may have been reused - so only clear
-+ // LogNode.loggerRef if LogNode.loggerRef == this
-+ if (n.loggerRef == this) {
-+ n.loggerRef = null; // clear LogNode's weak ref to us
-+ }
-+ node = null; // clear our ref to LogNode
-+ }
- }
-
- if (parentRef != null) {
-@@ -923,7 +963,7 @@
- // - maximum: 10.9 ms
- //
- private final static int MAX_ITERATIONS = 400;
-- final synchronized void drainLoggerRefQueueBounded() {
-+ final void drainLoggerRefQueueBounded() {
- for (int i = 0; i < MAX_ITERATIONS; i++) {
- if (loggerRefQueue == null) {
- // haven't finished loading LogManager yet
---- ./jdk/src/share/classes/java/util/logging/Logger.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/java/util/logging/Logger.java Wed May 07 19:26:47 2014 -0700
-@@ -174,7 +174,7 @@
- public class Logger {
- private static final Handler emptyHandlers[] = new Handler[0];
- private static final int offValue = Level.OFF.intValue();
-- private LogManager manager;
-+ private volatile LogManager manager;
- private String name;
- private final CopyOnWriteArrayList<Handler> handlers =
- new CopyOnWriteArrayList<>();
-@@ -1573,6 +1573,9 @@
- if (parent == null) {
- throw new NullPointerException();
- }
-+ if (manager == null) {
-+ manager = LogManager.getLogManager();
-+ }
- manager.checkPermission();
- doSetParent(parent);
- }
---- ./jdk/src/share/classes/javax/management/MBeanAttributeInfo.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/MBeanAttributeInfo.java Wed May 07 19:26:47 2014 -0700
-@@ -30,6 +30,7 @@
-
- import com.sun.jmx.mbeanserver.GetPropertyAction;
- import com.sun.jmx.mbeanserver.Introspector;
-+import java.util.Objects;
-
-
- /**
-@@ -285,10 +286,10 @@
- if (!(o instanceof MBeanAttributeInfo))
- return false;
- MBeanAttributeInfo p = (MBeanAttributeInfo) o;
-- return (p.getName().equals(getName()) &&
-- p.getType().equals(getType()) &&
-- p.getDescription().equals(getDescription()) &&
-- p.getDescriptor().equals(getDescriptor()) &&
-+ return (Objects.equals(p.getName(), getName()) &&
-+ Objects.equals(p.getType(), getType()) &&
-+ Objects.equals(p.getDescription(), getDescription()) &&
-+ Objects.equals(p.getDescriptor(), getDescriptor()) &&
- p.isReadable() == isReadable() &&
- p.isWritable() == isWritable() &&
- p.isIs() == isIs());
-@@ -301,7 +302,7 @@
- right and we needlessly hashed in the description and parameter
- array. */
- public int hashCode() {
-- return getName().hashCode() ^ getType().hashCode();
-+ return Objects.hash(getName(), getType());
- }
-
- private static boolean isIs(Method getter) {
---- ./jdk/src/share/classes/javax/management/MBeanConstructorInfo.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/MBeanConstructorInfo.java Wed May 07 19:26:47 2014 -0700
-@@ -29,6 +29,7 @@
- import java.lang.annotation.Annotation;
- import java.lang.reflect.Constructor;
- import java.util.Arrays;
-+import java.util.Objects;
-
- /**
- * Describes a constructor exposed by an MBean. Instances of this
-@@ -190,10 +191,10 @@
- if (!(o instanceof MBeanConstructorInfo))
- return false;
- MBeanConstructorInfo p = (MBeanConstructorInfo) o;
-- return (p.getName().equals(getName()) &&
-- p.getDescription().equals(getDescription()) &&
-+ return (Objects.equals(p.getName(), getName()) &&
-+ Objects.equals(p.getDescription(), getDescription()) &&
- Arrays.equals(p.fastGetSignature(), fastGetSignature()) &&
-- p.getDescriptor().equals(getDescriptor()));
-+ Objects.equals(p.getDescriptor(), getDescriptor()));
- }
-
- /* Unlike attributes and operations, it's quite likely we'll have
-@@ -203,11 +204,7 @@
- quite long and yet the same between constructors. Likewise for
- the descriptor. */
- public int hashCode() {
-- int hash = getName().hashCode();
-- MBeanParameterInfo[] sig = fastGetSignature();
-- for (int i = 0; i < sig.length; i++)
-- hash ^= sig[i].hashCode();
-- return hash;
-+ return Objects.hash(getName()) ^ Arrays.hashCode(fastGetSignature());
- }
-
- private static MBeanParameterInfo[] constructorSignature(Constructor<?> cn) {
---- ./jdk/src/share/classes/javax/management/MBeanFeatureInfo.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/MBeanFeatureInfo.java Wed May 07 19:26:47 2014 -0700
-@@ -30,6 +30,7 @@
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.io.StreamCorruptedException;
-+import java.util.Objects;
-
- /**
- * <p>Provides general information for an MBean descriptor object.
-@@ -147,9 +148,9 @@
- if (!(o instanceof MBeanFeatureInfo))
- return false;
- MBeanFeatureInfo p = (MBeanFeatureInfo) o;
-- return (p.getName().equals(getName()) &&
-- p.getDescription().equals(getDescription()) &&
-- p.getDescriptor().equals(getDescriptor()));
-+ return (Objects.equals(p.getName(), getName()) &&
-+ Objects.equals(p.getDescription(), getDescription()) &&
-+ Objects.equals(p.getDescriptor(), getDescriptor()));
- }
-
- public int hashCode() {
---- ./jdk/src/share/classes/javax/management/MBeanInfo.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/MBeanInfo.java Wed May 07 19:26:47 2014 -0700
-@@ -36,6 +36,7 @@
- import java.util.WeakHashMap;
- import java.security.AccessController;
- import java.security.PrivilegedAction;
-+import java.util.Objects;
-
- import static javax.management.ImmutableDescriptor.nonNullDescriptor;
-
-@@ -515,24 +516,15 @@
- if (hashCode != 0)
- return hashCode;
-
-- hashCode =
-- getClassName().hashCode() ^
-- getDescriptor().hashCode() ^
-- arrayHashCode(fastGetAttributes()) ^
-- arrayHashCode(fastGetOperations()) ^
-- arrayHashCode(fastGetConstructors()) ^
-- arrayHashCode(fastGetNotifications());
-+ hashCode = Objects.hash(getClassName(), getDescriptor())
-+ ^ Arrays.hashCode(fastGetAttributes())
-+ ^ Arrays.hashCode(fastGetOperations())
-+ ^ Arrays.hashCode(fastGetConstructors())
-+ ^ Arrays.hashCode(fastGetNotifications());
-
- return hashCode;
- }
-
-- private static int arrayHashCode(Object[] array) {
-- int hash = 0;
-- for (int i = 0; i < array.length; i++)
-- hash ^= array[i].hashCode();
-- return hash;
-- }
--
- /**
- * Cached results of previous calls to arrayGettersSafe. This is
- * a WeakHashMap so that we don't prevent a class from being
---- ./jdk/src/share/classes/javax/management/MBeanNotificationInfo.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/MBeanNotificationInfo.java Wed May 07 19:26:47 2014 -0700
-@@ -29,6 +29,7 @@
- import java.io.InvalidObjectException;
- import java.io.ObjectInputStream;
- import java.util.Arrays;
-+import java.util.Objects;
-
- /**
- * <p>The <CODE>MBeanNotificationInfo</CODE> class is used to describe the
-@@ -193,9 +194,9 @@
- if (!(o instanceof MBeanNotificationInfo))
- return false;
- MBeanNotificationInfo p = (MBeanNotificationInfo) o;
-- return (p.getName().equals(getName()) &&
-- p.getDescription().equals(getDescription()) &&
-- p.getDescriptor().equals(getDescriptor()) &&
-+ return (Objects.equals(p.getName(), getName()) &&
-+ Objects.equals(p.getDescription(), getDescription()) &&
-+ Objects.equals(p.getDescriptor(), getDescriptor()) &&
- Arrays.equals(p.fastGetNotifTypes(), fastGetNotifTypes()));
- }
-
---- ./jdk/src/share/classes/javax/management/MBeanOperationInfo.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/MBeanOperationInfo.java Wed May 07 19:26:47 2014 -0700
-@@ -29,6 +29,7 @@
- import java.lang.annotation.Annotation;
- import java.lang.reflect.Method;
- import java.util.Arrays;
-+import java.util.Objects;
-
- /**
- * Describes a management operation exposed by an MBean. Instances of
-@@ -293,12 +294,12 @@
- if (!(o instanceof MBeanOperationInfo))
- return false;
- MBeanOperationInfo p = (MBeanOperationInfo) o;
-- return (p.getName().equals(getName()) &&
-- p.getReturnType().equals(getReturnType()) &&
-- p.getDescription().equals(getDescription()) &&
-+ return (Objects.equals(p.getName(), getName()) &&
-+ Objects.equals(p.getReturnType(), getReturnType()) &&
-+ Objects.equals(p.getDescription(), getDescription()) &&
- p.getImpact() == getImpact() &&
- Arrays.equals(p.fastGetSignature(), fastGetSignature()) &&
-- p.getDescriptor().equals(getDescriptor()));
-+ Objects.equals(p.getDescriptor(), getDescriptor()));
- }
-
- /* We do not include everything in the hashcode. We assume that
-@@ -309,7 +310,7 @@
- parameter array. */
- @Override
- public int hashCode() {
-- return getName().hashCode() ^ getReturnType().hashCode();
-+ return Objects.hash(getName(), getReturnType());
- }
-
- private static MBeanParameterInfo[] methodSignature(Method method) {
---- ./jdk/src/share/classes/javax/management/MBeanParameterInfo.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/MBeanParameterInfo.java Wed May 07 19:26:47 2014 -0700
-@@ -25,6 +25,8 @@
-
- package javax.management;
-
-+import java.util.Objects;
-+
-
- /**
- * Describes an argument of an operation exposed by an MBean.
-@@ -136,13 +138,13 @@
- if (!(o instanceof MBeanParameterInfo))
- return false;
- MBeanParameterInfo p = (MBeanParameterInfo) o;
-- return (p.getName().equals(getName()) &&
-- p.getType().equals(getType()) &&
-- p.getDescription().equals(getDescription()) &&
-- p.getDescriptor().equals(getDescriptor()));
-+ return (Objects.equals(p.getName(), getName()) &&
-+ Objects.equals(p.getType(), getType()) &&
-+ Objects.equals(p.getDescription(), getDescription()) &&
-+ Objects.equals(p.getDescriptor(), getDescriptor()));
- }
-
- public int hashCode() {
-- return getName().hashCode() ^ getType().hashCode();
-+ return Objects.hash(getName(), getType());
- }
- }
---- ./jdk/src/share/classes/javax/management/openmbean/OpenMBeanInfoSupport.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/openmbean/OpenMBeanInfoSupport.java Wed May 07 19:26:47 2014 -0700
-@@ -31,6 +31,7 @@
- //
- import java.util.Arrays;
- import java.util.HashSet;
-+import java.util.Objects;
-
- import javax.management.Descriptor;
- import javax.management.MBeanAttributeInfo;
-@@ -269,8 +270,9 @@
- //
-
- // their MBean className should be equal
-- if ( ! this.getClassName().equals(other.getClassName()) )
-+ if (!Objects.equals(this.getClassName(), other.getClassName())) {
- return false;
-+ }
-
- // their infos on attributes should be equal (order not
- // significant => equality between sets, not arrays or lists)
-@@ -342,7 +344,9 @@
- //
- if (myHashCode == null) {
- int value = 0;
-- value += this.getClassName().hashCode();
-+ if (this.getClassName() != null) {
-+ value += this.getClassName().hashCode();
-+ }
- value += arraySetHash(this.getAttributes());
- value += arraySetHash(this.getConstructors());
- value += arraySetHash(this.getOperations());
---- ./jdk/src/share/classes/javax/management/relation/RelationNotification.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/relation/RelationNotification.java Wed May 07 19:26:47 2014 -0700
-@@ -260,7 +260,7 @@
-
- super(notifType, sourceObj, sequence, timeStamp, message);
-
-- if (!isValidBasic(notifType,sourceObj,id,typeName) || !isValidCreate(notifType)) {
-+ if (!isValidBasicStrict(notifType,sourceObj,id,typeName) || !isValidCreate(notifType)) {
- throw new IllegalArgumentException("Invalid parameter.");
- }
-
-@@ -310,7 +310,7 @@
-
- super(notifType, sourceObj, sequence, timeStamp, message);
-
-- if (!isValidBasic(notifType,sourceObj,id,typeName) || !isValidUpdate(notifType,name,newValue,oldValue)) {
-+ if (!isValidBasicStrict(notifType,sourceObj,id,typeName) || !isValidUpdate(notifType,name,newValue,oldValue)) {
- throw new IllegalArgumentException("Invalid parameter.");
- }
-
-@@ -457,14 +457,26 @@
- // - no role old value (for role update)
- // - no role new value (for role update)
-
-+ // Despite the fact, that validation in constructor of RelationNotification prohibit
-+ // creation of the class instance with null sourceObj its possible to set it to null later
-+ // by public setSource() method.
-+ // So we should relax validation rules to preserve serialization behavior compatibility.
-+
-+ private boolean isValidBasicStrict(String notifType, Object sourceObj, String id, String typeName){
-+ if (sourceObj == null) {
-+ return false;
-+ }
-+ return isValidBasic(notifType,sourceObj,id,typeName);
-+ }
-+
- private boolean isValidBasic(String notifType, Object sourceObj, String id, String typeName){
-- if (notifType == null || sourceObj == null ||
-- id == null || typeName == null) {
-+ if (notifType == null || id == null || typeName == null) {
- return false;
- }
-
-- if (!(sourceObj instanceof RelationService) &&
-- !(sourceObj instanceof ObjectName)) {
-+ if (sourceObj != null && (
-+ !(sourceObj instanceof RelationService) &&
-+ !(sourceObj instanceof ObjectName))) {
- return false;
- }
-
---- ./jdk/src/share/classes/javax/management/remote/rmi/RMIConnector.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/management/remote/rmi/RMIConnector.java Wed May 07 19:26:47 2014 -0700
-@@ -405,14 +405,7 @@
- throw new IOException("Not connected");
- }
-
-- MBeanServerConnection rmbsc = rmbscMap.get(delegationSubject);
-- if (rmbsc != null) {
-- return rmbsc;
-- }
--
-- rmbsc = new RemoteMBeanServerConnection(delegationSubject);
-- rmbscMap.put(delegationSubject, rmbsc);
-- return rmbsc;
-+ return getConnectionWithSubject(delegationSubject);
- }
-
- public void
-@@ -1831,7 +1824,7 @@
-
- // Initialization of transient variables.
- private void initTransients() {
-- rmbscMap = new WeakHashMap<Subject, MBeanServerConnection>();
-+ rmbscMap = new WeakHashMap<Subject, WeakReference<MBeanServerConnection>>();
- connected = false;
- terminated = false;
-
-@@ -2011,6 +2004,25 @@
- private final ClassLoader loader;
- }
-
-+ private MBeanServerConnection getConnectionWithSubject(Subject delegationSubject) {
-+ MBeanServerConnection conn = null;
-+
-+ if (delegationSubject == null) {
-+ if (nullSubjectConnRef == null
-+ || (conn = nullSubjectConnRef.get()) == null) {
-+ conn = new RemoteMBeanServerConnection(null);
-+ nullSubjectConnRef = new WeakReference(conn);
-+ }
-+ } else {
-+ WeakReference<MBeanServerConnection> wr = rmbscMap.get(delegationSubject);
-+ if (wr == null || (conn = wr.get()) == null) {
-+ conn = new RemoteMBeanServerConnection(delegationSubject);
-+ rmbscMap.put(delegationSubject, new WeakReference(conn));
-+ }
-+ }
-+ return conn;
-+ }
-+
- /*
- The following section of code avoids a class loading problem
- with RMI. The problem is that an RMI stub, when deserializing
-@@ -2559,7 +2571,8 @@
-
- private transient long clientNotifSeqNo = 0;
-
-- private transient WeakHashMap<Subject, MBeanServerConnection> rmbscMap;
-+ private transient WeakHashMap<Subject, WeakReference<MBeanServerConnection>> rmbscMap;
-+ private transient WeakReference<MBeanServerConnection> nullSubjectConnRef = null;
-
- private transient RMINotifClient rmiNotifClient;
- // = new RMINotifClient(new Integer(0));
---- ./jdk/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -42,6 +42,7 @@
- import javax.swing.tree.*;
- import javax.swing.text.Position;
- import javax.swing.plaf.basic.DragRecognitionSupport.BeforeDrag;
-+import sun.awt.AWTAccessor;
- import sun.swing.SwingUtilities2;
-
- import sun.swing.DefaultLookup;
-@@ -2165,11 +2166,7 @@
- nodeBounds.width,
- nodeBounds.height);
- editingPath = path;
-- if (editingComponent instanceof JComponent) {
-- ((JComponent)editingComponent).revalidate();
-- } else {
-- editingComponent.validate();
-- }
-+ AWTAccessor.getComponentAccessor().revalidateSynchronously(editingComponent);
- editingComponent.repaint();
- if(cellEditor.shouldSelectCell(event)) {
- stopEditingInCompleteEditing = false;
---- ./jdk/src/share/classes/javax/swing/text/FlowView.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/swing/text/FlowView.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1999, 2013, 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
-@@ -796,6 +796,22 @@
- v.setParent(parent);
- }
-
-+ /** {@inheritDoc} */
-+ @Override
-+ protected void forwardUpdate(DocumentEvent.ElementChange ec,
-+ DocumentEvent e, Shape a, ViewFactory f) {
-+ calculateUpdateIndexes(e);
-+ // Send update event to all views followed by the changed place.
-+ lastUpdateIndex = Math.max((getViewCount() - 1), 0);
-+ for (int i = firstUpdateIndex; i <= lastUpdateIndex; i++) {
-+ View v = getView(i);
-+ if (v != null) {
-+ Shape childAlloc = getChildAllocation(i, a);
-+ forwardUpdateToView(v, e, childAlloc, f);
-+ }
-+ }
-+ }
-+
- // The following methods don't do anything useful, they
- // simply keep the class from being abstract.
-
---- ./jdk/src/share/classes/javax/swing/text/GlyphView.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/swing/text/GlyphView.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1999, 2013, 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
-@@ -514,7 +514,7 @@
- int x1 = x0 + (int) painter.getSpan(this, p0, p1, getTabExpander(), x0);
-
- // calculate y coordinate
-- int y = alloc.y + alloc.height - (int) painter.getDescent(this);
-+ int y = alloc.y + (int)(painter.getHeight(this) - painter.getDescent(this));
- if (underline) {
- int yTmp = y + 1;
- g.drawLine(x0, yTmp, x1, yTmp);
---- ./jdk/src/share/classes/javax/swing/text/View.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/javax/swing/text/View.java Wed May 07 19:26:47 2014 -0700
-@@ -1137,32 +1137,9 @@
- */
- protected void forwardUpdate(DocumentEvent.ElementChange ec,
- DocumentEvent e, Shape a, ViewFactory f) {
-- Element elem = getElement();
-- int pos = e.getOffset();
-- int index0 = getViewIndex(pos, Position.Bias.Forward);
-- if (index0 == -1 && e.getType() == DocumentEvent.EventType.REMOVE &&
-- pos >= getEndOffset()) {
-- // Event beyond our offsets. We may have represented this, that is
-- // the remove may have removed one of our child Elements that
-- // represented this, so, we should foward to last element.
-- index0 = getViewCount() - 1;
-- }
-- int index1 = index0;
-- View v = (index0 >= 0) ? getView(index0) : null;
-- if (v != null) {
-- if ((v.getStartOffset() == pos) && (pos > 0)) {
-- // If v is at a boundary, forward the event to the previous
-- // view too.
-- index0 = Math.max(index0 - 1, 0);
-- }
-- }
-- if (e.getType() != DocumentEvent.EventType.REMOVE) {
-- index1 = getViewIndex(pos + e.getLength(), Position.Bias.Forward);
-- if (index1 < 0) {
-- index1 = getViewCount() - 1;
-- }
-- }
-- int hole0 = index1 + 1;
-+ calculateUpdateIndexes(e);
-+
-+ int hole0 = lastUpdateIndex + 1;
- int hole1 = hole0;
- Element[] addedElems = (ec != null) ? ec.getChildrenAdded() : null;
- if ((addedElems != null) && (addedElems.length > 0)) {
-@@ -1173,11 +1150,9 @@
- // forward to any view not in the forwarding hole
- // formed by added elements (i.e. they will be updated
- // by initialization.
-- index0 = Math.max(index0, 0);
-- index1 = Math.max((getViewCount() - 1), 0);
-- for (int i = index0; i <= index1; i++) {
-+ for (int i = firstUpdateIndex; i <= lastUpdateIndex; i++) {
- if (! ((i >= hole0) && (i <= hole1))) {
-- v = getView(i);
-+ View v = getView(i);
- if (v != null) {
- Shape childAlloc = getChildAllocation(i, a);
- forwardUpdateToView(v, e, childAlloc, f);
-@@ -1187,6 +1162,39 @@
- }
-
- /**
-+ * Calculates the first and the last indexes of the child views
-+ * that need to be notified of the change to the model.
-+ * @param e the change information from the associated document
-+ */
-+ void calculateUpdateIndexes(DocumentEvent e) {
-+ int pos = e.getOffset();
-+ firstUpdateIndex = getViewIndex(pos, Position.Bias.Forward);
-+ if (firstUpdateIndex == -1 && e.getType() == DocumentEvent.EventType.REMOVE &&
-+ pos >= getEndOffset()) {
-+ // Event beyond our offsets. We may have represented this, that is
-+ // the remove may have removed one of our child Elements that
-+ // represented this, so, we should forward to last element.
-+ firstUpdateIndex = getViewCount() - 1;
-+ }
-+ lastUpdateIndex = firstUpdateIndex;
-+ View v = (firstUpdateIndex >= 0) ? getView(firstUpdateIndex) : null;
-+ if (v != null) {
-+ if ((v.getStartOffset() == pos) && (pos > 0)) {
-+ // If v is at a boundary, forward the event to the previous
-+ // view too.
-+ firstUpdateIndex = Math.max(firstUpdateIndex - 1, 0);
-+ }
-+ }
-+ if (e.getType() != DocumentEvent.EventType.REMOVE) {
-+ lastUpdateIndex = getViewIndex(pos + e.getLength(), Position.Bias.Forward);
-+ if (lastUpdateIndex < 0) {
-+ lastUpdateIndex = getViewCount() - 1;
-+ }
-+ }
-+ firstUpdateIndex = Math.max(firstUpdateIndex, 0);
-+ }
-+
-+ /**
- * Forwards the <code>DocumentEvent</code> to the give child view. This
- * simply messages the view with a call to <code>insertUpdate</code>,
- * <code>removeUpdate</code>, or <code>changedUpdate</code> depending
-@@ -1345,4 +1353,14 @@
- private View parent;
- private Element elem;
-
-+ /**
-+ * The index of the first child view to be notified.
-+ */
-+ int firstUpdateIndex;
-+
-+ /**
-+ * The index of the last child view to be notified.
-+ */
-+ int lastUpdateIndex;
-+
- };
---- ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_ja.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_ja.java Wed May 07 19:26:47 2014 -0700
-@@ -57,9 +57,9 @@
- {"appletviewer.appletinfo.applet", "-- \u30A2\u30D7\u30EC\u30C3\u30C8\u60C5\u5831\u306A\u3057 --"},
- {"appletviewer.appletinfo.param", "-- \u30D1\u30E9\u30E1\u30FC\u30BF\u60C5\u5831\u306A\u3057 --"},
- {"appletviewer.appletinfo.textframe", "\u30A2\u30D7\u30EC\u30C3\u30C8\u60C5\u5831"},
-- {"appletviewer.appletprint.fail", "\u5370\u5237\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002"},
-- {"appletviewer.appletprint.finish", "\u5370\u5237\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\u3002"},
-- {"appletviewer.appletprint.cancel", "\u5370\u5237\u304C\u4E2D\u6B62\u3055\u308C\u307E\u3057\u305F\u3002"},
-+ {"appletviewer.appletprint.fail", "\u5370\u5237\u304C\u5931\u6557\u3057\u307E\u3057\u305F\u3002"},
-+ {"appletviewer.appletprint.finish", "\u5370\u5237\u3092\u7D42\u4E86\u3057\u307E\u3057\u305F\u3002"},
-+ {"appletviewer.appletprint.cancel", "\u5370\u5237\u304C\u53D6\u308A\u6D88\u3055\u308C\u307E\u3057\u305F\u3002"},
- {"appletviewer.appletencoding", "\u6587\u5B57\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0: {0}"},
- {"appletviewer.parse.warning.requiresname", "\u8B66\u544A: <param name=... value=...>\u30BF\u30B0\u306Bname\u5C5E\u6027\u304C\u5FC5\u8981\u3067\u3059\u3002"},
- {"appletviewer.parse.warning.paramoutside", "\u8B66\u544A: <param>\u30BF\u30B0\u304C<applet> ... </applet>\u306E\u5916\u5074\u3067\u3059\u3002"},
-@@ -98,7 +98,7 @@
- {"appletioexception.loadclass.throw.notloaded", "\u30AF\u30E9\u30B9\u304C\u30ED\u30FC\u30C9\u3055\u308C\u307E\u305B\u3093: {0}"},
- {"appletclassloader.loadcode.verbose", "{1}\u3092\u53D6\u5F97\u3059\u308B\u305F\u3081\u306E{0}\u3078\u306E\u30B9\u30C8\u30EA\u30FC\u30E0\u3092\u958B\u304D\u307E\u3059"},
- {"appletclassloader.filenotfound", "{0}\u306E\u691C\u7D22\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"},
-- {"appletclassloader.fileformat", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u30FB\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
-+ {"appletclassloader.fileformat", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
- {"appletclassloader.fileioexception", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
- {"appletclassloader.fileexception", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
- {"appletclassloader.filedeath", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u304C\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3057\u305F"},
-@@ -132,7 +132,7 @@
- {"appletpanel.notdisposed", "\u30ED\u30FC\u30C9: \u30A2\u30D7\u30EC\u30C3\u30C8\u304C\u7834\u68C4\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},
- {"appletpanel.bail", "\u4E2D\u65AD\u6E08: \u7D42\u4E86\u3057\u3066\u3044\u307E\u3059\u3002"},
- {"appletpanel.filenotfound", "{0}\u306E\u691C\u7D22\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093"},
-- {"appletpanel.fileformat", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u30FB\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
-+ {"appletpanel.fileformat", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
- {"appletpanel.fileioexception", "{0}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
- {"appletpanel.fileexception", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F"},
- {"appletpanel.filedeath", "{1}\u306E\u30ED\u30FC\u30C9\u4E2D\u306B{0}\u304C\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3057\u305F"},
---- ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_pt_BR.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_pt_BR.java Wed May 07 19:26:47 2014 -0700
-@@ -93,7 +93,7 @@
- {"appletviewer.main.nosecmgr", "Advert\u00EAncia: SecurityManager n\u00E3o instalado!"},
- {"appletviewer.main.warning", "Advert\u00EAncia: Nenhum applet iniciado. Certifique-se de que a entrada contenha uma tag <applet>."},
- {"appletviewer.main.warn.prop.overwrite", "Advert\u00EAncia: Substituindo a propriedade do sistema temporariamente a pedido do usu\u00E1rio: chave: {0} valor antigo: {1} valor novo: {2}"},
-- {"appletviewer.main.warn.cantreadprops", "Advert\u00EAncia: N\u00E3o \u00E9 poss\u00EDvel ler o arquivo de propriedades AppletViewer: {0} Usando defaults."},
-+ {"appletviewer.main.warn.cantreadprops", "Advert\u00EAncia: N\u00E3o \u00E9 poss\u00EDvel ler o arquivo de propriedades AppletViewer: {0} Usando padr\u00F5es."},
- {"appletioexception.loadclass.throw.interrupted", "carregamento de classe interrompido: {0}"},
- {"appletioexception.loadclass.throw.notloaded", "classe n\u00E3o carregada: {0}"},
- {"appletclassloader.loadcode.verbose", "Fluxo de abertura para: {0} para obter {1}"},
---- ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_sv.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_sv.java Wed May 07 19:26:47 2014 -0700
-@@ -85,7 +85,7 @@
- {"appletviewer.main.prop.store", "Anv\u00E4ndarspecifika egenskaper f\u00F6r AppletViewer"},
- {"appletviewer.main.err.prop.cantread", "Kan inte l\u00E4sa egenskapsfilen: {0}"},
- {"appletviewer.main.err.prop.cantsave", "Kan inte spara egenskapsfilen: {0}"},
-- {"appletviewer.main.warn.nosecmgr", "Varning: s\u00E4kerheten inaktiveras."},
-+ {"appletviewer.main.warn.nosecmgr", "Varning! S\u00E4kerheten avaktiveras."},
- {"appletviewer.main.debug.cantfinddebug", "Hittar inte fels\u00F6kningsprogrammet!"},
- {"appletviewer.main.debug.cantfindmain", "Hittar inte huvudmetoden i fels\u00F6kningsprogrammet!"},
- {"appletviewer.main.debug.exceptionindebug", "Undantag i fels\u00F6kningsprogrammet!"},
---- ./jdk/src/share/classes/sun/awt/AWTAccessor.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/awt/AWTAccessor.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2008, 2014, 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
-@@ -40,6 +40,7 @@
- import java.security.AccessControlContext;
-
- import java.io.File;
-+import java.util.ResourceBundle;
- import java.util.Vector;
-
- /**
-@@ -237,6 +238,11 @@
- */
- AccessControlContext getAccessControlContext(Component comp);
-
-+ /**
-+ * Revalidates the component synchronously.
-+ */
-+ void revalidateSynchronously(Component comp);
-+
- }
-
- /*
-@@ -691,6 +697,13 @@
- }
-
- /*
-+ *An accessor for the toolkit class
-+ */
-+ public interface ToolkitAccessor {
-+ void setPlatformResources(ResourceBundle bundle);
-+ }
-+
-+ /*
- * An accessor object for the InvocationEvent class
- */
- public interface InvocationEventAccessor {
-@@ -737,6 +750,7 @@
- private static DefaultKeyboardFocusManagerAccessor defaultKeyboardFocusManagerAccessor;
- private static SequencedEventAccessor sequencedEventAccessor;
- private static InvocationEventAccessor invocationEventAccessor;
-+ private static ToolkitAccessor toolkitAccessor;
-
- /*
- * Set an accessor object for the java.awt.Component class.
-@@ -1133,6 +1147,24 @@
- }
-
- /*
-+ * Set an accessor object for the java.awt.Toolkit class.
-+ */
-+ public static void setToolkitAccessor(ToolkitAccessor ta) {
-+ toolkitAccessor = ta;
-+ }
-+
-+ /*
-+ * Get the accessor object for the java.awt.Toolkit class.
-+ */
-+ public static ToolkitAccessor getToolkitAccessor() {
-+ if (toolkitAccessor == null) {
-+ unsafe.ensureClassInitialized(Toolkit.class);
-+ }
-+
-+ return toolkitAccessor;
-+ }
-+
-+ /*
- * Get the accessor object for the java.awt.event.InvocationEvent class.
- */
- public static void setInvocationEventAccessor(InvocationEventAccessor invocationEventAccessor) {
---- ./jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java Wed May 07 19:26:47 2014 -0700
-@@ -98,8 +98,7 @@
- }
-
- flavors = DataTransferer.getInstance().
-- setToSortedDataFlavorArray(flavorsToData.keySet(),
-- flavorsForFormats);
-+ setToSortedDataFlavorArray(flavorsToData.keySet());
- }
- } finally {
- clipboard.closeClipboard();
---- ./jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java Wed May 07 19:26:47 2014 -0700
-@@ -2406,15 +2406,6 @@
- }
-
- /**
-- * Helper function to reduce a Map with DataFlavor keys to a DataFlavor
-- * array. The array will be sorted according to
-- * <code>DataFlavorComparator</code>.
-- */
-- public static DataFlavor[] keysToDataFlavorArray(Map map) {
-- return setToSortedDataFlavorArray(map.keySet(), map);
-- }
--
-- /**
- * Helper function to convert a Set of DataFlavors to a sorted array.
- * The array will be sorted according to <code>DataFlavorComparator</code>.
- */
-@@ -2428,24 +2419,6 @@
- }
-
- /**
-- * Helper function to convert a Set of DataFlavors to a sorted array.
-- * The array will be sorted according to a
-- * <code>DataFlavorComparator</code> created with the specified
-- * flavor-to-native map as an argument.
-- */
-- public static DataFlavor[] setToSortedDataFlavorArray
-- (Set flavorsSet, Map flavorToNativeMap)
-- {
-- DataFlavor[] flavors = new DataFlavor[flavorsSet.size()];
-- flavorsSet.toArray(flavors);
-- Comparator comparator =
-- new DataFlavorComparator(flavorToNativeMap,
-- IndexedComparator.SELECT_WORST);
-- Arrays.sort(flavors, comparator);
-- return flavors;
-- }
--
-- /**
- * Helper function to convert an InputStream to a byte[] array.
- */
- protected static byte[] inputStreamToByteArray(InputStream str)
-@@ -2723,11 +2696,9 @@
- * application/x-java-* MIME types. Unknown application types are preferred
- * because if the user provides his own data flavor, it will likely be the
- * most descriptive one. For flavors which are otherwise equal, the
-- * flavors' native formats are compared, with greater long values
-- * taking precedence.
-+ * flavors' string representation are compared in the alphabetical order.
- */
- public static class DataFlavorComparator extends IndexedComparator {
-- protected final Map flavorToFormatMap;
-
- private final CharsetComparator charsetComparator;
-
-@@ -2863,20 +2834,6 @@
- super(order);
-
- charsetComparator = new CharsetComparator(order);
-- flavorToFormatMap = Collections.EMPTY_MAP;
-- }
--
-- public DataFlavorComparator(Map map) {
-- this(map, SELECT_BEST);
-- }
--
-- public DataFlavorComparator(Map map, boolean order) {
-- super(order);
--
-- charsetComparator = new CharsetComparator(order);
-- HashMap hashMap = new HashMap(map.size());
-- hashMap.putAll(map);
-- flavorToFormatMap = Collections.unmodifiableMap(hashMap);
- }
-
- public int compare(Object obj1, Object obj2) {
-@@ -2972,10 +2929,9 @@
- }
- }
-
-- // As a last resort, take the DataFlavor with the greater integer
-- // format.
-- return compareLongs(flavorToFormatMap, flavor1, flavor2,
-- UNKNOWN_OBJECT_LOSES_L);
-+ // The flavours are not equal but still not distinguishable.
-+ // Compare String representations in alphabetical order
-+ return flavor1.getMimeType().compareTo(flavor2.getMimeType());
- }
- }
-
---- ./jdk/src/share/classes/sun/awt/resources/awt_pt_BR.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/awt/resources/awt_pt_BR.properties Wed May 07 19:26:47 2014 -0700
-@@ -151,7 +151,7 @@
- AWT.undefined=Indefinido
-
- # Predefined cursor names
--AWT.DefaultCursor=Cursor Default
-+AWT.DefaultCursor=Cursor Padr\u00E3o
- AWT.CrosshairCursor=Cursor em Forma de Cruz
- AWT.TextCursor=Cursor de Texto
- AWT.WaitCursor=Cursor em Forma de Ampulheta
-@@ -165,9 +165,9 @@
- AWT.EResizeCursor=Cursor de Seta Que Aponta \u00E0 Direita
- AWT.HandCursor=Cursor em Forma de M\u00E3o
- AWT.MoveCursor=Cursor de Movimento
--AWT.DefaultDragCursor=Cursor Default de Arrastar
--AWT.DefaultNoDropCursor=Cursor Default sem Arrastar
--AWT.DefaultDropCursor=Cursor Default de Soltar
-+AWT.DefaultDragCursor=Cursor Padr\u00E3o de Arrastar
-+AWT.DefaultNoDropCursor=Cursor Padr\u00E3o sem Arrastar
-+AWT.DefaultDropCursor=Cursor Padr\u00E3o de Soltar
-
- # Input method related strings
- AWT.CompositionWindowTitle=Janela de Entrada
---- ./jdk/src/share/classes/sun/launcher/resources/launcher_de.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/launcher/resources/launcher_de.properties Wed May 07 19:26:47 2014 -0700
-@@ -37,7 +37,7 @@
- java.launcher.opt.footer =\ -cp <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n -classpath <Klassensuchpfad von Verzeichnissen und ZIP-/JAR-Dateien>\n Eine durch {0} getrennte Liste mit Verzeichnissen, JAR-Archiven\n und ZIP-Archiven zur Suche nach Klassendateien.\n -D<name>=<value>\n Legt eine Systemeigenschaft fest\n -verbose:[class|gc|jni]\n Aktiviert die Verbose-Ausgabe\n -version Druckt Produktversion und beendet das Programm\n -version:<value>\n Erfordert die angegebene Version zur Ausf\u00FChrung\n -showversion Druckt Produktversion und f\u00E4hrt fort\n -jre-restrict-search | -no-jre-restrict-search\n Bezieht private JREs des Benutzers in Versionssuche ein bzw. schlie\u00DFt sie aus\n -? -help Druckt diese Hilfemeldung\n -X Druckt Hilfe zu Nicht-Standardoptionen\n -ea[:<packagename>...|:<classname>]\n -enableassertions[:<packagename>...|:<classname>]\n Aktiviert Assertionen mit angegebener Granularit\u00E4t\n -da[:<packagename>...|:<classname>]\n -disableassertions[:<packagename>...|:<classname>]\n Deaktiviert Assertionen mit angegebener Granularit\u00E4t\n -esa | -enablesystemassertions\n Aktiviert Systemassertionen\n -dsa | -disablesystemassertions\n Deaktiviert Systemassertionen\n -agentlib:<libname>[=<options>]\n L\u00E4dt native Agent Library <libname>, z.B. -agentlib:hprof\n siehe auch -agentlib:jdwp=help und -agentlib:hprof=help\n -agentpath:<pathname>[=<options>]\n L\u00E4dt native Agent Library nach vollem Pfadnamen\n -javaagent:<jarpath>[=<options>]\n L\u00E4dt Java-Programmiersprachen-Agent, siehe java.lang.instrument\n -splash:<imagepath>\n Zeigt Startbildschirm mit angegebenem Bild\nWeitere Einzelheiten finden Sie unter http://www.oracle.com/technetwork/java/javase/documentation/index.html
-
- # Translators please note do not translate the options themselves
--java.launcher.X.usage=\ -Xmixed Ausf\u00FChrung im gemischten Modus (Standard)\n -Xint Nur Ausf\u00FChrung im interpretierten Modus\n -Xbootclasspath:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Legt Suchpfad f\u00FCr Bootstrap-Klassen und Ressourcen fest\n -Xbootclasspath/a:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n H\u00E4ngt an das Ende des Bootstrap Classpath an\n -Xbootclasspath/p:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Stellt Bootstrap Classpath voran\n -Xdiag Zeigt zus\u00E4tzliche Diagnosemeldungen an\n -Xnoclassgc Deaktiviert Klassen-Garbage Collection\n -Xincgc Aktiviert inkrementelle Garbage Collection\n -Xloggc:<file> Loggt GC-Status in einer Datei mit Zeitstempeln\n -Xbatch Deaktiviert Hintergrundkompilierung\n -Xms<size> Legt anf\u00E4ngliche Java Heap-Gr\u00F6\u00DFe fest\n -Xmx<size> Legt maximale Java Heap-Gr\u00F6\u00DFe fest\n -Xss<size> Legt Java-Thread-Stackgr\u00F6\u00DFe fest\n -Xprof Gibt CPU-Profiling-Daten aus\n -Xfuture Aktiviert strengste Pr\u00FCfungen, antizipiert zuk\u00FCnftigen Standardwert\n -Xrs Reduziert Verwendung von BS-Signalen durch Java/VM (siehe Dokumentation)\n -Xcheck:jni F\u00FChrt zus\u00E4tzliche Pr\u00FCfungen f\u00FCr JNI-Funktionen durch\n -Xshare:off Kein Versuch, gemeinsame Klassendaten zu verwenden\n -Xshare:auto Verwendet gemeinsame Klassendaten, wenn m\u00F6glich (Standard)\n -Xshare:on Erfordert die Verwendung gemeinsamer Klassendaten, sonst verl\u00E4uft der Vorgang nicht erfolgreich.\n -XshowSettings Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:all\n Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:vm Zeigt alle VM-bezogenen Einstellungen und f\u00E4hrt fort\n -XshowSettings:properties\n Zeigt alle Eigenschaftseinstellungen und f\u00E4hrt fort\n -XshowSettings:locale\n Zeigt alle gebietsschemabezogenen Einstellungen und f\u00E4hrt fort\n\nDie -X-Optionen sind keine Standardoptionen und k\u00F6nnen ohne Vorank\u00FCndigung ge\u00E4ndert werden.\n
-+java.launcher.X.usage=\ -Xmixed Ausf\u00FChrung im gemischten Modus (Standard)\n -Xint Nur Ausf\u00FChrung im interpretierten Modus\n -Xbootclasspath:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Legt Suchpfad f\u00FCr Bootstrap-Klassen und Ressourcen fest\n -Xbootclasspath/a:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n H\u00E4ngt an das Ende des Bootstrap Classpath an\n -Xbootclasspath/p:<Verzeichnisse und ZIP-/JAR-Dateien durch {0} getrennt>\n Stellt Bootstrap Classpath voran\n -Xdiag Zeigt zus\u00E4tzliche Diagnosemeldungen an\n -Xnoclassgc Deaktiviert Klassen-Garbage Collection\n -Xincgc Aktiviert inkrementelle Garbage Collection\n -Xloggc:<file> Loggt GC-Status in einer Datei mit Zeitstempeln\n -Xbatch Deaktiviert Hintergrundkompilierung\n -Xms<size> Legt anf\u00E4ngliche Java Heap-Gr\u00F6\u00DFe fest\n -Xmx<size> Legt maximale Java Heap-Gr\u00F6\u00DFe fest\n -Xss<size> Legt Java-Threadstackgr\u00F6\u00DFe fest\n -Xprof Gibt CPU-Profiling-Daten aus\n -Xfuture Aktiviert strengste Pr\u00FCfungen, antizipiert zuk\u00FCnftigen Standardwert\n -Xrs Reduziert Verwendung von BS-Signalen durch Java/VM (siehe Dokumentation)\n -Xcheck:jni F\u00FChrt zus\u00E4tzliche Pr\u00FCfungen f\u00FCr JNI-Funktionen durch\n -Xshare:off Kein Versuch, gemeinsame Klassendaten zu verwenden\n -Xshare:auto Verwendet gemeinsame Klassendaten, wenn m\u00F6glich (Standard)\n -Xshare:on Erfordert die Verwendung gemeinsamer Klassendaten, sonst verl\u00E4uft der Vorgang nicht erfolgreich.\n -XshowSettings Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:all\n Zeigt alle Einstellungen und f\u00E4hrt fort\n -XshowSettings:vm Zeigt alle VM-bezogenen Einstellungen und f\u00E4hrt fort\n -XshowSettings:properties\n Zeigt alle Eigenschaftseinstellungen und f\u00E4hrt fort\n -XshowSettings:locale\n Zeigt alle gebietsschemabezogenen Einstellungen und f\u00E4hrt fort\n\nDie -X-Optionen sind keine Standardoptionen und k\u00F6nnen ohne Vorank\u00FCndigung ge\u00E4ndert werden.\n
-
- # Translators please note do not translate the options themselves
- java.launcher.X.macosx.usage=\nDie folgenden Optionen sind f\u00FCr Mac OS X spezifisch:\n -XstartOnFirstThread\n f\u00FChrt die main()-Methode f\u00FCr den ersten (AppKit) Thread aus\n -Xdock:name=<Anwendungsname>"\n \u00DCberschreibt den in der Uhr angezeigten Standardanwendungsnamen\n -Xdock:icon=<Pfad zu Symboldatei>\n \u00DCberschreibt das in der Uhr angezeigte Standardsymbol\n\n
---- ./jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties Wed May 07 19:26:47 2014 -0700
-@@ -30,17 +30,17 @@
- java.launcher.opt.vmselect =\ {0}\t para selecionar a VM "{1}"\n
- java.launcher.opt.hotspot =\ {0}\t \u00E9 um sin\u00F4nimo da VM "{1}" [obsoleto]\n
-
--java.launcher.ergo.message1 =\ A VM default \u00E9 {0}
-+java.launcher.ergo.message1 =\ A VM padr\u00E3o \u00E9 {0}
- java.launcher.ergo.message2 =\ porque a execu\u00E7\u00E3o est\u00E1 sendo feita em uma m\u00E1quina de classe de servidor.\n
-
- # Translators please note do not translate the options themselves
- java.launcher.opt.footer =\ -cp <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n -classpath <caminho de pesquisa da classe dos diret\u00F3rios e arquivos zip/jar>\n Uma lista separada por {0} de diret\u00F3rios, archives JAR\n e archives ZIP nos quais ser\u00E3o procurados os arquivos de classe.\n -D<nome>=<valor>\n define uma propriedade do sistema\n -verbose:[class|gc|jni]\n ativa a sa\u00EDda detalhada\n -version imprime a vers\u00E3o do produto e sai do programa\n -version:<valor>\n requer a execu\u00E7\u00E3o da vers\u00E3o especificada\n -showversion imprime a vers\u00E3o do produto e continua\n -jre-restrict-search | -no-jre-restrict-search\n inclui/exclui JREs privados do usu\u00E1rio na pesquisa de vers\u00E3o\n -? -help imprime esta mensagem de ajuda\n -X imprime a ajuda sobre op\u00E7\u00F5es n\u00E3o padronizadas\n -ea[:<nome do pacote>...|:<nome da classe>]\n -enableassertions[:<nome do pacote>...|:<nome da classe>]\n ativa asser\u00E7\u00F5es com granularidade especificada\n -da[:<nome do pacote>...|:<nome da classe>]\n -disableassertions[:<nome do pacote>...|:<nome da classe>]\n desativa asser\u00E7\u00F5es com granularidade especificada\n -esa | -enablesystemassertions\n ativa asser\u00E7\u00F5es do sistema\n -dsa | -disablesystemassertions\n desativa asser\u00E7\u00F5es do sistema\n -agentlib:<nome da biblioteca>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa <nome da biblioteca>, por exemplo: -agentlib:hprof\n consulte tamb\u00E9m: -agentlib:jdwp=help e -agentlib:hprof=help\n -agentpath:<nome do caminho>[=<op\u00E7\u00F5es>]\n carrega a biblioteca de agentes nativa com base no nome do caminho completo\n -javaagent:<caminho do arquivo jar>[=<op\u00E7\u00F5es>]\n carrega o agente da linguagem de programa\u00E7\u00E3o Java; consulte java.lang.instrument\n -splash:<caminho da imagem>\n mostra a tela de abertura com a imagem especificada\nConsulte http://www.oracle.com/technetwork/java/javase/documentation/index.html para obter mais detalhes.
-
- # Translators please note do not translate the options themselves
--java.launcher.X.usage=\ -Xmixed execu\u00E7\u00E3o no modo misto (default)\n -Xint execu\u00E7\u00E3o somente no modo interpretado\n -Xbootclasspath:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n define o caminho de pesquisa para classes e recursos de inicializa\u00E7\u00E3o\n -Xbootclasspath/a:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no final do caminho da classe de inicializa\u00E7\u00E3o\n -Xbootclasspath/p:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no in\u00EDcio do caminho da classe de inicializa\u00E7\u00E3o\n -Xdiag mostra mensagens de diagn\u00F3stico adicionais\n -Xnoclassgc desativa a coleta de lixo da classe\n -Xincgc ativa a coleta de lixo incremental\n -Xloggc:<arquivo> registra o status do GC status em um arquivo com marca\u00E7\u00F5es de data e hor\u00E1rio\n -Xbatch desativa a compila\u00E7\u00E3o em segundo plano\n -Xms<tamanho> define o tamanho inicial do heap Java\n -Xmx<tamanho> define o tamanho m\u00E1ximo do heap Java\n -Xss<tamanho> define o tamanho da pilha de threads java\n -Xprof produz dados de perfil da cpu\n -Xfuture ativa verifica\u00E7\u00F5es de n\u00EDvel m\u00E1ximo de exig\u00EAncia, prevendo o valor default futuro\n -Xrs reduz o uso de sinais do SO pelo(a) Java/VM (consulte a documenta\u00E7\u00E3o)\n -Xcheck:jni executa verifica\u00E7\u00F5es adicionais de fun\u00E7\u00F5es da JNI\n -Xshare:off n\u00E3o tenta usar dados da classe compartilhada\n -Xshare:auto se poss\u00EDvel, usa dados da classe compartilhada (default)\n -Xshare:on requer o uso de dados da classe compartilhada, caso contr\u00E1rio haver\u00E1 falha.\n -XshowSettings mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:all\n mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:vm mostra todas as defini\u00E7\u00F5es relacionadas \u00E0 vm e continua\n -XshowSettings:properties\n mostra todas as defini\u00E7\u00F5es da propriedade e continua\n -XshowSettings:locale\n mostra todas as defini\u00E7\u00F5es relativas \u00E0s configura\u00E7\u00F5es regionais e continua\n\nAs -X options n\u00E3o s\u00E3o padronizadas e est\u00E3o sujeitas a altera\u00E7\u00F5es sem aviso.\n
-+java.launcher.X.usage=\ -Xmixed execu\u00E7\u00E3o no modo misto (padr\u00E3o)\n -Xint execu\u00E7\u00E3o somente no modo interpretado\n -Xbootclasspath:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n define o caminho de pesquisa para classes e recursos de inicializa\u00E7\u00E3o\n -Xbootclasspath/a:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no final do caminho da classe de inicializa\u00E7\u00E3o\n -Xbootclasspath/p:<diret\u00F3rios e arquivos zip/jar separados por {0}>\n anexa no in\u00EDcio do caminho da classe de inicializa\u00E7\u00E3o\n -Xdiag mostra mensagens de diagn\u00F3stico adicionais\n -Xnoclassgc desativa a coleta de lixo da classe\n -Xincgc ativa a coleta de lixo incremental\n -Xloggc:<arquivo> registra o status do GC status em um arquivo com marca\u00E7\u00F5es de data e hor\u00E1rio\n -Xbatch desativa a compila\u00E7\u00E3o em segundo plano\n -Xms<tamanho> define o tamanho inicial do heap Java\n -Xmx<tamanho> define o tamanho m\u00E1ximo do heap Java\n -Xss<tamanho> define o tamanho da pilha de threads java\n -Xprof produz dados de perfil da cpu\n -Xfuture ativa verifica\u00E7\u00F5es de n\u00EDvel m\u00E1ximo de exig\u00EAncia, prevendo o valor padr\u00E3o futuro\n -Xrs reduz o uso de sinais do SO pelo(a) Java/VM (consulte a documenta\u00E7\u00E3o)\n -Xcheck:jni executa verifica\u00E7\u00F5es adicionais de fun\u00E7\u00F5es da JNI\n -Xshare:off n\u00E3o tenta usar dados da classe compartilhada\n -Xshare:auto se poss\u00EDvel, usa dados da classe compartilhada (padr\u00E3o)\n -Xshare:on requer o uso de dados da classe compartilhada, caso contr\u00E1rio haver\u00E1 falha.\n -XshowSettings mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:all\n mostra todas as defini\u00E7\u00F5es e continua\n -XshowSettings:vm mostra todas as defini\u00E7\u00F5es relacionadas \u00E0 vm e continua\n -XshowSettings:properties\n mostra todas as defini\u00E7\u00F5es da propriedade e continua\n -XshowSettings:locale\n mostra todas as defini\u00E7\u00F5es relativas \u00E0s configura\u00E7\u00F5es regionais e continua\n\nAs -X options n\u00E3o s\u00E3o padronizadas e est\u00E3o sujeitas a altera\u00E7\u00F5es sem aviso.\n
-
- # Translators please note do not translate the options themselves
--java.launcher.X.macosx.usage=\nAs op\u00E7\u00F5es a seguir s\u00E3o espec\u00EDficas para o Mac OS X:\n -XstartOnFirstThread\n executa o m\u00E9todo main() no primeiro thread (AppKit)\n -Xdock:name=<nome da aplica\u00E7\u00E3o>"\n substitui o nome da aplica\u00E7\u00E3o default exibido no encaixe\n -Xdock:icon=<caminho para o arquivo do \u00EDcone>\n substitui o \u00EDcone exibido no encaixe\n\n
-+java.launcher.X.macosx.usage=\nAs op\u00E7\u00F5es a seguir s\u00E3o espec\u00EDficas para o Mac OS X:\n -XstartOnFirstThread\n executa o m\u00E9todo main() no primeiro thread (AppKit)\n -Xdock:name=<nome da aplica\u00E7\u00E3o>"\n substitui o nome da aplica\u00E7\u00E3o padr\u00E3o exibido no encaixe\n -Xdock:icon=<caminho para o arquivo do \u00EDcone>\n substitui o \u00EDcone exibido no encaixe\n\n
-
- java.launcher.cls.error1=Erro: N\u00E3o foi poss\u00EDvel localizar nem carregar a classe principal {0}
- java.launcher.cls.error2=Erro: o m\u00E9todo main n\u00E3o \u00E9 {0} na classe {1}; defina o m\u00E9todo main como:\n public static void main(String[] args)
---- ./jdk/src/share/classes/sun/management/resources/agent_ja.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/management/resources/agent_ja.properties Wed May 07 19:26:47 2014 -0700
-@@ -36,7 +36,7 @@
- agent.err.configfile.closed.failed = \u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u3092\u9589\u3058\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
- agent.err.configfile.access.denied = \u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F
-
--agent.err.exportaddress.failed = JMX\u30B3\u30CD\u30AF\u30BF\u30FB\u30A2\u30C9\u30EC\u30B9\u306E\u8A08\u6E2C\u30D0\u30C3\u30D5\u30A1\u3078\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u306B\u5931\u6557\u3057\u307E\u3057\u305F
-+agent.err.exportaddress.failed = JMX\u30B3\u30CD\u30AF\u30BF\u30FB\u30A2\u30C9\u30EC\u30B9\u306E\u8A08\u6E2C\u30D0\u30C3\u30D5\u30A1\u3078\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u304C\u5931\u6557\u3057\u307E\u3057\u305F
-
- agent.err.agentclass.notfound = \u7BA1\u7406\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30AF\u30E9\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
- agent.err.agentclass.failed = \u7BA1\u7406\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30FB\u30AF\u30E9\u30B9\u304C\u5931\u6557\u3057\u307E\u3057\u305F
---- ./jdk/src/share/classes/sun/misc/FloatingDecimal.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/misc/FloatingDecimal.java Wed May 07 19:26:47 2014 -0700
-@@ -70,6 +70,15 @@
- static final int minDecimalExponent = -324;
- static final int bigDecimalExponent = 324; // i.e. abs(minDecimalExponent)
-
-+ //
-+ // The value below is chosen as a conservative threshold. It
-+ // can be demonstrated that a decimal ulp less than 10^(-1075)
-+ // is enough to guarantee correctness. Compensation is also made
-+ // for the binary mantissa which takes 53 binary digits, or
-+ // 17 decimal ones. Hence 1075 + 17 =~ 1100.
-+ //
-+ static final int MAX_NDIGITS = 1100;
-+
- static final long highbyte = 0xff00000000000000L;
- static final long highbit = 0x8000000000000000L;
- static final long lowbytes = ~highbyte;
-@@ -1468,6 +1477,10 @@
- * Formulate the EXACT big-number result as
- * bigD0 * 10^exp
- */
-+ if (nDigits > MAX_NDIGITS) {
-+ nDigits = MAX_NDIGITS + 1;
-+ digits[MAX_NDIGITS] = '1';
-+ }
- FDBigInt bigD0 = new FDBigInt( lValue, digits, kDigits, nDigits );
- exp = decExponent - nDigits;
-
---- ./jdk/src/share/classes/sun/misc/JavaLangAccess.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/misc/JavaLangAccess.java Wed May 07 19:26:47 2014 -0700
-@@ -95,4 +95,9 @@
- * inherited AccessControlContext.
- */
- Thread newThreadWithAcc(Runnable target, AccessControlContext acc);
-+
-+ /**
-+ * Invokes the finalize method of the given object.
-+ */
-+ void invokeFinalize(Object o) throws Throwable;
- }
---- ./jdk/src/share/classes/sun/misc/VM.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/misc/VM.java Wed May 07 19:26:47 2014 -0700
-@@ -147,6 +147,7 @@
-
-
- private static volatile boolean booted = false;
-+ private static final Object lock = new Object();
-
- // Invoked by by System.initializeSystemClass just before returning.
- // Subsystems that are invoked during initialization can check this
-@@ -154,13 +155,27 @@
- // application class loader has been set up.
- //
- public static void booted() {
-- booted = true;
-+ synchronized (lock) {
-+ booted = true;
-+ lock.notifyAll();
-+ }
- }
-
- public static boolean isBooted() {
- return booted;
- }
-
-+ // Waits until VM completes initialization
-+ //
-+ // This method is invoked by the Finalizer thread
-+ public static void awaitBooted() throws InterruptedException {
-+ synchronized (lock) {
-+ while (!booted) {
-+ lock.wait();
-+ }
-+ }
-+ }
-+
- // A user-settable upper limit on the maximum amount of allocatable direct
- // buffer memory. This value may be changed during VM initialization if
- // "java" is launched with "-XX:MaxDirectMemorySize=<size>".
---- ./jdk/src/share/classes/sun/nio/cs/ext/META-INF/services/java.nio.charset.spi.CharsetProvider Tue Mar 18 12:35:25 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,2 +0,0 @@
--# NIO charset SPI extended charset provider
--sun.nio.cs.ext.ExtendedCharsets
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/src/share/classes/sun/print/DocumentPropertiesUI.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,62 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package sun.print;
-+
-+import java.awt.Window;
-+import java.awt.print.PrinterJob;
-+import javax.print.PrintService;
-+import javax.print.ServiceUIFactory;
-+import javax.print.attribute.PrintRequestAttributeSet;
-+
-+public abstract class DocumentPropertiesUI {
-+
-+ /**
-+ * For Win32 doc properties sheet.
-+ */
-+ public static final int
-+ DOCUMENTPROPERTIES_ROLE = ServiceUIFactory.RESERVED_UIROLE +100;
-+
-+ /**
-+ * Name of (this) abstract class for Document Properties.
-+ */
-+ public static final String
-+ DOCPROPERTIESCLASSNAME = DocumentPropertiesUI.class.getName();
-+
-+ /**
-+ * Invokes whatever code is needed to display a native dialog
-+ * with the specified owner. The owner should be the cross-platform
-+ * dialog. If the user cancels the dialog the return value is null.
-+ * A non-null return value is always a new attribute set (or is it?)
-+ * The cross-platform dialog may need to be updated to reflect the
-+ * updated properties.
-+ */
-+ public abstract PrintRequestAttributeSet
-+ showDocumentProperties(PrinterJob job,
-+ Window owner,
-+ PrintService service,
-+ PrintRequestAttributeSet aset);
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/src/share/classes/sun/print/PrinterJobWrapper.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,60 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package sun.print;
-+
-+import java.awt.print.PrinterJob;
-+import javax.print.attribute.PrintRequestAttribute;
-+
-+public class PrinterJobWrapper implements PrintRequestAttribute {
-+
-+ private static final long serialVersionUID = -8792124426995707237L;
-+
-+ private PrinterJob job;
-+
-+ public PrinterJobWrapper(PrinterJob job) {
-+ this.job = job;
-+ }
-+
-+ public PrinterJob getPrinterJob() {
-+ return job;
-+ }
-+
-+ public final Class getCategory() {
-+ return PrinterJobWrapper.class;
-+ }
-+
-+ public final String getName() {
-+ return "printerjob-wrapper";
-+ }
-+
-+ public String toString() {
-+ return "printerjob-wrapper: " + job.toString();
-+ }
-+
-+ public int hashCode() {
-+ return job.hashCode();
-+ }
-+}
---- ./jdk/src/share/classes/sun/print/RasterPrinterJob.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/print/RasterPrinterJob.java Wed May 07 19:26:47 2014 -0700
-@@ -879,6 +879,9 @@
- int x = bounds.x+bounds.width/3;
- int y = bounds.y+bounds.height/3;
- PrintService newService;
-+ // temporarily add an attribute pointing back to this job.
-+ PrinterJobWrapper jobWrapper = new PrinterJobWrapper(this);
-+ attributes.add(jobWrapper);
- try {
- newService =
- ServiceUI.printDialog(gc, x, y,
-@@ -891,6 +894,7 @@
- DocFlavor.SERVICE_FORMATTED.PAGEABLE,
- attributes);
- }
-+ attributes.remove(PrinterJobWrapper.class);
-
- if (newService == null) {
- return false;
---- ./jdk/src/share/classes/sun/print/ServiceDialog.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/print/ServiceDialog.java Wed May 07 19:26:47 2014 -0700
-@@ -46,6 +46,7 @@
- import java.awt.event.ItemListener;
- import java.awt.event.WindowEvent;
- import java.awt.event.WindowAdapter;
-+import java.awt.print.PrinterJob;
- import java.io.File;
- import java.io.FilePermission;
- import java.io.IOException;
-@@ -119,8 +120,6 @@
- private AppearancePanel pnlAppearance;
-
- private boolean isAWT = false;
--
--
- static {
- initResource();
- }
-@@ -801,9 +800,32 @@
- if (dialog != null) {
- dialog.show();
- } else {
-- // REMIND: may want to notify the user why we're
-- // disabling the button
-- btnProperties.setEnabled(false);
-+ DocumentPropertiesUI docPropertiesUI = null;
-+ try {
-+ docPropertiesUI =
-+ (DocumentPropertiesUI)uiFactory.getUI
-+ (DocumentPropertiesUI.DOCUMENTPROPERTIES_ROLE,
-+ DocumentPropertiesUI.DOCPROPERTIESCLASSNAME);
-+ } catch (Exception ex) {
-+ }
-+ if (docPropertiesUI != null) {
-+ PrinterJobWrapper wrapper = (PrinterJobWrapper)
-+ asCurrent.get(PrinterJobWrapper.class);
-+ if (wrapper == null) {
-+ return; // should not happen, defensive only.
-+ }
-+ PrinterJob job = wrapper.getPrinterJob();
-+ if (job == null) {
-+ return; // should not happen, defensive only.
-+ }
-+ PrintRequestAttributeSet newAttrs =
-+ docPropertiesUI.showDocumentProperties
-+ (job, ServiceDialog.this, psCurrent, asCurrent);
-+ if (newAttrs != null) {
-+ asCurrent.addAll(newAttrs);
-+ updatePanels();
-+ }
-+ }
- }
- }
- }
---- ./jdk/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java Wed May 07 19:26:47 2014 -0700
-@@ -525,6 +525,10 @@
-
- // get the mechanism token
- byte[] mechToken = initToken.getMechToken();
-+ if (mechToken == null) {
-+ throw new GSSException(GSSException.FAILURE, -1,
-+ "mechToken is missing");
-+ }
-
- /*
- * Select the best match between the list of mechs
---- ./jdk/src/share/classes/sun/security/krb5/Credentials.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/security/krb5/Credentials.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2000, 2013, 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
-@@ -62,7 +62,9 @@
- private static CredentialsCache cache;
- static boolean alreadyLoaded = false;
- private static boolean alreadyTried = false;
-- private static native Credentials acquireDefaultNativeCreds();
-+
-+ // Read native ticket with session key type in the given list
-+ private static native Credentials acquireDefaultNativeCreds(int[] eTypes);
-
- public Credentials(Ticket new_ticket,
- PrincipalName new_client,
-@@ -373,6 +375,8 @@
- // It assumes that the GSS call has
- // the privilege to access the default cache file.
-
-+ // This method is only called on Windows and Mac OS X, the native
-+ // acquireDefaultNativeCreds is also available on these platforms.
- public static synchronized Credentials acquireDefaultCreds() {
- Credentials result = null;
-
-@@ -416,10 +420,11 @@
- }
- if (alreadyLoaded) {
- // There is some native code
-- if (DEBUG)
-- System.out.println(">> Acquire default native Credentials");
-- result = acquireDefaultNativeCreds();
-- // only TGT with DES key will be returned by native method
-+ if (DEBUG) {
-+ System.out.println(">> Acquire default native Credentials");
-+ }
-+ result = acquireDefaultNativeCreds(
-+ EType.getDefaults("default_tkt_enctypes"));
- }
- }
- return result;
---- ./jdk/src/share/classes/sun/security/krb5/Realm.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/security/krb5/Realm.java Wed May 07 19:26:47 2014 -0700
-@@ -34,6 +34,7 @@
- import sun.security.krb5.internal.Krb5;
- import sun.security.util.*;
- import java.io.IOException;
-+import java.util.LinkedList;
- import java.util.StringTokenizer;
- import java.util.Vector;
- import java.util.Stack;
-@@ -301,21 +302,25 @@
- }
-
- /**
-- * Parses the [capaths] stanza of the configuration file
-- * for a list of realms to traverse
-- * to obtain credentials from the initiating realm cRealm to
-- * the target realm sRealm.
-- * @param cRealm the initiating realm
-- * @param sRealm the target realm
-- * @returns array of realms
-- * @ throws KrbException
-- */
--
-- /*
-- * parseCapaths works for a capaths organized such that
-- * for a given client realm C there is a tag C that
-- * contains subtags Ci ... Cn that completely define intermediate
-- * realms from C to target T. For example:
-+ * Parses the [capaths] stanza of the configuration file for a
-+ * list of realms to traverse to obtain credentials from the
-+ * initiating realm cRealm to the target realm sRealm.
-+ *
-+ * For a given client realm C there is a tag C in [capaths] whose
-+ * subtag S has a value which is a (possibly partial) path from C
-+ * to S. When the path is partial, it contains only the tail of the
-+ * full path. Values of other subtags will be used to build the full
-+ * path. The value "." means a direct path from C to S. If realm S
-+ * does not appear as a subtag, there is no path defined here.
-+ *
-+ * The implementation ignores all values which equals to C or S, or
-+ * a "." in multiple values, or any duplicated realm names.
-+ *
-+ * When a path value has more than two realms, they can be specified
-+ * with multiple key-value pairs each having a single value, but the
-+ * order must not change.
-+ *
-+ * For example:
- *
- * [capaths]
- * TIVOLI.COM = {
-@@ -324,19 +329,24 @@
- * LDAPCENTRAL.NET = .
- * }
- *
-- * The tag TIVOLI.COM contains subtags IBM.COM, IBM_LDAPCENTRAL.COM
-- * and LDAPCENTRAL.NET that completely define the path from TIVOLI.COM
-- * to IBM.COM (TIVOLI.COM->LADAPCENTRAL.NET->IBM_LDAPCENTRAL.COM->IBM
-- * or TIVOLI.COM->MOONLITE.ORG->IBM.COM).
-+ * TIVOLI.COM has a direct path to LDAPCENTRAL.NET, which has a direct
-+ * path to IBM_LDAPCENTRAL.COM. It also has a partial path to IBM.COM
-+ * being "IBM_LDAPCENTRAL.COM MOONLITE.ORG". Merging these info together,
-+ * a full path from TIVOLI.COM to IBM.COM will be
- *
-- * A direct path is assumed for an intermediary whose entry is not
-- * "closed" by a "." In the above example, TIVOLI.COM is assumed
-- * to have a direct path to MOONLITE.ORG and MOONLITE.COM
-- * in turn to IBM.COM.
-+ * TIVOLI.COM -> LDAPCENTRAL.NET -> IBM_LDAPCENTRAL.COM
-+ * -> IBM_LDAPCENTRAL.COM -> MOONLITE.ORG
-+ *
-+ * Please note the sRealm IBM.COM does not appear in the path.
-+ *
-+ * @param cRealm the initiating realm
-+ * @param sRealm the target realm, not the same as cRealm
-+ * @returns array of realms including at least cRealm as the first
-+ * element, or null if the config does not contain a sub-stanza
-+ * for cRealm in [capaths] or the sub-stanza does not contain
-+ * sRealm as a tag
- */
--
-- private static String[] parseCapaths(String cRealm, String sRealm) throws KrbException {
-- String[] retList = null;
-+ private static String[] parseCapaths(String cRealm, String sRealm) {
-
- Config cfg = null;
- try {
-@@ -358,323 +368,102 @@
- return null;
- }
-
-- String tempTarget = null, tempRealm = null;
-- Stack<String> iStack = new Stack<>();
-+ LinkedList<String> path = new LinkedList<>();
-
-- /*
-- * The half-established reversed-path, starting from the final target
-- * (sRealm), each item can be connected to by the next one.
-- * Might contains wrong item, if found, a bad track is performed
-- */
-- Vector<String> tempList = new Vector<>(8, 8);
-- tempList.add(sRealm);
--
-- int count = 0; // For debug only
-- tempTarget = sRealm;
--
-- out: do {
-- if (DEBUG) {
-- count++;
-- System.out.println(">>> Realm parseCapaths: loop " +
-- count + ": target=" + tempTarget);
-- }
--
-- if (intermediaries != null &&
-- !intermediaries.equals(".") &&
-- !intermediaries.equals(cRealm)) {
-- if (DEBUG) {
-- System.out.println(">>> Realm parseCapaths: loop " +
-- count + ": intermediaries=[" +
-- intermediaries + "]");
-- }
--
-- /*
-- * We have one or more space-separated intermediary realms.
-- * Stack them. A null is always added between intermedies of
-- * different targets. When this null is popped, it means none
-- * of the intermedies for this target is useful (because of
-- * infinite loop), the target is then removed from the partial
-- * tempList, and the next possible intermediary is tried.
-- */
-- iStack.push(null);
-- String[] ints = intermediaries.split("\\s+");
-- for (int i = ints.length-1; i>=0; i--)
-- {
-- tempRealm = ints[i];
-- if (tempRealm.equals(PrincipalName.REALM_COMPONENT_SEPARATOR_STR)) {
-- break out;
-- }
-- if (!tempList.contains(tempRealm)) {
-- iStack.push(tempRealm);
-- if (DEBUG) {
-- System.out.println(">>> Realm parseCapaths: loop " +
-- count +
-- ": pushed realm on to stack: " +
-- tempRealm);
-- }
-- } else if (DEBUG) {
-- System.out.println(">>> Realm parseCapaths: loop " +
-- count +
-- ": ignoring realm: [" +
-- tempRealm + "]");
-- }
-- }
-- } else {
-- if (DEBUG) {
-- System.out.println(">>> Realm parseCapaths: loop " +
-- count +
-- ": no intermediaries");
-- }
-+ String head = sRealm;
-+ while (true) {
-+ String value = cfg.getDefault(head, cRealm);
-+ if (value == null) {
- break;
- }
--
-- /*
-- * Get next intermediary realm from the stack
-- */
--
-- try {
-- while ((tempTarget = iStack.pop()) == null) {
-- tempList.removeElementAt(tempList.size()-1);
-- if (DEBUG) {
-- System.out.println(">>> Realm parseCapaths: backtrack, remove tail");
-- }
-+ String[] more = value.split("\\s+");
-+ boolean changed = false;
-+ for (int i=more.length-1; i>=0; i--) {
-+ if (path.contains(more[i])
-+ || more[i].equals(".")
-+ || more[i].equals(cRealm)
-+ || more[i].equals(sRealm)
-+ || more[i].equals(head)) {
-+ // Ignore invalid values
-+ continue;
- }
-- } catch (EmptyStackException exc) {
-- tempTarget = null;
-+ changed = true;
-+ path.addFirst(more[i]);
- }
--
-- if (tempTarget == null) {
-- /*
-- * No more intermediaries. We're done.
-- */
-- break;
-- }
--
-- tempList.add(tempTarget);
--
-- if (DEBUG) {
-- System.out.println(">>> Realm parseCapaths: loop " + count +
-- ": added intermediary to list: " +
-- tempTarget);
-- }
--
-- intermediaries = cfg.getDefault(tempTarget, cRealm);
--
-- } while (true);
--
-- if (tempList.isEmpty()) {
-- return null;
-+ if (!changed) break;
-+ head = path.getFirst();
- }
--
-- // From (SREALM, T1, T2) to (CREALM, T2, T1)
-- retList = new String[tempList.size()];
-- retList[0] = cRealm;
-- for (int i=1; i<tempList.size(); i++) {
-- retList[i] = tempList.elementAt(tempList.size()-i);
-- }
--
-- if (DEBUG && retList != null) {
-- for (int i = 0; i < retList.length; i++) {
-- System.out.println(">>> Realm parseCapaths [" + i +
-- "]=" + retList[i]);
-- }
-- }
--
-- return retList;
-- }
-+ path.addFirst(cRealm);
-+ return path.toArray(new String[path.size()]);
-+ }
-
- /**
- * Build a list of realm that can be traversed
- * to obtain credentials from the initiating realm cRealm
- * for a service in the target realm sRealm.
- * @param cRealm the initiating realm
-- * @param sRealm the target realm
-- * @returns array of realms
-- * @throws KrbException
-+ * @param sRealm the target realm, not the same as cRealm
-+ * @returns array of realms including cRealm as the first element
- */
-- private static String[] parseHierarchy(String cRealm, String sRealm)
-- throws KrbException
-- {
-- String[] retList = null;
-+ private static String[] parseHierarchy(String cRealm, String sRealm) {
-
-- // Parse the components and determine common part, if any.
-+ String[] cComponents = cRealm.split("\\.");
-+ String[] sComponents = sRealm.split("\\.");
-
-- String[] cComponents = null;
-- String[] sComponents = null;
-+ int cPos = cComponents.length;
-+ int sPos = sComponents.length;
-
-- StringTokenizer strTok =
-- new StringTokenizer(cRealm,
-- PrincipalName.REALM_COMPONENT_SEPARATOR_STR);
--
-- // Parse cRealm
--
-- int cCount = strTok.countTokens();
-- cComponents = new String[cCount];
--
-- for (cCount = 0; strTok.hasMoreTokens(); cCount++) {
-- cComponents[cCount] = strTok.nextToken();
-+ boolean hasCommon = false;
-+ for (sPos--, cPos--; sPos >=0 && cPos >= 0 &&
-+ sComponents[sPos].equals(cComponents[cPos]);
-+ sPos--, cPos--) {
-+ hasCommon = true;
- }
-
-- if (DEBUG) {
-- System.out.println(">>> Realm parseHierarchy: cRealm has " +
-- cCount + " components:");
-- int j = 0;
-- while (j < cCount) {
-- System.out.println(">>> Realm parseHierarchy: " +
-- "cComponents["+j+"]=" + cComponents[j++]);
-- }
-+ // For those with common components:
-+ // length pos
-+ // SITES1.SALES.EXAMPLE.COM 4 1
-+ // EVERYWHERE.EXAMPLE.COM 3 0
-+
-+ // For those without common components:
-+ // length pos
-+ // DEVEL.EXAMPLE.COM 3 2
-+ // PROD.EXAMPLE.ORG 3 2
-+
-+ LinkedList<String> path = new LinkedList<>();
-+
-+ // Un-common ones for client side
-+ for (int i=0; i<=cPos; i++) {
-+ path.addLast(subStringFrom(cComponents, i));
- }
-
-- // Parse sRealm
--
-- strTok = new StringTokenizer(sRealm,
-- PrincipalName.REALM_COMPONENT_SEPARATOR_STR);
--
-- int sCount = strTok.countTokens();
-- sComponents = new String[sCount];
--
-- for (sCount = 0; strTok.hasMoreTokens(); sCount++) {
-- sComponents[sCount] = strTok.nextToken();
-+ // Common one
-+ if (hasCommon) {
-+ path.addLast(subStringFrom(cComponents, cPos+1));
- }
-
-- if (DEBUG) {
-- System.out.println(">>> Realm parseHierarchy: sRealm has " +
-- sCount + " components:");
-- int j = 0;
-- while (j < sCount) {
-- System.out.println(">>> Realm parseHierarchy: sComponents["+j+
-- "]=" + sComponents[j++]);
-- }
-+ // Un-common ones for server side
-+ for (int i=sPos; i>=0; i--) {
-+ path.addLast(subStringFrom(sComponents, i));
- }
-
-- // Determine common components, if any.
-+ // Remove sRealm from path. Note that it might be added at last loop
-+ // or as a common component, if sRealm is a parent of cRealm
-+ path.removeLast();
-
-- int commonComponents = 0;
--
-- //while (sCount > 0 && cCount > 0 &&
-- // sComponents[--sCount].equals(cComponents[--cCount]))
--
-- for (sCount--, cCount--; sCount >=0 && cCount >= 0 &&
-- sComponents[sCount].equals(cComponents[cCount]);
-- sCount--, cCount--) {
-- commonComponents++;
-- }
--
-- int cCommonStart = -1;
-- int sCommonStart = -1;
--
-- int links = 0;
--
-- if (commonComponents > 0) {
-- sCommonStart = sCount+1;
-- cCommonStart = cCount+1;
--
-- // components from common to ancestors
-- links += sCommonStart;
-- links += cCommonStart;
-- } else {
-- links++;
-- }
--
-- if (DEBUG) {
-- if (commonComponents > 0) {
-- System.out.println(">>> Realm parseHierarchy: " +
-- commonComponents + " common component" +
-- (commonComponents > 1 ? "s" : " "));
--
-- System.out.println(">>> Realm parseHierarchy: common part "
-- +
-- "in cRealm (starts at index " +
-- cCommonStart + ")");
-- System.out.println(">>> Realm parseHierarchy: common part in sRealm (starts at index " +
-- sCommonStart + ")");
--
--
-- String commonPart = substring(cRealm, cCommonStart);
-- System.out.println(">>> Realm parseHierarchy: common part in cRealm=" +
-- commonPart);
--
-- commonPart = substring(sRealm, sCommonStart);
-- System.out.println(">>> Realm parseHierarchy: common part in sRealm=" +
-- commonPart);
--
-- } else
-- System.out.println(">>> Realm parseHierarchy: no common part");
-- }
--
-- if (DEBUG) {
-- System.out.println(">>> Realm parseHierarchy: total links=" + links);
-- }
--
-- retList = new String[links];
--
-- retList[0] = new String(cRealm);
--
-- if (DEBUG) {
-- System.out.println(">>> Realm parseHierarchy A: retList[0]=" +
-- retList[0]);
-- }
--
-- // For an initiator realm A.B.C.D.COM,
-- // build a list krbtgt/B.C.D.COM@A.B.C.D.COM up to the common part,
-- // ie the issuer realm is the immediate descendant
-- // of the target realm.
--
-- String cTemp = null, sTemp = null;
-- int i;
-- for (i = 1, cCount = 0; i < links && cCount < cCommonStart; cCount++) {
-- sTemp = substring(cRealm, cCount+1);
-- //cTemp = substring(cRealm, cCount);
-- retList[i++] = new String(sTemp);
--
-- if (DEBUG) {
-- System.out.println(">>> Realm parseHierarchy B: retList[" +
-- (i-1) +"]="+retList[i-1]);
-- }
-- }
--
--
-- for (sCount = sCommonStart; i < links && sCount - 1 > 0; sCount--) {
-- sTemp = substring(sRealm, sCount-1);
-- //cTemp = substring(sRealm, sCount);
-- retList[i++] = new String(sTemp);
-- if (DEBUG) {
-- System.out.println(">>> Realm parseHierarchy D: retList[" +
-- (i-1) +"]="+retList[i-1]);
-- }
-- }
--
-- return retList;
-+ return path.toArray(new String[path.size()]);
- }
-
-- private static String substring(String realm, int componentIndex)
-- {
-- int i = 0 , j = 0, len = realm.length();
--
-- while(i < len && j != componentIndex) {
-- if (realm.charAt(i++) != PrincipalName.REALM_COMPONENT_SEPARATOR)
-- continue;
-- j++;
-+ /**
-+ * Creates a realm name using components from the given postion.
-+ * For example, subStringFrom({"A", "B", "C"}, 1) is "B.C".
-+ */
-+ private static String subStringFrom(String[] components, int from) {
-+ StringBuilder sb = new StringBuilder();
-+ for (int i=from; i<components.length; i++) {
-+ if (sb.length() != 0) sb.append('.');
-+ sb.append(components[i]);
- }
--
-- return realm.substring(i);
-+ return sb.toString();
- }
--
-- static int getRandIndex(int arraySize) {
-- return (int)(Math.random() * 16384.0) % arraySize;
-- }
--
-- static void printNames(String[] names) {
-- if (names == null || names.length == 0)
-- return;
--
-- int len = names.length;
-- int i = 0;
-- System.out.println("List length = " + len);
-- while (i < names.length) {
-- System.out.println("["+ i +"]=" + names[i]);
-- i++;
-- }
-- }
--
- }
---- ./jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java Wed May 07 19:26:47 2014 -0700
-@@ -155,13 +155,11 @@
- }
-
- /*
-- * No tgt found. Try to get one for a
-- * realm as close to the target as possible.
-- * That means traversing the realms list backwards.
-+ * No tgt found. Let's go thru the realms list one by one.
- */
-
-- for (newTgt = null, k = realms.length - 1;
-- newTgt == null && k > i; k--)
-+ for (newTgt = null, k = i+1;
-+ newTgt == null && k < realms.length; k++)
- {
-
- tempService = new ServiceName(
---- ./jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java Wed May 07 19:26:47 2014 -0700
-@@ -172,7 +172,7 @@
- /*
- * Drives the protocol state machine.
- */
-- private int connectionState;
-+ private volatile int connectionState;
-
- /*
- * Flag indicating if the next record we receive MUST be a Finished
-@@ -1443,7 +1443,7 @@
- * Return whether the socket has been explicitly closed by the application.
- */
- public boolean isClosed() {
-- return getConnectionState() == cs_APP_CLOSED;
-+ return connectionState == cs_APP_CLOSED;
- }
-
- /**
---- ./jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java Wed May 07 19:26:47 2014 -0700
-@@ -55,7 +55,7 @@
- {"Usage.jarsigner.options.jar.file.alias",
- "\u7528\u6CD5: jarsigner [\u9009\u9879] jar-file \u522B\u540D"},
- {".jarsigner.verify.options.jar.file.alias.",
-- " jarsigner -verify [options] jar-file [alias...]"},
-+ " jarsigner -verify [\u9009\u9879] jar-file [\u522B\u540D...]"},
- {".keystore.url.keystore.location",
- "[-keystore <url>] \u5BC6\u94A5\u5E93\u4F4D\u7F6E"},
- {".storepass.password.password.for.keystore.integrity",
-@@ -65,7 +65,7 @@
- {".keypass.password.password.for.private.key.if.different.",
- "[-keypass <\u53E3\u4EE4>] \u79C1\u6709\u5BC6\u94A5\u7684\u53E3\u4EE4 (\u5982\u679C\u4E0D\u540C)"},
- {".certchain.file.name.of.alternative.certchain.file",
-- "[-certchain <file>] \u66FF\u4EE3 certchain \u6587\u4EF6\u7684\u540D\u79F0"},
-+ "[-certchain <\u6587\u4EF6>] \u66FF\u4EE3\u8BC1\u4E66\u94FE\u6587\u4EF6\u7684\u540D\u79F0"},
- {".sigfile.file.name.of.SF.DSA.file",
- "[-sigfile <\u6587\u4EF6>] .SF/.DSA \u6587\u4EF6\u7684\u540D\u79F0"},
- {".signedjar.file.name.of.signed.JAR.file",
---- ./jdk/src/share/classes/sun/swing/SwingUtilities2.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/swing/SwingUtilities2.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2002, 2013, 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
-@@ -34,6 +34,7 @@
- import java.awt.geom.*;
- import java.awt.print.PrinterGraphics;
- import java.text.Bidi;
-+import java.text.CharacterIterator;
- import java.text.AttributedCharacterIterator;
- import java.text.AttributedString;
-
-@@ -503,22 +504,25 @@
- * it to fit in the screen width. This distributes the spacing
- * more evenly than directly laying out to the screen advances.
- */
-- float screenWidth = (float)
-- g2d.getFont().getStringBounds(text, DEFAULT_FRC).getWidth();
-- TextLayout layout = createTextLayout(c, text, g2d.getFont(),
-- g2d.getFontRenderContext());
-+ String trimmedText = trimTrailingSpaces(text);
-+ if (!trimmedText.isEmpty()) {
-+ float screenWidth = (float) g2d.getFont().getStringBounds
-+ (trimmedText, DEFAULT_FRC).getWidth();
-+ TextLayout layout = createTextLayout(c, text, g2d.getFont(),
-+ g2d.getFontRenderContext());
-
-- layout = layout.getJustifiedLayout(screenWidth);
-- /* Use alternate print color if specified */
-- Color col = g2d.getColor();
-- if (col instanceof PrintColorUIResource) {
-- g2d.setColor(((PrintColorUIResource)col).getPrintColor());
-+ layout = layout.getJustifiedLayout(screenWidth);
-+ /* Use alternate print color if specified */
-+ Color col = g2d.getColor();
-+ if (col instanceof PrintColorUIResource) {
-+ g2d.setColor(((PrintColorUIResource)col).getPrintColor());
-+ }
-+
-+ layout.draw(g2d, x, y);
-+
-+ g2d.setColor(col);
- }
-
-- layout.draw(g2d, x, y);
--
-- g2d.setColor(col);
--
- return;
- }
- }
-@@ -777,25 +781,27 @@
- if (frc != null &&
- !isFontRenderContextPrintCompatible
- (deviceFontRenderContext, frc)) {
-- TextLayout layout =
-- createTextLayout(c, new String(data, offset, length),
-- g2d.getFont(),
-- deviceFontRenderContext);
-- float screenWidth = (float)g2d.getFont().
-- getStringBounds(data, offset, offset + length, frc).
-- getWidth();
-- layout = layout.getJustifiedLayout(screenWidth);
-
-- /* Use alternate print color if specified */
-- Color col = g2d.getColor();
-- if (col instanceof PrintColorUIResource) {
-- g2d.setColor(((PrintColorUIResource)col).getPrintColor());
-+ String text = new String(data, offset, length);
-+ TextLayout layout = new TextLayout(text, g2d.getFont(),
-+ deviceFontRenderContext);
-+ String trimmedText = trimTrailingSpaces(text);
-+ if (!trimmedText.isEmpty()) {
-+ float screenWidth = (float)g2d.getFont().
-+ getStringBounds(trimmedText, frc).getWidth();
-+ layout = layout.getJustifiedLayout(screenWidth);
-+
-+ /* Use alternate print color if specified */
-+ Color col = g2d.getColor();
-+ if (col instanceof PrintColorUIResource) {
-+ g2d.setColor(((PrintColorUIResource)col).getPrintColor());
-+ }
-+
-+ layout.draw(g2d,x,y);
-+
-+ g2d.setColor(col);
- }
-
-- layout.draw(g2d,x,y);
--
-- g2d.setColor(col);
--
- return nextX;
- }
- }
-@@ -876,14 +882,23 @@
- } else {
- frc = g2d.getFontRenderContext();
- }
-- TextLayout layout = new TextLayout(iterator, frc);
-+ TextLayout layout;
- if (isPrinting) {
- FontRenderContext deviceFRC = g2d.getFontRenderContext();
- if (!isFontRenderContextPrintCompatible(frc, deviceFRC)) {
-- float screenWidth = layout.getAdvance();
- layout = new TextLayout(iterator, deviceFRC);
-- layout = layout.getJustifiedLayout(screenWidth);
-+ AttributedCharacterIterator trimmedIt =
-+ getTrimmedTrailingSpacesIterator(iterator);
-+ if (trimmedIt != null) {
-+ float screenWidth = new TextLayout(trimmedIt, frc).
-+ getAdvance();
-+ layout = layout.getJustifiedLayout(screenWidth);
-+ }
-+ } else {
-+ layout = new TextLayout(iterator, frc);
- }
-+ } else {
-+ layout = new TextLayout(iterator, frc);
- }
- layout.draw(g2d, x, y);
- retVal = layout.getAdvance();
-@@ -1035,6 +1050,39 @@
- return (g instanceof PrinterGraphics || g instanceof PrintGraphics);
- }
-
-+ private static String trimTrailingSpaces(String s) {
-+ int i = s.length() - 1;
-+ while(i >= 0 && Character.isWhitespace(s.charAt(i))) {
-+ i--;
-+ }
-+ return s.substring(0, i + 1);
-+ }
-+
-+ private static AttributedCharacterIterator getTrimmedTrailingSpacesIterator
-+ (AttributedCharacterIterator iterator) {
-+ int curIdx = iterator.getIndex();
-+
-+ char c = iterator.last();
-+ while(c != CharacterIterator.DONE && Character.isWhitespace(c)) {
-+ c = iterator.previous();
-+ }
-+
-+ if (c != CharacterIterator.DONE) {
-+ int endIdx = iterator.getIndex();
-+
-+ if (endIdx == iterator.getEndIndex() - 1) {
-+ iterator.setIndex(curIdx);
-+ return iterator;
-+ } else {
-+ AttributedString trimmedText = new AttributedString(iterator,
-+ iterator.getBeginIndex(), endIdx + 1);
-+ return trimmedText.getIterator();
-+ }
-+ } else {
-+ return null;
-+ }
-+ }
-+
- /**
- * Determines whether the SelectedTextColor should be used for painting text
- * foreground for the specified highlight.
---- ./jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties Wed May 07 19:26:47 2014 -0700
-@@ -44,4 +44,4 @@
- out.inflated=\ inflado: {0}
- out.size=(entrada = {0}) (sa\u00EDda= {1})
-
--usage=Uso: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] arquivos ...\nOp\u00E7\u00F5es:\n -c cria novo arquivo compactado\n -t lista o sum\u00E1rio do arquivo compactado\n -x extrai arquivos com o nome (ou todos) do arquivo compactado\n -u atualizar o arquivo compactado existente\n -v gera sa\u00EDda detalhada na sa\u00EDda padr\u00E3o\n -f especifica o nome do arquivo do arquivo compactado\n -m inclui as informa\u00E7\u00F5es do manifesto do arquivo de manifesto especificado\n -e especifica o ponto de entrada da aplica\u00E7\u00E3o para aplica\u00E7\u00E3o independente \n empacotando em um arquivo jar execut\u00E1vel\n -0 armazena somente; n\u00E3o usa compacta\u00E7\u00E3o ZIP\n -M n\u00E3o cria um arquivo de manifesto para as entradas\n -i gera informa\u00E7\u00F5es de \u00EDndice para os arquivos especificados\n -C altera para o diret\u00F3rio e inclui o arquivo seguinte\nSe nenhum arquivo for um diret\u00F3rio, ent\u00E3o ser\u00E1 processado repetidamente.\nO nome do arquivo de manifesto, o nome do arquivo compactado e o nome do ponto de entrada s\u00E3o\nespecificados na mesma ordem dos flags 'm', 'f' e 'e'.\n\nExemplo 1: para arquivar dois arquivos de classe em um arquivo compactado com o nome classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nExemplo 2: use um arquivo de manifesto existente 'mymanifest' e arquive todos os\n arquivos no diret\u00F3rio foo/ na 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n
-+usage=Uso: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] arquivos ...\nOp\u00E7\u00F5es:\n -c cria novo arquivo compactado\n -t lista o sum\u00E1rio do arquivo compactado\n -x extrai arquivos com o nome (ou todos) do arquivo compactado\n -u atualiza o arquivo compactado existente\n -v gera sa\u00EDda detalhada na sa\u00EDda padr\u00E3o\n -f especifica o nome do arquivo do arquivo compactado\n -m inclui as informa\u00E7\u00F5es do manifesto do arquivo de manifesto especificado\n -e especifica o ponto de entrada da aplica\u00E7\u00E3o para aplica\u00E7\u00E3o independente \n empacotando em um arquivo jar execut\u00E1vel\n -0 armazena somente; n\u00E3o usa compacta\u00E7\u00E3o ZIP\n -M n\u00E3o cria um arquivo de manifesto para as entradas\n -i gera informa\u00E7\u00F5es de \u00EDndice para os arquivos especificados\n -C passa para o diret\u00F3rio especificado e inclui o arquivo a seguir\nSe um arquivo tamb\u00E9m for um diret\u00F3rio, ele ser\u00E1 processado repetidamente.\nO nome do arquivo de manifesto, o nome do arquivo compactado e o nome do ponto de entrada s\u00E3o\nespecificados na mesma ordem dos flags 'm', 'f' e 'e'.\n\nExemplo 1: para arquivar dois arquivos de classe em um arquivo compactado denominado classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nExemplo 2: use um arquivo de manifesto existente 'mymanifest' e arquive todos os\n arquivos no diret\u00F3rio foo/ na 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n
---- ./jdk/src/share/classes/sun/tools/jconsole/Messages.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/tools/jconsole/Messages.java Wed May 07 19:26:47 2014 -0700
-@@ -36,7 +36,7 @@
- Resources.initializeMessages(Messages.class, BUNDLE_NAME);
- }
- // TODO:
-- // The names of some of the constants below looks strange.
-+ // The names of some of the constants below look strange.
- // That's because they were generated programmatically
- // from the messages. They should be cleaned up,
- // ___ should be removed etc.
-@@ -265,6 +265,7 @@
- public static String SUMMARY_TAB_TAB_NAME;
- public static String SUMMARY_TAB_VM_VERSION;
- public static String THREADS;
-+ public static String THREAD_TAB_INFO_LABEL_FORMAT;
- public static String THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME;
- public static String THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME;
- public static String THRESHOLD;
-@@ -304,9 +305,9 @@
- public static String WRITABLE;
- public static String CONNECTION_FAILED1;
- public static String CONNECTION_FAILED2;
-+ public static String CONNECTION_FAILED_SSL1;
-+ public static String CONNECTION_FAILED_SSL2;
- public static String CONNECTION_LOST1;
-- public static String CONNECTION_INSECURE1;
-- public static String CONNECTION_INSECURE2;
- public static String CONNECTING_TO1;
- public static String CONNECTING_TO2;
- public static String DEADLOCK_TAB;
---- ./jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java Wed May 07 19:26:47 2014 -0700
-@@ -213,8 +213,8 @@
- String[] strings2 = formatKByteStrings(u.getCommitted());
- append(Messages.COMMITTED_MEMORY, strings2[0]);
- append(Messages.SUMMARY_TAB_PENDING_FINALIZATION_LABEL,
-- Messages.SUMMARY_TAB_PENDING_FINALIZATION_VALUE,
-- memoryBean.getObjectPendingFinalizationCount());
-+ Resources.format(Messages.SUMMARY_TAB_PENDING_FINALIZATION_VALUE,
-+ memoryBean.getObjectPendingFinalizationCount()));
- append(endTable);
-
- append(newTable);
---- ./jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java Wed May 07 19:26:47 2014 -0700
-@@ -66,9 +66,6 @@
-
- private static final Border thinEmptyBorder = new EmptyBorder(2, 2, 2, 2);
-
-- private static final String infoLabelFormat = "ThreadTab.infoLabelFormat";
--
--
- /*
- Hierarchy of panels and layouts for this tab:
-
-@@ -690,7 +687,7 @@
-
- private void updateThreadsInfo(long tlCount, long tpCount, long ttCount, long timeStamp) {
- getPlotter().addValues(timeStamp, tlCount);
-- getInfoLabel().setText(Resources.format(infoLabelFormat, tlCount, tpCount, ttCount));
-+ getInfoLabel().setText(Resources.format(Messages.THREAD_TAB_INFO_LABEL_FORMAT, tlCount, tpCount, ttCount));
- }
- }
- }
---- ./jdk/src/share/classes/sun/tools/jconsole/VMPanel.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/tools/jconsole/VMPanel.java Wed May 07 19:26:47 2014 -0700
-@@ -469,8 +469,8 @@
- msgExplanation = Resources.format(Messages.CONNECTING_TO2, getConnectionName());
- buttonStr = Messages.RECONNECT;
- } else if (shouldUseSSL) {
-- msgTitle = Messages.CONNECTION_INSECURE1;
-- msgExplanation = Resources.format(Messages.CONNECTION_INSECURE2, getConnectionName());
-+ msgTitle = Messages.CONNECTION_FAILED_SSL1;
-+ msgExplanation = Resources.format(Messages.CONNECTION_FAILED_SSL2, getConnectionName());
- buttonStr = Messages.INSECURE;
- } else {
- msgTitle = Messages.CONNECTION_FAILED1;
---- ./jdk/src/share/classes/sun/tools/jconsole/resources/messages.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/tools/jconsole/resources/messages.properties Wed May 07 19:26:47 2014 -0700
-@@ -223,6 +223,7 @@
- SUMMARY_TAB_TAB_NAME=VM Summary
- SUMMARY_TAB_VM_VERSION={0} version {1}
- THREADS=Threads
-+THREAD_TAB_INFO_LABEL_FORMAT=<html>Live: {0} Peak: {1} Total: {2}</html>
- THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=Thread Information
- THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=Chart for number of threads.
- THRESHOLD=Threshold
-@@ -244,7 +245,7 @@
- UNREGISTER=Unregister
- UPTIME=Uptime
- USAGE_THRESHOLD=Usage Threshold
--REMOTE_TF_USAGE=<b>Usage</b>: &lt;hostname&gt;:&lt;port&gt; OR service:jmx:&lt;protocol&gt;:&lt;sap&gt;
-+REMOTE_TF_USAGE=<b>Usage</b>: &&lt;hostname&&gt;:&&lt;port&&gt; OR service:jmx:&&lt;protocol&&gt;:&&lt;sap&&gt;
- USED=Used
- USERNAME_COLON_=&Username:
- USERNAME_ACCESSIBLE_NAME=User Name
-@@ -262,9 +263,9 @@
- WRITABLE=Writable
- CONNECTION_FAILED1=Connection Failed: Retry?
- CONNECTION_FAILED2=The connection to {0} did not succeed.<br>Would you like to try again?
-+CONNECTION_FAILED_SSL1=Secure connection failed. Retry insecurely?
-+CONNECTION_FAILED_SSL2=The connection to {0} could not be made using SSL.<br>Would you like to try without SSL?<br>(Username and password will be sent in plain text.)
- CONNECTION_LOST1=Connection Lost: Reconnect?
--CONNECTION_INSECURE1=ConnectionFailedSSL1
--CONNECTION_INSECURE2=ConnectionFailedSSL2
- CONNECTING_TO1=Connecting to {0}
- CONNECTING_TO2=You are currently being connected to {0}.<br>This will take a few moments.
- DEADLOCK_TAB=Deadlock
---- ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties Wed May 07 19:26:47 2014 -0700
-@@ -52,7 +52,7 @@
- CONNECT_DIALOG_STATUS_BAR_ACCESSIBLE_NAME=\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u30D0\u30FC
- CONNECT_DIALOG_TITLE=JConsole: \u65B0\u898F\u63A5\u7D9A
- CONNECTED_PUNCTUATION_CLICK_TO_DISCONNECT_=\u63A5\u7D9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u5207\u65AD\u3057\u307E\u3059\u3002
--CONNECTION_FAILED=\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F
-+CONNECTION_FAILED=\u63A5\u7D9A\u304C\u5931\u6557\u3057\u307E\u3057\u305F
- CONNECTION=\u63A5\u7D9A(&C)
- CONNECTION_NAME=\u63A5\u7D9A\u540D
- CONNECTION_NAME__DISCONNECTED_={0} (\u5207\u65AD\u6E08)
-@@ -88,8 +88,8 @@
- FILE_CHOOSER_FILE_EXISTS_OK_OPTION=\u7F6E\u63DB
- FILE_CHOOSER_FILE_EXISTS_TITLE=\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u3066\u3044\u307E\u3059
- FILE_CHOOSER_SAVED_FILE=<html>\u30D5\u30A1\u30A4\u30EB\u306B\u4FDD\u5B58\u3057\u307E\u3057\u305F:<br>{0}<br>({1}\u30D0\u30A4\u30C8)
--FILE_CHOOSER_SAVE_FAILED_MESSAGE=<html><center>\u30D5\u30A1\u30A4\u30EB\u3078\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F:<br>{0}<br>{1}
--FILE_CHOOSER_SAVE_FAILED_TITLE=\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F
-+FILE_CHOOSER_SAVE_FAILED_MESSAGE=<html><center>\u30D5\u30A1\u30A4\u30EB\u3078\u306E\u4FDD\u5B58\u304C\u5931\u6557\u3057\u307E\u3057\u305F:<br>{0}<br>{1}
-+FILE_CHOOSER_SAVE_FAILED_TITLE=\u4FDD\u5B58\u304C\u5931\u6557\u3057\u307E\u3057\u305F
- FREE_PHYSICAL_MEMORY=\u7A7A\u304D\u7269\u7406\u30E1\u30E2\u30EA\u30FC
- FREE_SWAP_SPACE=\u7A7A\u304D\u30B9\u30EF\u30C3\u30D7\u30FB\u30B9\u30DA\u30FC\u30B9
- GARBAGE_COLLECTOR=\u30AC\u30D9\u30FC\u30B8\u30FB\u30B3\u30EC\u30AF\u30BF
-@@ -161,7 +161,7 @@
- MESSAGE=\u30E1\u30C3\u30BB\u30FC\u30B8
- METHOD_SUCCESSFULLY_INVOKED=\u30E1\u30BD\u30C3\u30C9\u304C\u6B63\u5E38\u306B\u8D77\u52D5\u3055\u308C\u307E\u3057\u305F
- MINIMIZE_ALL=\u3059\u3079\u3066\u6700\u5C0F\u5316(&M)
--MONITOR_LOCKED=\ \ \ - \u30ED\u30C3\u30AF\u6E08{0}\n
-+MONITOR_LOCKED=\ - \u30ED\u30C3\u30AF\u6E08{0}\n
- NAME=\u540D\u524D
- NAME_AND_BUILD={0} (\u30D3\u30EB\u30C9{1})
- NAME_STATE=\u540D\u524D: {0}\n\u72B6\u614B: {1}\n
-@@ -205,6 +205,7 @@
- PROCESS_CPU_TIME=\u30D7\u30ED\u30BB\u30B9CPU\u6642\u9593
- READABLE=\u8AAD\u53D6\u308A\u53EF\u80FD
- RECONNECT=\u518D\u63A5\u7D9A
-+INSECURE=\u975E\u30BB\u30AD\u30E5\u30A2
- REMOTE_PROCESS_COLON=\u30EA\u30E2\u30FC\u30C8\u30FB\u30D7\u30ED\u30BB\u30B9(&R):
- REMOTE_PROCESS_TEXT_FIELD_ACCESSIBLE_NAME=\u30EA\u30E2\u30FC\u30C8\u30FB\u30D7\u30ED\u30BB\u30B9
- RESTORE_ALL=\u3059\u3079\u3066\u5FA9\u5143(&R)
-@@ -222,6 +223,7 @@
- SUMMARY_TAB_TAB_NAME=VM\u30B5\u30DE\u30EA\u30FC
- SUMMARY_TAB_VM_VERSION={0}\u30D0\u30FC\u30B8\u30E7\u30F3{1}
- THREADS=\u30B9\u30EC\u30C3\u30C9
-+THREAD_TAB_INFO_LABEL_FORMAT=<html>\u5B9F\u884C\u4E2D: {0} \u30D4\u30FC\u30AF: {1} \u5408\u8A08: {2}</html>
- THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u60C5\u5831
- THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u30B9\u30EC\u30C3\u30C9\u6570\u306E\u30C1\u30E3\u30FC\u30C8\u3002
- THRESHOLD=\u3057\u304D\u3044\u5024
-@@ -243,7 +245,7 @@
- UNREGISTER=\u767B\u9332\u89E3\u9664
- UPTIME=\u7A3C\u50CD\u6642\u9593
- USAGE_THRESHOLD=\u4F7F\u7528\u3057\u304D\u3044\u5024
--REMOTE_TF_USAGE=<b>\u4F7F\u7528\u65B9\u6CD5</b>: &lt;hostname&gt;:&lt;port&gt;\u307E\u305F\u306Fservice:jmx:&lt;protocol&gt;:&lt;sap&gt;
-+REMOTE_TF_USAGE=<b>\u4F7F\u7528\u65B9\u6CD5</b>: &&lt;hostname&&gt;:&&lt;port&&gt; OR service:jmx:&&lt;protocol&&gt;:&&lt;sap&&gt;
- USED=\u4F7F\u7528\u6E08
- USERNAME_COLON_=\u30E6\u30FC\u30B6\u30FC\u540D(&U):
- USERNAME_ACCESSIBLE_NAME=\u30E6\u30FC\u30B6\u30FC\u540D
-@@ -259,8 +261,10 @@
- WINDOW=\u30A6\u30A3\u30F3\u30C9\u30A6(&W)
- WINDOWS=\u30A6\u30A3\u30F3\u30C9\u30A6
- WRITABLE=\u66F8\u8FBC\u307F\u53EF\u80FD
--CONNECTION_FAILED1=\u63A5\u7D9A\u306B\u5931\u6557\u3057\u307E\u3057\u305F: \u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002
--CONNECTION_FAILED2={0}\u3078\u306E\u63A5\u7D9A\u304C\u6210\u529F\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002<br>\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u307E\u3059\u304B\u3002
-+CONNECTION_FAILED1=\u63A5\u7D9A\u304C\u5931\u6557\u3057\u307E\u3057\u305F: \u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002
-+CONNECTION_FAILED2={0}\u3078\u306E\u63A5\u7D9A\u304C\u6210\u529F\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002<br>\u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002
-+CONNECTION_FAILED_SSL1=\u30BB\u30AD\u30E5\u30A2\u306A\u63A5\u7D9A\u304C\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u975E\u30BB\u30AD\u30E5\u30A2\u3067\u518D\u8A66\u884C\u3057\u307E\u3059\u304B\u3002
-+CONNECTION_FAILED_SSL2=SSL\u3092\u4F7F\u7528\u3057\u3066{0}\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3002<br>SSL\u306A\u3057\u3067\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002<br>(\u30E6\u30FC\u30B6\u30FC\u540D\u304A\u3088\u3073\u30D1\u30B9\u30EF\u30FC\u30C9\u306F\u30D7\u30EC\u30FC\u30F3\u30FB\u30C6\u30AD\u30B9\u30C8\u3067\u9001\u4FE1\u3055\u308C\u307E\u3059\u3002)
- CONNECTION_LOST1=\u63A5\u7D9A\u304C\u5931\u308F\u308C\u307E\u3057\u305F: \u518D\u63A5\u7D9A\u3057\u307E\u3059\u304B\u3002
- CONNECTING_TO1={0}\u306B\u63A5\u7D9A\u4E2D
- CONNECTING_TO2={0}\u306B\u73FE\u5728\u63A5\u7D9A\u4E2D\u3067\u3059\u3002<br>\u3053\u308C\u306B\u306F\u6570\u5206\u304B\u304B\u308A\u307E\u3059\u3002
-@@ -270,4 +274,4 @@
- KBYTES={0} KB
- PLOT=\u30D7\u30ED\u30C3\u30C8
- VISUALIZE=\u8996\u899A\u5316
--ZZ_USAGE_TEXT=\u4F7F\u7528\u65B9\u6CD5: {0} [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]\n\n -interval \u66F4\u65B0\u9593\u9694\u3092n\u79D2\u306B\u8A2D\u5B9A\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8\u306F4\u79D2)\n -notile \u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u6700\u521D\u306B\u4E26\u3079\u3066\u8868\u793A\u3057\u306A\u3044(2\u3064\u4EE5\u4E0A\u306E\u63A5\u7D9A\u306B\u3064\u3044\u3066)\n -pluginpath JConsole\u304C\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u53C2\u7167\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3059\u308B\u30D1\u30B9\u3092\u6307\u5B9A\u3059\u308B\n -version \u30D7\u30ED\u30B0\u30E9\u30E0\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u5370\u5237\u3059\u308B\n\n connection = pid || host:port || JMX URL (service:jmx:<protocol>://...)\n pid \u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30D7\u30ED\u30BB\u30B9\u306E\u30D7\u30ED\u30BB\u30B9ID\n host \u30EA\u30E2\u30FC\u30C8\u30FB\u30DB\u30B9\u30C8\u540D\u307E\u305F\u306FIP\u30A2\u30C9\u30EC\u30B9\n port \u30EA\u30E2\u30FC\u30C8\u63A5\u7D9A\u7528\u306E\u30DD\u30FC\u30C8\u756A\u53F7\n\n -J JConsole\u304C\u5B9F\u884C\u4E2D\u306EJava\u4EEE\u60F3\u30DE\u30B7\u30F3\u3078\u306E\n \u5165\u529B\u5F15\u6570\u3092\u6307\u5B9A\u3059\u308B
-+ZZ_USAGE_TEXT=\u4F7F\u7528\u65B9\u6CD5: {0} [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]\n\n -interval \u66F4\u65B0\u9593\u9694\u3092n\u79D2\u306B\u8A2D\u5B9A\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8\u306F4\u79D2)\n -notile \u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u6700\u521D\u306B\u4E26\u3079\u3066\u8868\u793A\u3057\u306A\u3044(2\u3064\u4EE5\u4E0A\u306E\u63A5\u7D9A\u306B\u3064\u3044\u3066)\n -pluginpath JConsole\u304C\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u53C2\u7167\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3059\u308B\u30D1\u30B9\u3092\u6307\u5B9A\u3059\u308B\n -version \u30D7\u30ED\u30B0\u30E9\u30E0\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u51FA\u529B\u3059\u308B\n\n connection = pid || host:port || JMX URL (service:jmx:<protocol>://...)\n pid \u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30D7\u30ED\u30BB\u30B9\u306E\u30D7\u30ED\u30BB\u30B9ID\n host \u30EA\u30E2\u30FC\u30C8\u30FB\u30DB\u30B9\u30C8\u540D\u307E\u305F\u306FIP\u30A2\u30C9\u30EC\u30B9\n port \u30EA\u30E2\u30FC\u30C8\u63A5\u7D9A\u7528\u306E\u30DD\u30FC\u30C8\u756A\u53F7\n\n -J JConsole\u304C\u5B9F\u884C\u4E2D\u306EJava\u4EEE\u60F3\u30DE\u30B7\u30F3\u3078\u306E\n \u5165\u529B\u5F15\u6570\u3092\u6307\u5B9A\u3059\u308B
---- ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties Wed May 07 19:26:47 2014 -0700
-@@ -161,7 +161,7 @@
- MESSAGE=\u6D88\u606F
- METHOD_SUCCESSFULLY_INVOKED=\u5DF2\u6210\u529F\u8C03\u7528\u65B9\u6CD5
- MINIMIZE_ALL=\u5168\u90E8\u6700\u5C0F\u5316(&M)
--MONITOR_LOCKED=\ \ \ - \u5DF2\u9501\u5B9A {0}\n
-+MONITOR_LOCKED=\ - \u5DF2\u9501\u5B9A {0}\n
- NAME=\u540D\u79F0
- NAME_AND_BUILD={0} (\u5DE5\u4F5C\u7248\u672C {1})
- NAME_STATE=\u540D\u79F0: {0}\n\u72B6\u6001: {1}\n
-@@ -205,6 +205,7 @@
- PROCESS_CPU_TIME=\u8FDB\u7A0B CPU \u65F6\u95F4
- READABLE=\u53EF\u8BFB
- RECONNECT=\u91CD\u65B0\u8FDE\u63A5
-+INSECURE=\u4E0D\u5B89\u5168
- REMOTE_PROCESS_COLON=\u8FDC\u7A0B\u8FDB\u7A0B(&R):
- REMOTE_PROCESS_TEXT_FIELD_ACCESSIBLE_NAME=\u8FDC\u7A0B\u8FDB\u7A0B
- RESTORE_ALL=\u5168\u90E8\u8FD8\u539F(&R)
-@@ -222,6 +223,7 @@
- SUMMARY_TAB_TAB_NAME=VM \u6982\u8981
- SUMMARY_TAB_VM_VERSION={0}\u7248\u672C {1}
- THREADS=\u7EBF\u7A0B
-+THREAD_TAB_INFO_LABEL_FORMAT=<html>\u6D3B\u52A8: {0} \u5CF0\u503C: {1} \u603B\u8BA1: {2}</html>
- THREAD_TAB_THREAD_INFO_ACCESSIBLE_NAME=\u7EBF\u7A0B\u4FE1\u606F
- THREAD_TAB_THREAD_PLOTTER_ACCESSIBLE_NAME=\u8868\u793A\u7EBF\u7A0B\u6570\u7684\u56FE\u8868\u3002
- THRESHOLD=\u9608\u503C
-@@ -243,7 +245,7 @@
- UNREGISTER=\u6CE8\u9500
- UPTIME=\u8FD0\u884C\u65F6\u95F4
- USAGE_THRESHOLD=\u7528\u6CD5\u9608\u503C
--REMOTE_TF_USAGE=<b>\u7528\u6CD5</b>: &lt;hostname&gt;:&lt;port&gt; \u6216 service:jmx:&lt;protocol&gt;:&lt;sap&gt;
-+REMOTE_TF_USAGE=<b>\u7528\u6CD5</b>: &&lt;hostname&&gt;:&&lt;port&&gt; \u6216 service:jmx:&&lt;protocol&&gt;:&&lt;sap&&gt;
- USED=\u5DF2\u7528
- USERNAME_COLON_=\u7528\u6237\u540D(&U):
- USERNAME_ACCESSIBLE_NAME=\u7528\u6237\u540D
-@@ -261,6 +263,8 @@
- WRITABLE=\u53EF\u5199\u5165
- CONNECTION_FAILED1=\u8FDE\u63A5\u5931\u8D25: \u662F\u5426\u91CD\u8BD5?
- CONNECTION_FAILED2=\u672A\u6210\u529F\u8FDE\u63A5\u5230{0}\u3002<br>\u662F\u5426\u8981\u91CD\u8BD5?
-+CONNECTION_FAILED_SSL1=\u5B89\u5168\u8FDE\u63A5\u5931\u8D25\u3002\u662F\u5426\u4EE5\u4E0D\u5B89\u5168\u7684\u65B9\u5F0F\u91CD\u8BD5?
-+CONNECTION_FAILED_SSL2=\u65E0\u6CD5\u4F7F\u7528 SSL \u8FDE\u63A5\u5230{0}\u3002<br>\u662F\u5426\u5728\u4E0D\u4F7F\u7528 SSL \u7684\u60C5\u51B5\u4E0B\u8FDB\u884C\u5C1D\u8BD5?<br>(\u7528\u6237\u540D\u548C\u53E3\u4EE4\u5C06\u4EE5\u7EAF\u6587\u672C\u683C\u5F0F\u53D1\u9001\u3002)
- CONNECTION_LOST1=\u8FDE\u63A5\u4E22\u5931: \u662F\u5426\u91CD\u65B0\u8FDE\u63A5?
- CONNECTING_TO1=\u6B63\u5728\u8FDE\u63A5\u5230{0}
- CONNECTING_TO2=\u60A8\u5F53\u524D\u6B63\u5728\u8FDE\u63A5\u5230{0}\u3002<br>\u8FD9\u5C06\u9700\u8981\u51E0\u5206\u949F\u7684\u65F6\u95F4\u3002
---- ./jdk/src/share/classes/sun/util/logging/resources/logging.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/logging/resources/logging.properties Wed May 07 19:26:47 2014 -0700
-@@ -27,20 +27,20 @@
- # these are the same as the non-localized level name.
-
- # The following ALL CAPS words should be translated.
--ALL=ALL
-+ALL=All
- # The following ALL CAPS words should be translated.
--SEVERE=SEVERE
-+SEVERE=Severe
- # The following ALL CAPS words should be translated.
--WARNING=WARNING
-+WARNING=Warning
- # The following ALL CAPS words should be translated.
--INFO=INFO
-+INFO=Info
- # The following ALL CAPS words should be translated.
--CONFIG= CONFIG
-+CONFIG= Config
- # The following ALL CAPS words should be translated.
--FINE=FINE
-+FINE=Fine
- # The following ALL CAPS words should be translated.
--FINER=FINER
-+FINER=Finer
- # The following ALL CAPS words should be translated.
--FINEST=FINEST
-+FINEST=Finest
- # The following ALL CAPS words should be translated.
--OFF=OFF
-+OFF=Off
---- ./jdk/src/share/classes/sun/util/logging/resources/logging_zh_TW.properties Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/logging/resources/logging_zh_TW.properties Wed May 07 19:26:47 2014 -0700
-@@ -27,7 +27,7 @@
- # these are the same as the non-localized level name.
-
- # The following ALL CAPS words should be translated.
--ALL=\u5168\u90E8
-+ALL=\u6240\u6709
- # The following ALL CAPS words should be translated.
- SEVERE=\u56B4\u91CD
- # The following ALL CAPS words should be translated.
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"Syowa Time", "SYOT",
- "Syowa Summer Time", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"Coordinated Universal Time", "UTC",
-+ "Central European Summer Time", "CEST"}},
- {"Antarctica/Vostok", new String[] {"Vostok Time", "VOST",
- "Vostok Summer Time", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "Samara Summer Time", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"Syowa Zeit", "SYOT",
- "Syowa Sommerzeit", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"Koordinierte Universalzeit", "UTC",
-+ "Mitteleurop\u00e4ische Sommerzeit", "MESZ"}},
- {"Antarctica/Vostok", new String[] {"Vostok Zeit", "VOST",
- "Vostok Sommerzeit", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "Samarische Sommerzeit", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"Hora de Syowa", "SYOT",
- "Hora de verano de Syowa", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"Hora Universal Coordinada", "UTC",
-+ "Hora de verano de Europa Central", "CEST"}},
- {"Antarctica/Vostok", new String[] {"Hora de Vostok", "VOST",
- "Hora de verano de Vostok", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "Hora de verano de Samara", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"Heure de Syowa", "SYOT",
- "Heure d'\u00e9t\u00e9 de Syowa", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"Temps universel coordonn\u00e9", "UTC",
-+ "Heure d'\u00e9t\u00e9 d'Europe centrale", "CEST"}},
- {"Antarctica/Vostok", new String[] {"Heure de Vostok", "VOST",
- "Heure d'\u00e9t\u00e9 de Vostok", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "Heure d'\u00e9t\u00e9 de Samara", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"Ora di Syowa", "SYOT",
- "Ora estiva di Syowa", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"Tempo universale coordinato", "UTC",
-+ "Ora estiva dell'Europa centrale", "CEST"}},
- {"Antarctica/Vostok", new String[] {"Ora di Vostok", "VOST",
- "Ora estiva di Vostok", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "Ora estiva di Samara", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"\u662d\u548c\u57fa\u5730\u6642\u9593", "SYOT",
- "\u662d\u548c\u57fa\u5730\u590f\u6642\u9593", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"\u5354\u5b9a\u4e16\u754c\u6642", "UTC",
-+ "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "CEST"}},
- {"Antarctica/Vostok", new String[] {"\u30dc\u30b9\u30c8\u30fc\u30af\u57fa\u5730\u6642\u9593", "VOST",
- "\u30dc\u30b9\u30c8\u30fc\u30af\u57fa\u5730\u590f\u6642\u9593", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "\u30b5\u30de\u30e9\u590f\u6642\u9593", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"Syowa \uc2dc\uac04", "SYOT",
- "Syowa \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"\uc138\uacc4 \ud45c\uc900\uc2dc", "UTC",
-+ "\uc911\uc559 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "CEST"}},
- {"Antarctica/Vostok", new String[] {"Vostok \uc2dc\uac04", "VOST",
- "Vostok \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "\uc0ac\ub9c8\ub77c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"Fuso hor\u00e1rio de Syowa", "SYOT",
- "Fuso hor\u00e1rio de ver\u00e3o de Syowa", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"Tempo universal coordenado", "UTC",
-+ "Fuso hor\u00e1rio de ver\u00e3o da Europa Central", "CEST"}},
- {"Antarctica/Vostok", new String[] {"Fuso hor\u00e1rio de Vostok", "VOST",
- "Fuso hor\u00e1rio de ver\u00e3o de Vostok", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "Fuso hor\u00e1rio de ver\u00e3o de Samara", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"Syowa, normaltid", "SYOT",
- "Syowa, sommartid", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"Koordinerad universell tid", "UTC",
-+ "Centraleuropeisk sommartid", "CEST"}},
- {"Antarctica/Vostok", new String[] {"Vostok, normaltid", "VOST",
- "Vostok, sommartid", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "Samara, sommartid", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"Syowa \u65f6\u95f4", "SYOT",
- "Syowa \u590f\u4ee4\u65f6", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"\u534f\u8c03\u4e16\u754c\u65f6\u95f4", "UTC",
-+ "\u4e2d\u6b27\u590f\u4ee4\u65f6", "CEST"}},
- {"Antarctica/Vostok", new String[] {"\u83ab\u65af\u6258\u514b\u65f6\u95f4", "VOST",
- "\u83ab\u65af\u6258\u514b\u590f\u4ee4\u65f6", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -707,7 +709,7 @@
- "\u6c99\u9a6c\u62c9\u590f\u4ee4\u65f6", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java Wed May 07 19:26:47 2014 -0700
-@@ -477,6 +477,8 @@
- {"Antarctica/South_Pole", NZST},
- {"Antarctica/Syowa", new String[] {"\u5915\u6b50\u74e6 (Syowa) \u6642\u9593", "SYOT",
- "\u5915\u6b50\u74e6 (Syowa) \u590f\u4ee4\u6642\u9593", "SYOST"}},
-+ {"Antarctica/Troll", new String[] {"\u5354\u8abf\u4e16\u754c\u6642\u9593", "UTC",
-+ "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "CEST"}},
- {"Antarctica/Vostok", new String[] {"\u4f5b\u65af\u6258 (Vostok) \u6642\u9593", "VOST",
- "\u4f5b\u65af\u6258 (Vostok) \u590f\u4ee4\u6642\u9593", "VOSST"}},
- {"Arctic/Longyearbyen", CET},
-@@ -708,7 +710,7 @@
- "\u6c99\u99ac\u62c9\u590f\u4ee4\u6642\u9593", "SAMST"}},
- {"Europe/San_Marino", CET},
- {"Europe/Sarajevo", CET},
-- {"Europe/Simferopol", EET},
-+ {"Europe/Simferopol", MSK},
- {"Europe/Skopje", CET},
- {"Europe/Sofia", EET},
- {"Europe/Stockholm", CET},
---- ./jdk/src/share/demo/jvmti/hprof/hprof_init.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/demo/jvmti/hprof/hprof_init.c Wed May 07 19:26:47 2014 -0700
-@@ -1899,11 +1899,17 @@
- */
- getSystemProperty("sun.boot.library.path", &boot_path);
- md_build_library_name(lname, FILENAME_MAX, boot_path, name);
-+ if ( strlen(lname) == 0 ) {
-+ HPROF_ERROR(JNI_TRUE, "Could not find library");
-+ }
- jvmtiDeallocate(boot_path);
- handle = md_load_library(lname, err_buf, (int)sizeof(err_buf));
- if ( handle == NULL ) {
- /* This may be necessary on Windows. */
- md_build_library_name(lname, FILENAME_MAX, "", name);
-+ if ( strlen(lname) == 0 ) {
-+ HPROF_ERROR(JNI_TRUE, "Could not find library");
-+ }
- handle = md_load_library(lname, err_buf, (int)sizeof(err_buf));
- if ( handle == NULL ) {
- HPROF_ERROR(JNI_TRUE, err_buf);
-@@ -1968,6 +1974,9 @@
- getSystemProperty("sun.boot.library.path", &boot_path);
- /* Load in NPT library for character conversions */
- md_build_library_name(npt_lib, sizeof(npt_lib), boot_path, NPT_LIBNAME);
-+ if ( strlen(npt_lib) == 0 ) {
-+ HPROF_ERROR(JNI_TRUE, "Could not find npt library");
-+ }
- jvmtiDeallocate(boot_path);
- NPT_INITIALIZE(npt_lib, &(gdata->npt), NPT_VERSION, NULL);
- if ( gdata->npt == NULL ) {
---- ./jdk/src/share/demo/jvmti/hprof/hprof_md.h Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/demo/jvmti/hprof/hprof_md.h Wed May 07 19:26:47 2014 -0700
-@@ -69,7 +69,7 @@
- unsigned md_ntohs(unsigned short s);
- unsigned md_ntohl(unsigned l);
-
--void md_build_library_name(char *holder, int holderlen, char *pname, char *fname);
-+void md_build_library_name(char *holder, int holderlen, const char *pname, const char *fname);
- void * md_load_library(const char *name, char *err_buf, int err_buflen);
- void md_unload_library(void *handle);
- void * md_find_library_entry(void *handle, const char *name);
---- ./jdk/src/share/demo/scripting/jconsole-plugin/src/com/sun/demo/scripting/jconsole/ScriptShellPanel.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/demo/scripting/jconsole-plugin/src/com/sun/demo/scripting/jconsole/ScriptShellPanel.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013 Oracle and/or its affiliates. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
-@@ -54,7 +54,7 @@
- * jconsole's script console.
- */
-
--class ScriptShellPanel extends JPanel {
-+public class ScriptShellPanel extends JPanel {
-
- private static final long serialVersionUID = 4116273141148726319L;
-
---- ./jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp Wed May 07 19:26:47 2014 -0700
-@@ -62,7 +62,7 @@
-
- #endif // End of ZLIB
-
--#ifdef sparc
-+#ifdef _BIG_ENDIAN
- #define SWAP_BYTES(a) \
- ((((a) << 8) & 0xff00) | 0x00ff) & (((a) >> 8) | 0xff00)
- #else
---- ./jdk/src/share/native/common/check_code.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/native/common/check_code.c Wed May 07 19:26:47 2014 -0700
-@@ -90,6 +90,12 @@
- #include "classfile_constants.h"
- #include "opcodes.in_out"
-
-+#ifdef __APPLE__
-+/* use setjmp/longjmp versions that do not save/restore the signal mask */
-+#define setjmp _setjmp
-+#define longjmp _longjmp
-+#endif
-+
- #define MAX_ARRAY_DIMENSIONS 255
- /* align byte code */
- #ifndef ALIGN_UP
---- ./jdk/src/share/native/java/lang/Class.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/native/java/lang/Class.c Wed May 07 19:26:47 2014 -0700
-@@ -187,3 +187,16 @@
-
- return result;
- }
-+
-+JNIEXPORT jobject JNICALL
-+Java_java_lang_Class_getCheckMemberAccessMethod(JNIEnv *env, jclass cls, jclass smClass)
-+{
-+ jmethodID mid;
-+
-+ mid = (*env)->GetMethodID(env, smClass, "checkMemberAccess", "(Ljava/lang/Class;I)V");
-+ if (mid == NULL) {
-+ return NULL;
-+ }
-+ return (*env)->ToReflectedMethod(env, smClass, mid, JNI_FALSE);
-+}
-+
---- ./jdk/src/share/native/java/lang/ref/Finalizer.c Tue Mar 18 12:35:25 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,42 +0,0 @@
--/*
-- * Copyright (c) 1997, 1998, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation. Oracle designates this
-- * particular file as subject to the "Classpath" exception as provided
-- * by Oracle in the LICENSE file that accompanied this code.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--#include "jni.h"
--#include "java_lang_ref_Finalizer.h"
--
--
--JNIEXPORT void JNICALL
--Java_java_lang_ref_Finalizer_invokeFinalizeMethod(JNIEnv *env, jclass clazz,
-- jobject ob)
--{
-- jclass cls;
-- jmethodID mid;
--
-- cls = (*env)->GetObjectClass(env, ob);
-- if (cls == NULL) return;
-- mid = (*env)->GetMethodID(env, cls, "finalize", "()V");
-- if (mid == NULL) return;
-- (*env)->CallVoidMethod(env, ob, mid);
--}
---- ./jdk/src/share/native/sun/security/krb5/nativeccache.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/share/native/sun/security/krb5/nativeccache.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2011,2013, 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
-@@ -264,13 +264,22 @@
-
- }
-
-+int isIn(krb5_enctype e, int n, jint* etypes)
-+{
-+ int i;
-+ for (i=0; i<n; i++) {
-+ if (e == etypes[i]) return 1;
-+ }
-+ return 0;
-+}
-+
- /*
- * Class: sun_security_krb5_Credentials
- * Method: acquireDefaultNativeCreds
- * Signature: ()Lsun/security/krb5/Credentials;
- */
- JNIEXPORT jobject JNICALL Java_sun_security_krb5_Credentials_acquireDefaultNativeCreds
--(JNIEnv *env, jclass krbcredsClass)
-+(JNIEnv *env, jclass krbcredsClass, jintArray jetypes)
- {
- jobject krbCreds = NULL;
- krb5_error_code err = 0;
-@@ -279,6 +288,8 @@
- krb5_creds creds;
- krb5_flags flags = 0;
- krb5_context kcontext = NULL;
-+ int netypes;
-+ jint *etypes = NULL;
-
- /* Initialize the Kerberos 5 context */
- err = krb5_init_context (&kcontext);
-@@ -295,6 +306,9 @@
- err = krb5_cc_start_seq_get (kcontext, ccache, &cursor);
- }
-
-+ netypes = (*env)->GetArrayLength(env, jetypes);
-+ etypes = (jint *) (*env)->GetIntArrayElements(env, jetypes, NULL);
-+
- if (!err) {
- while ((err = krb5_cc_next_cred (kcontext, ccache, &cursor, &creds)) == 0) {
- char *serverName = NULL;
-@@ -305,7 +319,8 @@
- }
-
- if (!err) {
-- if (strncmp (serverName, "krbtgt", strlen("krbtgt")) == 0) {
-+ if (strncmp (serverName, "krbtgt", sizeof("krbtgt")-1) == 0 &&
-+ isIn(creds.keyblock.enctype, netypes, etypes)) {
- jobject ticket, clientPrincipal, targetPrincipal, encryptionKey;
- jobject ticketFlags, startTime, endTime;
- jobject authTime, renewTillTime, hostAddresses;
-@@ -321,7 +336,7 @@
- targetPrincipal = BuildClientPrincipal(env, kcontext, creds.server);
- if (targetPrincipal == NULL) goto cleanup;
-
-- // Build a com.ibm.security.krb5.Ticket
-+ // Build a sun/security/krb5/internal/Ticket
- ticket = BuildTicket(env, &creds.ticket);
- if (ticket == NULL) goto cleanup;
-
-@@ -353,7 +368,7 @@
- krbcredsConstructor = (*env)->GetMethodID(env, krbcredsClass, "<init>",
- "(Lsun/security/krb5/internal/Ticket;Lsun/security/krb5/PrincipalName;Lsun/security/krb5/PrincipalName;Lsun/security/krb5/EncryptionKey;Lsun/security/krb5/internal/TicketFlags;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/KerberosTime;Lsun/security/krb5/internal/HostAddresses;)V");
- if (krbcredsConstructor == 0) {
-- printf("Couldn't find com.ibm.security.krb5.Credentials constructor\n");
-+ printf("Couldn't find sun.security.krb5.internal.Ticket constructor\n");
- break;
- }
- }
-@@ -409,6 +424,10 @@
- printiferr (err, "while finishing ticket retrieval");
- }
-
-+ if (etypes != NULL) {
-+ (*env)->ReleaseIntArrayElements(env, jetypes, etypes, 0);
-+ }
-+
- krb5_free_context (kcontext);
- return krbCreds;
- }
---- ./jdk/src/solaris/back/linker_md.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/back/linker_md.c Wed May 07 19:26:47 2014 -0700
-@@ -55,29 +55,27 @@
- #endif
-
- static void dll_build_name(char* buffer, size_t buflen,
-- const char* pname, const char* fname) {
-- // Based on os_solaris.cpp
-+ const char* paths, const char* fname) {
-+ char *path, *paths_copy, *next_token;
-
-- char *path_sep = PATH_SEPARATOR;
-- char *pathname = (char *)pname;
-- while (strlen(pathname) > 0) {
-- char *p = strchr(pathname, *path_sep);
-- if (p == NULL) {
-- p = pathname + strlen(pathname);
-- }
-- /* check for NULL path */
-- if (p == pathname) {
-- continue;
-- }
-- (void)snprintf(buffer, buflen, "%.*s/lib%s." LIB_SUFFIX, (p - pathname),
-- pathname, fname);
-+ paths_copy = strdup(paths);
-+ if (paths_copy == NULL) {
-+ return;
-+ }
-
-+ next_token = NULL;
-+ path = strtok_r(paths_copy, PATH_SEPARATOR, &next_token);
-+
-+ while (path != NULL) {
-+ snprintf(buffer, buflen, "%s/lib%s." LIB_SUFFIX, path, fname);
- if (access(buffer, F_OK) == 0) {
- break;
- }
-- pathname = p + 1;
- *buffer = '\0';
-+ path = strtok_r(NULL, PATH_SEPARATOR, &next_token);
- }
-+
-+ free(paths_copy);
- }
-
- /*
-@@ -98,7 +96,7 @@
- * appropriate pre and extensions to a filename and the path
- */
- void
--dbgsysBuildLibName(char *holder, int holderlen, char *pname, char *fname)
-+dbgsysBuildLibName(char *holder, int holderlen, const char *pname, const char *fname)
- {
- const int pnamelen = pname ? strlen(pname) : 0;
-
---- ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd Wed May 07 19:26:47 2014 -0700
-@@ -303,40 +303,54 @@
- * able to read any buffered data lingering in the OS pipe buffer.
- */
- static class ProcessPipeInputStream extends BufferedInputStream {
-+ private final Object closeLock = new Object();
-+
- ProcessPipeInputStream(int fd) {
- super(new FileInputStream(newFileDescriptor(fd)));
- }
-
-- private static byte[] drainInputStream(InputStream in)
-+ private InputStream drainInputStream(InputStream in)
- throws IOException {
-- if (in == null) return null;
- int n = 0;
- int j;
- byte[] a = null;
-- while ((j = in.available()) > 0) {
-+ synchronized (closeLock) {
-+ if (buf == null) // asynchronous close()?
-+ return null; // discard
-+ j = in.available();
-+ }
-+ while (j > 0) {
- a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
-- n += in.read(a, n, j);
-+ synchronized (closeLock) {
-+ if (buf == null) // asynchronous close()?
-+ return null; // discard
-+ n += in.read(a, n, j);
-+ j = in.available();
-+ }
- }
-- return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
-+ return (a == null) ?
-+ ProcessBuilder.NullInputStream.INSTANCE :
-+ new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n));
- }
-
- /** Called by the process reaper thread when the process exits. */
- synchronized void processExited() {
-- // Most BufferedInputStream methods are synchronized, but close()
-- // is not, and so we have to handle concurrent racing close().
- try {
- InputStream in = this.in;
- if (in != null) {
-- byte[] stragglers = drainInputStream(in);
-+ InputStream stragglers = drainInputStream(in);
- in.close();
-- this.in = (stragglers == null) ?
-- ProcessBuilder.NullInputStream.INSTANCE :
-- new ByteArrayInputStream(stragglers);
-- if (buf == null) // asynchronous close()?
-- this.in = null;
-+ this.in = stragglers;
- }
-- } catch (IOException ignored) {
-- // probably an asynchronous close().
-+ } catch (IOException ignored) { }
-+ }
-+
-+ @Override
-+ public void close() throws IOException {
-+ // BufferedInputStream#close() is not synchronized unlike most other methods.
-+ // Synchronizing helps avoid racing with drainInputStream().
-+ synchronized (closeLock) {
-+ super.close();
- }
- }
- }
---- ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux Wed May 07 19:26:47 2014 -0700
-@@ -305,40 +305,54 @@
- * able to read any buffered data lingering in the OS pipe buffer.
- */
- static class ProcessPipeInputStream extends BufferedInputStream {
-+ private final Object closeLock = new Object();
-+
- ProcessPipeInputStream(int fd) {
- super(new FileInputStream(newFileDescriptor(fd)));
- }
-
-- private static byte[] drainInputStream(InputStream in)
-+ private InputStream drainInputStream(InputStream in)
- throws IOException {
-- if (in == null) return null;
- int n = 0;
- int j;
- byte[] a = null;
-- while ((j = in.available()) > 0) {
-+ synchronized (closeLock) {
-+ if (buf == null) // asynchronous close()?
-+ return null; // discard
-+ j = in.available();
-+ }
-+ while (j > 0) {
- a = (a == null) ? new byte[j] : Arrays.copyOf(a, n + j);
-- n += in.read(a, n, j);
-+ synchronized (closeLock) {
-+ if (buf == null) // asynchronous close()?
-+ return null; // discard
-+ n += in.read(a, n, j);
-+ j = in.available();
-+ }
- }
-- return (a == null || n == a.length) ? a : Arrays.copyOf(a, n);
-+ return (a == null) ?
-+ ProcessBuilder.NullInputStream.INSTANCE :
-+ new ByteArrayInputStream(n == a.length ? a : Arrays.copyOf(a, n));
- }
-
- /** Called by the process reaper thread when the process exits. */
- synchronized void processExited() {
-- // Most BufferedInputStream methods are synchronized, but close()
-- // is not, and so we have to handle concurrent racing close().
- try {
- InputStream in = this.in;
- if (in != null) {
-- byte[] stragglers = drainInputStream(in);
-+ InputStream stragglers = drainInputStream(in);
- in.close();
-- this.in = (stragglers == null) ?
-- ProcessBuilder.NullInputStream.INSTANCE :
-- new ByteArrayInputStream(stragglers);
-- if (buf == null) // asynchronous close()?
-- this.in = null;
-+ this.in = stragglers;
- }
-- } catch (IOException ignored) {
-- // probably an asynchronous close().
-+ } catch (IOException ignored) { }
-+ }
-+
-+ @Override
-+ public void close() throws IOException {
-+ // BufferedInputStream#close() is not synchronized unlike most other methods.
-+ // Synchronizing helps avoid racing with drainInputStream().
-+ synchronized (closeLock) {
-+ super.close();
- }
- }
- }
---- ./jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -190,7 +190,7 @@
- try {
- Native.putLong(data, motifWindow);
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XlibWrapper.XChangeProperty(XToolkit.getDisplay(),
- defaultRootWindow,
- XA_MOTIF_DRAG_WINDOW.getAtom(),
-@@ -198,10 +198,10 @@
- XConstants.PropModeReplace,
- data, 1);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write motif drag window handle.");
- }
-
-@@ -394,7 +394,7 @@
- }
- }
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XlibWrapper.XChangeProperty(XToolkit.getDisplay(),
- motifWindow,
- XA_MOTIF_DRAG_TARGETS.getAtom(),
-@@ -402,15 +402,15 @@
- XConstants.PropModeReplace,
- data, tableSize);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
-
- // Create a new motif window and retry.
- motifWindow = createMotifWindow();
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XlibWrapper.XChangeProperty(XToolkit.getDisplay(),
- motifWindow,
- XA_MOTIF_DRAG_TARGETS.getAtom(),
-@@ -418,10 +418,10 @@
- XConstants.PropModeReplace,
- data, tableSize);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write motif drag targets property.");
- }
- }
-@@ -534,16 +534,16 @@
- // CARD32 icc_handle
- unsafe.putInt(structData + 4, (int)XA_MOTIF_ATOM_0.getAtom());
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window,
- XA_MOTIF_ATOM_0.getAtom(),
- XA_MOTIF_DRAG_INITIATOR_INFO.getAtom(),
- 8, XConstants.PropModeReplace,
- structData, MOTIF_INITIATOR_INFO_SIZE);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write drag initiator info");
- }
- } finally {
-@@ -567,16 +567,16 @@
- unsafe.putShort(data + 10, (short)0); /* pad */
- unsafe.putInt(data + 12, dataSize);
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XlibWrapper.XChangeProperty(XToolkit.getDisplay(), window,
- XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
- XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
- 8, XConstants.PropModeReplace,
- data, dataSize);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write Motif receiver info property");
- }
- } finally {
---- ./jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -162,16 +162,16 @@
- unsafe.putInt(data + 12, dataSize);
- }
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XlibWrapper.XChangeProperty(XToolkit.getDisplay(), embedder,
- MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
- MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
- 8, XConstants.PropModeReplace,
- data, dataSize);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write Motif receiver info property");
- }
- } finally {
-@@ -236,16 +236,16 @@
-
- unsafe.putInt(data + 4, tproxy);
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XlibWrapper.XChangeProperty(XToolkit.getDisplay(), embedder,
- MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
- MotifDnDConstants.XA_MOTIF_DRAG_RECEIVER_INFO.getAtom(),
- 8, XConstants.PropModeReplace,
- data, dataSize);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write Motif receiver info property");
- }
- }
-@@ -412,15 +412,15 @@
- */
- XWindowAttributes wattr = new XWindowAttributes();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
- source_win, wattr.pData);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (status == 0 ||
-- (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success)) {
-+ if ((status == 0) ||
-+ ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success))) {
- throw new XException("XGetWindowAttributes failed");
- }
-
-@@ -429,15 +429,15 @@
- wattr.dispose();
- }
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win,
- source_win_mask |
- XConstants.StructureNotifyMask);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("XSelectInput failed");
- }
-
-@@ -1024,10 +1024,10 @@
- if (sourceWindow != 0) {
- XToolkit.awtLock();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- XlibWrapper.XSelectInput(XToolkit.getDisplay(), sourceWindow,
- sourceWindowMask);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
- } finally {
- XToolkit.awtUnlock();
- }
---- ./jdk/src/solaris/classes/sun/awt/X11/WindowPropertyGetter.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/WindowPropertyGetter.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -99,7 +99,7 @@
- }
-
- if (errorHandler != null) {
-- XToolkit.WITH_XERROR_HANDLER(errorHandler);
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(errorHandler);
- }
- Native.putLong(data, 0);
- int status = XlibWrapper.XGetWindowProperty(XToolkit.getDisplay(), window, property.getAtom(),
-@@ -112,7 +112,7 @@
- }
-
- if (errorHandler != null) {
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
- }
- return status;
- } finally {
---- ./jdk/src/solaris/classes/sun/awt/X11/XConstants.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XConstants.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
---- ./jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -96,14 +96,14 @@
- action_count++;
- }
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndActionList.setAtomData(window,
- XAtom.XA_ATOM,
- data, action_count);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- cleanup();
- throw new XException("Cannot write XdndActionList property");
- }
-@@ -117,14 +117,14 @@
- try {
- Native.put(data, formats);
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndTypeList.setAtomData(window,
- XAtom.XA_ATOM,
- data, formats.length);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- cleanup();
- throw new XException("Cannot write XdndActionList property");
- }
---- ./jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -88,12 +88,12 @@
- try {
- Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndAware.setAtomData(window, XAtom.XA_ATOM, data, 1);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write XdndAware property");
- }
- } finally {
-@@ -205,54 +205,50 @@
-
- /* The proxy window must have the XdndAware set, as XDnD protocol
- prescribes to check the proxy window for XdndAware. */
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndAware.setAtomData(newProxy, XAtom.XA_ATOM,
- data, 1);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() !=
-- XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write XdndAware property");
- }
-
- Native.putLong(data, 0, newProxy);
-
- /* The proxy window must have the XdndProxy set to point to itself.*/
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndProxy.setAtomData(newProxy, XAtom.XA_WINDOW,
- data, 1);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() !=
-- XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write XdndProxy property");
- }
-
- Native.putLong(data, 0, XDnDConstants.XDND_PROTOCOL_VERSION);
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndAware.setAtomData(embedder, XAtom.XA_ATOM,
- data, 1);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() !=
-- XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write XdndAware property");
- }
-
- Native.putLong(data, 0, newProxy);
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndProxy.setAtomData(embedder, XAtom.XA_WINDOW,
- data, 1);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() !=
-- XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write XdndProxy property");
- }
- } finally {
-@@ -278,27 +274,25 @@
- try {
- Native.putLong(data, 0, entry.getVersion());
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndAware.setAtomData(embedder, XAtom.XA_ATOM,
- data, 1);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() !=
-- XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write XdndAware property");
- }
-
- Native.putLong(data, 0, (int)entry.getProxy());
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndProxy.setAtomData(embedder, XAtom.XA_WINDOW,
- data, 1);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() !=
-- XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("Cannot write XdndProxy property");
- }
- } finally {
-@@ -541,15 +535,15 @@
- */
- XWindowAttributes wattr = new XWindowAttributes();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
- source_win, wattr.pData);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (status == 0 ||
-- (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success)) {
-+ if ((status == 0) ||
-+ ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success))) {
- throw new XException("XGetWindowAttributes failed");
- }
-
-@@ -558,15 +552,15 @@
- wattr.dispose();
- }
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- XlibWrapper.XSelectInput(XToolkit.getDisplay(), source_win,
- source_win_mask |
- XConstants.StructureNotifyMask);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("XSelectInput failed");
- }
-
-@@ -963,10 +957,10 @@
- if (sourceWindow != 0) {
- XToolkit.awtLock();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- XlibWrapper.XSelectInput(XToolkit.getDisplay(), sourceWindow,
- sourceWindowMask);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
- } finally {
- XToolkit.awtUnlock();
- }
-@@ -1111,15 +1105,15 @@
-
- XToolkit.awtLock();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XDnDConstants.XA_XdndTypeList.setAtomData(xclient.get_window(),
- XAtom.XA_ATOM,
- wpg.getData(),
- wpg.getNumberOfItems());
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- if (logger.isLoggable(PlatformLogger.WARNING)) {
- logger.warning("Cannot set XdndTypeList on the proxy window");
- }
---- ./jdk/src/solaris/classes/sun/awt/X11/XDragSourceProtocol.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XDragSourceProtocol.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -181,15 +181,15 @@
- long time) {
- XWindowAttributes wattr = new XWindowAttributes();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
- targetWindow, wattr.pData);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (status == 0 ||
-- (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success)) {
-+ if ((status == 0) ||
-+ ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success))) {
- throw new XException("XGetWindowAttributes failed");
- }
-
-@@ -198,15 +198,15 @@
- wattr.dispose();
- }
-
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- XlibWrapper.XSelectInput(XToolkit.getDisplay(), targetWindow,
- targetWindowMask |
- XConstants.StructureNotifyMask);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("XSelectInput failed");
- }
-
-@@ -214,10 +214,10 @@
- }
-
- protected final void finalizeDrop() {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- XlibWrapper.XSelectInput(XToolkit.getDisplay(), targetWindow,
- targetWindowMask);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
- }
-
- public abstract boolean processProxyModeEvent(XClientMessageEvent xclient,
---- ./jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -168,14 +168,14 @@
- if (dest_x >= 0 && dest_y >= 0) {
- XWindowAttributes wattr = new XWindowAttributes();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
- window, wattr.pData);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (status == 0 ||
-- (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success)) {
-+ if ((status == 0) ||
-+ ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success))) {
- continue;
- }
-
-@@ -222,14 +222,14 @@
- long event_mask = 0;
- XWindowAttributes wattr = new XWindowAttributes();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
- embedder, wattr.pData);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (status == 0 ||
-- (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success)) {
-+ if ((status == 0) ||
-+ ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success))) {
- throw new XException("XGetWindowAttributes failed");
- }
-
-@@ -240,13 +240,13 @@
- }
-
- if ((event_mask & XConstants.PropertyChangeMask) == 0) {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- XlibWrapper.XSelectInput(XToolkit.getDisplay(), embedder,
- event_mask | XConstants.PropertyChangeMask);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("XSelectInput failed");
- }
- }
-@@ -394,13 +394,13 @@
-
- /* Restore the original event mask for the embedder. */
- if ((event_mask & XConstants.PropertyChangeMask) == 0) {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- XlibWrapper.XSelectInput(XToolkit.getDisplay(), embedder,
- event_mask);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- throw new XException("XSelectInput failed");
- }
- }
---- ./jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -295,15 +295,15 @@
- try {
- XWindowAttributes wattr = new XWindowAttributes();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
- xembed.handle, wattr.pData);
-
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (status == 0 ||
-- (XToolkit.saved_error != null &&
-- XToolkit.saved_error.get_error_code() != XConstants.Success)) {
-+ if ((status == 0) ||
-+ ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success))) {
- return null;
- }
-
---- ./jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2009, 2013, 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
-@@ -38,7 +38,7 @@
- public static class XBaseErrorHandler extends XErrorHandler {
- @Override
- public int handleError(long display, XErrorEvent err) {
-- return XToolkit.SAVED_ERROR_HANDLER(display, err);
-+ return XErrorHandlerUtil.SAVED_XERROR_HANDLER(display, err);
- }
- }
-
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XErrorHandlerUtil.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,168 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+package sun.awt.X11;
-+
-+import java.security.AccessController;
-+import sun.awt.SunToolkit;
-+import sun.security.action.GetBooleanAction;
-+import sun.util.logging.PlatformLogger;
-+
-+/**
-+ * This class contains code of the global toolkit error handler, exposes static
-+ * methods which allow to set and unset synthetic error handlers.
-+ */
-+public final class XErrorHandlerUtil {
-+ private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XErrorHandlerUtil");
-+
-+ /**
-+ * The connection to X11 window server.
-+ */
-+ private static long display;
-+
-+ /**
-+ * Error handler at the moment of {@code XErrorHandlerUtil} initialization.
-+ */
-+ private static long saved_error_handler;
-+
-+ /**
-+ * XErrorEvent being handled.
-+ */
-+ static volatile XErrorEvent saved_error;
-+
-+ /**
-+ * Current error handler or null if no error handler is set.
-+ */
-+ private static XErrorHandler current_error_handler;
-+
-+ /**
-+ * Value of sun.awt.noisyerrorhandler system property.
-+ */
-+ private static boolean noisyAwtHandler = AccessController.doPrivileged(
-+ new GetBooleanAction("sun.awt.noisyerrorhandler"));
-+
-+ /**
-+ * The flag indicating that {@code init} was called already.
-+ */
-+ private static boolean initPassed;
-+
-+ /**
-+ * Guarantees that no instance of this class can be created.
-+ */
-+ private XErrorHandlerUtil() {}
-+
-+ /**
-+ * Sets the toolkit global error handler, stores the connection to X11 server,
-+ * which will be used during an error handling process. This method is called
-+ * once from {@code awt_init_Display} function defined in {@code awt_GraphicsEnv.c}
-+ * file immediately after the connection to X11 window server is opened.
-+ * @param display the connection to X11 server which should be stored
-+ */
-+ private static void init(long display) {
-+ SunToolkit.awtLock();
-+ try {
-+ if (!initPassed) {
-+ XErrorHandlerUtil.display = display;
-+ saved_error_handler = XlibWrapper.SetToolkitErrorHandler();
-+ initPassed = true;
-+ }
-+ } finally {
-+ SunToolkit.awtUnlock();
-+ }
-+ }
-+
-+ /**
-+ * Sets a synthetic error handler. Must be called with the acquired AWT lock.
-+ * @param handler the synthetic error handler to set
-+ */
-+ public static void WITH_XERROR_HANDLER(XErrorHandler handler) {
-+ saved_error = null;
-+ current_error_handler = handler;
-+ }
-+
-+ /**
-+ * Unsets a current synthetic error handler. Must be called with the acquired AWT lock.
-+ */
-+ public static void RESTORE_XERROR_HANDLER() {
-+ RESTORE_XERROR_HANDLER(true);
-+ }
-+
-+ private static void RESTORE_XERROR_HANDLER(boolean doXSync) {
-+ if (doXSync) {
-+ // Wait until all requests are processed by the X server
-+ // and only then uninstall the error handler.
-+ XSync();
-+ }
-+ current_error_handler = null;
-+ }
-+
-+ /**
-+ * Should be called under LOCK.
-+ */
-+ public static int SAVED_XERROR_HANDLER(long display, XErrorEvent error) {
-+ if (saved_error_handler != 0) {
-+ // Default XErrorHandler may just terminate the process. Don't call it.
-+ // return XlibWrapper.CallErrorHandler(saved_error_handler, display, error.pData);
-+ }
-+ if (log.isLoggable(PlatformLogger.FINE)) {
-+ log.fine("Unhandled XErrorEvent: " +
-+ "id=" + error.get_resourceid() + ", " +
-+ "serial=" + error.get_serial() + ", " +
-+ "ec=" + error.get_error_code() + ", " +
-+ "rc=" + error.get_request_code() + ", " +
-+ "mc=" + error.get_minor_code());
-+ }
-+ return 0;
-+ }
-+
-+ /**
-+ * Called from the native code when an error occurs.
-+ */
-+ private static int globalErrorHandler(long display, long event_ptr) {
-+ if (noisyAwtHandler) {
-+ XlibWrapper.PrintXErrorEvent(display, event_ptr);
-+ }
-+ XErrorEvent event = new XErrorEvent(event_ptr);
-+ saved_error = event;
-+ try {
-+ if (current_error_handler != null) {
-+ return current_error_handler.handleError(display, event);
-+ } else {
-+ return SAVED_XERROR_HANDLER(display, event);
-+ }
-+ } catch (Throwable z) {
-+ log.fine("Error in GlobalErrorHandler", z);
-+ }
-+ return 0;
-+ }
-+
-+ private static void XSync() {
-+ SunToolkit.awtLock();
-+ try {
-+ XlibWrapper.XSync(display, 0);
-+ } finally {
-+ SunToolkit.awtUnlock();
-+ }
-+ }
-+}
---- ./jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -26,9 +26,11 @@
-
- import java.awt.Component;
- import java.awt.Window;
--import sun.util.logging.PlatformLogger;
-+
-+import sun.awt.AWTAccessor;
- import sun.awt.CausedFocusEvent;
- import sun.awt.KeyboardFocusManagerPeerImpl;
-+import sun.util.logging.PlatformLogger;
-
- public class XKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
- private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.awt.X11.focus.XKeyboardFocusManagerPeer");
-@@ -68,13 +70,13 @@
-
- synchronized(this) {
- if (currentFocusedWindow != null) {
-- from = (XWindowPeer)currentFocusedWindow.getPeer();
-+ from = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
- }
-
- currentFocusedWindow = win;
-
- if (currentFocusedWindow != null) {
-- to = (XWindowPeer)currentFocusedWindow.getPeer();
-+ to = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
- }
- }
-
---- ./jdk/src/solaris/classes/sun/awt/X11/XQueryTree.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XQueryTree.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -61,7 +61,7 @@
- }
- __executed = true;
- if (errorHandler != null) {
-- XToolkit.WITH_XERROR_HANDLER(errorHandler);
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(errorHandler);
- }
- Native.putLong(children_ptr, 0);
- int status =
-@@ -72,7 +72,7 @@
- children_ptr,
- nchildren_ptr );
- if (errorHandler != null) {
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
- }
- return status;
- } finally {
---- ./jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Wed May 07 19:26:47 2014 -0700
-@@ -128,7 +128,6 @@
- initIDs();
- setBackingStoreType();
- }
-- noisyAwtHandler = AccessController.doPrivileged(new GetBooleanAction("sun.awt.noisyerrorhandler"));
- }
-
- /*
-@@ -137,78 +136,6 @@
- */
- static native long getTrayIconDisplayTimeout();
-
-- //---- ERROR HANDLER CODE ----//
--
-- /*
-- * Error handler at the moment of XToolkit initialization
-- */
-- private static long saved_error_handler;
--
-- /*
-- * XErrorEvent being handled
-- */
-- static volatile XErrorEvent saved_error;
--
-- /*
-- * Current error handler or null if no error handler is set
-- */
-- private static XErrorHandler current_error_handler;
--
-- /*
-- * Value of sun.awt.noisyerrorhandler system property
-- */
-- private static boolean noisyAwtHandler;
--
-- public static void WITH_XERROR_HANDLER(XErrorHandler handler) {
-- saved_error = null;
-- current_error_handler = handler;
-- }
--
-- public static void RESTORE_XERROR_HANDLER() {
-- // wait until all requests are processed by the X server
-- // and only then uninstall the error handler
-- XSync();
-- current_error_handler = null;
-- }
--
-- // Should be called under LOCK
-- public static int SAVED_ERROR_HANDLER(long display, XErrorEvent error) {
-- if (saved_error_handler != 0) {
-- // Default XErrorHandler may just terminate the process. Don't call it.
-- // return XlibWrapper.CallErrorHandler(saved_error_handler, display, error.pData);
-- }
-- if (log.isLoggable(PlatformLogger.FINE)) {
-- log.fine("Unhandled XErrorEvent: " +
-- "id=" + error.get_resourceid() + ", " +
-- "serial=" + error.get_serial() + ", " +
-- "ec=" + error.get_error_code() + ", " +
-- "rc=" + error.get_request_code() + ", " +
-- "mc=" + error.get_minor_code());
-- }
-- return 0;
-- }
--
-- // Called from the native code when an error occurs
-- private static int globalErrorHandler(long display, long event_ptr) {
-- if (noisyAwtHandler) {
-- XlibWrapper.PrintXErrorEvent(display, event_ptr);
-- }
-- XErrorEvent event = new XErrorEvent(event_ptr);
-- saved_error = event;
-- try {
-- if (current_error_handler != null) {
-- return current_error_handler.handleError(display, event);
-- } else {
-- return SAVED_ERROR_HANDLER(display, event);
-- }
-- } catch (Throwable z) {
-- log.fine("Error in GlobalErrorHandler", z);
-- }
-- return 0;
-- }
--
-- //---- END OF ERROR HANDLER CODE ----//
--
- private native static void initIDs();
- native static void waitForEvents(long nextTaskTime);
- static Thread toolkitThread;
-@@ -305,8 +232,6 @@
- areExtraMouseButtonsEnabled = Boolean.parseBoolean(System.getProperty("sun.awt.enableExtraMouseButtons", "true"));
- //set system property if not yet assigned
- System.setProperty("sun.awt.enableExtraMouseButtons", ""+areExtraMouseButtonsEnabled);
--
-- saved_error_handler = XlibWrapper.SetToolkitErrorHandler();
- } finally {
- awtUnlock();
- }
---- ./jdk/src/solaris/classes/sun/awt/X11/XTranslateCoordinates.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XTranslateCoordinates.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -68,7 +68,7 @@
- }
- __executed = true;
- if (errorHandler != null) {
-- XToolkit.WITH_XERROR_HANDLER(errorHandler);
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(errorHandler);
- }
- int status =
- XlibWrapper.XTranslateCoordinates(XToolkit.getDisplay(),
-@@ -80,7 +80,7 @@
- dest_y_ptr,
- child_ptr );
- if (errorHandler != null) {
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
- }
- return status;
- } finally {
---- ./jdk/src/solaris/classes/sun/awt/X11/XWM.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XWM.java Wed May 07 19:26:47 2014 -0700
-@@ -283,12 +283,12 @@
- winmgr_running = false;
- substruct.set_event_mask(XConstants.SubstructureRedirectMask);
-
-- XToolkit.WITH_XERROR_HANDLER(detectWMHandler);
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(detectWMHandler);
- XlibWrapper.XChangeWindowAttributes(XToolkit.getDisplay(),
- XToolkit.getDefaultRootWindow(),
- XConstants.CWEventMask,
- substruct.pData);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
- /*
- * If no WM is running then our selection for SubstructureRedirect
-@@ -617,15 +617,16 @@
-
- XToolkit.awtLock();
- try {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.VerifyChangePropertyHandler.getInstance());
- XlibWrapper.XChangePropertyS(XToolkit.getDisplay(), XToolkit.getDefaultRootWindow(),
- XA_ICEWM_WINOPTHINT.getAtom(),
- XA_ICEWM_WINOPTHINT.getAtom(),
- 8, XConstants.PropModeReplace,
- new String(opt));
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
-
-- if (XToolkit.saved_error != null && XToolkit.saved_error.get_error_code() != XConstants.Success) {
-+ if ((XErrorHandlerUtil.saved_error != null) &&
-+ (XErrorHandlerUtil.saved_error.get_error_code() != XConstants.Success)) {
- log.finer("Erorr getting XA_ICEWM_WINOPTHINT property");
- return false;
- }
---- ./jdk/src/solaris/classes/sun/awt/X11/XlibUtil.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/XlibUtil.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -151,8 +151,8 @@
- {
- int status = xtc.execute(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- if ((status != 0) &&
-- ((XToolkit.saved_error == null) ||
-- (XToolkit.saved_error.get_error_code() == XConstants.Success)))
-+ ((XErrorHandlerUtil.saved_error == null) ||
-+ (XErrorHandlerUtil.saved_error.get_error_code() == XConstants.Success)))
- {
- translated = new Point(xtc.get_dest_x(), xtc.get_dest_y());
- }
-@@ -345,13 +345,13 @@
- XWindowAttributes wattr = new XWindowAttributes();
- try
- {
-- XToolkit.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
-+ XErrorHandlerUtil.WITH_XERROR_HANDLER(XErrorHandler.IgnoreBadWindowHandler.getInstance());
- int status = XlibWrapper.XGetWindowAttributes(XToolkit.getDisplay(),
- window, wattr.pData);
-- XToolkit.RESTORE_XERROR_HANDLER();
-+ XErrorHandlerUtil.RESTORE_XERROR_HANDLER();
- if ((status != 0) &&
-- ((XToolkit.saved_error == null) ||
-- (XToolkit.saved_error.get_error_code() == XConstants.Success)))
-+ ((XErrorHandlerUtil.saved_error == null) ||
-+ (XErrorHandlerUtil.saved_error.get_error_code() == XConstants.Success)))
- {
- return wattr.get_map_state();
- }
---- ./jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -992,7 +992,7 @@
- pw.println("\t\t\t}");
- pw.println("\t\t\t__executed = true;");
- pw.println("\t\t\tif (errorHandler != null) {");
-- pw.println("\t\t\t XToolkit.WITH_XERROR_HANDLER(errorHandler);");
-+ pw.println("\t\t\t XErrorHandlerUtil.WITH_XERROR_HANDLER(errorHandler);");
- pw.println("\t\t\t}");
- iter = ft.getArguments().iterator();
- while (iter.hasNext()) {
-@@ -1021,7 +1021,7 @@
- }
- pw.println("\t\t\t);");
- pw.println("\t\t\tif (errorHandler != null) {");
-- pw.println("\t\t\t XToolkit.RESTORE_XERROR_HANDLER();");
-+ pw.println("\t\t\t XErrorHandlerUtil.RESTORE_XERROR_HANDLER();");
- pw.println("\t\t\t}");
- if (!ft.isVoid()) {
- pw.println("\t\t\treturn status;");
---- ./jdk/src/solaris/demo/jvmti/hprof/hprof_md.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/demo/jvmti/hprof/hprof_md.c Wed May 07 19:26:47 2014 -0700
-@@ -376,33 +376,32 @@
- }
-
- static void dll_build_name(char* buffer, size_t buflen,
-- const char* pname, const char* fname) {
-- // Loosely based on os_solaris.cpp
-+ const char* paths, const char* fname) {
-+ char *path, *paths_copy, *next_token;
-
-- char *pathname = (char *)pname;
-- while (strlen(pathname) > 0) {
-- char *p = strchr(pathname, ':');
-- if (p == NULL) {
-- p = pathname + strlen(pathname);
-- }
-- /* check for NULL path */
-- if (p == pathname) {
-- continue;
-- }
-- (void)snprintf(buffer, buflen, "%.*s/lib%s" JNI_LIB_SUFFIX,
-- (p - pathname), pathname, fname);
-+ paths_copy = strdup(paths);
-+ if (paths_copy == NULL) {
-+ return;
-+ }
-
-- if (access(buffer, F_OK) == 0) {
-+ next_token = NULL;
-+ path = strtok_r(paths_copy, ":", &next_token);
-+
-+ while (path != NULL) {
-+ snprintf(buffer, buflen, "%s/lib%s" JNI_LIB_SUFFIX, path, fname);
-+ if (access(buffer, F_OK) == 0) {
- break;
-- }
-- pathname = p + 1;
-- *buffer = '\0';
-- }
-+ }
-+ *buffer = '\0';
-+ path = strtok_r(NULL, ":", &next_token);
-+ }
-+
-+ free(paths_copy);
- }
-
- /* Create the actual fill filename for a dynamic library. */
- void
--md_build_library_name(char *holder, int holderlen, char *pname, char *fname)
-+md_build_library_name(char *holder, int holderlen, const char *pname, const char *fname)
- {
- int pnamelen;
-
---- ./jdk/src/solaris/native/java/lang/java_props_macosx.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/lang/java_props_macosx.c Wed May 07 19:26:47 2014 -0700
-@@ -31,6 +31,7 @@
- #include <Security/AuthSession.h>
- #include <CoreFoundation/CoreFoundation.h>
- #include <SystemConfiguration/SystemConfiguration.h>
-+#include <Foundation/Foundation.h>
-
- #include "java_props_macosx.h"
-
-@@ -262,9 +263,20 @@
- return c_exception;
- }
-
-+/*
-+ * Method for fetching the user.home path and storing it in the property list.
-+ * For signed .apps running in the Mac App Sandbox, user.home is set to the
-+ * app's sandbox container.
-+ */
-+void setUserHome(java_props_t *sprops) {
-+ if (sprops == NULL) { return; }
-+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-+ sprops->user_home = createUTF8CString((CFStringRef)NSHomeDirectory());
-+ [pool drain];
-+}
-
- /*
-- * Method for fetching proxy info and storing it in the propery list.
-+ * Method for fetching proxy info and storing it in the property list.
- */
- void setProxyProperties(java_props_t *sProps) {
- if (sProps == NULL) return;
---- ./jdk/src/solaris/native/java/lang/java_props_macosx.h Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/lang/java_props_macosx.h Wed May 07 19:26:47 2014 -0700
-@@ -27,6 +27,7 @@
-
- char *setupMacOSXLocale(int cat);
- void setOSNameAndVersion(java_props_t *sprops);
-+void setUserHome(java_props_t *sprops);
- void setProxyProperties(java_props_t *sProps);
-
- enum PreferredToolkit_enum {
---- ./jdk/src/solaris/native/java/lang/java_props_md.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/lang/java_props_md.c Wed May 07 19:26:47 2014 -0700
-@@ -324,6 +324,25 @@
- *std_encoding = "Big5-HKSCS-2001";
- }
- #endif
-+#ifdef MACOSX
-+ /*
-+ * For the case on MacOS X where encoding is set to US-ASCII, but we
-+ * don't have any encoding hints from LANG/LC_ALL/LC_CTYPE, use UTF-8
-+ * instead.
-+ *
-+ * The contents of ASCII files will still be read and displayed
-+ * correctly, but so will files containing UTF-8 characters beyond the
-+ * standard ASCII range.
-+ *
-+ * Specifically, this allows apps launched by double-clicking a .jar
-+ * file to correctly read UTF-8 files using the default encoding (see
-+ * 8011194).
-+ */
-+ if (strcmp(p,"US-ASCII") == 0 && getenv("LANG") == NULL &&
-+ getenv("LC_ALL") == NULL && getenv("LC_CTYPE") == NULL) {
-+ *std_encoding = "UTF-8";
-+ }
-+#endif
- }
-
- return 1;
-@@ -527,7 +546,14 @@
- {
- struct passwd *pwent = getpwuid(getuid());
- sprops.user_name = pwent ? strdup(pwent->pw_name) : "?";
-- sprops.user_home = pwent ? strdup(pwent->pw_dir) : "?";
-+#ifdef MACOSX
-+ setUserHome(&sprops);
-+#else
-+ sprops.user_home = pwent ? strdup(pwent->pw_dir) : NULL;
-+#endif
-+ if (sprops.user_home == NULL) {
-+ sprops.user_home = "?";
-+ }
- }
-
- /* User TIMEZONE */
---- ./jdk/src/solaris/native/java/net/NetworkInterface.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/net/NetworkInterface.c Wed May 07 19:26:47 2014 -0700
-@@ -559,11 +559,9 @@
-
- if ((sock = openSocketWithFallback(env, name_utf)) < 0) {
- (*env)->ReleaseStringUTFChars(env, name, name_utf);
-- return -1;
-+ return -1;
- }
-
-- name_utf = (*env)->GetStringUTFChars(env, name, &isCopy);
--
- ret = getFlags(sock, name_utf, &flags);
-
- close(sock);
---- ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Wed May 07 19:26:47 2014 -0700
-@@ -574,6 +574,8 @@
- } else if (ret == JVM_IO_ERR) {
- if (errno == EBADF) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
-+ } else if (errno == ENOMEM) {
-+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
- } else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Peek failed");
- }
-@@ -674,15 +676,18 @@
- "Receive timed out");
- return -1;
- } else if (ret == JVM_IO_ERR) {
-+ if (errno == ENOMEM) {
-+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
- #ifdef __linux__
-- if (errno == EBADF) {
-+ } else if (errno == EBADF) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
- } else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
-+#else
-+ } else {
-+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
-+#endif
- }
--#else
-- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
--#endif
- return -1;
- } else if (ret == JVM_IO_INTR) {
- JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
-@@ -910,15 +915,18 @@
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
- "Receive timed out");
- } else if (ret == JVM_IO_ERR) {
-+ if (errno == ENOMEM) {
-+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
- #ifdef __linux__
-- if (errno == EBADF) {
-+ } else if (errno == EBADF) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
- } else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
-+#else
-+ } else {
-+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
-+#endif
- }
--#else
-- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
--#endif
- } else if (ret == JVM_IO_INTR) {
- JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
- "operation interrupted");
---- ./jdk/src/solaris/native/java/net/PlainSocketImpl.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/net/PlainSocketImpl.c Wed May 07 19:26:47 2014 -0700
-@@ -708,7 +708,6 @@
- } else {
- ret = NET_Timeout(fd, timeout);
- }
--
- if (ret == 0) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
- "Accept timed out");
-@@ -716,6 +715,8 @@
- } else if (ret == JVM_IO_ERR) {
- if (errno == EBADF) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
-+ } else if (errno == ENOMEM) {
-+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
- } else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Accept failed");
- }
---- ./jdk/src/solaris/native/java/net/SocketInputStream.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/net/SocketInputStream.c Wed May 07 19:26:47 2014 -0700
-@@ -108,6 +108,8 @@
- } else if (nread == JVM_IO_ERR) {
- if (errno == EBADF) {
- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
-+ } else if (errno == ENOMEM) {
-+ JNU_ThrowOutOfMemoryError(env, "NET_Timeout native heap allocation failed");
- } else {
- NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
- "select/poll failed");
---- ./jdk/src/solaris/native/java/net/bsd_close.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/net/bsd_close.c Wed May 07 19:26:47 2014 -0700
-@@ -25,6 +25,7 @@
-
- #include <stdio.h>
- #include <stdlib.h>
-+#include <sys/param.h>
- #include <signal.h>
- #include <pthread.h>
- #include <sys/types.h>
-@@ -35,7 +36,6 @@
- #include <sys/uio.h>
- #include <unistd.h>
- #include <errno.h>
--
- #include <sys/poll.h>
-
- /*
-@@ -347,6 +347,10 @@
- int NET_Timeout(int s, long timeout) {
- long prevtime = 0, newtime;
- struct timeval t, *tp = &t;
-+ fd_set fds;
-+ fd_set* fdsp = NULL;
-+ int allocated = 0;
-+ threadEntry_t self;
- fdEntry_t *fdEntry = getFdEntry(s);
-
- /*
-@@ -376,20 +380,29 @@
- t.tv_usec = 0;
- }
-
-+ if (s < FD_SETSIZE) {
-+ fdsp = &fds;
-+ FD_ZERO(fdsp);
-+ } else {
-+ int length = (howmany(s+1, NFDBITS)) * sizeof(int);
-+ fdsp = (fd_set *) calloc(1, length);
-+ if (fdsp == NULL) {
-+ return -1; // errno will be set to ENOMEM
-+ }
-+ allocated = 1;
-+ }
-+ FD_SET(s, fdsp);
-+
- for(;;) {
-- fd_set rfds;
- int rv;
-- threadEntry_t self;
-
- /*
- * call select on the fd. If interrupted by our wakeup signal
- * errno will be set to EBADF.
- */
-- FD_ZERO(&rfds);
-- FD_SET(s, &rfds);
-
- startOp(fdEntry, &self);
-- rv = select(s+1, &rfds, 0, 0, tp);
-+ rv = select(s+1, fdsp, 0, 0, tp);
- endOp(fdEntry, &self);
-
- /*
-@@ -403,6 +416,8 @@
- newtime = now.tv_sec * 1000 + now.tv_usec / 1000;
- timeout -= newtime - prevtime;
- if (timeout <= 0) {
-+ if (allocated != 0)
-+ free(fdsp);
- return 0;
- }
- prevtime = newtime;
-@@ -410,6 +425,8 @@
- t.tv_usec = (timeout % 1000) * 1000;
- }
- } else {
-+ if (allocated != 0)
-+ free(fdsp);
- return rv;
- }
-
---- ./jdk/src/solaris/native/java/net/linux_close.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/net/linux_close.c Wed May 07 19:26:47 2014 -0700
-@@ -34,7 +34,6 @@
- #include <sys/uio.h>
- #include <unistd.h>
- #include <errno.h>
--
- #include <sys/poll.h>
-
- /*
-@@ -192,17 +191,6 @@
-
- {
- /*
-- * Send a wakeup signal to all threads blocked on this
-- * file descriptor.
-- */
-- threadEntry_t *curr = fdEntry->threads;
-- while (curr != NULL) {
-- curr->intr = 1;
-- pthread_kill( curr->thr, sigWakeup );
-- curr = curr->next;
-- }
--
-- /*
- * And close/dup the file descriptor
- * (restart if interrupted by signal)
- */
-@@ -214,6 +202,16 @@
- }
- } while (rv == -1 && errno == EINTR);
-
-+ /*
-+ * Send a wakeup signal to all threads blocked on this
-+ * file descriptor.
-+ */
-+ threadEntry_t *curr = fdEntry->threads;
-+ while (curr != NULL) {
-+ curr->intr = 1;
-+ pthread_kill( curr->thr, sigWakeup );
-+ curr = curr->next;
-+ }
- }
-
- /*
---- ./jdk/src/solaris/native/java/net/net_util_md.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/java/net/net_util_md.c Wed May 07 19:26:47 2014 -0700
-@@ -114,9 +114,9 @@
- static jfieldID ni_defaultIndexID;
- if (ni_class == NULL) {
- jclass c = (*env)->FindClass(env, "java/net/NetworkInterface");
-- CHECK_NULL(c);
-+ CHECK_NULL_RETURN(c, 0);
- c = (*env)->NewGlobalRef(env, c);
-- CHECK_NULL(c);
-+ CHECK_NULL_RETURN(c, 0);
- ni_defaultIndexID = (*env)->GetStaticFieldID(
- env, c, "defaultIndex", "I");
- ni_class = c;
---- ./jdk/src/solaris/native/sun/awt/awt_DrawingSurface.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/awt/awt_DrawingSurface.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1996, 2013, 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
-@@ -405,7 +405,14 @@
- target = (*env)->GetObjectField(env, peer, mComponentPeerIDs.target);
- }
- #else
-- target = (*env)->GetObjectField(env, peer, targetID);
-+ if (window != None) {
-+ peer = JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit",
-+ "windowToXWindow", "(J)Lsun/awt/X11/XBaseWindow;", (jlong)window).l;
-+ }
-+ if ((peer != NULL) &&
-+ (JNU_IsInstanceOfByName(env, peer, "sun/awt/X11/XWindow") == 1)) {
-+ target = (*env)->GetObjectField(env, peer, targetID);
-+ }
- #endif
-
- if (target == NULL) {
-@@ -414,7 +421,6 @@
- return (jobject)NULL;
- }
-
--
- AWT_UNLOCK();
-
- return target;
---- ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -830,6 +830,8 @@
- }
-
- XSetIOErrorHandler(xioerror_handler);
-+ JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XErrorHandlerUtil", "init", "(J)V",
-+ ptr_to_jlong(awt_display));
-
- /* set awt_numScreens, and whether or not we're using Xinerama */
- xineramaInit();
-@@ -978,16 +980,11 @@
- static jint canUseShmExtPixmaps = UNSET_MITSHM;
- static jboolean xshmAttachFailed = JNI_FALSE;
-
--extern int mitShmPermissionMask;
--
--int J2DXErrHandler(Display *display, XErrorEvent *xerr) {
-- int ret = 0;
-+int XShmAttachXErrHandler(Display *display, XErrorEvent *xerr) {
- if (xerr->minor_code == X_ShmAttach) {
- xshmAttachFailed = JNI_TRUE;
-- } else {
-- ret = (*xerror_saved_handler)(display, xerr);
- }
-- return ret;
-+ return 0;
- }
- jboolean isXShmAttachFailed() {
- return xshmAttachFailed;
-@@ -996,6 +993,8 @@
- xshmAttachFailed = JNI_FALSE;
- }
-
-+extern int mitShmPermissionMask;
-+
- void TryInitMITShm(JNIEnv *env, jint *shmExt, jint *shmPixmaps) {
- XShmSegmentInfo shminfo;
- int XShmMajor, XShmMinor;
-@@ -1043,7 +1042,7 @@
- * The J2DXErrHandler handler will set xshmAttachFailed
- * to JNI_TRUE if any Shm error has occured.
- */
-- EXEC_WITH_XERROR_HANDLER(J2DXErrHandler,
-+ EXEC_WITH_XERROR_HANDLER(XShmAttachXErrHandler,
- XShmAttach(awt_display, &shminfo));
-
- /**
---- ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.h Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.h Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1998, 2013, 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
---- ./jdk/src/solaris/native/sun/awt/awt_util.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/awt/awt_util.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1995, 2003, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1995, 2013, 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
-@@ -58,16 +58,14 @@
- #include "java_awt_event_MouseWheelEvent.h"
-
- /*
-- * Since X reports protocol errors asynchronously, we often need to
-- * install an error handler that acts like a callback. While that
-- * specialized handler is installed we save original handler here.
-+ * Called by "ToolkitErrorHandler" function in "XlibWrapper.c" file.
- */
--XErrorHandler xerror_saved_handler;
-+XErrorHandler current_native_xerror_handler = NULL;
-
- /*
- * A place for error handler to report the error code.
- */
--unsigned char xerror_code;
-+unsigned char xerror_code = Success;
-
- extern jint getModifiers(uint32_t state, jint button, jint keyCode);
- extern jint getButton(uint32_t button);
---- ./jdk/src/solaris/native/sun/awt/awt_util.h Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/awt/awt_util.h Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1995, 2004, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1995, 2013, 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
-@@ -82,7 +82,7 @@
- #define WITH_XERROR_HANDLER(f) do { \
- XSync(awt_display, False); \
- xerror_code = Success; \
-- xerror_saved_handler = XSetErrorHandler(f); \
-+ current_native_xerror_handler = (f); \
- } while (0)
-
- /* Convenience macro for handlers to use */
-@@ -92,7 +92,7 @@
-
- #define RESTORE_XERROR_HANDLER do { \
- XSync(awt_display, False); \
-- XSetErrorHandler(xerror_saved_handler); \
-+ current_native_xerror_handler = NULL; \
- } while (0)
-
- #define EXEC_WITH_XERROR_HANDLER(f, code) do { \
-@@ -104,11 +104,9 @@
- } while (0)
-
- /*
-- * Since X reports protocol errors asynchronously, we often need to
-- * install an error handler that acts like a callback. While that
-- * specialized handler is installed we save original handler here.
-+ * Called by "ToolkitErrorHandler" function in "XlibWrapper.c" file.
- */
--extern XErrorHandler xerror_saved_handler;
-+extern XErrorHandler current_native_xerror_handler;
-
- /*
- * A place for error handler to report the error code.
---- ./jdk/src/solaris/native/sun/awt/awt_wm.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/awt/awt_wm.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2001, 2013, 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
-@@ -382,14 +382,10 @@
- XERROR_SAVE(err);
- if (err->error_code == BadWindow) {
- DTRACE_PRINTLN("IGNORING BadWindow");
-- return 0; /* ok to fail */
- }
-- else {
-- return (*xerror_saved_handler)(dpy, err);
-- }
-+ return 0; /* ok to fail */
- }
-
--
- /*
- * Convenience wrapper for XGetWindowProperty for XA_ATOM properties.
- * E.g. WM_PROTOCOLS, _NET_WM_STATE, _OL_DECOR_DEL.
-@@ -1011,7 +1007,6 @@
- return awt_wm_isNetWMName("Metacity");
- }
-
--
- /*
- * Temporary error handler that ensures that we know if
- * XChangeProperty succeeded or not.
-@@ -1020,15 +1015,10 @@
- xerror_verify_change_property(Display *dpy, XErrorEvent *err)
- {
- XERROR_SAVE(err);
-- if (err->request_code == X_ChangeProperty) {
-- return 0;
-- }
-- else {
-- return (*xerror_saved_handler)(dpy, err);
-- }
-+ if (err->request_code == X_ChangeProperty) { }
-+ return 0;
- }
-
--
- /*
- * Prepare IceWM check.
- *
-@@ -1159,8 +1149,6 @@
- return True;
- }
-
--
--
- static Boolean winmgr_running = False;
-
- /*
-@@ -1176,14 +1164,10 @@
- {
- DTRACE_PRINTLN("some WM is running (hmm, we'll see)");
- winmgr_running = True;
-- return 0;
- }
-- else {
-- return (*xerror_saved_handler)(dpy, err);
-- }
-+ return 0;
- }
-
--
- /*
- * Make an educated guess about running window manager.
- * XXX: ideally, we should detect wm restart.
---- ./jdk/src/solaris/native/sun/awt/awt_xembed_server.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/awt/awt_xembed_server.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
---- ./jdk/src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2013, 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
-@@ -396,13 +396,10 @@
- static int
- GLXSD_BadAllocXErrHandler(Display *display, XErrorEvent *xerr)
- {
-- int ret = 0;
- if (xerr->error_code == BadAlloc) {
- surfaceCreationFailed = JNI_TRUE;
-- } else {
-- ret = (*xerror_saved_handler)(display, xerr);
- }
-- return ret;
-+ return 0;
- }
-
- JNIEXPORT jboolean JNICALL
---- ./jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1999, 2013, 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
-@@ -68,7 +68,7 @@
- #ifndef XAWT
- extern struct MComponentPeerIDs mComponentPeerIDs;
- #endif
--extern int J2DXErrHandler(Display *display, XErrorEvent *xerr);
-+extern int XShmAttachXErrHandler(Display *display, XErrorEvent *xerr);
- extern AwtGraphicsConfigDataPtr
- getGraphicsConfigFromComponentPeer(JNIEnv *env, jobject this);
- extern struct X11GraphicsConfigIDs x11GraphicsConfigIDs;
-@@ -591,7 +591,7 @@
- shminfo->readOnly = False;
-
- resetXShmAttachFailed();
-- EXEC_WITH_XERROR_HANDLER(J2DXErrHandler,
-+ EXEC_WITH_XERROR_HANDLER(XShmAttachXErrHandler,
- XShmAttach(awt_display, shminfo));
-
- /*
---- ./jdk/src/solaris/native/sun/nio/ch/SctpChannelImpl.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/nio/ch/SctpChannelImpl.c Wed May 07 19:26:47 2014 -0700
-@@ -38,8 +38,7 @@
- #include "sun_nio_ch_SctpResultContainer.h"
- #include "sun_nio_ch_SctpPeerAddrChange.h"
-
--/* sizeof(union sctp_notification */
--#define NOTIFICATION_BUFFER_SIZE 280
-+static int SCTP_NOTIFICATION_SIZE = sizeof(union sctp_notification);
-
- #define MESSAGE_IMPL_CLASS "sun/nio/ch/SctpMessageInfoImpl"
- #define RESULT_CONTAINER_CLASS "sun/nio/ch/SctpResultContainer"
-@@ -458,20 +457,47 @@
- if (msg->msg_flags & MSG_NOTIFICATION) {
- char *bufp = (char*)addr;
- union sctp_notification *snp;
-+ jboolean allocated = JNI_FALSE;
-
-- if (!(msg->msg_flags & MSG_EOR) && length < NOTIFICATION_BUFFER_SIZE) {
-- char buf[NOTIFICATION_BUFFER_SIZE];
-+ if (rv > SCTP_NOTIFICATION_SIZE) {
-+ JNU_ThrowInternalError(env, "should not reach here");
-+ return -1;
-+ }
-+
-+ if (!(msg->msg_flags & MSG_EOR) && length < SCTP_NOTIFICATION_SIZE) {
-+ char* newBuf;
- int rvSAVE = rv;
-- memcpy(buf, addr, rv);
-- iov->iov_base = buf + rv;
-- iov->iov_len = NOTIFICATION_BUFFER_SIZE - rv;
-+
-+ if ((newBuf = malloc(SCTP_NOTIFICATION_SIZE)) == NULL) {
-+ JNU_ThrowOutOfMemoryError(env, "Out of native heap space.");
-+ return -1;
-+ }
-+ allocated = JNI_TRUE;
-+
-+ memcpy(newBuf, addr, rv);
-+ iov->iov_base = newBuf + rv;
-+ iov->iov_len = SCTP_NOTIFICATION_SIZE - rv;
- if ((rv = recvmsg(fd, msg, flags)) < 0) {
- handleSocketError(env, errno);
- return 0;
- }
-- bufp = buf;
-+ bufp = newBuf;
- rv += rvSAVE;
- }
-+#ifdef __sparc
-+ else if ((intptr_t)addr & 0x3) {
-+ /* the given buffer is not 4 byte aligned */
-+ char* newBuf;
-+ if ((newBuf = malloc(SCTP_NOTIFICATION_SIZE)) == NULL) {
-+ JNU_ThrowOutOfMemoryError(env, "Out of native heap space.");
-+ return -1;
-+ }
-+ allocated = JNI_TRUE;
-+
-+ memcpy(newBuf, addr, rv);
-+ bufp = newBuf;
-+ }
-+#endif
- snp = (union sctp_notification *) bufp;
- if (handleNotification(env, fd, resultContainerObj, snp, rv,
- (msg->msg_flags & MSG_EOR),
-@@ -479,9 +505,16 @@
- /* We have received a notification that is of interest to
- to the Java API. The appropriate notification will be
- set in the result container. */
-+ if (allocated == JNI_TRUE) {
-+ free(bufp);
-+ }
- return 0;
- }
-
-+ if (allocated == JNI_TRUE) {
-+ free(bufp);
-+ }
-+
- // set iov back to addr, and reset msg_controllen
- iov->iov_base = addr;
- iov->iov_len = length;
---- ./jdk/src/solaris/native/sun/xawt/XlibWrapper.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/solaris/native/sun/xawt/XlibWrapper.c Wed May 07 19:26:47 2014 -0700
-@@ -41,6 +41,7 @@
- #include <sizecalc.h>
-
- #include <awt.h>
-+#include <awt_util.h>
- #include <jvm.h>
-
- #include <Region.h>
-@@ -1262,11 +1263,15 @@
- JavaVM* jvm = NULL;
- static int ToolkitErrorHandler(Display * dpy, XErrorEvent * event) {
- JNIEnv * env;
-+ // First call the native synthetic error handler declared in "awt_util.h" file.
-+ if (current_native_xerror_handler != NULL) {
-+ current_native_xerror_handler(dpy, event);
-+ }
- if (jvm != NULL) {
- env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
- if (env) {
-- return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XToolkit", "globalErrorHandler", "(JJ)I",
-- ptr_to_jlong(dpy), ptr_to_jlong(event)).i;
-+ return JNU_CallStaticMethodByName(env, NULL, "sun/awt/X11/XErrorHandlerUtil",
-+ "globalErrorHandler", "(JJ)I", ptr_to_jlong(dpy), ptr_to_jlong(event)).i;
- }
- }
- return 0;
---- ./jdk/src/windows/back/linker_md.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/back/linker_md.c Wed May 07 19:26:47 2014 -0700
-@@ -39,33 +39,27 @@
- #include "path_md.h"
-
- static void dll_build_name(char* buffer, size_t buflen,
-- const char* pname, const char* fname) {
-- // Based on os_windows.cpp
-+ const char* paths, const char* fname) {
-+ char *path, *paths_copy, *next_token;
-
-- char *path_sep = PATH_SEPARATOR;
-- char *pathname = (char *)pname;
-- while (strlen(pathname) > 0) {
-- char *p = strchr(pathname, *path_sep);
-- if (p == NULL) {
-- p = pathname + strlen(pathname);
-- }
-- /* check for NULL path */
-- if (p == pathname) {
-- continue;
-- }
-- if (*(p-1) == ':' || *(p-1) == '\\') {
-- (void)_snprintf(buffer, buflen, "%.*s%s.dll", (p - pathname),
-- pathname, fname);
-- } else {
-- (void)_snprintf(buffer, buflen, "%.*s\\%s.dll", (p - pathname),
-- pathname, fname);
-- }
-+ paths_copy = strdup(paths);
-+ if (paths_copy == NULL) {
-+ return;
-+ }
-+
-+ next_token = NULL;
-+ path = strtok_s(paths_copy, PATH_SEPARATOR, &next_token);
-+
-+ while (path != NULL) {
-+ _snprintf(buffer, buflen, "%s\\%s.dll", path, fname);
- if (_access(buffer, 0) == 0) {
- break;
- }
-- pathname = p + 1;
- *buffer = '\0';
-+ path = strtok_s(NULL, PATH_SEPARATOR, &next_token);
- }
-+
-+ free(paths_copy);
- }
-
- /*
-@@ -108,7 +102,7 @@
- * Build a machine dependent library name out of a path and file name.
- */
- void
--dbgsysBuildLibName(char *holder, int holderlen, char *pname, char *fname)
-+dbgsysBuildLibName(char *holder, int holderlen, const char *pname, const char *fname)
- {
- const int pnamelen = pname ? (int)strlen(pname) : 0;
-
---- ./jdk/src/windows/bin/cmdtoargs.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/bin/cmdtoargs.c Wed May 07 19:26:47 2014 -0700
-@@ -53,6 +53,16 @@
- static StdArg *stdargs;
- static int stdargc;
-
-+static int copyCh(USHORT ch, char* dest) {
-+ if (HIBYTE(ch) == 0) {
-+ *dest = (char)ch;
-+ return 1;
-+ } else {
-+ *((USHORT *)dest) = ch;
-+ return 2;
-+ }
-+}
-+
- static char* next_arg(char* cmdline, char* arg, jboolean* wildcard) {
-
- char* src = cmdline;
-@@ -61,31 +71,43 @@
- int quotes = 0;
- int slashes = 0;
-
-- char prev = 0;
-- char ch = 0;
-+ // "prev"/"ch" may contain either a single byte, or a double byte
-+ // character encoded in CP_ACP.
-+ USHORT prev = 0;
-+ USHORT ch = 0;
- int i;
- jboolean done = JNI_FALSE;
-+ int charLength;
-
- *wildcard = JNI_FALSE;
-- while ((ch = *src) != 0 && !done) {
-+ while (!done) {
-+ charLength = CharNextExA(CP_ACP, src, 0) - src;
-+ if (charLength == 0) {
-+ break;
-+ } else if (charLength == 1) {
-+ ch = (USHORT)(UCHAR)src[0];
-+ } else {
-+ ch = ((USHORT *)src)[0];
-+ }
-+
- switch (ch) {
-- case '"':
-+ case L'"':
- if (separator) {
- done = JNI_TRUE;
- break;
- }
-- if (prev == '\\') {
-+ if (prev == L'\\') {
- for (i = 1; i < slashes; i += 2) {
-- *dest++ = prev;
-+ dest += copyCh(prev, dest);
- }
- if (slashes % 2 == 1) {
-- *dest++ = ch;
-+ dest += copyCh(ch, dest);
- } else {
- quotes++;
- }
-- } else if (prev == '"' && quotes % 2 == 0) {
-+ } else if (prev == L'"' && quotes % 2 == 0) {
- quotes++;
-- *dest++ = ch; // emit every other consecutive quote
-+ dest += copyCh(ch, dest); // emit every other consecutive quote
- } else if (quotes == 0) {
- quotes++; // starting quote
- } else {
-@@ -94,7 +116,7 @@
- slashes = 0;
- break;
-
-- case '\\':
-+ case L'\\':
- slashes++;
- if (separator) {
- done = JNI_TRUE;
-@@ -102,23 +124,23 @@
- }
- break;
-
-- case ' ':
-- case '\t':
-- if (prev == '\\') {
-+ case L' ':
-+ case L'\t':
-+ if (prev == L'\\') {
- for (i = 0 ; i < slashes; i++) {
-- *dest++ = prev;
-+ dest += copyCh(prev, dest);
- }
- }
- if (quotes % 2 == 1) {
-- *dest++ = ch;
-+ dest += copyCh(ch, dest);
- } else {
- separator = JNI_TRUE;
- }
- slashes = 0;
- break;
-
-- case '*':
-- case '?':
-+ case L'*':
-+ case L'?':
- if (separator) {
- done = JNI_TRUE;
- separator = JNI_FALSE;
-@@ -127,36 +149,36 @@
- if (quotes % 2 == 0) {
- *wildcard = JNI_TRUE;
- }
-- if (prev == '\\') {
-+ if (prev == L'\\') {
- for (i = 0 ; i < slashes ; i++) {
-- *dest++ = prev;
-+ dest += copyCh(prev, dest);
- }
- }
-- *dest++ = ch;
-+ dest += copyCh(ch, dest);
- break;
-
- default:
-- if (prev == '\\') {
-+ if (prev == L'\\') {
- for (i = 0 ; i < slashes ; i++) {
-- *dest++ = prev;
-+ dest += copyCh(prev, dest);
- }
-- *dest++ = ch;
-+ dest += copyCh(ch, dest);
- } else if (separator) {
- done = JNI_TRUE;
- } else {
-- *dest++ = ch;
-+ dest += copyCh(ch, dest);
- }
- slashes = 0;
- }
-
- if (!done) {
- prev = ch;
-- src++;
-+ src += charLength;
- }
- }
-- if (prev == '\\') {
-+ if (prev == L'\\') {
- for (i = 0; i < slashes; i++) {
-- *dest++ = prev;
-+ dest += copyCh(prev, dest);
- }
- }
- *dest = 0;
---- ./jdk/src/windows/classes/java/lang/ProcessImpl.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/java/lang/ProcessImpl.java Wed May 07 19:26:47 2014 -0700
-@@ -457,8 +457,10 @@
-
- /**
- * Create a process using the win32 function CreateProcess.
-+ * The method is synchronized due to MS kb315939 problem.
-+ * All native handles should restore the inherit flag at the end of call.
- *
-- * @param cmdstr the Windows commandline
-+ * @param cmdstr the Windows command line
- * @param envblock NUL-separated, double-NUL-terminated list of
- * environment strings in VAR=VALUE form
- * @param dir the working directory of the process, or null if
-@@ -474,7 +476,7 @@
- * @param redirectErrorStream redirectErrorStream attribute
- * @return the native subprocess HANDLE returned by CreateProcess
- */
-- private static native long create(String cmdstr,
-+ private static synchronized native long create(String cmdstr,
- String envblock,
- String dir,
- long[] stdHandles,
---- ./jdk/src/windows/classes/java/net/DualStackPlainSocketImpl.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/java/net/DualStackPlainSocketImpl.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2007, 2014, 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
-@@ -162,8 +162,9 @@
- if (!fd.valid())
- return;
-
-- close0(fdAccess.get(fd));
-+ final int nativefd = fdAccess.get(fd);
- fdAccess.set(fd, -1);
-+ close0(nativefd);
- }
-
- void socketShutdown(int howto) throws IOException {
---- ./jdk/src/windows/classes/java/net/PlainSocketImpl.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/java/net/PlainSocketImpl.java Wed May 07 19:26:47 2014 -0700
-@@ -191,14 +191,17 @@
- }
-
- protected synchronized void accept(SocketImpl s) throws IOException {
-- // pass in the real impl not the wrapper.
-- SocketImpl delegate = ((PlainSocketImpl)s).impl;
-- delegate.address = new InetAddress();
-- delegate.fd = new FileDescriptor();
-- impl.accept(delegate);
--
-- // set fd to delegate's fd to be compatible with older releases
-- s.fd = delegate.fd;
-+ if (s instanceof PlainSocketImpl) {
-+ // pass in the real impl not the wrapper.
-+ SocketImpl delegate = ((PlainSocketImpl)s).impl;
-+ delegate.address = new InetAddress();
-+ delegate.fd = new FileDescriptor();
-+ impl.accept(delegate);
-+ // set fd to delegate's fd to be compatible with older releases
-+ s.fd = delegate.fd;
-+ } else {
-+ impl.accept(s);
-+ }
- }
-
- void setFileDescriptor(FileDescriptor fd) {
---- ./jdk/src/windows/classes/sun/awt/windows/WPrinterJob.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/sun/awt/windows/WPrinterJob.java Wed May 07 19:26:47 2014 -0700
-@@ -179,6 +179,7 @@
- private static final int SET_RES_LOW = 0x00000080;
- private static final int SET_COLOR = 0x00000200;
- private static final int SET_ORIENTATION = 0x00004000;
-+ private static final int SET_COLLATED = 0x00008000;
-
- /**
- * Values must match those defined in wingdi.h & commdlg.h
-@@ -189,10 +190,33 @@
- private static final int PD_NOSELECTION = 0x00000004;
- private static final int PD_COLLATE = 0x00000010;
- private static final int PD_PRINTTOFILE = 0x00000020;
-- private static final int DM_ORIENTATION = 0x00000001;
-- private static final int DM_PRINTQUALITY = 0x00000400;
-- private static final int DM_COLOR = 0x00000800;
-- private static final int DM_DUPLEX = 0x00001000;
-+ private static final int DM_ORIENTATION = 0x00000001;
-+ private static final int DM_PAPERSIZE = 0x00000002;
-+ private static final int DM_COPIES = 0x00000100;
-+ private static final int DM_DEFAULTSOURCE = 0x00000200;
-+ private static final int DM_PRINTQUALITY = 0x00000400;
-+ private static final int DM_COLOR = 0x00000800;
-+ private static final int DM_DUPLEX = 0x00001000;
-+ private static final int DM_YRESOLUTION = 0x00002000;
-+ private static final int DM_COLLATE = 0x00008000;
-+
-+ private static final short DMCOLLATE_FALSE = 0;
-+ private static final short DMCOLLATE_TRUE = 1;
-+
-+ private static final short DMORIENT_PORTRAIT = 1;
-+ private static final short DMORIENT_LANDSCAPE = 2;
-+
-+ private static final short DMCOLOR_MONOCHROME = 1;
-+ private static final short DMCOLOR_COLOR = 2;
-+
-+ private static final short DMRES_DRAFT = -1;
-+ private static final short DMRES_LOW = -2;
-+ private static final short DMRES_MEDIUM = -3;
-+ private static final short DMRES_HIGH = -4;
-+
-+ private static final short DMDUP_SIMPLEX = 1;
-+ private static final short DMDUP_VERTICAL = 2;
-+ private static final short DMDUP_HORIZONTAL = 3;
-
- /**
- * Pageable MAX pages
-@@ -592,13 +616,23 @@
- }
- driverDoesMultipleCopies = false;
- driverDoesCollation = false;
-- setNativePrintService(service.getName());
-+ setNativePrintServiceIfNeeded(service.getName());
- }
-
- /* associates this job with the specified native service */
- private native void setNativePrintService(String name)
- throws PrinterException;
-
-+ private String lastNativeService = null;
-+ private void setNativePrintServiceIfNeeded(String name)
-+ throws PrinterException {
-+
-+ if (name != null && !(name.equals(lastNativeService))) {
-+ setNativePrintService(name);
-+ lastNativeService = name;
-+ }
-+ }
-+
- public PrintService getPrintService() {
- if (myService == null) {
- String printerName = getNativePrintService();
-@@ -616,7 +650,7 @@
- myService = PrintServiceLookup.lookupDefaultPrintService();
- if (myService != null) {
- try {
-- setNativePrintService(myService.getName());
-+ setNativePrintServiceIfNeeded(myService.getName());
- } catch (Exception e) {
- myService = null;
- }
-@@ -1742,8 +1776,13 @@
- mAttMediaSizeName = ((Win32PrintService)myService).findPaperID(msn);
- }
-
-- private void setWin32MediaAttrib(int dmIndex, int width, int length) {
-- MediaSizeName msn =
-+ private void addPaperSize(PrintRequestAttributeSet aset,
-+ int dmIndex, int width, int length) {
-+
-+ if (aset == null) {
-+ return;
-+ }
-+ MediaSizeName msn =
- ((Win32PrintService)myService).findWin32Media(dmIndex);
- if (msn == null) {
- msn = ((Win32PrintService)myService).
-@@ -1751,10 +1790,12 @@
- }
-
- if (msn != null) {
-- if (attributes != null) {
-- attributes.add(msn);
-- }
-+ aset.add(msn);
- }
-+ }
-+
-+ private void setWin32MediaAttrib(int dmIndex, int width, int length) {
-+ addPaperSize(attributes, dmIndex, width, length);
- mAttMediaSizeName = dmIndex;
- }
-
-@@ -1776,7 +1817,7 @@
- // no equivalent predefined value
- mAttMediaTray = 7; // DMBIN_AUTO
- } else if (attr == MediaTray.TOP) {
-- mAttMediaTray =1; // DMBIN_UPPER
-+ mAttMediaTray = 1; // DMBIN_UPPER
- } else {
- if (attr instanceof Win32MediaTray) {
- mAttMediaTray = ((Win32MediaTray)attr).winID;
-@@ -1902,6 +1943,254 @@
- }
- }
-
-+ private static final class DevModeValues {
-+ int dmFields;
-+ short copies;
-+ short collate;
-+ short color;
-+ short duplex;
-+ short orient;
-+ short paper;
-+ short bin;
-+ short xres_quality;
-+ short yres;
-+ }
-+
-+ private void getDevModeValues(PrintRequestAttributeSet aset,
-+ DevModeValues info) {
-+
-+ Copies c = (Copies)aset.get(Copies.class);
-+ if (c != null) {
-+ info.dmFields |= DM_COPIES;
-+ info.copies = (short)c.getValue();
-+ }
-+
-+ SheetCollate sc = (SheetCollate)aset.get(SheetCollate.class);
-+ if (sc != null) {
-+ info.dmFields |= DM_COLLATE;
-+ info.collate = (sc == SheetCollate.COLLATED) ?
-+ DMCOLLATE_TRUE : DMCOLLATE_FALSE;
-+ }
-+
-+ Chromaticity ch = (Chromaticity)aset.get(Chromaticity.class);
-+ if (ch != null) {
-+ info.dmFields |= DM_COLOR;
-+ if (ch == Chromaticity.COLOR) {
-+ info.color = DMCOLOR_COLOR;
-+ } else {
-+ info.color = DMCOLOR_MONOCHROME;
-+ }
-+ }
-+
-+ Sides s = (Sides)aset.get(Sides.class);
-+ if (s != null) {
-+ info.dmFields |= DM_DUPLEX;
-+ if (s == Sides.TWO_SIDED_LONG_EDGE) {
-+ info.duplex = DMDUP_VERTICAL;
-+ } else if (s == Sides.TWO_SIDED_SHORT_EDGE) {
-+ info.duplex = DMDUP_HORIZONTAL;
-+ } else { // Sides.ONE_SIDED
-+ info.duplex = DMDUP_SIMPLEX;
-+ }
-+ }
-+
-+ OrientationRequested or =
-+ (OrientationRequested)aset.get(OrientationRequested.class);
-+ if (or != null) {
-+ info.dmFields |= DM_ORIENTATION;
-+ info.orient = (or == OrientationRequested.LANDSCAPE)
-+ ? DMORIENT_LANDSCAPE : DMORIENT_PORTRAIT;
-+ }
-+
-+ Media m = (Media)aset.get(Media.class);
-+ if (m instanceof MediaSizeName) {
-+ info.dmFields |= DM_PAPERSIZE;
-+ MediaSizeName msn = (MediaSizeName)m;
-+ info.paper =
-+ (short)((Win32PrintService)myService).findPaperID(msn);
-+ }
-+
-+ MediaTray mt = null;
-+ if (m instanceof MediaTray) {
-+ mt = (MediaTray)m;
-+ }
-+ if (mt == null) {
-+ SunAlternateMedia sam =
-+ (SunAlternateMedia)aset.get(SunAlternateMedia.class);
-+ if (sam != null && (sam.getMedia() instanceof MediaTray)) {
-+ mt = (MediaTray)sam.getMedia();
-+ }
-+ }
-+
-+ if (mt != null) {
-+ info.dmFields |= DM_DEFAULTSOURCE;
-+ info.bin = (short)(((Win32PrintService)myService).findTrayID(mt));
-+ }
-+
-+ PrintQuality q = (PrintQuality)aset.get(PrintQuality.class);
-+ if (q != null) {
-+ info.dmFields |= DM_PRINTQUALITY;
-+ if (q == PrintQuality.DRAFT) {
-+ info.xres_quality = DMRES_DRAFT;
-+ } else if (q == PrintQuality.HIGH) {
-+ info.xres_quality = DMRES_HIGH;
-+ } else {
-+ info.xres_quality = DMRES_MEDIUM;
-+ }
-+ }
-+
-+ PrinterResolution r =
-+ (PrinterResolution)aset.get(PrinterResolution.class);
-+ if (r != null) {
-+ info.dmFields |= DM_PRINTQUALITY | DM_YRESOLUTION;
-+ info.xres_quality =
-+ (short)r.getCrossFeedResolution(PrinterResolution.DPI);
-+ info.yres = (short)r.getFeedResolution(PrinterResolution.DPI);
-+ }
-+ }
-+
-+ /* This method is called from native to update the values in the
-+ * attribute set which originates from the cross-platform dialog,
-+ * but updated by the native DocumentPropertiesUI which updates the
-+ * devmode. This syncs the devmode back in to the attributes so that
-+ * we can update the cross-platform dialog.
-+ * The attribute set here is a temporary one installed whilst this
-+ * happens,
-+ */
-+ private final void setJobAttributes(PrintRequestAttributeSet attributes,
-+ int fields, int values,
-+ short copies,
-+ short dmPaperSize,
-+ short dmPaperWidth,
-+ short dmPaperLength,
-+ short dmDefaultSource,
-+ short xRes,
-+ short yRes) {
-+
-+ if (attributes == null) {
-+ return;
-+ }
-+
-+ if ((fields & DM_COPIES) != 0) {
-+ attributes.add(new Copies(copies));
-+ }
-+
-+ if ((fields & DM_COLLATE) != 0) {
-+ if ((values & SET_COLLATED) != 0) {
-+ attributes.add(SheetCollate.COLLATED);
-+ } else {
-+ attributes.add(SheetCollate.UNCOLLATED);
-+ }
-+ }
-+
-+ if ((fields & DM_ORIENTATION) != 0) {
-+ if ((values & SET_ORIENTATION) != 0) {
-+ attributes.add(OrientationRequested.LANDSCAPE);
-+ } else {
-+ attributes.add(OrientationRequested.PORTRAIT);
-+ }
-+ }
-+
-+ if ((fields & DM_COLOR) != 0) {
-+ if ((values & SET_COLOR) != 0) {
-+ attributes.add(Chromaticity.COLOR);
-+ } else {
-+ attributes.add(Chromaticity.MONOCHROME);
-+ }
-+ }
-+
-+ if ((fields & DM_PRINTQUALITY) != 0) {
-+ /* value < 0 indicates quality setting.
-+ * value > 0 indicates X resolution. In that case
-+ * hopefully we will also find y-resolution specified.
-+ * If its not, assume its the same as x-res.
-+ * Maybe Java code should try to reconcile this against
-+ * the printers claimed set of supported resolutions.
-+ */
-+ if (xRes < 0) {
-+ PrintQuality quality;
-+ if ((values & SET_RES_LOW) != 0) {
-+ quality = PrintQuality.DRAFT;
-+ } else if ((fields & SET_RES_HIGH) != 0) {
-+ quality = PrintQuality.HIGH;
-+ } else {
-+ quality = PrintQuality.NORMAL;
-+ }
-+ attributes.add(quality);
-+ } else if (xRes > 0 && yRes > 0) {
-+ attributes.add(
-+ new PrinterResolution(xRes, yRes, PrinterResolution.DPI));
-+ }
-+ }
-+
-+ if ((fields & DM_DUPLEX) != 0) {
-+ Sides sides;
-+ if ((values & SET_DUP_VERTICAL) != 0) {
-+ sides = Sides.TWO_SIDED_LONG_EDGE;
-+ } else if ((values & SET_DUP_HORIZONTAL) != 0) {
-+ sides = Sides.TWO_SIDED_SHORT_EDGE;
-+ } else {
-+ sides = Sides.ONE_SIDED;
-+ }
-+ attributes.add(sides);
-+ }
-+
-+ if ((fields & DM_PAPERSIZE) != 0) {
-+ addPaperSize(attributes, dmPaperSize, dmPaperWidth, dmPaperLength);
-+ }
-+
-+ if ((fields & DM_DEFAULTSOURCE) != 0) {
-+ MediaTray tray =
-+ ((Win32PrintService)myService).findMediaTray(dmDefaultSource);
-+ attributes.add(new SunAlternateMedia(tray));
-+ }
-+ }
-+
-+ private native boolean showDocProperties(long hWnd,
-+ PrintRequestAttributeSet aset,
-+ int dmFields,
-+ short copies,
-+ short collate,
-+ short color,
-+ short duplex,
-+ short orient,
-+ short paper,
-+ short bin,
-+ short xres_quality,
-+ short yres);
-+
-+ @SuppressWarnings("deprecation")
-+ public PrintRequestAttributeSet
-+ showDocumentProperties(Window owner,
-+ PrintService service,
-+ PrintRequestAttributeSet aset)
-+ {
-+ try {
-+ setNativePrintServiceIfNeeded(service.getName());
-+ } catch (PrinterException e) {
-+ }
-+ long hWnd = ((WWindowPeer)(owner.getPeer())).getHWnd();
-+ DevModeValues info = new DevModeValues();
-+ getDevModeValues(aset, info);
-+ boolean ok =
-+ showDocProperties(hWnd, aset,
-+ info.dmFields,
-+ info.copies,
-+ info.collate,
-+ info.color,
-+ info.duplex,
-+ info.orient,
-+ info.paper,
-+ info.bin,
-+ info.xres_quality,
-+ info.yres);
-+
-+ if (ok) {
-+ return aset;
-+ } else {
-+ return null;
-+ }
-+ }
-
- /* Printer Resolution. See also getXRes() and getYRes() */
- private final void setResolutionDPI(int xres, int yres) {
-@@ -1944,7 +2233,7 @@
- }
- //** END Functions called by native code for querying/updating attributes
-
-- }
-+ }
-
- class PrintToFileErrorDialog extends Dialog implements ActionListener{
- public PrintToFileErrorDialog(Frame parent, String title, String message,
---- ./jdk/src/windows/classes/sun/awt/windows/WToolkit.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/sun/awt/windows/WToolkit.java Wed May 07 19:26:47 2014 -0700
-@@ -37,6 +37,7 @@
- import java.security.AccessController;
- import java.security.PrivilegedAction;
- import sun.awt.AWTAutoShutdown;
-+import sun.awt.AppContext;
- import sun.awt.SunToolkit;
- import sun.misc.ThreadGroupUtils;
- import sun.awt.Win32GraphicsDevice;
-@@ -864,6 +865,7 @@
- */
- private void windowsSettingChange() {
- EventQueue.invokeLater(new Runnable() {
-+ @Override
- public void run() {
- updateProperties();
- }
---- ./jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java Wed May 07 19:26:47 2014 -0700
-@@ -230,6 +230,7 @@
- @Override
- public void run() {
- long overlapped = 0L;
-+ boolean pending = false;
- try {
- begin();
-
-@@ -243,6 +244,7 @@
- overlapped);
- if (n == IOStatus.UNAVAILABLE) {
- // I/O is pending
-+ pending = true;
- return;
- }
- // acquired lock immediately
-@@ -252,10 +254,10 @@
- } catch (Throwable x) {
- // lock failed or channel closed
- removeFromFileLockTable(fli);
-- if (overlapped != 0L)
-- ioCache.remove(overlapped);
- result.setFailure(toIOException(x));
- } finally {
-+ if (!pending && overlapped != 0L)
-+ ioCache.remove(overlapped);
- end();
- }
-
---- ./jdk/src/windows/classes/sun/nio/fs/WindowsConstants.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/sun/nio/fs/WindowsConstants.java Wed May 07 19:26:47 2014 -0700
-@@ -100,6 +100,7 @@
- public static final int ERROR_INVALID_LEVEL = 124;
- public static final int ERROR_DIR_NOT_EMPTY = 145;
- public static final int ERROR_ALREADY_EXISTS = 183;
-+ public static final int ERROR_MORE_DATA = 234;
- public static final int ERROR_DIRECTORY = 267;
- public static final int ERROR_NOTIFY_ENUM_DIR = 1022;
- public static final int ERROR_NONE_MAPPED = 1332;
---- ./jdk/src/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java Wed May 07 19:26:47 2014 -0700
-@@ -973,19 +973,19 @@
- * HANDLE CreateIoCompletionPort (
- * HANDLE FileHandle,
- * HANDLE ExistingCompletionPort,
-- * DWORD CompletionKey,
-+ * ULONG_PTR CompletionKey,
- * DWORD NumberOfConcurrentThreads
- * )
- */
- static native long CreateIoCompletionPort(long fileHandle, long existingPort,
-- int completionKey) throws WindowsException;
-+ long completionKey) throws WindowsException;
-
-
- /**
- * GetQueuedCompletionStatus(
- * HANDLE CompletionPort,
- * LPDWORD lpNumberOfBytesTransferred,
-- * LPDWORD lpCompletionKey,
-+ * PULONG_PTR lpCompletionKey,
- * LPOVERLAPPED *lpOverlapped,
- * DWORD dwMilliseconds
- */
-@@ -999,12 +999,12 @@
- static class CompletionStatus {
- private int error;
- private int bytesTransferred;
-- private int completionKey;
-+ private long completionKey;
- private CompletionStatus() { }
-
- int error() { return error; }
- int bytesTransferred() { return bytesTransferred; }
-- int completionKey() { return completionKey; }
-+ long completionKey() { return completionKey; }
- }
- private static native void GetQueuedCompletionStatus0(long completionPort,
- CompletionStatus status) throws WindowsException;
-@@ -1013,12 +1013,12 @@
- * PostQueuedCompletionStatus(
- * HANDLE CompletionPort,
- * DWORD dwNumberOfBytesTransferred,
-- * DWORD dwCompletionKey,
-+ * ULONG_PTR dwCompletionKey,
- * LPOVERLAPPED lpOverlapped
- * )
- */
- static native void PostQueuedCompletionStatus(long completionPort,
-- int completionKey) throws WindowsException;
-+ long completionKey) throws WindowsException;
-
- /**
- * ReadDirectoryChangesW(
---- ./jdk/src/windows/classes/sun/nio/fs/WindowsWatchService.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/sun/nio/fs/WindowsWatchService.java Wed May 07 19:26:47 2014 -0700
-@@ -41,6 +41,7 @@
- class WindowsWatchService
- extends AbstractWatchService
- {
-+ private final static int WAKEUP_COMPLETION_KEY = 0;
- private final Unsafe unsafe = Unsafe.getUnsafe();
-
- // background thread to service I/O completion port
-@@ -83,7 +84,7 @@
- */
- private class WindowsWatchKey extends AbstractWatchKey {
- // file key (used to detect existing registrations)
-- private FileKey fileKey;
-+ private final FileKey fileKey;
-
- // handle to directory
- private volatile long handle = INVALID_HANDLE_VALUE;
-@@ -223,8 +224,7 @@
- FileKey other = (FileKey)obj;
- if (this.volSerialNumber != other.volSerialNumber) return false;
- if (this.fileIndexHigh != other.fileIndexHigh) return false;
-- if (this.fileIndexLow != other.fileIndexLow) return false;
-- return true;
-+ return this.fileIndexLow == other.fileIndexLow;
- }
- }
-
-@@ -268,6 +268,7 @@
- private static final short OFFSETOF_FILENAME = 12;
-
- // size of per-directory buffer for events (FIXME - make this configurable)
-+ // Need to be less than 4*16384 = 65536. DWORD align.
- private static final int CHANGES_BUFFER_SIZE = 16 * 1024;
-
- private final WindowsFileSystem fs;
-@@ -275,27 +276,28 @@
- private final long port;
-
- // maps completion key to WatchKey
-- private final Map<Integer,WindowsWatchKey> int2key;
-+ private final Map<Integer,WindowsWatchKey> ck2key;
-
- // maps file key to WatchKey
- private final Map<FileKey,WindowsWatchKey> fk2key;
-
- // unique completion key for each directory
-+ // native completion key capacity is 64 bits on Win64.
- private int lastCompletionKey;
-
- Poller(WindowsFileSystem fs, WindowsWatchService watcher, long port) {
- this.fs = fs;
- this.watcher = watcher;
- this.port = port;
-- this.int2key = new HashMap<Integer,WindowsWatchKey>();
-- this.fk2key = new HashMap<FileKey,WindowsWatchKey>();
-+ this.ck2key = new HashMap<>();
-+ this.fk2key = new HashMap<>();
- this.lastCompletionKey = 0;
- }
-
- @Override
- void wakeup() throws IOException {
- try {
-- PostQueuedCompletionStatus(port, 0);
-+ PostQueuedCompletionStatus(port, WAKEUP_COMPLETION_KEY);
- } catch (WindowsException x) {
- throw new IOException(x.getMessage());
- }
-@@ -322,7 +324,6 @@
- for (WatchEvent.Modifier modifier: modifiers) {
- if (modifier == ExtendedWatchEventModifier.FILE_TREE) {
- watchSubtree = true;
-- continue;
- } else {
- if (modifier == null)
- return new NullPointerException();
-@@ -333,7 +334,7 @@
- }
-
- // open directory
-- long handle = -1L;
-+ long handle;
- try {
- handle = CreateFile(dir.getPathForWin32Calls(),
- FILE_LIST_DIRECTORY,
-@@ -347,7 +348,7 @@
- boolean registered = false;
- try {
- // read attributes and check file is a directory
-- WindowsFileAttributes attrs = null;
-+ WindowsFileAttributes attrs;
- try {
- attrs = WindowsFileAttributes.readAttributes(handle);
- } catch (WindowsException x) {
-@@ -370,9 +371,10 @@
- return existing;
- }
-
-- // unique completion key (skip 0)
-+ // Can overflow the int type capacity.
-+ // Skip WAKEUP_COMPLETION_KEY value.
- int completionKey = ++lastCompletionKey;
-- if (completionKey == 0)
-+ if (completionKey == WAKEUP_COMPLETION_KEY)
- completionKey = ++lastCompletionKey;
-
- // associate handle with completion port
-@@ -418,13 +420,13 @@
- // 1. remove mapping from old completion key to existing watch key
- // 2. release existing key's resources (handle/buffer)
- // 3. re-initialize key with new handle/buffer
-- int2key.remove(existing.completionKey());
-+ ck2key.remove(existing.completionKey());
- existing.releaseResources();
- watchKey = existing.init(handle, events, watchSubtree, buffer,
- countAddress, overlappedAddress, completionKey);
- }
- // map completion map to watch key
-- int2key.put(completionKey, watchKey);
-+ ck2key.put(completionKey, watchKey);
-
- registered = true;
- return watchKey;
-@@ -440,7 +442,7 @@
- WindowsWatchKey key = (WindowsWatchKey)obj;
- if (key.isValid()) {
- fk2key.remove(key.fileKey());
-- int2key.remove(key.completionKey());
-+ ck2key.remove(key.completionKey());
- key.invalidate();
- }
- }
-@@ -449,11 +451,11 @@
- @Override
- void implCloseAll() {
- // cancel all keys
-- for (Map.Entry<Integer,WindowsWatchKey> entry: int2key.entrySet()) {
-+ for (Map.Entry<Integer, WindowsWatchKey> entry: ck2key.entrySet()) {
- entry.getValue().invalidate();
- }
- fk2key.clear();
-- int2key.clear();
-+ ck2key.clear();
-
- // close I/O completion port
- CloseHandle(port);
-@@ -517,7 +519,7 @@
- @Override
- public void run() {
- for (;;) {
-- CompletionStatus info = null;
-+ CompletionStatus info;
- try {
- info = GetQueuedCompletionStatus(port);
- } catch (WindowsException x) {
-@@ -527,7 +529,7 @@
- }
-
- // wakeup
-- if (info.completionKey() == 0) {
-+ if (info.completionKey() == WAKEUP_COMPLETION_KEY) {
- boolean shutdown = processRequests();
- if (shutdown) {
- return;
-@@ -536,7 +538,7 @@
- }
-
- // map completionKey to get WatchKey
-- WindowsWatchKey key = int2key.get(info.completionKey());
-+ WindowsWatchKey key = ck2key.get((int)info.completionKey());
- if (key == null) {
- // We get here when a registration is changed. In that case
- // the directory is closed which causes an event with the
-@@ -544,38 +546,44 @@
- continue;
- }
-
-- // ReadDirectoryChangesW failed
-- if (info.error() != 0) {
-+ boolean criticalError = false;
-+ int errorCode = info.error();
-+ int messageSize = info.bytesTransferred();
-+ if (errorCode == ERROR_NOTIFY_ENUM_DIR) {
- // buffer overflow
-- if (info.error() == ERROR_NOTIFY_ENUM_DIR) {
-+ key.signalEvent(StandardWatchEventKinds.OVERFLOW, null);
-+ } else if (errorCode != 0 && errorCode != ERROR_MORE_DATA) {
-+ // ReadDirectoryChangesW failed
-+ criticalError = true;
-+ } else {
-+ // ERROR_MORE_DATA is a warning about incomplite
-+ // data transfer over TCP/UDP stack. For the case
-+ // [messageSize] is zero in the most of cases.
-+
-+ if (messageSize > 0) {
-+ // process non-empty events.
-+ processEvents(key, messageSize);
-+ } else if (errorCode == 0) {
-+ // insufficient buffer size
-+ // not described, but can happen.
- key.signalEvent(StandardWatchEventKinds.OVERFLOW, null);
-- } else {
-- // other error so cancel key
-- implCancelKey(key);
-- key.signal();
- }
-- continue;
-+
-+ // start read for next batch of changes
-+ try {
-+ ReadDirectoryChangesW(key.handle(),
-+ key.buffer().address(),
-+ CHANGES_BUFFER_SIZE,
-+ key.watchSubtree(),
-+ ALL_FILE_NOTIFY_EVENTS,
-+ key.countAddress(),
-+ key.overlappedAddress());
-+ } catch (WindowsException x) {
-+ // no choice but to cancel key
-+ criticalError = true;
-+ }
- }
--
-- // process the events
-- if (info.bytesTransferred() > 0) {
-- processEvents(key, info.bytesTransferred());
-- } else {
-- // insufficient buffer size
-- key.signalEvent(StandardWatchEventKinds.OVERFLOW, null);
-- }
--
-- // start read for next batch of changes
-- try {
-- ReadDirectoryChangesW(key.handle(),
-- key.buffer().address(),
-- CHANGES_BUFFER_SIZE,
-- key.watchSubtree(),
-- ALL_FILE_NOTIFY_EVENTS,
-- key.countAddress(),
-- key.overlappedAddress());
-- } catch (WindowsException x) {
-- // no choice but to cancel key
-+ if (criticalError) {
- implCancelKey(key);
- key.signal();
- }
---- ./jdk/src/windows/classes/sun/print/Win32MediaTray.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/sun/print/Win32MediaTray.java Wed May 07 19:26:47 2014 -0700
-@@ -70,6 +70,10 @@
- winEnumTable.add(this);
- }
-
-+ public int getDMBinID() {
-+ return winID;
-+ }
-+
- private static final String[] myStringTable ={
- "Manual-Envelope",
- "Automatic-Feeder",
---- ./jdk/src/windows/classes/sun/print/Win32PrintService.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/classes/sun/print/Win32PrintService.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2000, 2013, 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
-@@ -25,14 +25,13 @@
-
- package sun.print;
-
-+import java.awt.Window;
-+import java.awt.print.PrinterJob;
- import java.io.File;
- import java.net.URI;
- import java.net.URISyntaxException;
--import java.net.URL;
--
--import java.util.Vector;
-+import java.util.ArrayList;
- import java.util.HashMap;
--
- import javax.print.DocFlavor;
- import javax.print.DocPrintJob;
- import javax.print.PrintService;
-@@ -42,6 +41,7 @@
- import javax.print.attribute.AttributeSetUtilities;
- import javax.print.attribute.EnumSyntax;
- import javax.print.attribute.HashAttributeSet;
-+import javax.print.attribute.PrintRequestAttributeSet;
- import javax.print.attribute.PrintServiceAttribute;
- import javax.print.attribute.PrintServiceAttributeSet;
- import javax.print.attribute.HashPrintServiceAttributeSet;
-@@ -69,22 +69,15 @@
- import javax.print.attribute.standard.Sides;
- import javax.print.attribute.standard.ColorSupported;
- import javax.print.attribute.standard.PrintQuality;
--import javax.print.attribute.ResolutionSyntax;
- import javax.print.attribute.standard.PrinterResolution;
- import javax.print.attribute.standard.SheetCollate;
- import javax.print.event.PrintServiceAttributeListener;
--import java.util.ArrayList;
--
--import sun.print.SunPrinterJobService;
-+import sun.awt.windows.WPrinterJob;
-
- public class Win32PrintService implements PrintService, AttributeUpdater,
- SunPrinterJobService {
-
-- public static MediaSize[] predefMedia;
--
-- static {
-- Class c = Win32MediaSize.class;
-- }
-+ public static MediaSize[] predefMedia = Win32MediaSize.getPredefMedia();
-
- private static final DocFlavor[] supportedFlavors = {
- DocFlavor.BYTE_ARRAY.GIF,
-@@ -290,6 +283,22 @@
- return 0;
- }
-
-+ public int findTrayID(MediaTray tray) {
-+
-+ getMediaTrays(); // make sure they are initialised.
-+
-+ if (tray instanceof Win32MediaTray) {
-+ Win32MediaTray winTray = (Win32MediaTray)tray;
-+ return winTray.getDMBinID();
-+ }
-+ for (int id=0; id<dmPaperBinToPrintService.length; id++) {
-+ if (tray.equals(dmPaperBinToPrintService[id])) {
-+ return id+1; // DMBIN_FIRST = 1;
-+ }
-+ }
-+ return 0; // didn't find the tray
-+ }
-+
- public MediaTray findMediaTray(int dmBin) {
- if (dmBin >= 1 && dmBin <= dmPaperBinToPrintService.length) {
- return dmPaperBinToPrintService[dmBin-1];
-@@ -310,7 +319,9 @@
-
- public MediaSizeName findWin32Media(int dmIndex) {
- if (dmIndex >= 1 && dmIndex <= dmPaperToPrintService.length) {
-- switch(dmIndex) {
-+ return dmPaperToPrintService[dmIndex - 1];
-+ }
-+ switch(dmIndex) {
- /* matching media sizes with indices beyond
- dmPaperToPrintService's length */
- case DMPAPER_A2:
-@@ -320,11 +331,8 @@
- case DMPAPER_B6_JIS:
- return MediaSizeName.JIS_B6;
- default:
-- return dmPaperToPrintService[dmIndex - 1];
-- }
-+ return null;
- }
--
-- return null;
- }
-
- private boolean addToUniqueList(ArrayList msnList, MediaSizeName mediaName) {
-@@ -350,6 +358,7 @@
- }
-
- ArrayList msnList = new ArrayList();
-+ ArrayList<Win32MediaSize> trailingWmsList = new ArrayList<Win32MediaSize>();
- ArrayList printableList = new ArrayList();
- MediaSizeName mediaName;
- boolean added;
-@@ -368,7 +377,8 @@
- idList.add(Integer.valueOf(media[i]));
- }
-
-- mediaSizes = getMediaSizes(idList, media);
-+ ArrayList<String> dmPaperNameList = new ArrayList<String>();
-+ mediaSizes = getMediaSizes(idList, media, dmPaperNameList);
- for (int i = 0; i < idList.size(); i++) {
-
- // match Win ID with our predefined ID using table
-@@ -387,6 +397,7 @@
- mediaName = null;
- }
- }
-+ boolean dmPaperIDMatched = (mediaName != null);
-
- // No match found, then we get the MediaSizeName out of the MediaSize
- // This requires 1-1 correspondence, lengths must be checked.
-@@ -395,9 +406,32 @@
- }
-
- // Add mediaName to the msnList
-+ added = false;
- if (mediaName != null) {
- added = addToUniqueList(msnList, mediaName);
- }
-+ if ((!dmPaperIDMatched || !added) && (idList.size() == dmPaperNameList.size())) {
-+ /* The following block allows to add such media names to the list, whose sizes
-+ * matched with media sizes predefined in JDK, while whose paper IDs did not,
-+ * or whose sizes and paper IDs both did not match with any predefined in JDK.
-+ */
-+ Win32MediaSize wms = Win32MediaSize.findMediaName(dmPaperNameList.get(i));
-+ if ((wms == null) && (idList.size() == mediaSizes.length)) {
-+ wms = new Win32MediaSize(dmPaperNameList.get(i), (Integer)idList.get(i));
-+ mediaSizes[i] = new MediaSize(mediaSizes[i].getX(MediaSize.MM),
-+ mediaSizes[i].getY(MediaSize.MM), MediaSize.MM, wms);
-+ }
-+ if ((wms != null) && (wms != mediaName)) {
-+ if (!added) {
-+ added = addToUniqueList(msnList, mediaName = wms);
-+ } else {
-+ trailingWmsList.add(wms);
-+ }
-+ }
-+ }
-+ }
-+ for (Win32MediaSize wms : trailingWmsList) {
-+ added = addToUniqueList(msnList, wms);
- }
-
- // init mediaSizeNames
-@@ -588,7 +622,11 @@
- }
-
-
-- private MediaSize[] getMediaSizes(ArrayList idList, int[] media) {
-+ private MediaSize[] getMediaSizes(ArrayList idList, int[] media, ArrayList<String> dmPaperNameList) {
-+ if (dmPaperNameList == null) {
-+ dmPaperNameList = new ArrayList<String>();
-+ }
-+
- String prnPort = getPort();
- int[] mediaSz = getAllMediaSizes(printer, prnPort);
- String[] winMediaNames = getAllMediaNames(printer, prnPort);
-@@ -607,40 +645,43 @@
- wid = mediaSz[i*2]/10f;
- ht = mediaSz[i*2+1]/10f;
-
-- // Make sure to validate wid & ht.
-- // HP LJ 4050 (german) causes IAE in Sonderformat paper, wid & ht
-- // returned is not constant.
-- if ((wid <= 0) || (ht <= 0)) {
-- //Remove corresponding ID from list
-- if (nMedia == media.length) {
-- Integer remObj = Integer.valueOf(media[i]);
-- idList.remove(idList.indexOf(remObj));
-+ // Make sure to validate wid & ht.
-+ // HP LJ 4050 (german) causes IAE in Sonderformat paper, wid & ht
-+ // returned is not constant.
-+ if ((wid <= 0) || (ht <= 0)) {
-+ //Remove corresponding ID from list
-+ if (nMedia == media.length) {
-+ Integer remObj = Integer.valueOf(media[i]);
-+ idList.remove(idList.indexOf(remObj));
-+ }
-+ continue;
- }
-- continue;
-- }
-- // Find matching media using dimensions.
-- // This call matches only with our own predefined sizes.
-- msn = findMatchingMediaSizeNameMM(wid, ht);
-- if (msn != null) {
-- ms = MediaSize.getMediaSizeForName(msn);
-- }
-+ // Find matching media using dimensions.
-+ // This call matches only with our own predefined sizes.
-+ msn = findMatchingMediaSizeNameMM(wid, ht);
-+ if (msn != null) {
-+ ms = MediaSize.getMediaSizeForName(msn);
-+ }
-
-- if (ms != null) {
-- msList.add(ms);
-- } else {
-- Win32MediaSize wms =
-- new Win32MediaSize(winMediaNames[i], media[i]);
-- try {
-- ms = new MediaSize(wid, ht, MediaSize.MM, wms);
-- msList.add(ms);
-- } catch(IllegalArgumentException e) {
-- if (nMedia == media.length) {
-- Integer remObj = Integer.valueOf(media[i]);
-- idList.remove(idList.indexOf(remObj));
-- }
-+ if (ms != null) {
-+ msList.add(ms);
-+ dmPaperNameList.add(winMediaNames[i]);
-+ } else {
-+ Win32MediaSize wms = Win32MediaSize.findMediaName(winMediaNames[i]);
-+ if (wms == null) {
-+ wms = new Win32MediaSize(winMediaNames[i], media[i]);
-+ }
-+ try {
-+ ms = new MediaSize(wid, ht, MediaSize.MM, wms);
-+ msList.add(ms);
-+ dmPaperNameList.add(winMediaNames[i]);
-+ } catch(IllegalArgumentException e) {
-+ if (nMedia == media.length) {
-+ Integer remObj = Integer.valueOf(media[i]);
-+ idList.remove(idList.indexOf(remObj));
-+ }
-+ }
- }
-- }
--
- }
-
- MediaSize[] arr2 = new MediaSize[msList.size()];
-@@ -649,7 +690,6 @@
- return arr2;
- }
-
--
- private PrinterIsAcceptingJobs getPrinterIsAcceptingJobs() {
- if (getJobStatus(printer, 2) != 1) {
- return PrinterIsAcceptingJobs.NOT_ACCEPTING_JOBS;
-@@ -1572,8 +1612,76 @@
- }
- }
-
-- public ServiceUIFactory getServiceUIFactory() {
-- return null;
-+ private Win32DocumentPropertiesUI docPropertiesUI = null;
-+
-+ private static class Win32DocumentPropertiesUI
-+ extends DocumentPropertiesUI {
-+
-+ Win32PrintService service;
-+
-+ private Win32DocumentPropertiesUI(Win32PrintService s) {
-+ service = s;
-+ }
-+
-+ public PrintRequestAttributeSet
-+ showDocumentProperties(PrinterJob job,
-+ Window owner,
-+ PrintService service,
-+ PrintRequestAttributeSet aset) {
-+
-+ if (!(job instanceof WPrinterJob)) {
-+ return null;
-+ }
-+ WPrinterJob wJob = (WPrinterJob)job;
-+ return wJob.showDocumentProperties(owner, service, aset);
-+ }
-+ }
-+
-+ private synchronized DocumentPropertiesUI getDocumentPropertiesUI() {
-+ return new Win32DocumentPropertiesUI(this);
-+ }
-+
-+ private static class Win32ServiceUIFactory extends ServiceUIFactory {
-+
-+ Win32PrintService service;
-+
-+ Win32ServiceUIFactory(Win32PrintService s) {
-+ service = s;
-+ }
-+
-+ public Object getUI(int role, String ui) {
-+ if (role <= ServiceUIFactory.MAIN_UIROLE) {
-+ return null;
-+ }
-+ if (role == DocumentPropertiesUI.DOCUMENTPROPERTIES_ROLE &&
-+ DocumentPropertiesUI.DOCPROPERTIESCLASSNAME.equals(ui))
-+ {
-+ return service.getDocumentPropertiesUI();
-+ }
-+ throw new IllegalArgumentException("Unsupported role");
-+ }
-+
-+ public String[] getUIClassNamesForRole(int role) {
-+
-+ if (role <= ServiceUIFactory.MAIN_UIROLE) {
-+ return null;
-+ }
-+ if (role == DocumentPropertiesUI.DOCUMENTPROPERTIES_ROLE) {
-+ String[] names = new String[0];
-+ names[0] = DocumentPropertiesUI.DOCPROPERTIESCLASSNAME;
-+ return names;
-+ }
-+ throw new IllegalArgumentException("Unsupported role");
-+ }
-+ }
-+
-+ private Win32ServiceUIFactory uiFactory = null;
-+
-+ public synchronized ServiceUIFactory getServiceUIFactory() {
-+ if (uiFactory == null) {
-+ uiFactory = new Win32ServiceUIFactory(this);
-+ }
-+ return uiFactory;
- }
-
- public String toString() {
-@@ -1614,6 +1722,7 @@
- class Win32MediaSize extends MediaSizeName {
- private static ArrayList winStringTable = new ArrayList();
- private static ArrayList winEnumTable = new ArrayList();
-+ private static MediaSize[] predefMedia;
-
- private int dmPaperID; // driver ID for this paper.
-
-@@ -1627,6 +1736,18 @@
- return (winStringTable.size()-1);
- }
-
-+ public static synchronized Win32MediaSize findMediaName(String name) {
-+ int nameIndex = winStringTable.indexOf(name);
-+ if (nameIndex != -1) {
-+ return (Win32MediaSize)winEnumTable.get(nameIndex);
-+ }
-+ return null;
-+ }
-+
-+ public static MediaSize[] getPredefMedia() {
-+ return predefMedia;
-+ }
-+
- public Win32MediaSize(String name, int dmPaper) {
- super(nextValue(name));
- dmPaperID = dmPaper;
-@@ -1638,18 +1759,17 @@
- }
-
- static {
-- /* initialize Win32PrintService.predefMedia */
-+ /* initialize predefMedia */
- {
- Win32MediaSize winMedia = new Win32MediaSize(-1);
-
- // cannot call getSuperEnumTable directly because of static context
- MediaSizeName[] enumMedia = winMedia.getSuperEnumTable();
- if (enumMedia != null) {
-- Win32PrintService.predefMedia = new MediaSize[enumMedia.length];
-+ predefMedia = new MediaSize[enumMedia.length];
-
- for (int i=0; i<enumMedia.length; i++) {
-- Win32PrintService.predefMedia[i] =
-- MediaSize.getMediaSizeForName(enumMedia[i]);
-+ predefMedia[i] = MediaSize.getMediaSizeForName(enumMedia[i]);
- }
- }
- }
---- ./jdk/src/windows/demo/jvmti/hprof/hprof_md.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/demo/jvmti/hprof/hprof_md.c Wed May 07 19:26:47 2014 -0700
-@@ -368,37 +368,32 @@
- }
-
- static void dll_build_name(char* buffer, size_t buflen,
-- const char* pname, const char* fname) {
-- // Loosley based on os_windows.cpp
-+ const char* paths, const char* fname) {
-+ char *path, *paths_copy, *next_token;
-
-- char *pathname = (char *)pname;
-- while (strlen(pathname) > 0) {
-- char *p = strchr(pathname, ';');
-- if (p == NULL) {
-- p = pathname + strlen(pathname);
-- }
-- /* check for NULL path */
-- if (p == pathname) {
-- continue;
-- }
-- if (*(p-1) == ':' || *(p-1) == '\\') {
-- (void)_snprintf(buffer, buflen, "%.*s%s.dll", (p - pathname),
-- pathname, fname);
-- } else {
-- (void)_snprintf(buffer, buflen, "%.*s\\%s.dll", (p - pathname),
-- pathname, fname);
-- }
-+ paths_copy = strdup(paths);
-+ if (paths_copy == NULL) {
-+ return;
-+ }
-+
-+ next_token = NULL;
-+ path = strtok_s(paths_copy, ";", &next_token);
-+
-+ while (path != NULL) {
-+ _snprintf(buffer, buflen, "%s\\%s.dll", path, fname);
- if (_access(buffer, 0) == 0) {
- break;
- }
-- pathname = p + 1;
- *buffer = '\0';
-+ path = strtok_s(NULL, ";", &next_token);
- }
-+
-+ free(paths_copy);
- }
-
- /* Build a machine dependent library name out of a path and file name. */
- void
--md_build_library_name(char *holder, int holderlen, char *pname, char *fname)
-+md_build_library_name(char *holder, int holderlen, const char *pname, const char *fname)
- {
- int pnamelen;
-
---- ./jdk/src/windows/native/java/lang/ProcessImpl_md.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/native/java/lang/ProcessImpl_md.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2013, 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
-@@ -63,46 +63,52 @@
- return source;
- }
-
-+static const char EXE_EXT[] = ".exe";
-+
- DWORD
- selectProcessFlag(JNIEnv *env, jstring cmd0)
- {
-- char buf[MAX_PATH];
- DWORD newFlag = 0;
-- char *exe, *p, *name;
-- unsigned char buffer[2];
-- long headerLoc = 0;
-- int fd = 0;
--
-- exe = (char *)JNU_GetStringPlatformChars(env, cmd0, 0);
-- exe = extractExecutablePath(env, exe);
--
-+ char *exe = (char *)JNU_GetStringPlatformChars(env, cmd0, 0);
- if (exe != NULL) {
-- if ((p = strchr(exe, '\\')) == NULL) {
-- SearchPath(NULL, exe, ".exe", MAX_PATH, buf, &name);
-- } else {
-- p = strrchr(exe, '\\');
-- *p = 0;
-- p++;
-- SearchPath(exe, p, ".exe", MAX_PATH, buf, &name);
-- }
-- }
--
-- fd = _open(buf, _O_RDONLY);
-- if (fd > 0) {
-- _read(fd, buffer, 2);
-- if (buffer[0] == 'M' && buffer[1] == 'Z') {
-- _lseek(fd, 60L, SEEK_SET);
-- _read(fd, buffer, 2);
-- headerLoc = (long)buffer[1] << 8 | (long)buffer[0];
-- _lseek(fd, headerLoc, SEEK_SET);
-- _read(fd, buffer, 2);
-- if (buffer[0] == 'P' && buffer[1] == 'E') {
-- newFlag = DETACHED_PROCESS;
-+ char buf[MAX_PATH];
-+ char *name;
-+ DWORD len;
-+ exe = extractExecutablePath(env, exe);
-+ if (exe != NULL) {
-+ /* We are here for Win9x/Me, so the [/] is not the path sep */
-+ char *p = strrchr(exe, '\\');
-+ if (p == NULL) {
-+ len = SearchPath(NULL, exe, EXE_EXT, MAX_PATH, buf, &name);
-+ } else {
-+ *p = 0;
-+ len = SearchPath(exe, p + 1, EXE_EXT, MAX_PATH, buf, &name);
- }
- }
-- _close(fd);
-+
-+ if (len > 0 && len < MAX_PATH) {
-+ /* Here the [buf] path is valid and null terminated */
-+ int fd = _open(buf, _O_RDONLY);
-+ if (fd != -1) {
-+ unsigned char buffer[2];
-+ if (_read(fd, buffer, 2) == 2
-+ && buffer[0] == 'M' && buffer[1] == 'Z'
-+ && _lseek(fd, 60L, SEEK_SET) == 60L
-+ && _read(fd, buffer, 2) == 2)
-+ {
-+ long headerLoc = (long)buffer[1] << 8 | (long)buffer[0];
-+ if (_lseek(fd, headerLoc, SEEK_SET) == headerLoc
-+ && _read(fd, buffer, 2) == 2
-+ && buffer[0] == 'P' && buffer[1] == 'E')
-+ {
-+ newFlag = DETACHED_PROCESS;
-+ }
-+ }
-+ _close(fd);
-+ }
-+ }
-+ JNU_ReleaseStringPlatformChars(env, cmd0, exe);
- }
-- JNU_ReleaseStringPlatformChars(env, cmd0, exe);
- return newFlag;
- }
-
-@@ -129,6 +135,237 @@
- CloseHandle(handle);
- }
-
-+static BOOL hasInheritFlag(HANDLE handle)
-+{
-+ DWORD mask;
-+ if (GetHandleInformation(handle, &mask)) {
-+ return mask & HANDLE_FLAG_INHERIT;
-+ }
-+ return FALSE;
-+}
-+
-+#define HANDLE_STORAGE_SIZE 6
-+#define OFFSET_READ 0
-+#define OFFSET_WRITE 1
-+//long signed version of INVALID_HANDLE_VALUE
-+#define JAVA_INVALID_HANDLE_VALUE ((jlong) -1)
-+#define OPPOSITE_END(offset) (offset==OFFSET_READ ? OFFSET_WRITE : OFFSET_READ)
-+
-+/* Pipe holder structure */
-+typedef struct _STDHOLDER {
-+ HANDLE pipe[2];
-+ int offset;
-+} STDHOLDER;
-+
-+/* Responsible for correct initialization of the [pHolder] structure
-+ (that is used for handles recycling) if needs,
-+ and appropriate setup of IOE handle [phStd] for child process based
-+ on created pipe or Java handle. */
-+static BOOL initHolder(
-+ JNIEnv *env,
-+ jlong *pjhandles, /* IN OUT - the handle form Java,
-+ that can be a file, console or undefined */
-+ STDHOLDER *pHolder, /* OUT - initialized structure that holds pipe
-+ handles */
-+ HANDLE *phStd /* OUT - initialized handle for child process */
-+) {
-+ /* Here we test the value from Java against invalid
-+ handle value. We are not using INVALID_HANDLE_VALUE macro
-+ due to double signed/unsigned and 32/64bit ambiguity.
-+ Otherwise it will be easy to get the wrong
-+ value 0x00000000FFFFFFFF
-+ instead 0xFFFFFFFFFFFFFFFF. */
-+ if (*pjhandles != JAVA_INVALID_HANDLE_VALUE) {
-+ /* Java file or console redirection */
-+ *phStd = (HANDLE) *pjhandles;
-+ /* Here we set the related Java stream (Process.getXXXXStream())
-+ to [ProcessBuilder.NullXXXXStream.INSTANCE] value.
-+ The initial Java handle [*pjhandles] will be closed in
-+ ANY case. It is not a handle leak. */
-+ *pjhandles = JAVA_INVALID_HANDLE_VALUE;
-+ } else {
-+ /* Creation of parent-child pipe */
-+ if (!CreatePipe(
-+ &pHolder->pipe[OFFSET_READ],
-+ &pHolder->pipe[OFFSET_WRITE],
-+ NULL, /* we would like to inherit
-+ default process access,
-+ instead of 'Everybody' access */
-+ PIPE_SIZE))
-+ {
-+ win32Error(env, "CreatePipe");
-+ return FALSE;
-+ } else {
-+ /* [thisProcessEnd] has no the inherit flag because
-+ the [lpPipeAttributes] param of [CreatePipe]
-+ had the NULL value. */
-+ HANDLE thisProcessEnd = pHolder->pipe[OPPOSITE_END(pHolder->offset)];
-+ *phStd = pHolder->pipe[pHolder->offset];
-+ *pjhandles = (jlong) thisProcessEnd;
-+ }
-+ }
-+ /* Pipe handle will be closed in the [releaseHolder] call,
-+ file handle will be closed in Java.
-+ The long-live handle need to restore the inherit flag,
-+ we do it later in the [prepareIOEHandleState] call. */
-+ SetHandleInformation(
-+ *phStd,
-+ HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);
-+ return TRUE;
-+}
-+
-+/* Smart recycling of pipe handles in [pHolder]. For the failed
-+ create process attempts, both ends of pipe need to be released.
-+ The [complete] has the [TRUE] value in the failed attempt. */
-+static void releaseHolder(BOOL complete, STDHOLDER *pHolder) {
-+ closeSafely(pHolder->pipe[pHolder->offset]);
-+ if (complete) {
-+ /* Error occur, close this process pipe end */
-+ closeSafely(pHolder->pipe[OPPOSITE_END(pHolder->offset)]);
-+ }
-+}
-+
-+/* Stores and drops the inherit flag of handles that should not
-+ be shared with the child process by default, but can hold the
-+ inherit flag due to MS process birth specific. */
-+static void prepareIOEHandleState(
-+ HANDLE *stdIOE,
-+ BOOL *inherit)
-+{
-+ int i;
-+ for (i = 0; i < HANDLE_STORAGE_SIZE; ++i) {
-+ HANDLE hstd = stdIOE[i];
-+ if (INVALID_HANDLE_VALUE != hstd && hasInheritFlag(hstd)) {
-+ /* FALSE by default */
-+ inherit[i] = TRUE;
-+ /* Java does not need implicit inheritance for IOE handles,
-+ so we drop inherit flag that probably was installed by
-+ previous CreateProcess call that launched current process.
-+ We will return the handle state back after CreateProcess call.
-+ By clearing inherit flag we prevent "greedy grandchild" birth.
-+ The explicit inheritance for child process IOE handles is
-+ implemented in the [initHolder] call. */
-+ SetHandleInformation(hstd, HANDLE_FLAG_INHERIT, 0);
-+ }
-+ }
-+}
-+
-+/* Restores the inheritance flag of handles from stored values. */
-+static void restoreIOEHandleState(
-+ const HANDLE *stdIOE,
-+ const BOOL *inherit)
-+{
-+ /* The set of current process standard IOE handles and
-+ the set of child process IOE handles can intersect.
-+ To restore the inherit flag right, we use backward
-+ array iteration. */
-+ int i;
-+ for (i = HANDLE_STORAGE_SIZE - 1; i >= 0; --i)
-+ if (INVALID_HANDLE_VALUE != stdIOE[i]) {
-+ /* Restore inherit flag for any case.
-+ The handle can be changed by explicit inheritance.*/
-+ SetHandleInformation(stdIOE[i],
-+ HANDLE_FLAG_INHERIT,
-+ inherit[i] ? HANDLE_FLAG_INHERIT : 0);
-+ }
-+}
-+
-+/* Please, read about the MS inheritance problem
-+ http://support.microsoft.com/kb/315939
-+ and critical section/synchronized block solution. */
-+static jlong processCreate(
-+ JNIEnv *env,
-+ const jchar *pcmd,
-+ const jchar *penvBlock,
-+ const jchar *pdir,
-+ jlong *handles,
-+ jboolean redirectErrorStream)
-+{
-+ jlong ret = 0L;
-+ STARTUPINFOW si = {sizeof(si)};
-+
-+ /* Handles for which the inheritance flag must be restored. */
-+ HANDLE stdIOE[HANDLE_STORAGE_SIZE] = {
-+ /* Current process standard IOE handles: JDK-7147084 */
-+ INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE,
-+ /* Child process IOE handles: JDK-6921885 */
-+ (HANDLE)handles[0], (HANDLE)handles[1], (HANDLE)handles[2]};
-+ BOOL inherit[HANDLE_STORAGE_SIZE] = {
-+ FALSE, FALSE, FALSE,
-+ FALSE, FALSE, FALSE};
-+
-+ {
-+ /* Extraction of current process standard IOE handles */
-+ DWORD idsIOE[3] = {STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, STD_ERROR_HANDLE};
-+ int i;
-+ for (i = 0; i < 3; ++i)
-+ /* Should not be closed by CloseHandle! */
-+ stdIOE[i] = GetStdHandle(idsIOE[i]);
-+ }
-+
-+ prepareIOEHandleState(stdIOE, inherit);
-+ {
-+ /* Input */
-+ STDHOLDER holderIn = {{INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE}, OFFSET_READ};
-+ if (initHolder(env, &handles[0], &holderIn, &si.hStdInput)) {
-+
-+ /* Output */
-+ STDHOLDER holderOut = {{INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE}, OFFSET_WRITE};
-+ if (initHolder(env, &handles[1], &holderOut, &si.hStdOutput)) {
-+
-+ /* Error */
-+ STDHOLDER holderErr = {{INVALID_HANDLE_VALUE, INVALID_HANDLE_VALUE}, OFFSET_WRITE};
-+ BOOL success;
-+ if (redirectErrorStream) {
-+ si.hStdError = si.hStdOutput;
-+ /* Here we set the error stream to [ProcessBuilder.NullInputStream.INSTANCE]
-+ value. That is in accordance with Java Doc for the redirection case.
-+ The Java file for the [ handles[2] ] will be closed in ANY case. It is not
-+ a handle leak. */
-+ handles[2] = JAVA_INVALID_HANDLE_VALUE;
-+ success = TRUE;
-+ } else {
-+ success = initHolder(env, &handles[2], &holderErr, &si.hStdError);
-+ }
-+
-+ if (success) {
-+ PROCESS_INFORMATION pi;
-+ DWORD processFlag = CREATE_UNICODE_ENVIRONMENT;
-+
-+ /* Suppress popping-up of a console window for non-console applications */
-+ if (GetConsoleWindow() == NULL)
-+ processFlag |= CREATE_NO_WINDOW;
-+
-+ si.dwFlags = STARTF_USESTDHANDLES;
-+ if (!CreateProcessW(
-+ NULL, /* executable name */
-+ (LPWSTR)pcmd, /* command line */
-+ NULL, /* process security attribute */
-+ NULL, /* thread security attribute */
-+ TRUE, /* inherits system handles */
-+ processFlag, /* selected based on exe type */
-+ (LPVOID)penvBlock,/* environment block */
-+ (LPCWSTR)pdir, /* change to the new current directory */
-+ &si, /* (in) startup information */
-+ &pi)) /* (out) process information */
-+ {
-+ win32Error(env, "CreateProcess");
-+ } else {
-+ closeSafely(pi.hThread);
-+ ret = (jlong)pi.hProcess;
-+ }
-+ }
-+ releaseHolder(ret == 0, &holderErr);
-+ releaseHolder(ret == 0, &holderOut);
-+ }
-+ releaseHolder(ret == 0, &holderIn);
-+ }
-+ }
-+ restoreIOEHandleState(stdIOE, inherit);
-+
-+ return ret;
-+}
-+
- JNIEXPORT jlong JNICALL
- Java_java_lang_ProcessImpl_create(JNIEnv *env, jclass ignored,
- jstring cmd,
-@@ -137,142 +374,35 @@
- jlongArray stdHandles,
- jboolean redirectErrorStream)
- {
-- HANDLE inRead = INVALID_HANDLE_VALUE;
-- HANDLE inWrite = INVALID_HANDLE_VALUE;
-- HANDLE outRead = INVALID_HANDLE_VALUE;
-- HANDLE outWrite = INVALID_HANDLE_VALUE;
-- HANDLE errRead = INVALID_HANDLE_VALUE;
-- HANDLE errWrite = INVALID_HANDLE_VALUE;
-- SECURITY_ATTRIBUTES sa;
-- PROCESS_INFORMATION pi;
-- STARTUPINFOW si;
-- const jchar* pcmd = NULL;
-- const jchar* pdir = NULL;
-- const jchar* penvBlock = NULL;
-- jlong *handles = NULL;
- jlong ret = 0;
-- OSVERSIONINFO ver;
-- jboolean onNT = JNI_FALSE;
-- DWORD processFlag;
--
-- ver.dwOSVersionInfoSize = sizeof(ver);
-- GetVersionEx(&ver);
-- if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT)
-- onNT = JNI_TRUE;
--
-- assert(cmd != NULL);
-- pcmd = (*env)->GetStringChars(env, cmd, NULL);
-- if (pcmd == NULL) goto Catch;
--
-- if (dir != 0) {
-- pdir = (*env)->GetStringChars(env, dir, NULL);
-- if (pdir == NULL) goto Catch;
-+ if (cmd != NULL && stdHandles != NULL) {
-+ const jchar *pcmd = (*env)->GetStringChars(env, cmd, NULL);
-+ if (pcmd != NULL) {
-+ const jchar *penvBlock = (envBlock != NULL)
-+ ? (*env)->GetStringChars(env, envBlock, NULL)
-+ : NULL;
-+ const jchar *pdir = (dir != NULL)
-+ ? (*env)->GetStringChars(env, dir, NULL)
-+ : NULL;
-+ jlong *handles = (*env)->GetLongArrayElements(env, stdHandles, NULL);
-+ if (handles != NULL) {
-+ ret = processCreate(
-+ env,
-+ pcmd,
-+ penvBlock,
-+ pdir,
-+ handles,
-+ redirectErrorStream);
-+ (*env)->ReleaseLongArrayElements(env, stdHandles, handles, 0);
-+ }
-+ if (pdir != NULL)
-+ (*env)->ReleaseStringChars(env, dir, pdir);
-+ if (penvBlock != NULL)
-+ (*env)->ReleaseStringChars(env, envBlock, penvBlock);
-+ (*env)->ReleaseStringChars(env, cmd, pcmd);
-+ }
- }
-- if (envBlock != NULL) {
-- penvBlock = ((*env)->GetStringChars(env, envBlock, NULL));
-- if (penvBlock == NULL) goto Catch;
-- }
-- assert(stdHandles != NULL);
-- handles = (*env)->GetLongArrayElements(env, stdHandles, NULL);
-- if (handles == NULL) goto Catch;
--
-- memset(&si, 0, sizeof(si));
-- si.cb = sizeof(si);
-- si.dwFlags = STARTF_USESTDHANDLES;
--
-- sa.nLength = sizeof(sa);
-- sa.lpSecurityDescriptor = 0;
-- sa.bInheritHandle = TRUE;
--
-- if (handles[0] != (jlong) -1) {
-- si.hStdInput = (HANDLE) handles[0];
-- handles[0] = (jlong) -1;
-- } else {
-- if (! CreatePipe(&inRead, &inWrite, &sa, PIPE_SIZE)) {
-- win32Error(env, "CreatePipe");
-- goto Catch;
-- }
-- si.hStdInput = inRead;
-- SetHandleInformation(inWrite, HANDLE_FLAG_INHERIT, FALSE);
-- handles[0] = (jlong) inWrite;
-- }
-- SetHandleInformation(si.hStdInput, HANDLE_FLAG_INHERIT, TRUE);
--
-- if (handles[1] != (jlong) -1) {
-- si.hStdOutput = (HANDLE) handles[1];
-- handles[1] = (jlong) -1;
-- } else {
-- if (! CreatePipe(&outRead, &outWrite, &sa, PIPE_SIZE)) {
-- win32Error(env, "CreatePipe");
-- goto Catch;
-- }
-- si.hStdOutput = outWrite;
-- SetHandleInformation(outRead, HANDLE_FLAG_INHERIT, FALSE);
-- handles[1] = (jlong) outRead;
-- }
-- SetHandleInformation(si.hStdOutput, HANDLE_FLAG_INHERIT, TRUE);
--
-- if (redirectErrorStream) {
-- si.hStdError = si.hStdOutput;
-- handles[2] = (jlong) -1;
-- } else if (handles[2] != (jlong) -1) {
-- si.hStdError = (HANDLE) handles[2];
-- handles[2] = (jlong) -1;
-- } else {
-- if (! CreatePipe(&errRead, &errWrite, &sa, PIPE_SIZE)) {
-- win32Error(env, "CreatePipe");
-- goto Catch;
-- }
-- si.hStdError = errWrite;
-- SetHandleInformation(errRead, HANDLE_FLAG_INHERIT, FALSE);
-- handles[2] = (jlong) errRead;
-- }
-- SetHandleInformation(si.hStdError, HANDLE_FLAG_INHERIT, TRUE);
--
-- if (onNT)
-- processFlag = CREATE_NO_WINDOW | CREATE_UNICODE_ENVIRONMENT;
-- else
-- processFlag = selectProcessFlag(env, cmd) | CREATE_UNICODE_ENVIRONMENT;
-- ret = CreateProcessW(0, /* executable name */
-- (LPWSTR)pcmd, /* command line */
-- 0, /* process security attribute */
-- 0, /* thread security attribute */
-- TRUE, /* inherits system handles */
-- processFlag, /* selected based on exe type */
-- (LPVOID)penvBlock,/* environment block */
-- (LPCWSTR)pdir, /* change to the new current directory */
-- &si, /* (in) startup information */
-- &pi); /* (out) process information */
-- if (!ret) {
-- win32Error(env, "CreateProcess");
-- goto Catch;
-- }
--
-- CloseHandle(pi.hThread);
-- ret = (jlong)pi.hProcess;
--
-- Finally:
-- /* Always clean up the child's side of the pipes */
-- closeSafely(inRead);
-- closeSafely(outWrite);
-- closeSafely(errWrite);
--
-- if (pcmd != NULL)
-- (*env)->ReleaseStringChars(env, cmd, pcmd);
-- if (pdir != NULL)
-- (*env)->ReleaseStringChars(env, dir, pdir);
-- if (penvBlock != NULL)
-- (*env)->ReleaseStringChars(env, envBlock, penvBlock);
-- if (handles != NULL)
-- (*env)->ReleaseLongArrayElements(env, stdHandles, handles, 0);
- return ret;
--
-- Catch:
-- /* Clean up the parent's side of the pipes in case of failure only */
-- closeSafely(inWrite);
-- closeSafely(outRead);
-- closeSafely(errRead);
-- goto Finally;
- }
-
- JNIEXPORT jint JNICALL
---- ./jdk/src/windows/native/java/net/SocketInputStream.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/native/java/net/SocketInputStream.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -134,32 +134,34 @@
- (*env)->SetByteArrayRegion(env, data, off, nread, (jbyte *)bufP);
- } else {
- if (nread < 0) {
-- /*
-- * Recv failed.
-- */
-- switch (WSAGetLastError()) {
-- case WSAEINTR:
-- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
-- "socket closed");
-- break;
-+ // Check if the socket has been closed since we last checked.
-+ // This could be a reason for recv failing.
-+ if ((*env)->GetIntField(env, fdObj, IO_fd_fdID) == -1) {
-+ NET_ThrowSocketException(env, "Socket closed");
-+ } else {
-+ switch (WSAGetLastError()) {
-+ case WSAEINTR:
-+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
-+ "socket closed");
-+ break;
-+ case WSAECONNRESET:
-+ case WSAESHUTDOWN:
-+ /*
-+ * Connection has been reset - Windows sometimes reports
-+ * the reset as a shutdown error.
-+ */
-+ JNU_ThrowByName(env, "sun/net/ConnectionResetException",
-+ "");
-+ break;
-
-- case WSAECONNRESET:
-- case WSAESHUTDOWN:
-- /*
-- * Connection has been reset - Windows sometimes reports
-- * the reset as a shutdown error.
-- */
-- JNU_ThrowByName(env, "sun/net/ConnectionResetException",
-- "");
-- break;
-+ case WSAETIMEDOUT :
-+ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
-+ "Read timed out");
-+ break;
-
-- case WSAETIMEDOUT :
-- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
-- "Read timed out");
-- break;
--
-- default:
-- NET_ThrowCurrent(env, "recv failed");
-+ default:
-+ NET_ThrowCurrent(env, "recv failed");
-+ }
- }
- }
- }
---- ./jdk/src/windows/native/sun/nio/ch/SocketDispatcher.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/native/sun/nio/ch/SocketDispatcher.c Wed May 07 19:26:47 2014 -0700
-@@ -192,45 +192,66 @@
- jobject fdo, jlong address, jint len)
- {
- /* set up */
-- int i = 0;
-+ int next_index, next_offset, ret=0;
- DWORD written = 0;
- jint fd = fdval(env, fdo);
- struct iovec *iovp = (struct iovec *)address;
- WSABUF *bufs = malloc(len * sizeof(WSABUF));
-- jint rem = MAX_BUFFER_SIZE;
-+ jlong count = 0;
-
- if (bufs == 0) {
- JNU_ThrowOutOfMemoryError(env, 0);
- return IOS_THROWN;
- }
-
-- /* copy iovec into WSABUF */
-- for(i=0; i<len; i++) {
-- jint iov_len = iovp[i].iov_len;
-- if (iov_len > rem)
-- iov_len = rem;
-- bufs[i].buf = (char *)iovp[i].iov_base;
-- bufs[i].len = (u_long)iov_len;
-- rem -= iov_len;
-- if (rem == 0) {
-- len = i+1;
-+ // next buffer and offset to consume
-+ next_index = 0;
-+ next_offset = 0;
-+
-+ while (next_index < len) {
-+ DWORD buf_count = 0;
-+
-+ /* Prepare the WSABUF array to a maximum total size of MAX_BUFFER_SIZE */
-+ jint rem = MAX_BUFFER_SIZE;
-+ while (next_index < len && rem > 0) {
-+ jint iov_len = iovp[next_index].iov_len - next_offset;
-+ char* ptr = (char *)iovp[next_index].iov_base;
-+ ptr += next_offset;
-+ if (iov_len > rem) {
-+ iov_len = rem;
-+ next_offset += rem;
-+ } else {
-+ next_index ++;
-+ next_offset = 0;
-+ }
-+
-+ bufs[buf_count].buf = ptr;
-+ bufs[buf_count].len = (u_long)iov_len;
-+ buf_count++;
-+
-+ rem -= iov_len;
-+ }
-+
-+ /* write the buffers */
-+ ret = WSASend((SOCKET)fd, /* Socket */
-+ bufs, /* pointers to the buffers */
-+ buf_count, /* number of buffers to process */
-+ &written, /* receives number of bytes written */
-+ 0, /* no flags */
-+ 0, /* no overlapped sockets */
-+ 0); /* no completion routine */
-+
-+ if (ret == SOCKET_ERROR) {
- break;
- }
-+
-+ count += written;
- }
-
-- /* read into the buffers */
-- i = WSASend((SOCKET)fd, /* Socket */
-- bufs, /* pointers to the buffers */
-- (DWORD)len, /* number of buffers to process */
-- &written, /* receives number of bytes written */
-- 0, /* no flags */
-- 0, /* no overlapped sockets */
-- 0); /* no completion routine */
--
- /* clean up */
- free(bufs);
-
-- if (i != 0) {
-+ if (ret == SOCKET_ERROR && count == 0) {
- int theErr = (jint)WSAGetLastError();
- if (theErr == WSAEWOULDBLOCK) {
- return IOS_UNAVAILABLE;
-@@ -239,7 +260,7 @@
- return IOS_THROWN;
- }
-
-- return convertLongReturnVal(env, (jlong)written, JNI_FALSE);
-+ return convertLongReturnVal(env, count, JNI_FALSE);
- }
-
- JNIEXPORT void JNICALL
---- ./jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c Wed May 07 19:26:47 2014 -0700
-@@ -162,7 +162,7 @@
- }
- completionStatus_error = (*env)->GetFieldID(env, clazz, "error", "I");
- completionStatus_bytesTransferred = (*env)->GetFieldID(env, clazz, "bytesTransferred", "I");
-- completionStatus_completionKey = (*env)->GetFieldID(env, clazz, "completionKey", "I");
-+ completionStatus_completionKey = (*env)->GetFieldID(env, clazz, "completionKey", "J");
-
- clazz = (*env)->FindClass(env, "sun/nio/fs/WindowsNativeDispatcher$BackupResult");
- if (clazz == NULL) {
-@@ -1169,12 +1169,11 @@
-
- JNIEXPORT jlong JNICALL
- Java_sun_nio_fs_WindowsNativeDispatcher_CreateIoCompletionPort(JNIEnv* env, jclass this,
-- jlong fileHandle, jlong existingPort, jint completionKey)
-+ jlong fileHandle, jlong existingPort, jlong completionKey)
- {
-- ULONG_PTR ck = completionKey;
- HANDLE port = CreateIoCompletionPort((HANDLE)jlong_to_ptr(fileHandle),
- (HANDLE)jlong_to_ptr(existingPort),
-- ck,
-+ (ULONG_PTR)completionKey,
- 0);
- if (port == NULL) {
- throwWindowsException(env, GetLastError());
-@@ -1203,21 +1202,20 @@
- (*env)->SetIntField(env, obj, completionStatus_error, ioResult);
- (*env)->SetIntField(env, obj, completionStatus_bytesTransferred,
- (jint)bytesTransferred);
-- (*env)->SetIntField(env, obj, completionStatus_completionKey,
-- (jint)completionKey);
--
-+ (*env)->SetLongField(env, obj, completionStatus_completionKey,
-+ (jlong)completionKey);
- }
- }
-
- JNIEXPORT void JNICALL
- Java_sun_nio_fs_WindowsNativeDispatcher_PostQueuedCompletionStatus(JNIEnv* env, jclass this,
-- jlong completionPort, jint completionKey)
-+ jlong completionPort, jlong completionKey)
- {
- BOOL res;
-
- res = PostQueuedCompletionStatus((HANDLE)jlong_to_ptr(completionPort),
- (DWORD)0, /* dwNumberOfBytesTransferred */
-- (DWORD)completionKey,
-+ (ULONG_PTR)completionKey,
- NULL); /* lpOverlapped */
- if (res == 0) {
- throwWindowsException(env, GetLastError());
-@@ -1232,7 +1230,17 @@
- BOOL res;
- BOOL subtree = (watchSubTree == JNI_TRUE) ? TRUE : FALSE;
-
-- ((LPOVERLAPPED)jlong_to_ptr(pOverlapped))->hEvent = NULL;
-+ /* Any unused members of [OVERLAPPED] structure should always be initialized to zero
-+ before the structure is used in a function call.
-+ Otherwise, the function may fail and return ERROR_INVALID_PARAMETER.
-+ http://msdn.microsoft.com/en-us/library/windows/desktop/ms684342%28v=vs.85%29.aspx
-+
-+ The [Offset] and [OffsetHigh] members of this structure are not used.
-+ http://msdn.microsoft.com/en-us/library/windows/desktop/aa365465%28v=vs.85%29.aspx
-+
-+ [hEvent] should be zero, other fields are the return values. */
-+ ZeroMemory((LPOVERLAPPED)jlong_to_ptr(pOverlapped), sizeof(OVERLAPPED));
-+
- res = ReadDirectoryChangesW((HANDLE)jlong_to_ptr(hDirectory),
- (LPVOID)jlong_to_ptr(bufferAddress),
- (DWORD)bufferLength,
---- ./jdk/src/windows/native/sun/security/krb5/NativeCreds.c Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/native/sun/security/krb5/NativeCreds.c Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2000, 2013, 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
-@@ -380,7 +380,8 @@
- */
- JNIEXPORT jobject JNICALL Java_sun_security_krb5_Credentials_acquireDefaultNativeCreds(
- JNIEnv *env,
-- jclass krbcredsClass) {
-+ jclass krbcredsClass,
-+ jintArray jetypes) {
-
- KERB_QUERY_TKT_CACHE_REQUEST CacheRequest;
- PKERB_RETRIEVE_TKT_RESPONSE TktCacheResponse = NULL;
-@@ -396,9 +397,12 @@
- jobject ticketFlags, startTime, endTime, krbCreds = NULL;
- jobject authTime, renewTillTime, hostAddresses = NULL;
- KERB_EXTERNAL_TICKET *msticket;
-- int ignore_cache = 0;
-+ int found_in_cache = 0;
- FILETIME Now, EndTime, LocalEndTime;
-
-+ int i, netypes;
-+ jint *etypes = NULL;
-+
- while (TRUE) {
-
- if (krbcredsConstructor == 0) {
-@@ -465,31 +469,33 @@
- // got the native MS TGT
- msticket = &(TktCacheResponse->Ticket);
-
-+ netypes = (*env)->GetArrayLength(env, jetypes);
-+ etypes = (jint *) (*env)->GetIntArrayElements(env, jetypes, NULL);
-+
- // check TGT validity
-- switch (msticket->SessionKey.KeyType) {
-- case KERB_ETYPE_DES_CBC_CRC:
-- case KERB_ETYPE_DES_CBC_MD5:
-- case KERB_ETYPE_NULL:
-- case KERB_ETYPE_RC4_HMAC_NT:
-- GetSystemTimeAsFileTime(&Now);
-- EndTime.dwLowDateTime = msticket->EndTime.LowPart;
-- EndTime.dwHighDateTime = msticket->EndTime.HighPart;
-- FileTimeToLocalFileTime(&EndTime, &LocalEndTime);
-- if (CompareFileTime(&Now, &LocalEndTime) >= 0) {
-- ignore_cache = 1;
-- }
-- if (msticket->TicketFlags & KERB_TICKET_FLAGS_invalid) {
-- ignore_cache = 1;
-- }
-- break;
-- case KERB_ETYPE_RC4_MD4:
-- default:
-- // not supported
-- ignore_cache = 1;
-- break;
-+ if (native_debug) {
-+ printf("LSA: TICKET SessionKey KeyType is %d\n", msticket->SessionKey.KeyType);
- }
-
-- if (ignore_cache) {
-+ if ((msticket->TicketFlags & KERB_TICKET_FLAGS_invalid) == 0) {
-+ GetSystemTimeAsFileTime(&Now);
-+ EndTime.dwLowDateTime = msticket->EndTime.LowPart;
-+ EndTime.dwHighDateTime = msticket->EndTime.HighPart;
-+ FileTimeToLocalFileTime(&EndTime, &LocalEndTime);
-+ if (CompareFileTime(&Now, &LocalEndTime) < 0) {
-+ for (i=0; i<netypes; i++) {
-+ if (etypes[i] == msticket->SessionKey.KeyType) {
-+ found_in_cache = 1;
-+ if (native_debug) {
-+ printf("LSA: Valid etype found: %d\n", etypes[i]);
-+ }
-+ break;
-+ }
-+ }
-+ }
-+ }
-+
-+ if (!found_in_cache) {
- if (native_debug) {
- printf("LSA: MS TGT in cache is invalid/not supported; request new ticket\n");
- }
-@@ -503,34 +509,40 @@
- }
-
- pTicketRequest->MessageType = KerbRetrieveEncodedTicketMessage;
-- pTicketRequest->EncryptionType = KERB_ETYPE_DES_CBC_MD5;
- pTicketRequest->CacheOptions = KERB_RETRIEVE_TICKET_DONT_USE_CACHE;
-
-- Status = LsaCallAuthenticationPackage(
-- LogonHandle,
-- PackageId,
-- pTicketRequest,
-- requestSize,
-- &pTicketResponse,
-- &responseSize,
-- &SubStatus
-- );
-+ for (i=0; i<netypes; i++) {
-+ pTicketRequest->EncryptionType = etypes[i];
-+ Status = LsaCallAuthenticationPackage(
-+ LogonHandle,
-+ PackageId,
-+ pTicketRequest,
-+ requestSize,
-+ &pTicketResponse,
-+ &responseSize,
-+ &SubStatus
-+ );
-
-- if (native_debug) {
-- printf("LSA: Response size is %d\n", responseSize);
-- }
-+ if (native_debug) {
-+ printf("LSA: Response size is %d for %d\n", responseSize, etypes[i]);
-+ }
-
-- if (!LSA_SUCCESS(Status) || !LSA_SUCCESS(SubStatus)) {
-- if (!LSA_SUCCESS(Status)) {
-- ShowNTError("LsaCallAuthenticationPackage", Status);
-- } else {
-- ShowNTError("Protocol status", SubStatus);
-+ if (!LSA_SUCCESS(Status) || !LSA_SUCCESS(SubStatus)) {
-+ if (!LSA_SUCCESS(Status)) {
-+ ShowNTError("LsaCallAuthenticationPackage", Status);
-+ } else {
-+ ShowNTError("Protocol status", SubStatus);
-+ }
-+ continue;
- }
-+
-+ // got the native MS Kerberos TGT
-+ msticket = &(pTicketResponse->Ticket);
- break;
- }
--
-- // got the native MS Kerberos TGT
-- msticket = &(pTicketResponse->Ticket);
-+ }
-+ if (etypes != NULL) {
-+ (*env)->ReleaseIntArrayElements(env, jetypes, etypes, 0);
- }
-
- /*
-@@ -653,7 +665,7 @@
- hostAddresses);
-
- break;
-- } // end of WHILE
-+ } // end of WHILE. This WHILE will never loop.
-
- // clean up resources
- if (TktCacheResponse != NULL) {
---- ./jdk/src/windows/native/sun/windows/awt_FileDialog.cpp Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/native/sun/windows/awt_FileDialog.cpp Wed May 07 19:26:47 2014 -0700
-@@ -372,7 +372,9 @@
-
- // Report result to peer.
- if (result) {
-- jint length = (jint)GetBufferLength(ofn.lpstrFile, ofn.nMaxFile);
-+ jint length = multipleMode
-+ ? (jint)GetBufferLength(ofn.lpstrFile, ofn.nMaxFile)
-+ : (jint)_tcslen(ofn.lpstrFile);
- jcharArray jnames = env->NewCharArray(length);
- env->SetCharArrayRegion(jnames, 0, length, (jchar*)ofn.lpstrFile);
-
---- ./jdk/src/windows/native/sun/windows/awt_PrintControl.cpp Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/native/sun/windows/awt_PrintControl.cpp Wed May 07 19:26:47 2014 -0700
-@@ -81,6 +81,7 @@
- jmethodID AwtPrintControl::setNativeAttID;
- jmethodID AwtPrintControl::setRangeCopiesID;
- jmethodID AwtPrintControl::setResID;
-+jmethodID AwtPrintControl::setJobAttributesID;
-
-
- BOOL AwtPrintControl::IsSupportedLevel(HANDLE hPrinter, DWORD dwLevel) {
-@@ -297,6 +298,10 @@
- AwtPrintControl::setPrinterID =
- env->GetMethodID(cls, "setPrinterNameAttrib", "(Ljava/lang/String;)V");
-
-+ AwtPrintControl::setJobAttributesID =
-+ env->GetMethodID(cls, "setJobAttributes",
-+ "(Ljavax/print/attribute/PrintRequestAttributeSet;IISSSSSSS)V");
-+
- DASSERT(AwtPrintControl::driverDoesMultipleCopiesID != NULL);
- DASSERT(AwtPrintControl::getPrintDCID != NULL);
- DASSERT(AwtPrintControl::setPrintDCID != NULL);
-@@ -327,6 +332,7 @@
- DASSERT(AwtPrintControl::getSidesID != NULL);
- DASSERT(AwtPrintControl::getSelectID != NULL);
- DASSERT(AwtPrintControl::getPrintToFileEnabledID != NULL);
-+ DASSERT(AwtPrintControl::setJobAttributesID != NULL);
-
-
- CATCH_BAD_ALLOC;
---- ./jdk/src/windows/native/sun/windows/awt_PrintControl.h Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/native/sun/windows/awt_PrintControl.h Wed May 07 19:26:47 2014 -0700
-@@ -47,7 +47,6 @@
- static jmethodID setDevmodeID;
- static jmethodID getDevnamesID;
- static jmethodID setDevnamesID;
--
- static jmethodID getWin32MediaID;
- static jmethodID setWin32MediaID;
- static jmethodID getWin32MediaTrayID;
-@@ -73,6 +72,7 @@
- static jmethodID setNativeAttID;
- static jmethodID setRangeCopiesID;
- static jmethodID setResID;
-+ static jmethodID setJobAttributesID;
-
- static void initIDs(JNIEnv *env, jclass cls);
- static BOOL FindPrinter(jstring printerName, LPBYTE pPrinterEnum,
---- ./jdk/src/windows/native/sun/windows/awt_PrintJob.cpp Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/src/windows/native/sun/windows/awt_PrintJob.cpp Wed May 07 19:26:47 2014 -0700
-@@ -329,6 +329,156 @@
- static int embolden(int currentWeight);
- static BOOL getPrintableArea(HDC pdc, HANDLE hDevMode, RectDouble *margin);
-
-+
-+
-+/************************************************************************
-+ * DocumentProperties native support
-+ */
-+
-+/* Values must match those defined in WPrinterJob.java */
-+static const DWORD SET_COLOR = 0x00000200;
-+static const DWORD SET_ORIENTATION = 0x00004000;
-+static const DWORD SET_COLLATED = 0x00008000;
-+static const DWORD SET_DUP_VERTICAL = 0x00000010;
-+static const DWORD SET_DUP_HORIZONTAL = 0x00000020;
-+static const DWORD SET_RES_HIGH = 0x00000040;
-+static const DWORD SET_RES_LOW = 0x00000080;
-+
-+/*
-+ * Copy DEVMODE state back into JobAttributes.
-+ */
-+
-+static void UpdateJobAttributes(JNIEnv *env,
-+ jobject wJob,
-+ jobject attrSet,
-+ DEVMODE *devmode) {
-+
-+ DWORD dmValues = 0;
-+ int xRes = 0, yRes = 0;
-+
-+ if (devmode->dmFields & DM_COLOR) {
-+ if (devmode->dmColor == DMCOLOR_COLOR) {
-+ dmValues |= SET_COLOR;
-+ }
-+ }
-+
-+ if (devmode->dmFields & DM_ORIENTATION) {
-+ if (devmode->dmOrientation == DMORIENT_LANDSCAPE) {
-+ dmValues |= SET_ORIENTATION;
-+ }
-+ }
-+
-+ if (devmode->dmFields & DM_COLLATE &&
-+ devmode->dmCollate == DMCOLLATE_TRUE) {
-+ dmValues |= SET_COLLATED;
-+ }
-+
-+ if (devmode->dmFields & DM_PRINTQUALITY) {
-+ /* value < 0 indicates quality setting.
-+ * value > 0 indicates X resolution. In that case
-+ * hopefully we will also find y-resolution specified.
-+ * If its not, assume its the same as x-res.
-+ * Maybe Java code should try to reconcile this against
-+ * the printers claimed set of supported resolutions.
-+ */
-+ if (devmode->dmPrintQuality < 0) {
-+ if (devmode->dmPrintQuality == DMRES_HIGH) {
-+ dmValues |= SET_RES_HIGH;
-+ } else if ((devmode->dmPrintQuality == DMRES_LOW) ||
-+ (devmode->dmPrintQuality == DMRES_DRAFT)) {
-+ dmValues |= SET_RES_LOW;
-+ }
-+ /* else if (devmode->dmPrintQuality == DMRES_MEDIUM)
-+ * will set to NORMAL.
-+ */
-+ } else {
-+ xRes = devmode->dmPrintQuality;
-+ yRes = (devmode->dmFields & DM_YRESOLUTION) ?
-+ devmode->dmYResolution : devmode->dmPrintQuality;
-+ }
-+ }
-+
-+ if (devmode->dmFields & DM_DUPLEX) {
-+ if (devmode->dmDuplex == DMDUP_HORIZONTAL) {
-+ dmValues |= SET_DUP_HORIZONTAL;
-+ } else if (devmode->dmDuplex == DMDUP_VERTICAL) {
-+ dmValues |= SET_DUP_VERTICAL;
-+ }
-+ }
-+
-+ env->CallVoidMethod(wJob, AwtPrintControl::setJobAttributesID, attrSet,
-+ devmode->dmFields, dmValues, devmode->dmCopies,
-+ devmode->dmPaperSize, devmode->dmPaperWidth,
-+ devmode->dmPaperLength, devmode->dmDefaultSource,
-+ xRes, yRes);
-+
-+}
-+
-+JNIEXPORT jboolean JNICALL
-+Java_sun_awt_windows_WPrinterJob_showDocProperties(JNIEnv *env,
-+ jobject wJob,
-+ jlong hWndParent,
-+ jobject attrSet,
-+ jint dmFields,
-+ jshort copies,
-+ jshort collate,
-+ jshort color,
-+ jshort duplex,
-+ jshort orient,
-+ jshort paper,
-+ jshort bin,
-+ jshort xres_quality,
-+ jshort yres)
-+{
-+ TRY;
-+
-+ HGLOBAL hDevMode = AwtPrintControl::getPrintHDMode(env, wJob);
-+ HGLOBAL hDevNames = AwtPrintControl::getPrintHDName(env, wJob);
-+ DEVMODE *devmode = NULL;
-+ DEVNAMES *devnames = NULL;
-+ LONG rval = IDCANCEL;
-+ jboolean ret = JNI_FALSE;
-+
-+ if (hDevMode != NULL && hDevNames != NULL) {
-+ devmode = (DEVMODE *)::GlobalLock(hDevMode);
-+ devnames = (DEVNAMES *)::GlobalLock(hDevNames);
-+
-+ LPTSTR lpdevnames = (LPTSTR)devnames;
-+ // No need to call _tcsdup as we won't unlock until we are done.
-+ LPTSTR printerName = lpdevnames+devnames->wDeviceOffset;
-+ LPTSTR portName = lpdevnames+devnames->wOutputOffset;
-+
-+ HANDLE hPrinter;
-+ if (::OpenPrinter(printerName, &hPrinter, NULL) == TRUE) {
-+ devmode->dmFields |= dmFields;
-+ devmode->dmCopies = copies;
-+ devmode->dmCollate = collate;
-+ devmode->dmColor = color;
-+ devmode->dmDuplex = duplex;
-+ devmode->dmOrientation = orient;
-+ devmode->dmPrintQuality = xres_quality;
-+ devmode->dmYResolution = yres;
-+ devmode->dmPaperSize = paper;
-+ devmode->dmDefaultSource = bin;
-+
-+ rval = ::DocumentProperties((HWND)hWndParent,
-+ hPrinter, printerName, devmode, devmode,
-+ DM_IN_BUFFER | DM_OUT_BUFFER | DM_IN_PROMPT);
-+ if (rval == IDOK) {
-+ UpdateJobAttributes(env, wJob, attrSet, devmode);
-+ ret = JNI_TRUE;
-+ }
-+ VERIFY(::ClosePrinter(hPrinter));
-+ }
-+ ::GlobalUnlock(hDevNames);
-+ ::GlobalUnlock(hDevMode);
-+ }
-+
-+ return ret;
-+
-+ CATCH_BAD_ALLOC_RET(0);
-+}
-+
- /************************************************************************
- * WPageDialog native methods
- */
-@@ -732,7 +882,6 @@
- memset(&pd, 0, sizeof(PRINTDLG));
- pd.lStructSize = sizeof(PRINTDLG);
- pd.Flags = PD_RETURNDEFAULT | PD_RETURNDC;
--
- if (::PrintDlg(&pd)) {
- printDC = pd.hDC;
- hDevMode = pd.hDevMode;
-@@ -792,8 +941,19 @@
- jint imgPixelWid = GetDeviceCaps(printDC, HORZRES);
- jint imgPixelHgt = GetDeviceCaps(printDC, VERTRES);
-
-+ // The DC may be obtained when we first selected the printer as a
-+ // result of a call to setNativePrintService.
-+ // If the Devmode was obtained later on from the DocumentProperties dialog
-+ // the DC won't have been updated and its settings may be for PORTRAIT.
-+ // This may happen in other cases too, but was observed for the above.
-+ // To get a DC compatible with this devmode we should really call
-+ // CreateDC() again to get a DC for the devmode we are using.
-+ // The changes for that are a lot more risk, so to minimise that
-+ // risk, assume its not LANDSCAPE unless width > height, even if the
-+ // devmode says its LANDSCAPE.
- // if the values were obtained from a rotated device, swap.
-- if (getOrientationFromDevMode2(hDevMode) == DMORIENT_LANDSCAPE) {
-+ if ((getOrientationFromDevMode2(hDevMode) == DMORIENT_LANDSCAPE) &&
-+ (imgPixelWid > imgPixelHgt)) {
- jint tmp;
- tmp = xPixelRes;
- xPixelRes = yPixelRes;
-@@ -941,6 +1101,9 @@
- setBooleanField(env, self, DRIVER_COLLATE_STR, JNI_FALSE);
- }
-
-+ if (dmFields & DM_COPIES) {
-+ setBooleanField(env, self, DRIVER_COPIES_STR, JNI_TRUE);
-+ }
- }
-
- CATCH_BAD_ALLOC;
---- ./jdk/test/ProblemList.txt Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/ProblemList.txt Wed May 07 19:26:47 2014 -0700
-@@ -369,15 +369,6 @@
- # 7147060
- com/sun/org/apache/xml/internal/security/transforms/ClassLoaderTest.java generic-all
-
--# 8000439: NPG: REGRESSION : sun/security/krb5/auto/MaxRetries.java fails with timeout
--sun/security/krb5/auto/MaxRetries.java solaris-sparcv9
--
--# 8006690: sun/security/krb5/auto/BadKdc1.java fails intermittently
--sun/security/krb5/auto/BadKdc1.java solaris-sparcv9
--sun/security/krb5/auto/BadKdc2.java solaris-sparcv9
--sun/security/krb5/auto/BadKdc3.java solaris-sparcv9
--sun/security/krb5/auto/BadKdc4.java solaris-sparcv9
--
- ############################################################################
-
- # jdk_swing
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/com/apple/eawt/DefaultMenuBar/DefaultMenuBarTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,108 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8007267
-+ * @summary [macosx] com.apple.eawt.Application.setDefaultMenuBar is not working
-+ * @author leonid.romanov@oracle.com
-+ * @run main DefaultMenuBarTest
-+ */
-+
-+import java.awt.*;
-+import java.awt.event.*;
-+import javax.swing.*;
-+import sun.awt.*;
-+import java.lang.reflect.Method;
-+
-+
-+public class DefaultMenuBarTest {
-+ static KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.META_MASK);
-+
-+ static volatile int listenerCallCounter = 0;
-+ public static void main(String[] args) throws Exception {
-+ if (sun.awt.OSInfo.getOSType() != sun.awt.OSInfo.OSType.MACOSX) {
-+ System.out.println("This test is for MacOS only. Automatically passed on other platforms.");
-+ return;
-+ }
-+
-+ System.setProperty("apple.laf.useScreenMenuBar", "true");
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ createAndShowGUI();
-+ }
-+ });
-+
-+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ Robot robot = new Robot();
-+ robot.setAutoDelay(100);
-+
-+ robot.keyPress(KeyEvent.VK_META);
-+ robot.keyPress(ks.getKeyCode());
-+ robot.keyRelease(ks.getKeyCode());
-+ robot.keyRelease(KeyEvent.VK_META);
-+
-+ toolkit.realSync();
-+
-+ if (listenerCallCounter != 1) {
-+ throw new Exception("Test failed: ActionListener either wasn't called or was called more than once");
-+ }
-+ }
-+
-+ private static void createAndShowGUI() {
-+ JMenu menu = new JMenu("File");
-+ JMenuItem newItem = new JMenuItem("Open");
-+
-+ newItem.setAccelerator(ks);
-+ newItem.addActionListener(
-+ new ActionListener(){
-+ public void actionPerformed(ActionEvent e) {
-+ listenerCallCounter++;
-+ }
-+ }
-+ );
-+ menu.add(newItem);
-+
-+ JMenuBar defaultMenu = new JMenuBar();
-+ defaultMenu.add(menu);
-+
-+ // Application.getApplication().setDefaultMenuBar(defaultMenu);
-+ try {
-+ Class appClass = Class.forName("com.apple.eawt.Application");
-+ if (appClass != null) {
-+ Method method = appClass.getMethod("getApplication");
-+ if (method != null) {
-+ Object app = method.invoke(null, new Object[]{});
-+ if (app != null) {
-+ method = appClass.getMethod("setDefaultMenuBar", new Class[]{JMenuBar.class});
-+ if (method != null) {
-+ method.invoke(app, new Object[]{defaultMenu});
-+ }
-+ }
-+ }
-+ }
-+ } catch (Exception e) {
-+ e.printStackTrace();
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/com/sun/corba/transport/KeepAliveSockets.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,68 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8017195
-+ * @summary Introduce option to setKeepAlive parameter on CORBA sockets
-+ *
-+ * @run main/othervm KeepAliveSockets
-+ * @run main/othervm -Dcom.sun.CORBA.transport.enableTcpKeepAlive KeepAliveSockets
-+ * @run main/othervm -Dcom.sun.CORBA.transport.enableTcpKeepAlive=true KeepAliveSockets
-+ * @run main/othervm -Dcom.sun.CORBA.transport.enableTcpKeepAlive=false KeepAliveSockets
-+ */
-+
-+import java.lang.*;
-+import java.net.InetSocketAddress;
-+import java.net.Socket;
-+import java.nio.channels.ServerSocketChannel;
-+import java.util.*;
-+import com.sun.corba.se.impl.orb.*;
-+
-+import com.sun.corba.se.impl.transport.*;
-+
-+public class KeepAliveSockets {
-+
-+ public static void main(String[] args) throws Exception {
-+
-+ boolean keepAlive = false;
-+ String prop = System.getProperty("com.sun.CORBA.transport.enableTcpKeepAlive");
-+ if (prop != null)
-+ keepAlive = !"false".equalsIgnoreCase(prop);
-+
-+ DefaultSocketFactoryImpl sfImpl = new DefaultSocketFactoryImpl();
-+ ORBImpl orb = new ORBImpl();
-+ orb.set_parameters(null);
-+ sfImpl.setORB(orb);
-+
-+ ServerSocketChannel ssc = ServerSocketChannel.open();
-+ ssc.socket().bind(new InetSocketAddress(0));
-+
-+ InetSocketAddress isa = new InetSocketAddress("localhost", ssc.socket().getLocalPort());
-+ Socket s = sfImpl.createSocket("ignore", isa);
-+ System.out.println("Received factory socket" + s);
-+ if (keepAlive != s.getKeepAlive())
-+ throw new RuntimeException("KeepAlive value not honoured in CORBA socket");
-+ }
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,276 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/* @test
-+ * @bug 8034181
-+ * @summary SIGBUS in SctpChannelImpl receive
-+ * @author chegar
-+ */
-+
-+import java.net.InetSocketAddress;
-+import java.net.SocketAddress;
-+import java.io.IOException;
-+import java.nio.ByteBuffer;
-+import com.sun.nio.sctp.AbstractNotificationHandler;
-+import com.sun.nio.sctp.AssociationChangeNotification;
-+import com.sun.nio.sctp.AssociationChangeNotification.AssocChangeEvent;
-+import com.sun.nio.sctp.HandlerResult;
-+import com.sun.nio.sctp.MessageInfo;
-+import com.sun.nio.sctp.Notification;
-+import com.sun.nio.sctp.PeerAddressChangeNotification;
-+import com.sun.nio.sctp.SctpChannel;
-+import com.sun.nio.sctp.SctpServerChannel;
-+import com.sun.nio.sctp.ShutdownNotification;
-+import static java.lang.System.out;
-+import static java.lang.System.err;
-+import static java.nio.charset.StandardCharsets.US_ASCII;
-+
-+public class ReceiveIntoDirect {
-+ /* suitably small message to NOT overrun small buffers */
-+ final byte[] msgBytes = "Hello".getBytes(US_ASCII);
-+
-+ /* number of client connections/combinations (accepted by the server) */
-+ final int NUM_CONNECTIONS = 75;
-+
-+ void test(String[] args) throws IOException {
-+ SocketAddress address = null;
-+ Server server;
-+
-+ if (!Util.isSCTPSupported()) {
-+ out.println("SCTP protocol is not supported");
-+ out.println("Test cannot be run");
-+ return;
-+ }
-+
-+ if (args.length == 2) {
-+ /* requested to connecct to a specific address */
-+ try {
-+ int port = Integer.valueOf(args[1]);
-+ address = new InetSocketAddress(args[0], port);
-+ } catch (NumberFormatException nfe) {
-+ err.println(nfe);
-+ }
-+ } else {
-+ /* start server on local machine, default */
-+ server = new Server();
-+ server.start();
-+ address = server.address();
-+ debug("Server started and listening on " + address);
-+ }
-+
-+ /* many combinations with varing buffer sizes, and offsets */
-+ runWithManyOffsets(address, 20);
-+ runWithManyOffsets(address, 49);
-+ runWithManyOffsets(address, 50);
-+ runWithManyOffsets(address, 51);
-+ runWithManyOffsets(address, 1024);
-+ }
-+
-+ void runWithManyOffsets(SocketAddress addr, int bufferSize)
-+ throws IOException
-+ {
-+ doTest(addr, bufferSize, 1);
-+ doTest(addr, bufferSize, 2);
-+ doTest(addr, bufferSize, 3);
-+ doTest(addr, bufferSize, 4);
-+ doTest(addr, bufferSize, 5);
-+ doTest(addr, bufferSize, 6);
-+ doTest(addr, bufferSize, 7);
-+ doTest(addr, bufferSize, 8);
-+ doTest(addr, bufferSize, 9);
-+ doTest(addr, bufferSize, 10);
-+ doTest(addr, bufferSize, 11);
-+ doTest(addr, bufferSize, 12);
-+ doTest(addr, bufferSize, 13);
-+ doTest(addr, bufferSize, 14);
-+ doTest(addr, bufferSize, 15);
-+ }
-+
-+ void doTest(SocketAddress peerAddress, int bufferSize, int bufferOffset)
-+ throws IOException
-+ {
-+ debug("\n\nTesting with bufferSize " + bufferSize + " and offset " + bufferOffset);
-+ assert bufferOffset + msgBytes.length <= bufferSize :
-+ "buffer offset + message length greater than buffer size ";
-+
-+ ByteBuffer buffer = ByteBuffer.allocateDirect(bufferSize);
-+ MessageInfo info;
-+
-+ try (SctpChannel channel = SctpChannel.open()) {
-+ channel.connect(peerAddress);
-+
-+ ReceiveNotificationHandler handler =
-+ new ReceiveNotificationHandler();
-+
-+ /* TEST 1: Assoc/peer change notif into direct buffer with offest */
-+ do {
-+ debug("Test 1: Assoc/peer change with offset " + bufferOffset);
-+ buffer.position(bufferOffset);
-+ info = channel.receive(buffer, null, handler);
-+ if (info == null) {
-+ fail("unexpected null from receive");
-+ return;
-+ }
-+ } while (!info.isComplete());
-+
-+ buffer.flip().position(bufferOffset);
-+ check(handler.receivedCommUp(), "SCTP_COMM_UP not received");
-+ check(info != null, "info is null");
-+ check(info.address() != null, "address is null");
-+ check(info.association() != null, "association is null");
-+ check(info.isComplete(), "message is not complete");
-+ check(info.isUnordered() != true,
-+ "message should not be unordered");
-+ check(info.streamNumber() >= 0, "invalid stream number");
-+ check(info.bytes() == msgBytes.length,
-+ "bytes received not equal to message length");
-+ check(info.bytes() == buffer.remaining(), "bytes != remaining");
-+ check(Util.compare(buffer, msgBytes),
-+ "received message not the same as sent message");
-+
-+ /* TEST 2: shutdown notification with offset */
-+ debug("Test 2: shutdown notif with offset " + bufferOffset);
-+ buffer.clear().position(bufferOffset);
-+ while ((info = channel.receive(buffer, null, handler )) != null &&
-+ info.bytes() != -1 );
-+ }
-+ }
-+
-+ class Server implements Runnable
-+ {
-+ private final InetSocketAddress serverAddr;
-+ private final SctpServerChannel ssc;
-+
-+ public Server() throws IOException {
-+ ssc = SctpServerChannel.open().bind(null);
-+ java.util.Set<SocketAddress> addrs = ssc.getAllLocalAddresses();
-+ if (addrs.isEmpty())
-+ debug("addrs should not be empty");
-+
-+ serverAddr = (InetSocketAddress) addrs.iterator().next();
-+ }
-+
-+ public void start() {
-+ (new Thread(this, "Server-" + serverAddr.getPort())).start();
-+ }
-+
-+ public InetSocketAddress address() {
-+ return serverAddr;
-+ }
-+
-+ @Override
-+ public void run() {
-+ try {
-+ for (int i=0; i<NUM_CONNECTIONS; i++) {
-+ SctpChannel sc = ssc.accept();
-+
-+ /* send a small message */
-+ MessageInfo info = MessageInfo.createOutgoing(null, 0);
-+ ByteBuffer buf = ByteBuffer.allocateDirect(Util.SMALL_BUFFER);
-+ buf.put(msgBytes);
-+ buf.flip();
-+
-+ debug("sending small message: " + buf);
-+ sc.send(buf, info);
-+
-+ sc.shutdown();
-+ sc.close();
-+ }
-+ } catch (IOException x) {
-+ unexpected(x);
-+ } finally {
-+ try { ssc.close(); }
-+ catch (IOException x) { unexpected(x); }
-+ }
-+ }
-+ }
-+
-+ class ReceiveNotificationHandler extends AbstractNotificationHandler<Object>
-+ {
-+ boolean receivedCommUp; // false
-+
-+ public ReceiveNotificationHandler() { }
-+
-+ public boolean receivedCommUp() {
-+ return receivedCommUp;
-+ }
-+
-+ @Override
-+ public HandlerResult handleNotification(
-+ Notification notification, Object attachment) {
-+ fail("Unknown notification type");
-+ return HandlerResult.CONTINUE;
-+ }
-+
-+ @Override
-+ public HandlerResult handleNotification(
-+ AssociationChangeNotification notification, Object attachment) {
-+ AssocChangeEvent event = notification.event();
-+ debug("AssociationChangeNotification");
-+ debug(" Association: " + notification.association());
-+ debug(" Event: " + event);
-+
-+ if (event.equals(AssocChangeEvent.COMM_UP))
-+ receivedCommUp = true;
-+
-+ return HandlerResult.CONTINUE;
-+ }
-+
-+ @Override
-+ public HandlerResult handleNotification(
-+ PeerAddressChangeNotification pacn, Object unused)
-+ {
-+ debug("PeerAddressChangeNotification: " + pacn);
-+ return HandlerResult.CONTINUE;
-+ }
-+
-+ @Override
-+ public HandlerResult handleNotification(
-+ ShutdownNotification notification, Object attachment) {
-+ debug("ShutdownNotification");
-+ debug(" Association: " + notification.association());
-+ return HandlerResult.CONTINUE;
-+ }
-+ }
-+ //--------------------- Infrastructure ---------------------------
-+ boolean debug = true;
-+ volatile int passed = 0, failed = 0;
-+ void pass() {passed++;}
-+ void fail() {failed++; Thread.dumpStack();}
-+ void fail(String msg) {System.err.println(msg); fail();}
-+ void unexpected(Throwable t) {failed++; t.printStackTrace();}
-+ void check(boolean cond) {if (cond) pass(); else fail();}
-+ void check(boolean cond, String failMessage) {if (cond) pass(); else fail(failMessage);}
-+ void debug(String message) {if(debug) {
-+ System.out.println(Thread.currentThread() + " " + message); } }
-+ public static void main(String[] args) throws Throwable {
-+ Class<?> k = new Object(){}.getClass().getEnclosingClass();
-+ try {k.getMethod("instanceMain",String[].class)
-+ .invoke( k.newInstance(), (Object) args);}
-+ catch (Throwable e) {throw e.getCause();}}
-+ public void instanceMain(String[] args) throws Throwable {
-+ try {test(args);} catch (Throwable t) {unexpected(t);}
-+ System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
-+ if (failed > 0) throw new AssertionError("Some tests failed");}
-+
-+}
---- ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/InterprocessMessages.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/InterprocessMessages.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2013, 2014, 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
-@@ -24,5 +24,6 @@
- interface InterprocessMessages {
- final static int EXECUTION_IS_SUCCESSFULL = 0;
- final static int DATA_IS_CORRUPTED = 212;
-+ final static int NO_DROP_HAPPENED = 112;
- }
-
---- ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html Wed May 07 19:26:47 2014 -0700
-@@ -1,7 +1,30 @@
- <html>
- <!--
-+ Copyright (c) 2013, 2014, 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
-+ under the terms of the GNU General Public License version 2 only, as
-+ published by the Free Software Foundation.
-+
-+ This code is distributed in the hope that it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ version 2 for more details (a copy is included in the LICENSE file that
-+ accompanied this code).
-+
-+ You should have received a copy of the GNU General Public License version
-+ 2 along with this work; if not, write to the Free Software Foundation,
-+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+
-+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ or visit www.oracle.com if you need additional information or have any
-+ questions.
-+ -->
-+
-+<!--
- @test
-- @bug 8005932
-+ @bug 8005932 8017456
- @summary Java 7 on mac os x only provides text clipboard formats
- @author mikhail.cherkasov@oracle.com
- @library ../../regtesthelpers
---- ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2013, 2014, 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
-@@ -42,6 +42,7 @@
- import static java.lang.Thread.sleep;
-
- public class MissedHtmlAndRtfBug extends Applet {
-+
- public void init() {
- setLayout(new BorderLayout());
- }//End init()
-@@ -77,9 +78,6 @@
- args.add(concatStrings(DataFlavorSearcher.RICH_TEXT_NAMES));
-
- ProcessResults processResults =
--// ProcessCommunicator.executeChildProcess(this.getClass(), "/Users/mcherkasov/ws/clipboard/DataFlover/out/production/DataFlover" +
--// " -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ",
--// args.toArray(new String[0]));
- ProcessCommunicator.executeChildProcess(this.getClass(),
- "." + File.separator + System.getProperty("java.class.path"), args.toArray(new String[]{}));
-
-@@ -112,6 +110,13 @@
- throw new RuntimeException("TEST IS FAILED: Target has received" +
- " corrupted data.");
- }
-+ if (InterprocessMessages.NO_DROP_HAPPENED ==
-+ processResults.getExitValue()) {
-+ processResults.printProcessErrorOutput(System.err);
-+ throw new RuntimeException("Error. Drop did not happen." +
-+ " Target frame is possibly covered by a window of other application." +
-+ " Please, rerun the test with all windows minimized.");
-+ }
- processResults.verifyStdErr(System.err);
- processResults.verifyProcessExitValue(System.err);
- processResults.printProcessStandartOutput(System.out);
-@@ -179,7 +184,7 @@
- }
- }
-
-- public static void main(String[] args) {
-+ public static void main(String[] args) throws InterruptedException {
- Point dragSourcePoint = new Point(InterprocessArguments.DRAG_SOURCE_POINT_X_ARGUMENT.extractInt(args),
- InterprocessArguments.DRAG_SOURCE_POINT_Y_ARGUMENT.extractInt(args));
- Point targetFrameLocation = new Point(InterprocessArguments.TARGET_FRAME_X_POSITION_ARGUMENT.extractInt(args),
-@@ -192,6 +197,8 @@
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
-+ sleep(5000);
-+ System.exit(InterprocessMessages.NO_DROP_HAPPENED);
- }
-
-
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,144 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/*
-+ @test
-+ @bug 4476629
-+ @library ../../../../javax/swing/regtesthelpers
-+ @build Util
-+ @summary KeyEvents dispatched to old focus owner that is no longer showing
-+ @author son@sparc.spb.su: area=awt.focus
-+ @run main KeyEventForBadFocusOwnerTest
-+*/
-+
-+/**
-+ * KeyEventForBadFocusOwnerTest.java
-+ *
-+ * summary: KeyEvents dispatched to old focus owner that is no longer showing
-+ */
-+
-+
-+import java.awt.Robot;
-+import java.awt.Toolkit;
-+
-+import java.awt.event.*;
-+
-+import javax.swing.*;
-+import javax.swing.event.*;
-+import sun.awt.SunToolkit;
-+
-+public class KeyEventForBadFocusOwnerTest {
-+ final static String ITEM_ONE_TEXT = "one";
-+ final static String ITEM_TWO_TEXT = "two";
-+
-+ volatile static boolean itemOneSelected = false;
-+ volatile static boolean itemTwoSelected = false;
-+ volatile static boolean unexpectedItemSelected = false;
-+
-+ static Robot robot;
-+ static SunToolkit toolkit;
-+
-+ public static void main(String[] args) throws Exception {
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ JFrame frame = new JFrame("TEST");
-+ JMenuBar mb = new JMenuBar();
-+ JMenu one = new JMenu(ITEM_ONE_TEXT);
-+ JMenu two = new JMenu(ITEM_TWO_TEXT);
-+
-+ mb.add(one);
-+ mb.add(two);
-+
-+ ActionListener al = new ActionListener() {
-+ public void actionPerformed(ActionEvent ae) {
-+ String itemText = ((JMenuItem)ae.getSource()).getText();
-+ System.out.println("--> " + itemText);
-+ unexpectedItemSelected = true;
-+ }
-+ };
-+ one.setMnemonic(KeyEvent.VK_O);
-+ JMenuItem item = new JMenuItem("one 1");
-+ item.setMnemonic(KeyEvent.VK_O);
-+ item.addActionListener(al);
-+ one.add(item);
-+ one.add("two");
-+ one.add("three");
-+
-+ two.setMnemonic(KeyEvent.VK_T);
-+ item = new JMenuItem("two 2");
-+ item.setMnemonic(KeyEvent.VK_T);
-+ item.addActionListener(al);
-+ two.add(item);
-+ two.add("three");
-+ two.add("four");
-+
-+ PopupMenuListener popupMenuListener = new PopupMenuListener() {
-+ public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-+ System.out.print(e);
-+ System.out.print(e.getSource());
-+ String itemText = ((JPopupMenu)e.getSource()).getName();
-+ System.out.println("Menu " + itemText + "is opened.");
-+ switch(itemText) {
-+ case ITEM_ONE_TEXT:
-+ itemOneSelected = true;
-+ break;
-+ case ITEM_TWO_TEXT:
-+ itemTwoSelected = true;
-+ break;
-+ }
-+ }
-+
-+ public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
-+ public void popupMenuCanceled(PopupMenuEvent e) {}
-+ };
-+ one.getPopupMenu().setName(ITEM_ONE_TEXT);
-+ two.getPopupMenu().setName(ITEM_TWO_TEXT);
-+ one.getPopupMenu().addPopupMenuListener(popupMenuListener);
-+ two.getPopupMenu().addPopupMenuListener(popupMenuListener);
-+ frame.setJMenuBar(mb);
-+ frame.setSize(100,100);
-+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-+ frame.pack();
-+ frame.setVisible(true);
-+ }
-+ });
-+
-+ toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ toolkit.realSync();
-+
-+ robot = new Robot();
-+ robot.setAutoDelay(100);
-+
-+ Util.hitMnemonics(robot, KeyEvent.VK_O);
-+ Util.hitMnemonics(robot, KeyEvent.VK_T);
-+
-+ toolkit.realSync();
-+ Thread.sleep(1000); // workaround for MacOS
-+
-+ if (unexpectedItemSelected) {
-+ throw new Exception("Test failed. KeyEvent dispatched to old focus owner. ");
-+ }
-+ if (!itemOneSelected || !itemTwoSelected) {
-+ throw new Exception("Not all expected events were received");
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/Frame/DefaultUnixIcon/TestUnixDefaultIcon.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,448 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+@test
-+@bug 4934843
-+@summary Tests that Frame/Dialog have java-cup icon on Unix
-+@author dom@sparc.spb.su: area=awt.toplevel
-+@run main/manual TestUnixDefaultIcon
-+*/
-+
-+import java.awt.*;
-+import java.awt.event.*;
-+import java.awt.image.*;
-+import javax.imageio.ImageIO;
-+import java.lang.reflect.*;
-+import java.io.*;
-+import java.awt.color.*;
-+
-+public class TestUnixDefaultIcon
-+{
-+ private static void init()
-+ {
-+ //*** Create instructions for the user here ***
-+ boolean isWindows = Toolkit.getDefaultToolkit().getClass().getName().equals("sun.awt.windows.WToolkit");
-+
-+ String[] instructions;
-+ if (isWindows){
-+ instructions = new String[]{"This test is for linux only. Passed automatically."};
-+ } else {
-+ instructions = new String[]{
-+ "This test verifies that Frame and Dialog on Unix have Java-cup",
-+ "icon by default as their icon. For your convenience, the example ",
-+ "of such icons of different sizes are displayed inside of the frame",
-+ "Press Pass if it is so, Fail otherwise."
-+ };
-+ }
-+ Sysout.createDialog( );
-+ Sysout.printInstructions( instructions );
-+
-+ if (isWindows){
-+ pass();
-+ return;
-+ }
-+
-+ Frame frame = new Frame("frame");
-+ frame.setLayout(new FlowLayout());
-+ frame.add(new IconCanvas(16, getImage("16")));
-+ frame.add(new IconCanvas(24, getImage("24")));
-+ frame.add(new IconCanvas(32, getImage("32")));
-+ frame.add(new IconCanvas(48, getImage("48")));
-+ frame.setBounds(0, 500, 200, 100);
-+ frame.setVisible(true);
-+
-+ Dialog d = new Dialog(frame, "Dialog", false);
-+ d.setBounds(200, 500, 200, 100);
-+ d.setVisible(true);
-+
-+ }//End init()
-+
-+ private static BufferedImage createImage(int[] bits) {
-+ ColorModel cm =
-+ new DirectColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), 32,
-+ 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000,
-+ false, DataBuffer.TYPE_INT);
-+ DataBuffer buffer = new DataBufferInt(bits, bits.length-2, 2);
-+ WritableRaster raster =
-+ Raster.createPackedRaster(buffer, bits[0], bits[1],
-+ bits[0],
-+ new int[] {0x00ff0000, 0x0000ff00,
-+ 0x000000ff, 0xff000000},
-+ null);
-+ BufferedImage im = new BufferedImage(cm, raster, false, null);
-+ return im;
-+ }
-+ private static Image getImage(String name) {
-+ try {
-+ Class cl = Class.forName("sun.awt.AWTIcon32_java_icon" + name + "_png");
-+ Field f = cl.getField("java_icon" + name + "_png");
-+ int[] ints = (int[])f.get(cl);
-+
-+ return createImage(ints);
-+ } catch (ClassNotFoundException | IllegalAccessException | NoSuchFieldException e) {
-+ throw new RuntimeException(e);
-+ }
-+ }
-+
-+ static class IconCanvas extends Canvas {
-+ private Image im;
-+ private int s;
-+ public IconCanvas(int s, Image im) {
-+ this.im = im;
-+ this.s = s;
-+ }
-+
-+ public Dimension getPreferredSize() {
-+ return new Dimension(s, s);
-+ }
-+
-+ public void paint(Graphics g) {
-+ if (im != null) {
-+ g.drawImage(im, 0, 0, this);
-+ }
-+ }
-+ }
-+
-+ /*****************************************************
-+ * Standard Test Machinery Section
-+ * DO NOT modify anything in this section -- it's a
-+ * standard chunk of code which has all of the
-+ * synchronisation necessary for the test harness.
-+ * By keeping it the same in all tests, it is easier
-+ * to read and understand someone else's test, as
-+ * well as insuring that all tests behave correctly
-+ * with the test harness.
-+ * There is a section following this for test-defined
-+ * classes
-+ ******************************************************/
-+ private static boolean theTestPassed = false;
-+ private static boolean testGeneratedInterrupt = false;
-+ private static String failureMessage = "";
-+
-+ private static Thread mainThread = null;
-+
-+ private static int sleepTime = 300000;
-+
-+ public static void main( String args[] ) throws InterruptedException
-+ {
-+ mainThread = Thread.currentThread();
-+ try
-+ {
-+ init();
-+ }
-+ catch( TestPassedException e )
-+ {
-+ //The test passed, so just return from main and harness will
-+ // interepret this return as a pass
-+ return;
-+ }
-+ //At this point, neither test passed nor test failed has been
-+ // called -- either would have thrown an exception and ended the
-+ // test, so we know we have multiple threads.
-+
-+ //Test involves other threads, so sleep and wait for them to
-+ // called pass() or fail()
-+ try
-+ {
-+ Thread.sleep( sleepTime );
-+ //Timed out, so fail the test
-+ throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" );
-+ }
-+ catch (InterruptedException e)
-+ {
-+ if( ! testGeneratedInterrupt ) throw e;
-+
-+ //reset flag in case hit this code more than once for some reason (just safety)
-+ testGeneratedInterrupt = false;
-+ if ( theTestPassed == false )
-+ {
-+ throw new RuntimeException( failureMessage );
-+ }
-+ }
-+
-+ }//main
-+
-+ public static synchronized void setTimeoutTo( int seconds )
-+ {
-+ sleepTime = seconds * 1000;
-+ }
-+
-+ public static synchronized void pass()
-+ {
-+ Sysout.println( "The test passed." );
-+ Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
-+ //first check if this is executing in main thread
-+ if ( mainThread == Thread.currentThread() )
-+ {
-+ //Still in the main thread, so set the flag just for kicks,
-+ // and throw a test passed exception which will be caught
-+ // and end the test.
-+ theTestPassed = true;
-+ throw new TestPassedException();
-+ }
-+ //pass was called from a different thread, so set the flag and interrupt
-+ // the main thead.
-+ theTestPassed = true;
-+ testGeneratedInterrupt = true;
-+ mainThread.interrupt();
-+ }//pass()
-+
-+ public static synchronized void fail()
-+ {
-+ //test writer didn't specify why test failed, so give generic
-+ fail( "it just plain failed! :-)" );
-+ }
-+
-+ public static synchronized void fail( String whyFailed )
-+ {
-+ Sysout.println( "The test failed: " + whyFailed );
-+ Sysout.println( "The test is over, hit Ctl-C to stop Java VM" );
-+ //check if this called from main thread
-+ if ( mainThread == Thread.currentThread() )
-+ {
-+ //If main thread, fail now 'cause not sleeping
-+ throw new RuntimeException( whyFailed );
-+ }
-+ theTestPassed = false;
-+ testGeneratedInterrupt = true;
-+ failureMessage = whyFailed;
-+ mainThread.interrupt();
-+ }//fail()
-+
-+}// class TestUnixDefaultIcon
-+
-+//This exception is used to exit from any level of call nesting
-+// when it's determined that the test has passed, and immediately
-+// end the test.
-+class TestPassedException extends RuntimeException
-+{
-+}
-+
-+//*********** End Standard Test Machinery Section **********
-+
-+
-+//************ Begin classes defined for the test ****************
-+
-+// make listeners in a class defined here, and instantiate them in init()
-+
-+/* Example of a class which may be written as part of a test
-+class NewClass implements anInterface
-+ {
-+ static int newVar = 0;
-+
-+ public void eventDispatched(AWTEvent e)
-+ {
-+ //Counting events to see if we get enough
-+ eventCount++;
-+
-+ if( eventCount == 20 )
-+ {
-+ //got enough events, so pass
-+
-+ TestUnixDefaultIcon.pass();
-+ }
-+ else if( tries == 20 )
-+ {
-+ //tried too many times without getting enough events so fail
-+
-+ TestUnixDefaultIcon.fail();
-+ }
-+
-+ }// eventDispatched()
-+
-+ }// NewClass class
-+
-+*/
-+
-+
-+//************** End classes defined for the test *******************
-+
-+
-+
-+
-+/****************************************************
-+ Standard Test Machinery
-+ DO NOT modify anything below -- it's a standard
-+ chunk of code whose purpose is to make user
-+ interaction uniform, and thereby make it simpler
-+ to read and understand someone else's test.
-+ ****************************************************/
-+
-+/**
-+ This is part of the standard test machinery.
-+ It creates a dialog (with the instructions), and is the interface
-+ for sending text messages to the user.
-+ To print the instructions, send an array of strings to Sysout.createDialog
-+ WithInstructions method. Put one line of instructions per array entry.
-+ To display a message for the tester to see, simply call Sysout.println
-+ with the string to be displayed.
-+ This mimics System.out.println but works within the test harness as well
-+ as standalone.
-+ */
-+
-+class Sysout
-+{
-+ private static TestDialog dialog;
-+
-+ public static void createDialogWithInstructions( String[] instructions )
-+ {
-+ dialog = new TestDialog( new Frame(), "Instructions" );
-+ dialog.printInstructions( instructions );
-+ dialog.setVisible(true);
-+ println( "Any messages for the tester will display here." );
-+ }
-+
-+ public static void createDialog( )
-+ {
-+ dialog = new TestDialog( new Frame(), "Instructions" );
-+ String[] defInstr = { "Instructions will appear here. ", "" } ;
-+ dialog.printInstructions( defInstr );
-+ dialog.setVisible(true);
-+ println( "Any messages for the tester will display here." );
-+ }
-+
-+
-+ public static void printInstructions( String[] instructions )
-+ {
-+ dialog.printInstructions( instructions );
-+ }
-+
-+
-+ public static void println( String messageIn )
-+ {
-+ dialog.displayMessage( messageIn );
-+ }
-+
-+}// Sysout class
-+
-+/**
-+ This is part of the standard test machinery. It provides a place for the
-+ test instructions to be displayed, and a place for interactive messages
-+ to the user to be displayed.
-+ To have the test instructions displayed, see Sysout.
-+ To have a message to the user be displayed, see Sysout.
-+ Do not call anything in this dialog directly.
-+ */
-+class TestDialog extends Dialog implements ActionListener
-+{
-+
-+ TextArea instructionsText;
-+ TextArea messageText;
-+ int maxStringLength = 80;
-+ Panel buttonP = new Panel();
-+ Button passB = new Button( "pass" );
-+ Button failB = new Button( "fail" );
-+
-+ //DO NOT call this directly, go through Sysout
-+ public TestDialog( Frame frame, String name )
-+ {
-+ super( frame, name );
-+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
-+ instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
-+ add( "North", instructionsText );
-+
-+ messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
-+ add("Center", messageText);
-+
-+ passB = new Button( "pass" );
-+ passB.setActionCommand( "pass" );
-+ passB.addActionListener( this );
-+ buttonP.add( "East", passB );
-+
-+ failB = new Button( "fail" );
-+ failB.setActionCommand( "fail" );
-+ failB.addActionListener( this );
-+ buttonP.add( "West", failB );
-+
-+ add( "South", buttonP );
-+ pack();
-+
-+ setVisible(true);
-+ }// TestDialog()
-+
-+ //DO NOT call this directly, go through Sysout
-+ public void printInstructions( String[] instructions )
-+ {
-+ //Clear out any current instructions
-+ instructionsText.setText( "" );
-+
-+ //Go down array of instruction strings
-+
-+ String printStr, remainingStr;
-+ for( int i=0; i < instructions.length; i++ )
-+ {
-+ //chop up each into pieces maxSringLength long
-+ remainingStr = instructions[ i ];
-+ while( remainingStr.length() > 0 )
-+ {
-+ //if longer than max then chop off first max chars to print
-+ if( remainingStr.length() >= maxStringLength )
-+ {
-+ //Try to chop on a word boundary
-+ int posOfSpace = remainingStr.
-+ lastIndexOf( ' ', maxStringLength - 1 );
-+
-+ if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
-+
-+ printStr = remainingStr.substring( 0, posOfSpace + 1 );
-+ remainingStr = remainingStr.substring( posOfSpace + 1 );
-+ }
-+ //else just print
-+ else
-+ {
-+ printStr = remainingStr;
-+ remainingStr = "";
-+ }
-+
-+ instructionsText.append( printStr + "\n" );
-+
-+ }// while
-+
-+ }// for
-+
-+ }//printInstructions()
-+
-+ //DO NOT call this directly, go through Sysout
-+ public void displayMessage( String messageIn )
-+ {
-+ messageText.append( messageIn + "\n" );
-+ System.out.println(messageIn);
-+ }
-+
-+ //catch presses of the passed and failed buttons.
-+ //simply call the standard pass() or fail() static methods of
-+ //TestUnixDefaultIcon
-+ public void actionPerformed( ActionEvent e )
-+ {
-+ if( e.getActionCommand() == "pass" )
-+ {
-+ TestUnixDefaultIcon.pass();
-+ }
-+ else
-+ {
-+ TestUnixDefaultIcon.fail();
-+ }
-+ }
-+
-+}// TestDialog class
---- ./jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java Wed May 07 19:26:47 2014 -0700
-@@ -42,6 +42,7 @@
- GraphicsDevice gd = ge.getDefaultScreenDevice();
-
- Frame f = new Frame("Test frame");
-+ f.setUndecorated(true);
- f.setBounds(100, 100, 320, 240);
-
- // First, check it can be made fullscreen window without any effects applied
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/JAWT/JAWT.sh Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,173 @@
-+#!/bin/sh
-+
-+# Copyright (c) 2013, 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
-+# under the terms of the GNU General Public License version 2 only, as
-+# published by the Free Software Foundation. Oracle designates this
-+# particular file as subject to the "Classpath" exception as provided
-+# by Oracle in the LICENSE file that accompanied this code.
-+#
-+# This code is distributed in the hope that it will be useful, but WITHOUT
-+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+# version 2 for more details (a copy is included in the LICENSE file that
-+# accompanied this code).
-+#
-+# You should have received a copy of the GNU General Public License version
-+# 2 along with this work; if not, write to the Free Software Foundation,
-+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+#
-+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+# or visit www.oracle.com if you need additional information or have any
-+# questions.
-+
-+# @test JAWT.sh
-+# @bug 7190587
-+# @summary Tests Java AWT native interface library
-+# @author kshefov
-+# @run shell JAWT.sh
-+
-+# NB: To run on Windows with MKS and Visual Studio compiler
-+# add the following options to jtreg: -e INCLUDE="%INCLUDE%;." -e LIB="%LIB%;."
-+
-+if [ "${TESTSRC}" = "" ]
-+then TESTSRC=.
-+fi
-+
-+if [ "${TESTJAVA}" = "" ]
-+then
-+ PARENT=`dirname \`which java\``
-+ TESTJAVA=`dirname ${PARENT}`
-+ echo "TESTJAVA not set, selecting " ${TESTJAVA}
-+ echo "If this is incorrect, try setting the variable manually."
-+fi
-+
-+# set platform-dependent variables
-+OS=`uname -s`
-+case "$OS" in
-+ Linux )
-+ NULL=/dev/null
-+ PS=":"
-+ FS="/"
-+ ${TESTJAVA}${FS}bin${FS}java -version 2>&1 | grep '64-Bit' > $NULL
-+ if [ $? -eq '0' ]
-+ then
-+ ARCH="amd64"
-+ else
-+ ARCH="i386"
-+ fi
-+ SYST="linux"
-+ MAKEFILE="Makefile.unix"
-+ CC="gcc"
-+ MAKE="make"
-+ LD_LIBRARY_PATH=".":${TESTJAVA}${FS}jre${FS}lib${FS}${ARCH}
-+ ;;
-+ SunOS )
-+ NULL=/dev/null
-+ PS=":"
-+ FS="/"
-+ if [ `uname -p | grep -c 'sparc'` -gt '0' ]
-+ then
-+ ARCH="sparc"
-+ else
-+ ARCH="i386"
-+ fi
-+ SYST="solaris"
-+ MAKEFILE="Makefile.unix"
-+ CC="gcc"
-+ MAKE="make"
-+ LD_LIBRARY_PATH=".":${TESTJAVA}${FS}jre${FS}lib${FS}${ARCH}
-+ ;;
-+ Windows* )
-+ NULL=null
-+ PS=";"
-+ FS="\\"
-+ MAKEFILE="Makefile.win"
-+ CC="cl"
-+ MAKE="nmake"
-+ ${TESTJAVA}${FS}bin${FS}java -d64 -version 2>&1 | grep '64-Bit' > $NULL
-+ if [ "$?" -eq '0' ]
-+ then
-+ ARCH="amd64"
-+ else
-+ ARCH="i386"
-+ fi
-+ SYST="windows"
-+ ;;
-+ CYGWIN* )
-+ NULL=/dev/null
-+ PS=":"
-+ FS="/"
-+ MAKEFILE="Makefile.cygwin"
-+ CC="gcc"
-+ ${TESTJAVA}${FS}bin${FS}java -d64 -version 2>&1 | grep '64-Bit' > $NULL
-+ if [ "$?" -eq '0' ]
-+ then
-+ ARCH="amd64"
-+ else
-+ ARCH="i386"
-+ fi
-+ SYST="cygwin"
-+ MAKE="make"
-+ ;;
-+ Darwin )
-+ echo "Test passed. This test is not for MacOS."
-+ exit 0;
-+ ;;
-+ * )
-+ echo "Unrecognized system!"
-+ exit 1;
-+ ;;
-+esac
-+
-+# Skip unsupported platforms
-+case `uname -m` in
-+ arm* | ppc* )
-+ echo "Test passed. Not supported on current architecture."
-+ exit 0
-+ ;;
-+esac
-+
-+echo "OS-ARCH is" ${SYST}-${ARCH}
-+${TESTJAVA}${FS}jre${FS}bin${FS}java -fullversion 2>&1
-+
-+which ${MAKE} >${NULL} 2>&1
-+if [ "$?" -ne '0' ]
-+then
-+ echo "No make found. Test passed."
-+ exit 0
-+fi
-+
-+which ${CC} >${NULL} 2>&1
-+if [ "$?" -ne '0' ]
-+then
-+ echo "No C compiler found. Test passed."
-+ exit 0
-+fi
-+case "$OS" in
-+ SunOS )
-+ ${CC} -v >${NULL} 2>&1
-+ if [ "$?" -ne '0' ]
-+ then
-+ echo "No C compiler found. Test passed."
-+ exit 0
-+ fi
-+esac
-+
-+cp ${TESTSRC}${FS}${MAKEFILE} .
-+
-+JAVA=${TESTJAVA}${FS}jre${FS}bin${FS}java
-+JAVAC=${TESTJAVA}${FS}bin${FS}javac
-+JAVAH=${TESTJAVA}${FS}bin${FS}javah
-+
-+export CC SYST ARCH LD_LIBRARY_PATH
-+
-+${JAVAC} -d . ${TESTSRC}${FS}MyCanvas.java
-+${JAVAH} -jni -classpath . -d . MyCanvas
-+${MAKE} -f ${MAKEFILE}
-+${JAVA} -classpath . MyCanvas
-+
-+exit $?
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/JAWT/Makefile.cygwin Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,49 @@
-+# Copyright (c) 2013, 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
-+# under the terms of the GNU General Public License version 2 only, as
-+# published by the Free Software Foundation. Oracle designates this
-+# particular file as subject to the "Classpath" exception as provided
-+# by Oracle in the LICENSE file that accompanied this code.
-+#
-+# This code is distributed in the hope that it will be useful, but WITHOUT
-+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+# version 2 for more details (a copy is included in the LICENSE file that
-+# accompanied this code).
-+#
-+# You should have received a copy of the GNU General Public License version
-+# 2 along with this work; if not, write to the Free Software Foundation,
-+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+#
-+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+# or visit www.oracle.com if you need additional information or have any
-+# questions.
-+
-+CFLAGS =
-+OBJS = myfile.o
-+HEADERS = MyCanvas.h
-+CLASSES = MyCanvas.class
-+
-+JAVA = $(TESTJAVA)/bin/java -classpath .
-+JAVAC = $(TESTJAVA)/bin/javac
-+JAVAH = $(TESTJAVA)/bin/javah
-+DEL = rm -rf
-+LINK = $(CC)
-+
-+INCLUDES = -I $(TESTJAVA)/include/win32 -I $(TESTJAVA)/include -I .
-+
-+LIBS = $(TESTJAVA)/lib/jawt.lib -lgdi32
-+
-+all: $(CLASSES) mylib.dll
-+
-+mylib.dll: $(HEADERS) $(OBJS)
-+ $(LINK) -shared -o mylib.dll $(OBJS) $(LIBS)
-+
-+myfile.o:
-+ $(CC) $(CFLAGS) $(INCLUDES) -c $(TESTSRC)/myfile.cpp
-+
-+clean:
-+ $(DEL) mylib.* *.h *.class *.o
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/JAWT/Makefile.unix Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,48 @@
-+# Copyright (c) 2013, 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
-+# under the terms of the GNU General Public License version 2 only, as
-+# published by the Free Software Foundation. Oracle designates this
-+# particular file as subject to the "Classpath" exception as provided
-+# by Oracle in the LICENSE file that accompanied this code.
-+#
-+# This code is distributed in the hope that it will be useful, but WITHOUT
-+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+# version 2 for more details (a copy is included in the LICENSE file that
-+# accompanied this code).
-+#
-+# You should have received a copy of the GNU General Public License version
-+# 2 along with this work; if not, write to the Free Software Foundation,
-+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+#
-+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+# or visit www.oracle.com if you need additional information or have any
-+# questions.
-+
-+CFLAGS = -fPIC -O
-+OBJS = myfile.o
-+HEADERS = MyCanvas.h
-+CLASSES = MyCanvas.class
-+
-+ENV = /usr/bin/env
-+JAVA = $(TESTJAVA)/bin/java -classpath .
-+JAVAC = $(TESTJAVA)/bin/javac
-+JAVAH = $(TESTJAVA)/bin/javah
-+LINK = ld
-+
-+J_INC = $(TESTJAVA)/include
-+INCLUDES = -I$(J_INC) -I$(J_INC)/$(SYST) -I.
-+LIBS = -L$(TESTJAVA)/jre/lib/$(ARCH) -ljawt -lX11
-+
-+all: $(CLASSES) libmylib.so
-+
-+libmylib.so: $(HEADERS) $(OBJS)
-+ $(LINK) -G -o libmylib.so $(OBJS) $(LIBS)
-+
-+myfile.o: $(TESTSRC)/myfile.c
-+ $(CC) $(CFLAGS) $(INCLUDES) -c $(TESTSRC)/myfile.c
-+
-+clean:
-+ rm -rf libmylib.so $(HEADERS) $(CLASSES) $(OBJS)
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/JAWT/Makefile.win Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,47 @@
-+# Copyright (c) 2013, 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
-+# under the terms of the GNU General Public License version 2 only, as
-+# published by the Free Software Foundation. Oracle designates this
-+# particular file as subject to the "Classpath" exception as provided
-+# by Oracle in the LICENSE file that accompanied this code.
-+#
-+# This code is distributed in the hope that it will be useful, but WITHOUT
-+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+# version 2 for more details (a copy is included in the LICENSE file that
-+# accompanied this code).
-+#
-+# You should have received a copy of the GNU General Public License version
-+# 2 along with this work; if not, write to the Free Software Foundation,
-+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+#
-+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+# or visit www.oracle.com if you need additional information or have any
-+# questions.
-+
-+CFLAGS = -nologo
-+OBJS = myfile.obj
-+HEADERS = MyCanvas.h
-+CLASSES = MyCanvas.class
-+
-+DEL = del /Q
-+LINK = link
-+
-+INCLUDES = -I$(TESTJAVA)\include\win32 -I$(TESTJAVA)\include
-+
-+LIBS = gdi32.lib user32.lib $(TESTJAVA)\lib\jawt.lib
-+
-+all: $(CLASSES) mylib.dll
-+
-+mylib.dll: $(HEADERS) $(OBJS)
-+ $(LINK) -nologo -dll -out:mylib.dll $(OBJS) $(LIBS)
-+
-+myfile.obj: $(TESTSRC)\myfile.cpp
-+ $(CC) $(CFLAGS) $(INCLUDES) -c $(TESTSRC)\myfile.cpp
-+
-+clean:
-+ $(DEL) mylib.*
-+ $(DEL) $(HEADERS) $(CLASSES)
-+ $(DEL) *.obj
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/JAWT/MyCanvas.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,72 @@
-+/**
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.awt.*;
-+import java.awt.event.*;
-+
-+public class MyCanvas extends Canvas {
-+
-+ static {
-+ try {
-+ System.loadLibrary("mylib");
-+ } catch (Throwable t) {
-+ System.out.println("Test failed!!");
-+ t.printStackTrace();
-+ System.exit(1);
-+ }
-+ }
-+
-+ public native void paint(Graphics g);
-+
-+ public static void main(String[] args) {
-+ try {
-+ Robot robot = new Robot();
-+ Frame f = new Frame();
-+ f.setBounds(0, 0, 100, 100);
-+ f.add(new MyCanvas());
-+ f.addWindowListener(new WindowAdapter() {
-+ public void windowClosing(WindowEvent ev) {
-+ System.exit(0);
-+ }
-+ });
-+ f.setVisible(true);
-+ robot.delay(5000);
-+ Color col1 = new Color(0, 0, 0);
-+ Color col2 = robot.getPixelColor(f.getX()+50, f.getY()+50);
-+ if (col1.equals(col2)) {
-+ System.out.println("Test passed!");
-+ } else {
-+ throw new RuntimeException("Color of JAWT canvas is wrong or " +
-+ "it was not rendered. " + "Check that other windows " +
-+ "do not block the test frame.");
-+ }
-+ System.exit(0);
-+ } catch (Throwable t) {
-+ System.out.println("Test failed!");
-+ t.printStackTrace();
-+ System.exit(1);
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/JAWT/myfile.c Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,106 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+#include "MyCanvas.h"
-+#include "jawt_md.h"
-+
-+/*
-+ * Class: MyCanvas
-+ * Method: paint
-+ * Signature: (Ljava/awt/Graphics;)V
-+ */
-+JNIEXPORT void JNICALL Java_MyCanvas_paint
-+(JNIEnv* env, jobject canvas, jobject graphics)
-+{
-+ JAWT awt;
-+ JAWT_DrawingSurface* ds;
-+ JAWT_DrawingSurfaceInfo* dsi;
-+ JAWT_X11DrawingSurfaceInfo* dsi_x11;
-+ jboolean result;
-+ jint lock;
-+ GC gc;
-+ jobject ref;
-+
-+ /* Get the AWT */
-+ awt.version = JAWT_VERSION_1_4;
-+ if (JAWT_GetAWT(env, &awt) == JNI_FALSE) {
-+ printf("AWT Not found\n");
-+ return;
-+ }
-+
-+ /* Lock the AWT */
-+ awt.Lock(env);
-+
-+ /* Unlock the AWT */
-+ awt.Unlock(env);
-+
-+ /* Get the drawing surface */
-+ ds = awt.GetDrawingSurface(env, canvas);
-+ if (ds == NULL) {
-+ printf("NULL drawing surface\n");
-+ return;
-+ }
-+
-+ /* Lock the drawing surface */
-+ lock = ds->Lock(ds);
-+ printf("Lock value %d\n", (int)lock);
-+ if((lock & JAWT_LOCK_ERROR) != 0) {
-+ printf("Error locking surface\n");
-+ awt.FreeDrawingSurface(ds);
-+ return;
-+ }
-+
-+ /* Get the drawing surface info */
-+ dsi = ds->GetDrawingSurfaceInfo(ds);
-+ if (dsi == NULL) {
-+ printf("Error getting surface info\n");
-+ ds->Unlock(ds);
-+ awt.FreeDrawingSurface(ds);
-+ return;
-+ }
-+
-+ /* Get the platform-specific drawing info */
-+ dsi_x11 = (JAWT_X11DrawingSurfaceInfo*)dsi->platformInfo;
-+
-+ /* Now paint */
-+ gc = XCreateGC(dsi_x11->display, dsi_x11->drawable, 0, 0);
-+ XSetForeground(dsi_x11->display, gc, 0);
-+ XFillRectangle(dsi_x11->display, dsi_x11->drawable, gc,
-+ 5, 5, 90, 90);
-+ XFreeGC(dsi_x11->display, gc);
-+ ref = awt.GetComponent(env, (void*)(dsi_x11->drawable));
-+ if (!(*env)->IsSameObject(env, ref, canvas)) {
-+ printf("Error! Different objects!\n");
-+ }
-+
-+ /* Free the drawing surface info */
-+ ds->FreeDrawingSurfaceInfo(dsi);
-+
-+ /* Unlock the drawing surface */
-+ ds->Unlock(ds);
-+
-+ /* Free the drawing surface */
-+ awt.FreeDrawingSurface(ds);
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/JAWT/myfile.cpp Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,110 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+#include <windows.h>
-+#include "MyCanvas.h"
-+#include "jawt_md.h"
-+
-+/*
-+ * Class: MyCanvas
-+ * Method: paint
-+ * Signature: (Ljava/awt/Graphics;)V
-+ */
-+
-+extern "C" {
-+
-+JNIEXPORT void JNICALL Java_MyCanvas_paint
-+(JNIEnv* env, jobject canvas, jobject graphics)
-+{
-+ /* Get the AWT */
-+ JAWT awt;
-+ awt.version = JAWT_VERSION_1_4;
-+ if (JAWT_GetAWT(env, &awt) == JNI_FALSE) {
-+ printf("AWT Not found\n");
-+ return;
-+ }
-+
-+ /* Lock the AWT */
-+ awt.Lock(env);
-+
-+ /* Unlock the AWT */
-+ awt.Unlock(env);
-+
-+ /* Get the drawing surface */
-+ JAWT_DrawingSurface* ds = awt.GetDrawingSurface(env, canvas);
-+ if (ds == NULL) {
-+ printf("NULL drawing surface\n");
-+ return;
-+ }
-+
-+ /* Lock the drawing surface */
-+ jint lock = ds->Lock(ds);
-+ printf("Lock value %d\n", (int)lock);
-+ if((lock & JAWT_LOCK_ERROR) != 0) {
-+ printf("Error locking surface\n");
-+ return;
-+ }
-+
-+ /* Get the drawing surface info */
-+ JAWT_DrawingSurfaceInfo* dsi = ds->GetDrawingSurfaceInfo(ds);
-+ if (dsi == NULL) {
-+ printf("Error getting surface info\n");
-+ ds->Unlock(ds);
-+ return;
-+ }
-+
-+ /* Get the platform-specific drawing info */
-+ JAWT_Win32DrawingSurfaceInfo* dsi_win =
-+ (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
-+
-+ /* Now paint */
-+ PAINTSTRUCT ps;
-+ /* Do not use the HDC returned from BeginPaint()!! */
-+ ::BeginPaint(dsi_win->hwnd, &ps);
-+ HBRUSH hbrush = (HBRUSH)::GetStockObject(BLACK_BRUSH);
-+ RECT rect;
-+ rect.left = 5;
-+ rect.top = 5;
-+ rect.right = 95;
-+ rect.bottom = 95;
-+ ::FillRect(dsi_win->hdc, &rect, hbrush);
-+ ::EndPaint(dsi_win->hwnd, &ps);
-+
-+ jobject ref = awt.GetComponent(env, (void*)(dsi_win->hwnd));
-+ if (!env->IsSameObject(ref, canvas)) {
-+ printf("Error! Different objects!\n");
-+ }
-+
-+ /* Free the drawing surface info */
-+ ds->FreeDrawingSurfaceInfo(dsi);
-+
-+ /* Unlock the drawing surface */
-+ ds->Unlock(ds);
-+
-+ /* Free the drawing surface */
-+ awt.FreeDrawingSurface(ds);
-+}
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/List/FirstItemRemoveTest/FirstItemRemoveTest.html Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,43 @@
-+<html>
-+<!--
-+ Copyright (c) 2013, 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
-+ under the terms of the GNU General Public License version 2 only, as
-+ published by the Free Software Foundation.
-+
-+ This code is distributed in the hope that it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ version 2 for more details (a copy is included in the LICENSE file that
-+ accompanied this code).
-+
-+ You should have received a copy of the GNU General Public License version
-+ 2 along with this work; if not, write to the Free Software Foundation,
-+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+
-+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ or visit www.oracle.com if you need additional information or have any
-+ questions.
-+ -->
-+<!--
-+ @test
-+ @bug 6299858
-+ @summary PIT. Focused border not shown on List if selected item is removed, XToolkit
-+ @author Dmitry.Cherepanov@SUN.COM area=awt.list
-+ @run applet FirstItemRemoveTest.html
-+ -->
-+<head>
-+<title> </title>
-+</head>
-+<body>
-+
-+<h1>FirstItemRemoveTest<br>Bug ID: 6299858 </h1>
-+
-+<p> This is an AUTOMATIC test, simply wait for completion </p>
-+
-+<APPLET CODE="FirstItemRemoveTest.class" WIDTH=200 HEIGHT=200></APPLET>
-+</body>
-+</html>
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/List/FirstItemRemoveTest/FirstItemRemoveTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,119 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ test
-+ @bug 6299858 7124338
-+ @summary PIT. Focused border not shown on List if selected item is removed, XToolkit
-+ @author Dmitry.Cherepanov@SUN.COM area=awt.list
-+ @run applet FirstItemRemoveTest.html
-+*/
-+
-+import java.applet.Applet;
-+import java.awt.*;
-+import java.awt.event.*;
-+
-+public class FirstItemRemoveTest extends Applet
-+{
-+ List list = new List(4, false);
-+ Panel panel = new Panel();
-+
-+ public void init()
-+ {
-+ list.add("000");
-+ list.add("111");
-+ list.add("222");
-+ list.add("333");
-+ list.add("444");
-+ list.add("555");
-+
-+ panel.setLayout(new FlowLayout ());
-+ panel.add(list);
-+
-+ this.add(panel);
-+ this.setLayout (new FlowLayout ());
-+ }//End init()
-+
-+ public void start ()
-+ {
-+ setSize (200,200);
-+ setVisible(true);
-+ validate();
-+
-+ test();
-+ }// start()
-+
-+ private void test(){
-+
-+ if (sun.awt.OSInfo.getOSType() == sun.awt.OSInfo.OSType.MACOSX) {
-+ System.err.println("Skipped. This test is not for OS X.");
-+ return;
-+ }
-+
-+ Robot r;
-+ try {
-+ r = new Robot();
-+ } catch(AWTException e) {
-+ throw new RuntimeException(e.getMessage());
-+ }
-+
-+ // Removing first item in order to reproduce incorrect behaviour
-+ r.delay(1000);
-+ list.remove(0);
-+ r.delay(1000);
-+
-+ // Request focus to list
-+ Point loc = this.getLocationOnScreen();
-+ r.delay(1000);
-+
-+ r.mouseMove(loc.x+10, loc.y+10);
-+ r.delay(10);
-+ r.mousePress(InputEvent.BUTTON1_MASK);
-+ r.delay(10);
-+ r.mouseRelease(InputEvent.BUTTON1_MASK);
-+ r.delay(1000);
-+
-+ list.requestFocusInWindow();
-+ r.delay(1000);
-+ r.waitForIdle();
-+ if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != list){
-+ throw new RuntimeException("Test failed - list isn't focus owner.");
-+ }
-+
-+ // The focus index should be set to first item after removing
-+ // So if we press VK_SPACE then the selected item will be equals 0.
-+ r.delay(100);
-+ r.keyPress(KeyEvent.VK_SPACE);
-+ r.delay(10);
-+ r.keyRelease(KeyEvent.VK_SPACE);
-+ r.delay(1000);
-+ r.waitForIdle();
-+
-+ int selectedIndex = list.getSelectedIndex();
-+ if (selectedIndex != 0){
-+ throw new RuntimeException("Test failed. list.getSelectedIndex() = "+selectedIndex);
-+ }
-+
-+ }
-+
-+}// class AutomaticAppletTest
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/Toolkit/ToolkitPropertyTest/bug7129133.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,50 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 7129133
-+ * @summary [macosx] Accelerators are displayed as Meta instead of the Command symbol
-+ * @author leonid.romanov@oracle.com
-+ * @run main bug7129133
-+ */
-+
-+import java.awt.*;
-+
-+public class bug7129133 {
-+ public static void main(String[] args) throws Exception {
-+ if (sun.awt.OSInfo.getOSType() != sun.awt.OSInfo.OSType.MACOSX) {
-+ System.out.println("This test is for MacOS only. Automatically passed on other platforms.");
-+ return;
-+ }
-+
-+ Toolkit.getDefaultToolkit();
-+
-+ String cmdSymbol = "\u2318";
-+ String val = Toolkit.getProperty("AWT.meta", "Meta");
-+
-+ if (!val.equals(cmdSymbol)) {
-+ throw new Exception("Wrong property value for AWT.meta. Expected: " + cmdSymbol + ", actual: " + val);
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.html Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,43 @@
-+<html>
-+<!--
-+ Copyright (c) 2013, 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
-+ under the terms of the GNU General Public License version 2 only, as
-+ published by the Free Software Foundation.
-+
-+ This code is distributed in the hope that it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ version 2 for more details (a copy is included in the LICENSE file that
-+ accompanied this code).
-+
-+ You should have received a copy of the GNU General Public License version
-+ 2 along with this work; if not, write to the Free Software Foundation,
-+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+
-+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ or visit www.oracle.com if you need additional information or have any
-+ questions.
-+-->
-+
-+<!--
-+ @test
-+ @bug 6384984 8004032
-+ @summary TrayIcon try to dispay a tooltip when is not visible
-+ @author Dmitry.Cherepanov@sun.com area=awt.tray
-+ @run applet/manual=yesno ShowAfterDisposeTest.html
-+ -->
-+<head>
-+<title> ShowAfterDisposeTest </title>
-+</head>
-+<body>
-+
-+<h1>ShowAfterDisposeTest<br>Bug ID: 6384984</h1>
-+
-+<p> See the dialog box (usually in upper left corner) for instructions</p>
-+
-+<APPLET CODE="ShowAfterDisposeTest.class" WIDTH=200 HEIGHT=200></APPLET>
-+</body>
-+</html>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,246 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ test
-+ @bug 6384984 8004032
-+ @summary TrayIcon try to dispay a tooltip when is not visible
-+ @author Dmitry.Cherepanov@sun.com area=awt.tray
-+ @run applet/manual=yesno ShowAfterDisposeTest.html
-+*/
-+
-+import java.applet.*;
-+
-+import java.awt.*;
-+import java.awt.event.*;
-+import java.awt.image.*;
-+
-+public class ShowAfterDisposeTest extends Applet
-+{
-+ boolean traySupported;
-+
-+ public void init()
-+ {
-+ this.setLayout (new BorderLayout ());
-+
-+ String[] instructions;
-+ traySupported = SystemTray.isSupported();
-+ if (traySupported)
-+ {
-+ String[] s =
-+ {
-+ "1) When the test starts an icon is added to the SystemTray area.",
-+ "2a) If you use Apple OS X,",
-+ " right click on this icon (it's important to click before the tooltip is shown).",
-+ " The icon should disappear.",
-+ "2b) If you use other os (Windows, Linux, Solaris),",
-+ " double click on this icon (it's important to click before the tooltip is shown).",
-+ " The icon should disappear.",
-+ "3) If the bug is reproducible then the test will fail without assistance.",
-+ "4) Just press the 'pass' button."
-+ };
-+ instructions = s;
-+ }
-+ else
-+ {
-+ String[] s =
-+ {
-+ "The test cannot be run because SystemTray is not supported.",
-+ "Simply press PASS button."
-+ };
-+ instructions = s;
-+ }
-+ Sysout.createDialogWithInstructions(instructions);
-+ }
-+
-+ public void start ()
-+ {
-+ setSize (200,200);
-+ setVisible(true);
-+ validate();
-+
-+ if (!traySupported)
-+ {
-+ return;
-+ }
-+
-+ BufferedImage img = new BufferedImage(32, 32, BufferedImage.TYPE_INT_ARGB);
-+ Graphics g = img.createGraphics();
-+ g.setColor(Color.WHITE);
-+ g.fillRect(0, 0, 32, 32);
-+ g.setColor(Color.RED);
-+ g.fillRect(6, 6, 20, 20);
-+ g.dispose();
-+
-+ final SystemTray tray = SystemTray.getSystemTray();
-+ final TrayIcon icon = new TrayIcon(img);
-+ icon.setImageAutoSize(true);
-+ icon.addActionListener(new ActionListener()
-+ {
-+ public void actionPerformed(ActionEvent ev)
-+ {
-+ tray.remove(icon);
-+ }
-+ }
-+ );
-+
-+ try {
-+ tray.add(icon);
-+ } catch (AWTException e) {
-+ Sysout.println(e.toString());
-+ Sysout.println("!!! The test coudn't be performed !!!");
-+ return;
-+ }
-+ icon.setToolTip("tooltip");
-+ }
-+}
-+
-+/****************************************************
-+ Standard Test Machinery
-+ DO NOT modify anything below -- it's a standard
-+ chunk of code whose purpose is to make user
-+ interaction uniform, and thereby make it simpler
-+ to read and understand someone else's test.
-+ ****************************************************/
-+
-+/**
-+ This is part of the standard test machinery.
-+ It creates a dialog (with the instructions), and is the interface
-+ for sending text messages to the user.
-+ To print the instructions, send an array of strings to Sysout.createDialog
-+ WithInstructions method. Put one line of instructions per array entry.
-+ To display a message for the tester to see, simply call Sysout.println
-+ with the string to be displayed.
-+ This mimics System.out.println but works within the test harness as well
-+ as standalone.
-+ */
-+
-+class Sysout
-+{
-+ private static TestDialog dialog;
-+
-+ public static void createDialogWithInstructions( String[] instructions )
-+ {
-+ dialog = new TestDialog( new Frame(), "Instructions" );
-+ dialog.printInstructions( instructions );
-+ dialog.setVisible(true);
-+ println( "Any messages for the tester will display here." );
-+ }
-+
-+ public static void createDialog( )
-+ {
-+ dialog = new TestDialog( new Frame(), "Instructions" );
-+ String[] defInstr = { "Instructions will appear here. ", "" } ;
-+ dialog.printInstructions( defInstr );
-+ dialog.setVisible(true);
-+ println( "Any messages for the tester will display here." );
-+ }
-+
-+ public static void printInstructions( String[] instructions )
-+ {
-+ dialog.printInstructions( instructions );
-+ }
-+
-+ public static void println( String messageIn )
-+ {
-+ dialog.displayMessage( messageIn );
-+ }
-+}
-+
-+/**
-+ This is part of the standard test machinery. It provides a place for the
-+ test instructions to be displayed, and a place for interactive messages
-+ to the user to be displayed.
-+ To have the test instructions displayed, see Sysout.
-+ To have a message to the user be displayed, see Sysout.
-+ Do not call anything in this dialog directly.
-+ */
-+class TestDialog extends Dialog
-+{
-+
-+ TextArea instructionsText;
-+ TextArea messageText;
-+ int maxStringLength = 80;
-+
-+ //DO NOT call this directly, go through Sysout
-+ public TestDialog( Frame frame, String name )
-+ {
-+ super( frame, name );
-+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
-+ instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth );
-+ add( "North", instructionsText );
-+
-+ messageText = new TextArea( "", 5, maxStringLength, scrollBoth );
-+ add("Center", messageText);
-+
-+ pack();
-+
-+ setVisible(true);
-+ }
-+
-+ //DO NOT call this directly, go through Sysout
-+ public void printInstructions( String[] instructions )
-+ {
-+ //Clear out any current instructions
-+ instructionsText.setText( "" );
-+
-+ //Go down array of instruction strings
-+
-+ String printStr, remainingStr;
-+ for( int i=0; i < instructions.length; i++ )
-+ {
-+ //chop up each into pieces maxSringLength long
-+ remainingStr = instructions[ i ];
-+ while( remainingStr.length() > 0 )
-+ {
-+ //if longer than max then chop off first max chars to print
-+ if( remainingStr.length() >= maxStringLength )
-+ {
-+ //Try to chop on a word boundary
-+ int posOfSpace = remainingStr.
-+ lastIndexOf( ' ', maxStringLength - 1 );
-+
-+ if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
-+
-+ printStr = remainingStr.substring( 0, posOfSpace + 1 );
-+ remainingStr = remainingStr.substring( posOfSpace + 1 );
-+ }
-+ //else just print
-+ else
-+ {
-+ printStr = remainingStr;
-+ remainingStr = "";
-+ }
-+
-+ instructionsText.append( printStr + "\n" );
-+ }
-+ }
-+ }
-+
-+ //DO NOT call this directly, go through Sysout
-+ public void displayMessage( String messageIn )
-+ {
-+ messageText.append( messageIn + "\n" );
-+ System.out.println(messageIn);
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,133 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test
-+ * @bug 8024163
-+ * @summary Checks the dragEnter event is correctly generated
-+ * @library ../../regtesthelpers
-+ * @build Util
-+ * @compile ExtraDragEnterTest.java
-+ * @run main/othervm ExtraDragEnterTest
-+ * @author Petr Pchelko
-+ */
-+
-+import test.java.awt.regtesthelpers.Util;
-+
-+import javax.swing.*;
-+import java.awt.*;
-+import java.awt.datatransfer.StringSelection;
-+import java.awt.dnd.DnDConstants;
-+import java.awt.dnd.DragGestureEvent;
-+import java.awt.dnd.DragGestureListener;
-+import java.awt.dnd.DragSource;
-+import java.awt.dnd.DropTarget;
-+import java.awt.dnd.DropTargetAdapter;
-+import java.awt.dnd.DropTargetDragEvent;
-+import java.awt.dnd.DropTargetDropEvent;
-+import java.awt.event.InputEvent;
-+import java.util.concurrent.atomic.AtomicInteger;
-+
-+public class ExtraDragEnterTest {
-+
-+ private static final int FRAME_SIZE = 100;
-+ private static final int FRAME_LOCATION = 100;
-+
-+ private static AtomicInteger dragEnterCalled = new AtomicInteger(0);
-+
-+ private static volatile Panel mainPanel;
-+ private static volatile Frame f;
-+
-+ private static void initAndShowUI() {
-+ f = new Frame("Test frame");
-+ f.setBounds(FRAME_LOCATION,FRAME_LOCATION,FRAME_SIZE,FRAME_SIZE);
-+ mainPanel = new Panel();
-+ mainPanel.setBounds(0, 0, FRAME_SIZE, FRAME_SIZE);
-+ mainPanel.setBackground(Color.black);
-+ mainPanel.setLayout(new GridLayout(2, 1));
-+
-+ final DraggablePanel dragSource = new DraggablePanel();
-+ dragSource.setBackground(Color.yellow);
-+ dragSource.setDropTarget(null);
-+ mainPanel.add(dragSource);
-+
-+ Panel dropTarget = new Panel();
-+ dropTarget.setBackground(Color.red);
-+ DropTarget dt = new DropTarget(dropTarget, new DropTargetAdapter() {
-+ @Override public void drop(DropTargetDropEvent dtde) { }
-+
-+ @Override
-+ public void dragEnter(DropTargetDragEvent dtde) {
-+ dragEnterCalled.incrementAndGet();
-+ }
-+ });
-+ dropTarget.setDropTarget(dt);
-+ mainPanel.add(dropTarget);
-+
-+ f.add(mainPanel);
-+ f.setVisible(true);
-+ }
-+
-+ public static void main(String[] args) throws Throwable {
-+ try {
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ @Override
-+ public void run() {
-+ initAndShowUI();
-+ }
-+ });
-+
-+ Robot r = new Robot();
-+ Util.waitForIdle(r);
-+ Point leftCorner = new Point(mainPanel.getLocationOnScreen());
-+ leftCorner.translate(5, 5);
-+ Point rightCorner = new Point(mainPanel.getLocationOnScreen());
-+ rightCorner.translate(mainPanel.getWidth(), mainPanel.getHeight());
-+ rightCorner.translate(-5, -5);
-+ Util.drag(r, leftCorner, rightCorner, InputEvent.BUTTON1_MASK);
-+ Util.waitForIdle(r);
-+
-+ int called = dragEnterCalled.get();
-+ if (called != 1) {
-+ throw new RuntimeException("Failed. Drag enter called " + called + " times. Expected 1" );
-+ }
-+ } finally {
-+ if (f != null) {
-+ f.dispose();
-+ }
-+ }
-+ }
-+
-+ private static class DraggablePanel extends Panel implements DragGestureListener {
-+
-+ public DraggablePanel() {
-+ (new DragSource()).createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY, this);
-+ }
-+
-+ @Override
-+ public void dragGestureRecognized(DragGestureEvent dge) {
-+ dge.startDrag(Cursor.getDefaultCursor(), new StringSelection("test"));
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,128 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test
-+ * @bug 8024163
-+ * @summary Checks that dragExit is generated when the new DropTarget is created under the drag
-+ * @library ../../regtesthelpers
-+ * @build Util
-+ * @compile MissedDragExitTest.java
-+ * @run main/othervm MissedDragExitTest
-+ * @author Petr Pchelko
-+ */
-+
-+import test.java.awt.regtesthelpers.Util;
-+
-+import javax.swing.*;
-+import java.awt.*;
-+import java.awt.datatransfer.StringSelection;
-+import java.awt.dnd.DnDConstants;
-+import java.awt.dnd.DragGestureEvent;
-+import java.awt.dnd.DragGestureListener;
-+import java.awt.dnd.DragSource;
-+import java.awt.dnd.DropTarget;
-+import java.awt.dnd.DropTargetAdapter;
-+import java.awt.dnd.DropTargetDragEvent;
-+import java.awt.dnd.DropTargetDropEvent;
-+import java.awt.dnd.DropTargetEvent;
-+import java.awt.event.InputEvent;
-+
-+public class MissedDragExitTest {
-+
-+ private static final int FRAME_SIZE = 100;
-+ private static final int FRAME_LOCATION = 100;
-+
-+ private static volatile boolean dragExitCalled = false;
-+
-+ private static volatile Frame f;
-+
-+ private static void initAndShowUI() {
-+ f = new Frame("Test frame");
-+ f.setBounds(FRAME_LOCATION,FRAME_LOCATION,FRAME_SIZE,FRAME_SIZE);
-+
-+ final DraggablePanel dragSource = new DraggablePanel();
-+ dragSource.setBackground(Color.yellow);
-+ DropTarget dt = new DropTarget(dragSource, new DropTargetAdapter() {
-+ @Override public void drop(DropTargetDropEvent dtde) { }
-+
-+ @Override
-+ public void dragExit(DropTargetEvent dte) {
-+ dragExitCalled = true;
-+ }
-+
-+ @Override
-+ public void dragOver(DropTargetDragEvent dtde) {
-+ Panel newDropTarget = new Panel();
-+ newDropTarget.setDropTarget(new DropTarget());
-+ newDropTarget.setBackground(Color.red);
-+ newDropTarget.setBounds(0, 0, FRAME_SIZE, FRAME_SIZE);
-+ dragSource.add(newDropTarget);
-+ }
-+ });
-+ dragSource.setDropTarget(dt);
-+ f.add(dragSource);
-+
-+ f.setVisible(true);
-+ }
-+
-+ public static void main(String[] args) throws Throwable {
-+ try {
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ @Override
-+ public void run() {
-+ initAndShowUI();
-+ }
-+ });
-+
-+ Robot r = new Robot();
-+ Util.waitForIdle(r);
-+ Util.drag(r,
-+ new Point(FRAME_LOCATION + FRAME_SIZE / 3, FRAME_LOCATION + FRAME_SIZE / 3),
-+ new Point(FRAME_LOCATION + FRAME_SIZE / 3 * 2, FRAME_LOCATION + FRAME_SIZE / 3 * 2),
-+ InputEvent.BUTTON1_MASK);
-+ Util.waitForIdle(r);
-+
-+ if (!dragExitCalled) {
-+ throw new RuntimeException("Failed. Drag exit was not called" );
-+ }
-+ } finally {
-+ if (f != null) {
-+ f.dispose();
-+ }
-+ }
-+ }
-+
-+ private static class DraggablePanel extends Panel implements DragGestureListener {
-+
-+ public DraggablePanel() {
-+ (new DragSource()).createDefaultDragGestureRecognizer(this, DnDConstants.ACTION_COPY, this);
-+ }
-+
-+ @Override
-+ public void dragGestureRecognized(DragGestureEvent dge) {
-+ dge.startDrag(Cursor.getDefaultCursor(), new StringSelection("test"));
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/print/bug8023392/bug8023392.html Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,20 @@
-+<html>
-+<!--
-+ @test
-+ @bug 8023392
-+ @summary Swing text components printed with spaces between chars
-+ @author Anton Nashatyrev
-+ @run applet/manual=yesno bug8023392.html
-+ -->
-+<head>
-+ <title> Bug 8023392 </title>
-+</head>
-+<body>
-+
-+<h1>Bug ID: 8023392</h1>
-+
-+<p> See the dialog box (usually in upper left corner) for instructions</p>
-+
-+<APPLET CODE="bug8023392.class" WIDTH=400 HEIGHT=400></APPLET>
-+</body>
-+</html>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/awt/print/bug8023392/bug8023392.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,286 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ test
-+ @bug 8023392
-+ @summary Swing text components printed with spaces between chars
-+ @author Anton Nashatyrev
-+ @run applet/manual=yesno bug8023392.html
-+*/
-+
-+import javax.swing.*;
-+import javax.swing.border.LineBorder;
-+import java.applet.Applet;
-+import java.awt.*;
-+import java.awt.event.ActionEvent;
-+import java.awt.event.ActionListener;
-+import java.awt.font.TextAttribute;
-+import java.awt.print.PageFormat;
-+import java.awt.print.Printable;
-+import java.awt.print.PrinterException;
-+import java.awt.print.PrinterJob;
-+import java.text.AttributedCharacterIterator;
-+import java.text.AttributedString;
-+
-+
-+public class bug8023392 extends Applet {
-+ static final String[] instructions = {
-+ "A Frame containing several pairs of labels ((a) and (b)) is displayed.",
-+ "Labels of each pair look the same and are left-aligned (with spaces ",
-+ "between chars).",
-+ "1. Hit the print button.",
-+ "2. Select any available printer (printing to file is also fine).",
-+ "3. Look at the printing result (paper, PDF, PS, etc.):",
-+ " The (a) and (b) labels should look almost the same and the (a) labels",
-+ " shouldn't appear as if they are stretched along X axis."};
-+
-+ public void init() {
-+ this.setLayout(new BorderLayout());
-+ add(new SimplePrint2(), BorderLayout.CENTER);
-+
-+ Sysout.createDialogWithInstructions(instructions);
-+
-+ }
-+
-+ public static class SimplePrint2 extends JPanel
-+ implements ActionListener, Printable {
-+ JLabel label1;
-+ JLabel label2;
-+ JButton printButton;
-+
-+
-+ public SimplePrint2() {
-+ setLayout(new BorderLayout());
-+ label1 = new JLabel("2a) a b c d e" +
-+ " ");
-+ label2 = new JLabel("2b) a b c d e");
-+
-+ Box p1 = new Box(BoxLayout.Y_AXIS);
-+ p1.add(label1);
-+ p1.add(label2);
-+ p1.add(new JLabel("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww") {
-+ String s = "3a) a b c d e ";
-+ @Override
-+ protected void paintComponent(Graphics g) {
-+ sun.swing.SwingUtilities2.drawChars(this, g, s.toCharArray(),
-+ 0, s.length(), 0, 15);
-+ }
-+ });
-+ p1.add(new JLabel("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww") {
-+ String s = "3b) a b c d e";
-+ @Override
-+ protected void paintComponent(Graphics g) {
-+ sun.swing.SwingUtilities2.drawChars(this, g, s.toCharArray(),
-+ 0, s.length(), 0, 15);
-+ }
-+ });
-+ p1.add(new JLabel("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww") {
-+ String s = "4a) a b c d e ";
-+ AttributedCharacterIterator it;
-+ {
-+ AttributedString as = new AttributedString(s);
-+ as.addAttribute(TextAttribute.FONT, getFont());
-+ as.addAttribute(TextAttribute.FOREGROUND, Color.RED, 3, 8);
-+ it = as.getIterator();
-+ }
-+ @Override
-+ protected void paintComponent(Graphics g) {
-+ sun.swing.SwingUtilities2.drawString(this, g, it, 0, 15);
-+ }
-+ });
-+
-+ p1.add(new JLabel("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww") {
-+ String s = "4b) a b c d e";
-+ AttributedCharacterIterator it;
-+ {
-+ AttributedString as = new AttributedString(s);
-+ as.addAttribute(TextAttribute.FONT, getFont());
-+ as.addAttribute(TextAttribute.FOREGROUND, Color.RED, 3, 8);
-+ it = as.getIterator();
-+ }
-+ @Override
-+ protected void paintComponent(Graphics g) {
-+ sun.swing.SwingUtilities2.drawString(this, g, it, 0, 15);
-+ }
-+ });
-+
-+ JPanel p2 = new JPanel();
-+ printButton = new JButton("Print");
-+ printButton.addActionListener(this);
-+ p2.add(printButton);
-+
-+ Container c = this;
-+ c.add(p1, BorderLayout.CENTER);
-+ c.add(p2, BorderLayout.SOUTH);
-+
-+ String[] data = {
-+ "1a) \u30aa\u30f3\u30e9\u30a4\u30f3\u6d88\u8fbc" +
-+ " ",
-+ "1b) \u30aa\u30f3\u30e9\u30a4\u30f3\u6d88\u8fbc"
-+ };
-+ JList l0 = new JList(data);
-+ l0.setVisibleRowCount(l0.getModel().getSize());
-+ JScrollPane jsp = new JScrollPane(l0);
-+ l0.setBorder(new LineBorder(Color.GRAY));
-+ c.add(jsp, BorderLayout.NORTH);
-+
-+ for (Component comp : new Component[]{label1, label2, printButton}) {
-+ comp.setFont(new Font("Monospaced", 0, 16));
-+ }
-+ }
-+
-+ public void actionPerformed(ActionEvent e) {
-+ PrinterJob job = PrinterJob.getPrinterJob();
-+ job.setPrintable(this);
-+ if (job.printDialog()) {
-+ try {
-+ job.print();
-+ } catch (PrinterException ex) {
-+ ex.printStackTrace();
-+ }
-+ }
-+ }
-+
-+ public int print(Graphics graphics,
-+ PageFormat pageFormat,
-+ int pageIndex)
-+ throws PrinterException {
-+ if (pageIndex >= 1) {
-+ return Printable.NO_SUCH_PAGE;
-+ }
-+
-+ this.paint(graphics);
-+ return Printable.PAGE_EXISTS;
-+ }
-+ }
-+}
-+
-+
-+/**
-+ * *************************************************
-+ * Standard Test Machinery
-+ * DO NOT modify anything below -- it's a standard
-+ * chunk of code whose purpose is to make user
-+ * interaction uniform, and thereby make it simpler
-+ * to read and understand someone else's test.
-+ * **************************************************
-+ */
-+class Sysout {
-+ private static TestDialog dialog;
-+
-+ public static void createDialogWithInstructions(String[] instructions) {
-+ dialog = new TestDialog(new Frame(), "Instructions");
-+ dialog.printInstructions(instructions);
-+ dialog.show();
-+ println("Any messages for the tester will display here.");
-+ }
-+
-+ public static void createDialog() {
-+ dialog = new TestDialog(new Frame(), "Instructions");
-+ String[] defInstr = {"Instructions will appear here. ", ""};
-+ dialog.printInstructions(defInstr);
-+ dialog.show();
-+ println("Any messages for the tester will display here.");
-+ }
-+
-+
-+ public static void printInstructions(String[] instructions) {
-+ dialog.printInstructions(instructions);
-+ }
-+
-+
-+ public static void println(String messageIn) {
-+ dialog.displayMessage(messageIn);
-+ }
-+
-+}// Sysout class
-+
-+
-+class TestDialog extends Dialog {
-+
-+ TextArea instructionsText;
-+ TextArea messageText;
-+ int maxStringLength = 80;
-+
-+ //DO NOT call this directly, go through Sysout
-+ public TestDialog(Frame frame, String name) {
-+ super(frame, name);
-+ int scrollBoth = TextArea.SCROLLBARS_BOTH;
-+ instructionsText = new TextArea("", 15, maxStringLength, scrollBoth);
-+ add("North", instructionsText);
-+
-+ messageText = new TextArea("", 5, maxStringLength, scrollBoth);
-+ add("South", messageText);
-+
-+ pack();
-+
-+ show();
-+ }// TestDialog()
-+
-+ //DO NOT call this directly, go through Sysout
-+ public void printInstructions(String[] instructions) {
-+ //Clear out any current instructions
-+ instructionsText.setText("");
-+
-+ //Go down array of instruction strings
-+
-+ String printStr, remainingStr;
-+ for (int i = 0; i < instructions.length; i++) {
-+ //chop up each into pieces maxSringLength long
-+ remainingStr = instructions[i];
-+ while (remainingStr.length() > 0) {
-+ //if longer than max then chop off first max chars to print
-+ if (remainingStr.length() >= maxStringLength) {
-+ //Try to chop on a word boundary
-+ int posOfSpace = remainingStr.
-+ lastIndexOf(' ', maxStringLength - 1);
-+
-+ if (posOfSpace <= 0) posOfSpace = maxStringLength - 1;
-+
-+ printStr = remainingStr.substring(0, posOfSpace + 1);
-+ remainingStr = remainingStr.substring(posOfSpace + 1);
-+ }
-+ //else just print
-+ else {
-+ printStr = remainingStr;
-+ remainingStr = "";
-+ }
-+
-+ instructionsText.append(printStr + "\n");
-+
-+ }// while
-+
-+ }// for
-+
-+ }//printInstructions()
-+
-+ //DO NOT call this directly, go through Sysout
-+ public void displayMessage(String messageIn) {
-+ messageText.append(messageIn + "\n");
-+ }
-+
-+}// TestDialog class
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/beans/XMLDecoder/8028054/Task.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,99 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.util.ArrayList;
-+import java.util.Enumeration;
-+import java.util.List;
-+import java.util.jar.JarEntry;
-+import java.util.jar.JarFile;
-+import java.util.regex.Matcher;
-+import java.util.regex.Pattern;
-+
-+abstract class Task<T> implements Runnable {
-+ private transient boolean working = true;
-+ private final List<T> methods;
-+ private final Thread thread;
-+
-+ Task(List<T> methods) {
-+ this.methods = methods;
-+ this.thread = new Thread(this);
-+ this.thread.start();
-+ }
-+
-+ boolean isAlive() {
-+ return this.thread.isAlive();
-+ }
-+
-+ boolean isWorking() {
-+ boolean working = this.working && this.thread.isAlive();
-+ this.working = false;
-+ return working;
-+ }
-+
-+ @Override
-+ public void run() {
-+ long time = -System.currentTimeMillis();
-+ for (T method : this.methods) {
-+ this.working = true;
-+ try {
-+ for (int i = 0; i < 100; i++) {
-+ process(method);
-+ }
-+ } catch (NoSuchMethodException ignore) {
-+ }
-+ }
-+ time += System.currentTimeMillis();
-+ print("thread done in " + time / 1000 + " seconds");
-+ }
-+
-+ protected abstract void process(T method) throws NoSuchMethodException;
-+
-+ static synchronized void print(Object message) {
-+ System.out.println(message);
-+ System.out.flush();
-+ }
-+
-+ static List<Class<?>> getClasses(int count) throws Exception {
-+ String resource = ClassLoader.getSystemClassLoader().getResource("java/lang/Object.class").toString();
-+
-+ Pattern pattern = Pattern.compile("jar:file:(.*)!.*");
-+ Matcher matcher = pattern.matcher(resource);
-+ matcher.matches();
-+ resource = matcher.group(1);
-+
-+ List<Class<?>> classes = new ArrayList<>();
-+ try (JarFile jarFile = new JarFile(resource)) {
-+ Enumeration<JarEntry> entries = jarFile.entries();
-+ while (entries.hasMoreElements()) {
-+ String name = entries.nextElement().getName();
-+ if (name.startsWith("java") && name.endsWith(".class")) {
-+ classes.add(Class.forName(name.substring(0, name.indexOf(".")).replace('/', '.')));
-+ if (count == classes.size()) {
-+ break;
-+ }
-+ }
-+ }
-+ }
-+ return classes;
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/beans/XMLDecoder/8028054/TestConstructorFinder.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,81 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import com.sun.beans.finder.ConstructorFinder;
-+
-+import java.lang.reflect.Constructor;
-+import java.util.ArrayList;
-+import java.util.Collections;
-+import java.util.List;
-+
-+/*
-+ * @test
-+ * @bug 8028054
-+ * @summary Tests that cached constructors have synchronized access
-+ * @author Sergey Malenkov
-+ * @compile -XDignore.symbol.file TestConstructorFinder.java
-+ * @run main TestConstructorFinder
-+ */
-+
-+public class TestConstructorFinder {
-+ public static void main(String[] args) throws Exception {
-+ List<Class<?>> classes = Task.getClasses(Integer.MAX_VALUE);
-+ List<Constructor> constructors = new ArrayList<>();
-+ for (Class<?> type : classes) {
-+ Collections.addAll(constructors, type.getConstructors());
-+ }
-+ Task.print("found " + constructors.size() + " constructors in " + classes.size() + " classes");
-+
-+ List<Task> tasks = new ArrayList<>();
-+ for (int i = 0; i < 50; i++) {
-+ tasks.add(new Task<Constructor>(constructors) {
-+ @Override
-+ protected void process(Constructor constructor) throws NoSuchMethodException {
-+ ConstructorFinder.findConstructor(constructor.getDeclaringClass(), constructor.getParameterTypes());
-+ }
-+ });
-+ }
-+ int alarm = 0;
-+ while (true) {
-+ int alive = 0;
-+ int working = 0;
-+ for (Task task : tasks) {
-+ if (task.isWorking()) {
-+ working++;
-+ alive++;
-+ } else if (task.isAlive()) {
-+ alive++;
-+ }
-+ }
-+ if (alive == 0) {
-+ break;
-+ }
-+ Task.print(working + " out of " + alive + " threads are working");
-+ if ((working == 0) && (++alarm == 10)) {
-+ Task.print("DEADLOCK DETECTED");
-+ System.exit(100);
-+ }
-+ Thread.sleep(1000);
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/beans/XMLDecoder/8028054/TestMethodFinder.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,81 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import com.sun.beans.finder.MethodFinder;
-+
-+import java.lang.reflect.Method;
-+import java.util.ArrayList;
-+import java.util.Collections;
-+import java.util.List;
-+
-+/*
-+ * @test
-+ * @bug 8028054
-+ * @summary Tests that cached methods have synchronized access
-+ * @author Sergey Malenkov
-+ * @compile -XDignore.symbol.file TestMethodFinder.java
-+ * @run main TestMethodFinder
-+ */
-+
-+public class TestMethodFinder {
-+ public static void main(String[] args) throws Exception {
-+ List<Class<?>> classes = Task.getClasses(4000);
-+ List<Method> methods = new ArrayList<>();
-+ for (Class<?> type : classes) {
-+ Collections.addAll(methods, type.getMethods());
-+ }
-+ Task.print("found " + methods.size() + " methods in " + classes.size() + " classes");
-+
-+ List<Task> tasks = new ArrayList<>();
-+ for (int i = 0; i < 50; i++) {
-+ tasks.add(new Task<Method>(methods) {
-+ @Override
-+ protected void process(Method method) throws NoSuchMethodException {
-+ MethodFinder.findMethod(method.getDeclaringClass(), method.getName(), method.getParameterTypes());
-+ }
-+ });
-+ }
-+ int alarm = 0;
-+ while (true) {
-+ int alive = 0;
-+ int working = 0;
-+ for (Task task : tasks) {
-+ if (task.isWorking()) {
-+ working++;
-+ alive++;
-+ } else if (task.isAlive()) {
-+ alive++;
-+ }
-+ }
-+ if (alive == 0) {
-+ break;
-+ }
-+ Task.print(working + " out of " + alive + " threads are working");
-+ if ((working == 0) && (++alarm == 10)) {
-+ Task.print("DEADLOCK DETECTED");
-+ System.exit(100);
-+ }
-+ Thread.sleep(1000);
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/beans/XMLEncoder/Test8027066.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,41 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8027066
-+ * @summary Tests that the same array can be encoded twice
-+ * @author Anton Nashatyrev
-+ */
-+public class Test8027066 extends AbstractTest<String[][]> {
-+ public static void main(String[] args) {
-+ new Test8027066().test(true);
-+ }
-+
-+ @Override
-+ protected String[][] getObject() {
-+ String[] strings = {"first", "second"};
-+ String[][] arrays = {strings, strings};
-+ return arrays;
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/Class/checkMemberAccess/CheckMemberAccess.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,123 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.io.IOException;
-+import java.lang.reflect.Method;
-+import java.nio.file.Files;
-+import java.nio.file.Path;
-+import java.nio.file.Paths;
-+
-+/*
-+ * @test
-+ * @bug 8021368
-+ * @summary SecurityManager.checkMemberAccess call should not resolve
-+ * and load other classes
-+ * @run main/othervm/policy=test.policy CheckMemberAccess
-+ */
-+
-+public class CheckMemberAccess {
-+ private static int count = 0;
-+ public static void main(String[] args) throws Exception {
-+ String testClasses = System.getProperty("test.classes", ".");
-+ // remove Foo class
-+ // the test will verify SecurityManager.checkMemberAccess should not
-+ // cause any class loading of implementation classes
-+ Path p = Paths.get(testClasses, "CheckMemberAccess$Foo.class");
-+ if (Files.exists(p)) {
-+ // Foo already deleted in rerun
-+ Files.delete(p);
-+ }
-+ // patch the checkMemberAcces_ method name
-+ patch(Paths.get(testClasses, "CheckMemberAccess$PrivateCheckMemberAccess.class"));
-+ patch(Paths.get(testClasses, "CheckMemberAccess$StaticCheckMemberAccess.class"));
-+
-+ test(new OverriddedCheckMemberAccess(), count+1);
-+ test(new NoOverriddedCheckMemberAccess(), count+1);
-+ test(new PrivateCheckMemberAccess(), count);
-+ test(new StaticCheckMemberAccess(), count);
-+ }
-+
-+ private static void patch(Path p) throws IOException {
-+ // s/checkMemberAcces_/checkMemberAccess
-+ byte[] bytes = Files.readAllBytes(p);
-+ int len = "Acces_".length();
-+ for (int i=0; i < bytes.length-len; i++) {
-+ if (bytes[i] == 'A' &&
-+ bytes[i+1] == 'c' &&
-+ bytes[i+2] == 'c' &&
-+ bytes[i+3] == 'e' &&
-+ bytes[i+4] == 's' &&
-+ bytes[i+5] == '_') {
-+ bytes[i+5] = 's';
-+ break;
-+ }
-+ }
-+ Files.write(p, bytes);
-+ }
-+
-+ public void findMe() {};
-+ public static void test(SecurityManager smgr, int expected) throws Exception {
-+ System.setSecurityManager(smgr);
-+ // this will trigger SecurityManager.checkMemberAccess to be called
-+ Method m = CheckMemberAccess.class.getMethod("findMe", new Class<?>[0]);
-+ if (count != expected) {
-+ throw new RuntimeException(smgr.getClass() + ": " + count + " != " + expected);
-+ }
-+ }
-+
-+ static class OverriddedCheckMemberAccess extends SecurityManager {
-+ @Override
-+ public void checkMemberAccess(Class<?> clazz, int which) {
-+ System.out.println("OverriddedCheckMemberAccess.checkMemberAccess called");
-+ count++;
-+ }
-+ // implementation-specific class should not be loaded when
-+ // this.checkMemberAccess is called
-+ public Foo foo() {
-+ return null;
-+ }
-+ }
-+ static class NoOverriddedCheckMemberAccess extends OverriddedCheckMemberAccess {
-+ }
-+ static class PrivateCheckMemberAccess extends SecurityManager {
-+ private void checkMemberAcces_(Class<?> clazz, int which) {
-+ throw new RuntimeException("should not reach here");
-+ }
-+ // implementation-specific class should not be loaded when
-+ // this.checkMemberAccess is called
-+ public Foo foo() {
-+ return null;
-+ }
-+ }
-+ static class StaticCheckMemberAccess extends SecurityManager {
-+ public static void checkMemberAcces_(Class<?> clazz, int which) {
-+ throw new RuntimeException("should not reach here");
-+ }
-+ // implementation-specific class should not be loaded when
-+ // this.checkMemberAccess is called
-+ public Foo foo() {
-+ return null;
-+ }
-+ }
-+ static class Foo {}
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/Class/checkMemberAccess/test.policy Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,6 @@
-+grant {
-+ permission java.lang.RuntimePermission "createSecurityManager";
-+ permission java.lang.RuntimePermission "setSecurityManager";
-+ permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
-+ permission java.util.PropertyPermission "*", "read";
-+};
---- ./jdk/test/java/lang/ProcessBuilder/Basic.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/ProcessBuilder/Basic.java Wed May 07 19:26:47 2014 -0700
-@@ -296,11 +296,15 @@
- System.exit(5);
- System.err.print("standard error");
- System.out.print("standard output");
-- } else if (action.equals("testInheritIO")) {
-+ } else if (action.equals("testInheritIO")
-+ || action.equals("testRedirectInherit")) {
- List<String> childArgs = new ArrayList<String>(javaChildArgs);
- childArgs.add("testIO");
- ProcessBuilder pb = new ProcessBuilder(childArgs);
-- pb.inheritIO();
-+ if (action.equals("testInheritIO"))
-+ pb.inheritIO();
-+ else
-+ redirectIO(pb, INHERIT, INHERIT, INHERIT);
- ProcessResults r = run(pb);
- if (! r.out().equals(""))
- System.exit(7);
-@@ -555,9 +559,10 @@
- System.getProperty("java.class.path");
-
- private static final List<String> javaChildArgs =
-- Arrays.asList(new String[]
-- { javaExe, "-classpath", absolutifyPath(classpath),
-- "Basic$JavaChild"});
-+ Arrays.asList(javaExe,
-+ "-XX:+DisplayVMOutputToStderr",
-+ "-classpath", absolutifyPath(classpath),
-+ "Basic$JavaChild");
-
- private static void testEncoding(String encoding, String tested) {
- try {
-@@ -989,10 +994,10 @@
- // Note that this requires __FOUR__ nested JVMs involved in one test,
- // if you count the harness JVM.
- //----------------------------------------------------------------
-- {
-+ for (String testName : new String[] { "testInheritIO", "testRedirectInherit" } ) {
- redirectIO(pb, PIPE, PIPE, PIPE);
- List<String> command = pb.command();
-- command.set(command.size() - 1, "testInheritIO");
-+ command.set(command.size() - 1, testName);
- Process p = pb.start();
- new PrintStream(p.getOutputStream()).print("standard input");
- p.getOutputStream().close();
-@@ -1593,8 +1598,8 @@
- javaExe));
- list.add("ArrayOOME");
- ProcessResults r = run(new ProcessBuilder(list));
-- check(r.out().contains("java.lang.OutOfMemoryError:"));
-- check(r.out().contains(javaExe));
-+ check(r.err().contains("java.lang.OutOfMemoryError:"));
-+ check(r.err().contains(javaExe));
- check(r.err().contains(System.getProperty("java.version")));
- equal(r.exitValue(), 1);
- } catch (Throwable t) { unexpected(t); }
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/ProcessBuilder/InheritIO/InheritIO.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,47 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import static java.lang.ProcessBuilder.Redirect.*;
-+
-+class InheritIO {
-+
-+ public static class TestInheritIO {
-+ public static void main(String args[]) throws Throwable {
-+ int err = new ProcessBuilder(args).inheritIO().start().waitFor();
-+ System.err.print("exit value: " + err);
-+ System.exit(err);
-+ }
-+ }
-+
-+ public static class TestRedirectInherit {
-+ public static void main(String args[]) throws Throwable {
-+ int err = new ProcessBuilder(args)
-+ .redirectInput(INHERIT)
-+ .redirectOutput(INHERIT)
-+ .redirectError(INHERIT)
-+ .start().waitFor();
-+ System.err.print("exit value: " + err);
-+ System.exit(err);
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/ProcessBuilder/InheritIO/InheritIO.sh Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,81 @@
-+#
-+# Copyright (c) 2013, 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
-+# under the terms of the GNU General Public License version 2 only, as
-+# published by the Free Software Foundation.
-+#
-+# This code is distributed in the hope that it will be useful, but WITHOUT
-+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+# version 2 for more details (a copy is included in the LICENSE file that
-+# accompanied this code).
-+#
-+# You should have received a copy of the GNU General Public License version
-+# 2 along with this work; if not, write to the Free Software Foundation,
-+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+#
-+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+# or visit www.oracle.com if you need additional information or have any
-+# questions.
-+#
-+
-+# @test
-+# @bug 8023130
-+# @summary (process) ProcessBuilder#inheritIO does not work on Windows
-+# @run shell InheritIO.sh
-+
-+if [ "x${TESTSRC}" = "x" ]; then
-+ echo "TESTSRC not set. Test cannot execute. Failed."
-+ exit 1
-+fi
-+
-+if [ "x${TESTJAVA}" = "x" ]; then
-+ echo "TESTJAVA not set. Test cannot execute. Failed."
-+ exit 1
-+fi
-+
-+
-+JAVA="${TESTJAVA}/bin/java"
-+JAVAC="${TESTJAVA}/bin/javac"
-+
-+cp -f ${TESTSRC}/InheritIO.java .
-+
-+# compile the class ourselves, so this can run as a standalone test
-+
-+${JAVAC} InheritIO.java
-+RES="$?"
-+if [ ${RES} != 0 ]; then
-+ echo 'FAIL: Cannot compile InheritIO.java'
-+ exit ${RES}
-+fi
-+
-+
-+for TEST_NAME in TestInheritIO TestRedirectInherit
-+do
-+ ${JAVA} ${TESTVMOPTS} -classpath . \
-+ 'InheritIO$'${TEST_NAME} printf message > stdout.txt 2> stderr.txt
-+
-+ RES="$?"
-+ if [ ${RES} != 0 ]; then
-+ echo 'FAIL: InheritIO$'${TEST_NAME}' failed with '${RES}
-+ exit ${RES}
-+ fi
-+
-+ OUT_EXPECTED='message'
-+ OUT_RECEIVED=`cat stdout.txt`
-+ if [ "x${OUT_RECEIVED}" != "x${OUT_EXPECTED}" ]; then
-+ echo "FAIL: unexpected '${OUT_RECEIVED}' in stdout"
-+ exit 1
-+ fi
-+
-+ ERR_EXPECTED='exit value: 0'
-+ ERR_RECEIVED=`cat stderr.txt`
-+ if [ "x${ERR_RECEIVED}" != "x${ERR_EXPECTED}" ]; then
-+ echo "FAIL: unexpected '${ERR_RECEIVED}' in stderr"
-+ exit 1
-+ fi
-+done
-+
-+echo 'PASS: InheritIO works as expected'
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/ProcessBuilder/InheritIOEHandle.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,147 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test
-+ * @bug 7147084
-+ * @run main/othervm InheritIOEHandle
-+ * @summary inherit IOE handles and MS CreateProcess limitations (kb315939)
-+ */
-+
-+import java.io.BufferedReader;
-+import java.io.File;
-+import java.io.IOException;
-+import java.io.InputStreamReader;
-+
-+public class InheritIOEHandle {
-+ private static enum APP {
-+ B, C;
-+ }
-+ private static File stopC = new File(".\\StopC.txt");
-+ private static String SIGNAL = "After call child process";
-+ private static String JAVA_EXE = System.getProperty("java.home")
-+ + File.separator + "bin"
-+ + File.separator + "java";
-+
-+ private static String[] getCommandArray(String processName) {
-+ String[] cmdArray = {
-+ JAVA_EXE,
-+ "-cp",
-+ System.getProperty("java.class.path"),
-+ InheritIOEHandle.class.getName(),
-+ processName
-+ };
-+ return cmdArray;
-+ }
-+
-+ public static void main(String[] args) throws Exception {
-+ if (!System.getProperty("os.name").startsWith("Windows")) {
-+ return;
-+ }
-+
-+ if (args.length > 0) {
-+ APP app = APP.valueOf(args[0]);
-+ switch (app) {
-+ case B:
-+ performB();
-+ break;
-+ case C:
-+ performC();
-+ break;
-+ }
-+ return;
-+ }
-+ performA();
-+ }
-+
-+ private static void performA() {
-+ try {
-+ stopC.delete();
-+
-+ ProcessBuilder builder = new ProcessBuilder(
-+ getCommandArray(APP.B.name()));
-+ builder.redirectErrorStream(true);
-+
-+ Process process = builder.start();
-+
-+ process.getOutputStream().close();
-+ process.getErrorStream().close();
-+
-+ try (BufferedReader in = new BufferedReader( new InputStreamReader(
-+ process.getInputStream(), "utf-8")))
-+ {
-+ String result;
-+ while ((result = in.readLine()) != null) {
-+ if (!SIGNAL.equals(result)) {
-+ throw new Error("Catastrophe in process B! Bad output.");
-+ }
-+ }
-+ }
-+
-+ // If JDK-7147084 is not fixed that point is unreachable.
-+
-+ // write signal file
-+ stopC.createNewFile();
-+
-+ System.err.println("Read stream finished.");
-+ } catch (IOException ex) {
-+ throw new Error("Catastrophe in process A!", ex);
-+ }
-+ }
-+
-+ private static void performB() {
-+ try {
-+ ProcessBuilder builder = new ProcessBuilder(
-+ getCommandArray(APP.C.name()));
-+
-+ Process process = builder.start();
-+
-+ process.getInputStream().close();
-+ process.getOutputStream().close();
-+ process.getErrorStream().close();
-+
-+ System.out.println(SIGNAL);
-+
-+ // JDK-7147084 subject:
-+ // Process C inherits the [System.out] handle and
-+ // handle close in B does not finalize the streaming for A.
-+ // (handle reference count > 1).
-+ } catch (IOException ex) {
-+ throw new Error("Catastrophe in process B!", ex);
-+ }
-+ }
-+
-+ private static void performC() {
-+ // If JDK-7147084 is not fixed the loop is 5min long.
-+ for (int i = 0; i < 5*60; ++i) {
-+ try {
-+ Thread.sleep(1000);
-+ // check for sucess
-+ if (stopC.exists())
-+ break;
-+ } catch (InterruptedException ex) {
-+ // that is ok. Longer sleep - better effect.
-+ }
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/ProcessBuilder/SiblingIOEHandle.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,205 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test
-+ * @bug 6921885
-+ * @run main/othervm SiblingIOEHandle
-+ * @summary inherit IOE handles and MS CreateProcess limitations (kb315939)
-+ */
-+
-+import java.io.BufferedReader;
-+import java.io.File;
-+import java.io.IOException;
-+import java.io.InputStreamReader;
-+import java.util.concurrent.BrokenBarrierException;
-+import java.util.concurrent.CyclicBarrier;
-+
-+public class SiblingIOEHandle {
-+ private static enum APP {
-+ B, C;
-+ }
-+ private static File stopC = new File(".\\StopCs.txt");
-+ private static String SIGNAL = "B child reported.";
-+ private static String JAVA_EXE = System.getProperty("java.home")
-+ + File.separator + "bin"
-+ + File.separator + "java";
-+
-+ private static String[] getCommandArray(String processName) {
-+ String[] cmdArray = {
-+ JAVA_EXE,
-+ "-cp",
-+ System.getProperty("java.class.path"),
-+ SiblingIOEHandle.class.getName(),
-+ processName
-+ };
-+ return cmdArray;
-+ }
-+
-+ public static void main(String[] args) {
-+ if (!System.getProperty("os.name").startsWith("Windows")) {
-+ return;
-+ }
-+
-+ if (args.length > 0) {
-+ APP app = APP.valueOf(args[0]);
-+ switch (app) {
-+ case B:
-+ performB();
-+ break;
-+ case C:
-+ performC();
-+ break;
-+ }
-+ return;
-+ }
-+ performA(true);
-+ performA(false);
-+ }
-+
-+ static boolean procClaunched = false;
-+
-+ private static void waitAbit() {
-+ try {
-+ Thread.sleep(0);
-+ } catch (InterruptedException ex) {
-+ // that was long enough
-+ }
-+ }
-+ private static boolean waitBarrier(CyclicBarrier barrier) {
-+ while (true) try {
-+ barrier.await();
-+ return true;
-+ } catch (InterruptedException ex) {
-+ continue;
-+ } catch (BrokenBarrierException ex) {
-+ ex.printStackTrace();
-+ return false;
-+ }
-+ }
-+
-+ private static void performA(boolean fileOut) {
-+ try {
-+ stopC.delete();
-+ ProcessBuilder builderB = new ProcessBuilder(
-+ getCommandArray(APP.B.name()));
-+
-+ File outB = null;
-+ if (fileOut) {
-+ outB = new File("outB.txt");
-+ builderB.redirectOutput(outB);
-+ }
-+ builderB.redirectErrorStream(true);
-+
-+ final CyclicBarrier barrier = new CyclicBarrier(2);
-+ Thread procCRunner = new Thread(new Runnable() {
-+ @Override public void run() {
-+ try {
-+ if (waitBarrier(barrier)) {
-+ waitAbit();
-+ // Run process C next to B ASAP to make an attempt
-+ // to capture the B-process IOE handles in C process.
-+ Runtime.getRuntime().exec(getCommandArray(APP.C.name()));
-+ procClaunched = true;
-+ }
-+ } catch (IOException ex) {
-+ ex.printStackTrace();
-+ }
-+ }
-+ });
-+ procCRunner.start();
-+
-+
-+ if (!waitBarrier(barrier)) {
-+ throw new Error("Catastrophe in process A! Synchronization failed.");
-+ }
-+ // Run process B first.
-+ Process processB = builderB.start();
-+
-+ while (true) try {
-+ procCRunner.join();
-+ break;
-+ } catch (InterruptedException ex) {
-+ continue;
-+ }
-+
-+ if (!procClaunched) {
-+ throw new Error("Catastrophe in process A! C was not launched.");
-+ }
-+
-+ processB.getOutputStream().close();
-+ processB.getErrorStream().close();
-+
-+ if (fileOut) {
-+ try {
-+ processB.waitFor();
-+ } catch (InterruptedException ex) {
-+ throw new Error("Catastrophe in process B! B hung up.");
-+ }
-+ System.err.println("Trying to delete [outB.txt].");
-+ if (!outB.delete()) {
-+ throw new Error("Greedy brother C deadlock! File share.");
-+ }
-+ System.err.println("Succeeded in delete [outB.txt].");
-+ } else {
-+ System.err.println("Read stream start.");
-+ try (BufferedReader in = new BufferedReader( new InputStreamReader(
-+ processB.getInputStream(), "utf-8")))
-+ {
-+ String result;
-+ while ((result = in.readLine()) != null) {
-+ if (!SIGNAL.equals(result)) {
-+ throw new Error("Catastrophe in process B! Bad output.");
-+ }
-+ }
-+ }
-+ System.err.println("Read stream finished.");
-+ }
-+ // If JDK-6921885 is not fixed that point is unreachable.
-+ // Test timeout exception.
-+
-+ // write signal file to stop C process.
-+ stopC.createNewFile();
-+ } catch (IOException ex) {
-+ throw new Error("Catastrophe in process A!", ex);
-+ }
-+ }
-+
-+ private static void performB() {
-+ System.out.println(SIGNAL);
-+ }
-+
-+ private static void performC() {
-+ // If JDK-7147084 is not fixed the loop is 5min long.
-+ for (int i = 0; i < 5*60; ++i) {
-+ try {
-+ Thread.sleep(1000);
-+ // check for sucess
-+ if (stopC.exists())
-+ break;
-+ } catch (InterruptedException ex) {
-+ // that is ok. Longer sleep - better effect.
-+ }
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/Runtime/exec/CloseRace.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,146 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test
-+ * @bug 8024521
-+ * @summary Closing ProcessPipeInputStream at the time the process exits is racy
-+ * and leads to the data corruption.
-+ * @library /lib/testlibrary
-+ * @run main/othervm/timeout=80 CloseRace
-+ */
-+
-+/**
-+ * This test has a little chance to catch the race during the given default
-+ * time gap of 20 seconds. To increase the time gap, set the system property
-+ * CloseRaceTimeGap=N to the number of seconds.
-+ * Jtreg's timeoutFactor should also be set appropriately.
-+ *
-+ * For example, to run the test for 10 minutes:
-+ * > jtreg \
-+ * -testjdk:$(PATH_TO_TESTED_JDK) \
-+ * -timeoutFactor:10 \
-+ * -DCloseRaceTimeGap=600 \
-+ * $(PATH_TO_TESTED_JDK_SOURCE)/test/java/lang/Runtime/exec/CloseRace.java
-+ */
-+
-+import java.io.*;
-+import java.nio.file.Files;
-+import java.nio.file.Path;
-+import java.nio.file.Paths;
-+import java.util.ArrayList;
-+import java.util.Arrays;
-+import java.util.LinkedList;
-+import java.util.List;
-+import jdk.testlibrary.OutputAnalyzer;
-+import static jdk.testlibrary.ProcessTools.*;
-+
-+public class CloseRace {
-+
-+ public static void main(String args[]) throws Exception {
-+ ProcessBuilder pb = createJavaProcessBuilder("-Xmx64M", "CloseRace$Child",
-+ System.getProperty("CloseRaceTimeGap", "20"));
-+ OutputAnalyzer oa = new OutputAnalyzer(pb.start());
-+ oa.stderrShouldNotContain("java.lang.OutOfMemoryError");
-+ }
-+
-+ public static class Child {
-+ private static final String BIG_FILE = "bigfile";
-+ private static final String SMALL_FILE = "smallfile";
-+ private static int timeGap = 20; // seconds
-+
-+ public static void main(String args[]) throws Exception {
-+ if (args.length > 0) {
-+ try {
-+ timeGap = Integer.parseInt(args[0]);
-+ timeGap = Math.max(timeGap, 10);
-+ timeGap = Math.min(timeGap, 10 * 60 * 60); // no more than 10 hours
-+ } catch (NumberFormatException ignore) {}
-+ }
-+ try (RandomAccessFile f = new RandomAccessFile(BIG_FILE, "rw")) {
-+ f.setLength(1024 * 1024 * 1024); // 1 Gb, greater than max heap size
-+ }
-+ try (FileOutputStream fs = new FileOutputStream(SMALL_FILE);
-+ PrintStream ps = new PrintStream(fs)) {
-+ for (int i = 0; i < 128; ++i)
-+ ps.println("line of text");
-+ }
-+
-+ List<Thread> threads = new LinkedList<>();
-+ for (int i = 0; i < 99; ++i) {
-+ Thread t = new Thread (new OpenLoop());
-+ t.start();
-+ threads.add(t);
-+ }
-+ Thread t2 = new Thread (new ExecLoop());
-+ t2.start();
-+ threads.add(t2);
-+
-+ Thread.sleep(timeGap);
-+
-+ for (Thread t : threads) {
-+ t.interrupt();
-+ t.join();
-+ }
-+ }
-+
-+ private static class OpenLoop implements Runnable {
-+ public void run() {
-+ final Path bigFilePath = Paths.get(BIG_FILE);
-+ while (!Thread.interrupted()) {
-+ try (InputStream in = Files.newInputStream(bigFilePath)) {
-+ // Widen the race window by sleeping 1ms
-+ Thread.sleep(1);
-+ } catch (InterruptedException e) {
-+ break;
-+ } catch (Exception e) {
-+ System.err.println(e);
-+ }
-+ }
-+ }
-+ }
-+
-+ private static class ExecLoop implements Runnable {
-+ public void run() {
-+ List<String> command = new ArrayList<>(
-+ Arrays.asList("/bin/cat", SMALL_FILE));
-+ while (!Thread.interrupted()) {
-+ try {
-+ ProcessBuilder builder = new ProcessBuilder(command);
-+ final Process process = builder.start();
-+ InputStream is = process.getInputStream();
-+ InputStreamReader isr = new InputStreamReader(is);
-+ BufferedReader br = new BufferedReader(isr);
-+ while (br.readLine() != null) {}
-+ process.waitFor();
-+ isr.close();
-+ } catch (InterruptedException e) {
-+ break;
-+ } catch (Exception e) {
-+ System.err.println(e);
-+ }
-+ }
-+ }
-+ }
-+ }
-+}
---- ./jdk/test/java/lang/String/ToLowerCase.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/String/ToLowerCase.java Wed May 07 19:26:47 2014 -0700
-@@ -23,7 +23,7 @@
-
- /*
- @test
-- @bug 4217441 4533872 4900935
-+ @bug 4217441 4533872 4900935 8020037
- @summary toLowerCase should lower-case Greek Sigma correctly depending
- on the context (final/non-final). Also it should handle
- Locale specific (lt, tr, and az) lowercasings and supplementary
-@@ -69,10 +69,11 @@
- test("\u00CD", Locale.US, "\u00ED");
- test("\u0128", Locale.US, "\u0129");
-
-- // I-dot tests (Turkish and Azeri)
-+ // I-dot tests
- test("\u0130", turkish, "i");
- test("\u0130", az, "i");
-- test("\u0130", Locale.US, "i\u0307");
-+ test("\u0130", lt, "i");
-+ test("\u0130", Locale.US, "i");
-
- // Remove dot_above in the sequence I + dot_above (Turkish and Azeri)
- test("I\u0307", turkish, "i");
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/System/MacEncoding/ExpectedEncoding.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,66 @@
-+/*
-+ * Copyright (c) 2012, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * Check that the value of file.encoding and sun.jnu.encoding match the expected
-+ * values passed in on the command-line.
-+ */
-+public class ExpectedEncoding {
-+ public static void main(String[] args) {
-+ boolean failed = false;
-+ if (args.length != 2) {
-+ System.out.println("Usage:");
-+ System.out.println("$ java ExpectedEncoding <expected file.encoding> <expected sun.jnu.encoding>");
-+ System.out.println("$ use \"skip\" to skip checking property's value");
-+ System.exit(1);
-+ }
-+ String expectFileEnc = args[0];
-+ String expectSunJnuEnc = args[1];
-+
-+ String fileEnc = System.getProperty("file.encoding");
-+ String jnuEnc = System.getProperty("sun.jnu.encoding");
-+
-+ if ("skip".equals(expectFileEnc)) {
-+ System.err.println("Expected file.encoding is \"skip\", ignoring");
-+ } else {
-+ System.err.println("Expected file.encoding: " + expectFileEnc);
-+ System.err.println("Actual file.encoding: " + fileEnc);
-+ if (fileEnc == null || !fileEnc.equals(expectFileEnc)) {
-+ failed = true;
-+ }
-+ }
-+ if ("skip".equals(expectSunJnuEnc)) {
-+ System.err.println("Expected sun.jnu.encoding is \"skip\", ignoring");
-+ } else {
-+ if (jnuEnc == null || !jnuEnc.equals(expectSunJnuEnc)) {
-+ System.err.println("Expected sun.jnu.encoding: " + expectSunJnuEnc);
-+ System.err.println("Actual sun.jnu.encoding: " + jnuEnc);
-+ failed = true;
-+ }
-+ }
-+
-+ if (failed) {
-+ throw new RuntimeException("Test Failed");
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/System/MacEncoding/MacJNUEncoding.sh Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,96 @@
-+#!/bin/sh
-+
-+#
-+# Copyright (c) 2012 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
-+# under the terms of the GNU General Public License version 2 only, as
-+# published by the Free Software Foundation.
-+#
-+# This code is distributed in the hope that it will be useful, but WITHOUT
-+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+# version 2 for more details (a copy is included in the LICENSE file that
-+# accompanied this code).
-+#
-+# You should have received a copy of the GNU General Public License version
-+# 2 along with this work; if not, write to the Free Software Foundation,
-+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+#
-+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+# or visit www.oracle.com if you need additional information or have any
-+# questions.
-+
-+# @test
-+# @bug 8003228
-+# @summary Test the value of sun.jnu.encoding on Mac
-+# @author Brent Christian
-+#
-+# @run shell MacJNUEncoding.sh
-+
-+# Only run test on Mac
-+OS=`uname -s`
-+case "$OS" in
-+ Darwin ) ;;
-+ * )
-+ exit 0
-+ ;;
-+esac
-+
-+if [ "${TESTJAVA}" = "" ]
-+then
-+ echo "TESTJAVA not set. Test cannot execute. Failed."
-+ exit 1
-+fi
-+
-+if [ "${TESTSRC}" = "" ]
-+then
-+ echo "TESTSRC not set. Test cannot execute. Failed."
-+ exit 1
-+fi
-+
-+if [ "${TESTCLASSES}" = "" ]
-+then
-+ echo "TESTCLASSES not set. Test cannot execute. Failed."
-+ exit 1
-+fi
-+
-+JAVAC="${TESTJAVA}"/bin/javac
-+JAVA="${TESTJAVA}"/bin/java
-+
-+echo "Building test classes..."
-+"$JAVAC" -d "${TESTCLASSES}" "${TESTSRC}"/ExpectedEncoding.java
-+
-+echo ""
-+echo "Running test for C locale"
-+export LANG=C
-+export LC_ALL=C
-+"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding US-ASCII UTF-8
-+result1=$?
-+
-+echo ""
-+echo "Running test for en_US.UTF-8 locale"
-+export LANG=en_US.UTF-8
-+export LC_ALL=en_US.UTF-8
-+"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding UTF-8 UTF-8
-+result2=$?
-+
-+echo ""
-+echo "Cleanup"
-+rm ${TESTCLASSES}/ExpectedEncoding.class
-+
-+if [ ${result1} -ne 0 ] ; then
-+ echo "Test failed for C locale"
-+ echo " LANG=\"${LANG}\""
-+ echo " LC_ALL=\"${LC_ALL}\""
-+ exit ${result1}
-+fi
-+if [ ${result2} -ne 0 ] ; then
-+ echo "Test failed for en_US.UTF-8 locale"
-+ echo " LANG=\"${LANG}\""
-+ echo " LC_ALL=\"${LC_ALL}\""
-+ exit ${result2}
-+fi
-+exit 0
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/System/MacEncoding/TestFileEncoding.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,168 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.util.*;
-+
-+/*
-+ * @test
-+ * @bug 8011194
-+ * @summary Test value of file.encoding for corresponding value of LANG, etc
-+ * @library ../../../../tools/launcher/ ../
-+ * @build TestHelper TestFileEncoding ExpectedEncoding
-+ * @run main TestFileEncoding UTF-8
-+ * @run main/othervm -Dfile.encoding=MyEncoding -DuserEncoding=MyEncoding TestFileEncoding MyEncoding
-+ * @run main TestFileEncoding UTF-8 en_US.UTF-8
-+ * @run main/othervm -Dfile.encoding=MyEncoding -DuserEncoding=MyEncoding TestFileEncoding MyEncoding en_US.UTF-8
-+ * @run main TestFileEncoding US-ASCII C
-+ * @run main/othervm -Dfile.encoding=MyEncoding -DuserEncoding=MyEncoding TestFileEncoding MyEncoding C
-+ * @author Brent Christian
-+ */
-+
-+/**
-+ * Setup the environment and run a sub-test to check the expected value of
-+ * file.encoding, based on the value(s) of encoding-related environment vars
-+ * (LANG, LC_ALL, LC_CTYPE).
-+ *
-+ * The first argument (required) is the expected value of the
-+ * file.encoding System property.
-+ * The second argument (optional) is the value to set to the LANG/etc env vars.
-+ */
-+public class TestFileEncoding {
-+ private static final String TEST_NAME = "ExpectedEncoding";
-+
-+ private String expectedEncoding; // Expected value for file.encoding
-+ private String langVar = null; // Value to set for LANG, etc
-+
-+ private static Set<String> envToRm = new HashSet<>(3);
-+ static {
-+ // Take these vars out of the test's run environment, possibly adding
-+ // our own value back in.
-+ envToRm.add("LANG");
-+ envToRm.add("LC_ALL");
-+ envToRm.add("LC_CTYPE");
-+ }
-+
-+ public TestFileEncoding(String expectedEncoding) {
-+ this.expectedEncoding = expectedEncoding;
-+ }
-+
-+ public TestFileEncoding(String expectedEncoding, String langVar) {
-+ this.expectedEncoding = expectedEncoding;
-+ this.langVar = langVar;
-+ }
-+
-+ /*
-+ * Launch ExpectedEncoding with the given parameters, check for the
-+ * expected file.encoding.
-+ */
-+ private void run() {
-+ String testClasses = System.getProperty("test.classes");
-+
-+ // Pick up VM opts
-+ String vmOptsStr = System.getProperty("test.vm.opts");
-+ System.out.println("test.vm.opts: " + vmOptsStr);
-+ String[] vmOpts = new String[0];
-+ if (vmOptsStr != null && !"".equals(vmOptsStr)) {
-+ vmOpts = vmOptsStr.split(" ");
-+ System.out.println("found vm options:");
-+ for (String opt : vmOpts) {
-+ System.out.println(" <" + opt + ">");
-+ }
-+ }
-+
-+ // Build java cmd
-+ LinkedList<String> cmdList = new LinkedList<>();
-+ cmdList.add(TestHelper.javaCmd);
-+ for (String vmOpt : vmOpts) {
-+ if (vmOpt != null && !vmOpt.equals("")) {
-+ cmdList.add(vmOpt);
-+ }
-+ }
-+
-+ // See if the user specified a file.encoding that we should pass through
-+ String userEncoding = System.getProperty("userEncoding");
-+ if (userEncoding != null) {
-+ cmdList.add("-Dfile.encoding="+userEncoding);
-+ }
-+
-+ cmdList.add("-cp");
-+ cmdList.add(testClasses);
-+ cmdList.add(TEST_NAME);
-+ cmdList.add(expectedEncoding);
-+ cmdList.add("skip"); // ignore sun.jnu.encoding for this test
-+
-+ String cmdArray[] = new String[cmdList.size()];
-+ cmdList.toArray(cmdArray);
-+
-+ // Run the test(s)
-+ if (langVar == null) {
-+ System.out.println("TestFileEncoding: Running with no envvars set");
-+ TestHelper.TestResult tr = TestHelper.doExec(null, envToRm,
-+ cmdArray);
-+ checkResult(tr);
-+ } else {
-+ runWithEnvVar("LANG", cmdArray);
-+ runWithEnvVar("LC_ALL", cmdArray);
-+ runWithEnvVar("LC_CTYPE", cmdArray);
-+ }
-+ }
-+
-+ /*
-+ * Run the test, setting the environment named by envVarName to the value
-+ * in langVar.
-+ */
-+ private void runWithEnvVar(String envVarName, String[] cmdArray) {
-+ Map<String, String> envToAdd = new HashMap<>(1);
-+ TestHelper.TestResult tr = null;
-+
-+ System.out.println("TestFileEncoding: Running with " + envVarName + "=" + langVar);
-+ envToAdd.put(envVarName, langVar);
-+ tr = TestHelper.doExec(envToAdd, envToRm, cmdArray);
-+ checkResult(tr);
-+ }
-+
-+ private void checkResult(TestHelper.TestResult tr) {
-+ System.out.println(tr);
-+ if (!tr.isOK()) {
-+ throw new RuntimeException("TEST FAILED: !tr.isOK()");
-+ }
-+ }
-+
-+ public static void main(String[] args) {
-+ TestFileEncoding cfe = null;
-+ if (!TestHelper.isMacOSX) {
-+ System.out.println("Test is currently only for Mac OS X - pass.");
-+ return;
-+ }
-+ if (args.length == 1) {
-+ cfe = new TestFileEncoding(args[0]);
-+ } else if (args.length == 2) {
-+ cfe = new TestFileEncoding(args[0], args[1]);
-+ } else {
-+ System.out.println("Usage: TestFileEncoding <expected file.encoding>");
-+ System.out.println(" TestFileEncoding <expected file.encoding> <value for LANG/etc env var>");
-+ return;
-+ }
-+ cfe.run();
-+ }
-+}
---- ./jdk/test/java/lang/System/MacJNUEncoding/ExpectedEncoding.java Tue Mar 18 12:35:25 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,56 +0,0 @@
--/*
-- * Copyright (c) 2012, 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
-- * under the terms of the GNU General Public License version 2 only, as
-- * published by the Free Software Foundation.
-- *
-- * This code is distributed in the hope that it will be useful, but WITHOUT
-- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- * version 2 for more details (a copy is included in the LICENSE file that
-- * accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License version
-- * 2 along with this work; if not, write to the Free Software Foundation,
-- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-- *
-- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-- * or visit www.oracle.com if you need additional information or have any
-- * questions.
-- */
--
--/**
-- * Check that the value of file.encoding and sun.jnu.encoding match the expected
-- * values passed in on the command-line.
-- */
--public class ExpectedEncoding {
-- public static void main(String[] args) {
-- boolean failed = false;
-- if (args.length != 2) {
-- System.out.println("Usage:");
-- System.out.println("$ java ExpectedEncoding <expected file.encoding> <expected sun.jnu.encoding>");
-- System.exit(1);
-- }
-- String expectFileEnc = args[0];
-- String expectSunJnuEnc = args[1];
--
-- String fileEnc = System.getProperty("file.encoding");
-- String jnuEnc = System.getProperty("sun.jnu.encoding");
--
-- if (fileEnc == null || !fileEnc.equals(expectFileEnc)) {
-- System.err.println("Expected file.encoding: " + expectFileEnc);
-- System.err.println("Actual file.encoding: " + fileEnc);
-- failed = true;
-- }
-- if (jnuEnc == null || !jnuEnc.equals(expectSunJnuEnc)) {
-- System.err.println("Expected sun.jnu.encoding: " + expectSunJnuEnc);
-- System.err.println("Actual sun.jnu.encoding: " + jnuEnc);
-- failed = true;
-- }
-- if (failed) {
-- throw new RuntimeException("Test Failed");
-- }
-- }
--}
---- ./jdk/test/java/lang/System/MacJNUEncoding/MacJNUEncoding.sh Tue Mar 18 12:35:25 2014 -0700
-+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
-@@ -1,96 +0,0 @@
--#!/bin/sh
--
--#
--# Copyright (c) 2012 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
--# under the terms of the GNU General Public License version 2 only, as
--# published by the Free Software Foundation.
--#
--# This code is distributed in the hope that it will be useful, but WITHOUT
--# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
--# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
--# version 2 for more details (a copy is included in the LICENSE file that
--# accompanied this code).
--#
--# You should have received a copy of the GNU General Public License version
--# 2 along with this work; if not, write to the Free Software Foundation,
--# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
--#
--# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
--# or visit www.oracle.com if you need additional information or have any
--# questions.
--
--# @test
--# @bug 8003228
--# @summary Test the value of sun.jnu.encoding on Mac
--# @author Brent Christian
--#
--# @run shell MacJNUEncoding.sh
--
--# Only run test on Mac
--OS=`uname -s`
--case "$OS" in
-- Darwin ) ;;
-- * )
-- exit 0
-- ;;
--esac
--
--if [ "${TESTJAVA}" = "" ]
--then
-- echo "TESTJAVA not set. Test cannot execute. Failed."
-- exit 1
--fi
--
--if [ "${TESTSRC}" = "" ]
--then
-- echo "TESTSRC not set. Test cannot execute. Failed."
-- exit 1
--fi
--
--if [ "${TESTCLASSES}" = "" ]
--then
-- echo "TESTCLASSES not set. Test cannot execute. Failed."
-- exit 1
--fi
--
--JAVAC="${TESTJAVA}"/bin/javac
--JAVA="${TESTJAVA}"/bin/java
--
--echo "Building test classes..."
--"$JAVAC" -d "${TESTCLASSES}" "${TESTSRC}"/ExpectedEncoding.java
--
--echo ""
--echo "Running test for C locale"
--export LANG=C
--export LC_ALL=C
--"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding US-ASCII UTF-8
--result1=$?
--
--echo ""
--echo "Running test for en_US.UTF-8 locale"
--export LANG=en_US.UTF-8
--export LC_ALL=en_US.UTF-8
--"${JAVA}" ${TESTVMOPTS} -classpath "${TESTCLASSES}" ExpectedEncoding UTF-8 UTF-8
--result2=$?
--
--echo ""
--echo "Cleanup"
--rm ${TESTCLASSES}/ExpectedEncoding.class
--
--if [ ${result1} -ne 0 ] ; then
-- echo "Test failed for C locale"
-- echo " LANG=\"${LANG}\""
-- echo " LC_ALL=\"${LC_ALL}\""
-- exit ${result1}
--fi
--if [ ${result2} -ne 0 ] ; then
-- echo "Test failed for en_US.UTF-8 locale"
-- echo " LANG=\"${LANG}\""
-- echo " LC_ALL=\"${LC_ALL}\""
-- exit ${result2}
--fi
--exit 0
--
---- ./jdk/test/java/lang/ThreadGroup/Suspend.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/ThreadGroup/Suspend.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1999, 2013, 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
-@@ -23,47 +23,55 @@
-
- /**
- * @test
-- * @bug 4176355
-+ * @bug 4176355 7181748
- * @summary Suspending a ThreadGroup that contains the current thread has
- * unpredictable results.
- */
-
- public class Suspend implements Runnable {
-- private static Thread first=null;
-- private static Thread second=null;
-- private static ThreadGroup group = new ThreadGroup("");
-- private static int count = 0;
-
-- Suspend() {
-- Thread thread = new Thread(group, this);
-- if (first == null)
-- first = thread;
-- else
-- second = thread;
--
-- thread.start();
-- }
-+ private static volatile int count = 0;
-+ private static final ThreadGroup group = new ThreadGroup("");
-+ private static final Thread first = new Thread(group, new Suspend());
-+ private static final Thread second = new Thread(group, new Suspend());
-
- public void run() {
- while (true) {
- try {
-- Thread.sleep(1000); // Give other thread a chance to start
-- if (Thread.currentThread() == first)
-- group.suspend();
-- else
-+ Thread.sleep(100);
-+ if (Thread.currentThread() == first) {
-+ if (second.isAlive()) {
-+ group.suspend();
-+ }
-+ } else {
- count++;
-- } catch(InterruptedException e){
-+ }
-+ } catch (InterruptedException e) {
- }
- }
- }
-
- public static void main(String[] args) throws Exception {
-- for (int i=0; i<2; i++)
-- new Suspend();
-- Thread.sleep(3000);
-+ // Launch two threads as part of the same thread group
-+ first.start();
-+ second.start();
-+
-+ // Wait for the thread group suspend to be issued
-+ while (!first.isAlive() || !second.isAlive()) {
-+ Thread.sleep(100);
-+ }
-+ Thread.sleep(1000);
-+ // Suppose, the thread group is now suspended
-+
-+ count = 0;
-+ Thread.sleep(1000);
-+
-+ // Increment of the count indicates that the second thread is still running
- boolean failed = (count > 1);
-- first.stop(); second.stop();
-- if (failed)
-+ first.stop();
-+ second.stop();
-+ if (failed) {
- throw new RuntimeException("Failure.");
-+ }
- }
- }
---- ./jdk/test/java/lang/instrument/RedefineBigClass.sh Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/instrument/RedefineBigClass.sh Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- #
--# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2011, 2013 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
-@@ -22,7 +22,7 @@
- #
-
- # @test
--# @bug 7121600
-+# @bug 7121600 8016838
- # @summary Redefine a big class.
- # @author Daniel D. Daugherty
- #
---- ./jdk/test/java/lang/instrument/RedefineBigClassApp.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/instrument/RedefineBigClassApp.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2011, 2013 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
-@@ -21,12 +21,21 @@
- * questions.
- */
-
-+import java.io.*;
-+
- public class RedefineBigClassApp {
-+ /**
-+ * Memory leak is assumed, if application consumes more than specified amount of memory during its execution.
-+ * The number is given in Kb.
-+ */
-+ private static final long MEM_LEAK_THRESHOLD = 32 * 1024; // 32Mb
-+
- public static void main(String[] args) throws Exception {
- System.out.println("Creating instance of " +
- RedefineBigClassAgent.clz);
- RedefineBigClassAgent.clz.newInstance();
-
-+ long vMemBefore = getVMemSize();
- int count = 0;
- while (!RedefineBigClassAgent.doneRedefining) {
- System.out.println("App loop count: " + ++count);
-@@ -37,6 +46,39 @@
- }
- System.out.println("App looped " + count + " times.");
-
-+ long vMemAfter = getVMemSize();
-+ if (vMemBefore == 0 || vMemAfter == 0) {
-+ System.err.println("WARNING: Cannot perform memory leak detection on this OS");
-+ } else {
-+ long vMemDelta = vMemAfter - vMemBefore;
-+ if (vMemDelta > MEM_LEAK_THRESHOLD) {
-+ System.err.println("FAIL: Virtual memory usage increased by " + vMemDelta + "Kb " +
-+ "(greater than " + MEM_LEAK_THRESHOLD + "Kb)");
-+ System.exit(1);
-+ }
-+ System.err.println("PASS: Virtual memory usage increased by " + vMemDelta + "Kb " +
-+ "(not greater than " + MEM_LEAK_THRESHOLD + "Kb)");
-+ }
- System.exit(0);
- }
-+
-+ /**
-+ * Return size of virtual memory allocated to the process in Kb.
-+ * Linux specific. On other platforms and in case of any errors return 0.
-+ */
-+ private static long getVMemSize() {
-+
-+ // Refer to the Linux proc(5) man page for details about /proc/self/stat file
-+ //
-+ // In short, this file contains status information about the current process
-+ // written in one line. The fields are separated with spaces.
-+ // The 23rd field is defined as 'vsize %lu Virtual memory size in bytes'
-+
-+ try (FileReader fileReader = new FileReader("/proc/self/stat");
-+ BufferedReader bufferedReader = new BufferedReader(fileReader)) {
-+ String line = bufferedReader.readLine();
-+ return Long.parseLong(line.split(" ")[22]) / 1024;
-+ } catch (Exception ex) {}
-+ return 0;
-+ }
- }
---- ./jdk/test/java/lang/instrument/RetransformBigClass.sh Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/instrument/RetransformBigClass.sh Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- #
--# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-+# Copyright (c) 2011, 2013 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
-@@ -22,7 +22,7 @@
- #
-
- # @test
--# @bug 7122253
-+# @bug 7122253 8016838
- # @ignore until the fix for 7122253 (from HotSpot) is in a promoted build
- # @summary Retransform a big class.
- # @author Daniel D. Daugherty
---- ./jdk/test/java/lang/instrument/RetransformBigClassApp.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/instrument/RetransformBigClassApp.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2011, 2013 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
-@@ -21,12 +21,21 @@
- * questions.
- */
-
-+import java.io.*;
-+
- public class RetransformBigClassApp {
-+ /**
-+ * Memory leak is assumed, if application consumes more than specified amount of memory during its execution.
-+ * The number is given in Kb.
-+ */
-+ private static final long MEM_LEAK_THRESHOLD = 32 * 1024; // 32Mb
-+
- public static void main(String[] args) throws Exception {
- System.out.println("Creating instance of " +
- RetransformBigClassAgent.clz);
- RetransformBigClassAgent.clz.newInstance();
-
-+ long vMemBefore = getVMemSize();
- int count = 0;
- while (!RetransformBigClassAgent.doneRetransforming) {
- System.out.println("App loop count: " + ++count);
-@@ -37,6 +46,39 @@
- }
- System.out.println("App looped " + count + " times.");
-
-+ long vMemAfter = getVMemSize();
-+ if (vMemBefore == 0 || vMemAfter == 0) {
-+ System.err.println("WARNING: Cannot perform memory leak detection on this OS");
-+ } else {
-+ long vMemDelta = vMemAfter - vMemBefore;
-+ if (vMemDelta > MEM_LEAK_THRESHOLD) {
-+ System.err.println("FAIL: Virtual memory usage increased by " + vMemDelta + "Kb " +
-+ "(greater than " + MEM_LEAK_THRESHOLD + "Kb)");
-+ System.exit(1);
-+ }
-+ System.err.println("PASS: Virtual memory usage increased by " + vMemDelta + "Kb " +
-+ "(not greater than " + MEM_LEAK_THRESHOLD + "Kb)");
-+ }
- System.exit(0);
- }
-+
-+ /**
-+ * Return size of virtual memory allocated to the process in Kb.
-+ * Linux specific. On other platforms and in case of any errors return 0.
-+ */
-+ private static long getVMemSize() {
-+
-+ // Refer to the Linux proc(5) man page for details about /proc/self/stat file
-+ //
-+ // In short, this file contains status information about the current process
-+ // written in one line. The fields are separated with spaces.
-+ // The 23rd field is defined as 'vsize %lu Virtual memory size in bytes'
-+
-+ try (FileReader fileReader = new FileReader("/proc/self/stat");
-+ BufferedReader bufferedReader = new BufferedReader(fileReader)) {
-+ String line = bufferedReader.readLine();
-+ return Long.parseLong(line.split(" ")[22]) / 1024;
-+ } catch (Exception ex) {}
-+ return 0;
-+ }
- }
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/invoke/8009222/Test8009222.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,49 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ *
-+ */
-+
-+/**
-+ * @test
-+ * @bug 8009222
-+ * @summary java.lang.IllegalArgumentException: not invocable, no method type
-+ * when attempting to get getter method handle for a static field
-+ *
-+ * @run main/othervm Test8009222
-+ */
-+
-+import java.lang.invoke.MethodHandle;
-+import java.lang.invoke.MethodHandles;
-+
-+interface Intf {
-+ static int i = 0;
-+}
-+
-+public class Test8009222 {
-+ public static void main(String[] args) throws Exception {
-+ MethodHandles.lookup()
-+ .findStaticGetter(Intf.class, "i", int.class)
-+ .getClass(); // null check
-+
-+ System.out.println("TEST PASSED");
-+ }
-+}
---- ./jdk/test/java/lang/invoke/BigArityTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/invoke/BigArityTest.java Wed May 07 19:26:47 2014 -0700
-@@ -26,7 +26,7 @@
- /* @test
- * @summary High arity invocations, up to the maximum of 255 arguments
- * @compile BigArityTest.java
-- * @run junit/othervm -DBigArityTest.ITERATION_COUNT=1 test.java.lang.invoke.BigArityTest
-+ * @run junit/othervm/timeout=2500 -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies -esa -DBigArityTest.ITERATION_COUNT=1 test.java.lang.invoke.BigArityTest
- */
-
- package test.java.lang.invoke;
---- ./jdk/test/java/lang/invoke/CallSiteTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/invoke/CallSiteTest.java Wed May 07 19:26:47 2014 -0700
-@@ -28,7 +28,7 @@
- *
- * @build indify.Indify
- * @compile CallSiteTest.java
-- * @run main/othervm
-+ * @run main/othervm/timeout=3600 -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies
- * indify.Indify
- * --expand-properties --classpath ${test.classes}
- * --java test.java.lang.invoke.CallSiteTest
---- ./jdk/test/java/lang/invoke/MethodHandlesTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/invoke/MethodHandlesTest.java Wed May 07 19:26:47 2014 -0700
-@@ -26,7 +26,7 @@
- /* @test
- * @summary unit tests for java.lang.invoke.MethodHandles
- * @compile MethodHandlesTest.java remote/RemoteExample.java
-- * @run junit/othervm test.java.lang.invoke.MethodHandlesTest
-+ * @run junit/othervm/timeout=2500 -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies -esa test.java.lang.invoke.MethodHandlesTest
- */
-
- package test.java.lang.invoke;
---- ./jdk/test/java/lang/invoke/RicochetTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/invoke/RicochetTest.java Wed May 07 19:26:47 2014 -0700
-@@ -25,7 +25,7 @@
-
- /* @test
- * @summary unit tests for recursive method handles
-- * @run junit/othervm -DRicochetTest.MAX_ARITY=50 test.java.lang.invoke.RicochetTest
-+ * @run junit/othervm/timeout=3600 -XX:+IgnoreUnrecognizedVMOptions -XX:-VerifyDependencies -DRicochetTest.MAX_ARITY=10 test.java.lang.invoke.RicochetTest
- */
- /*
- * @ignore The following test creates an unreasonable number of adapters in -Xcomp mode (7049122)
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,97 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation. Oracle designates this
-+ * particular file as subject to the "Classpath" exception as provided
-+ * by Oracle in the LICENSE file that accompanied this code.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8019184
-+ * @summary MethodHandles.catchException() fails when methods have 8 args + varargs
-+ */
-+
-+import java.util.*;
-+import java.lang.invoke.*;
-+
-+public class TestCatchExceptionWithVarargs {
-+
-+ private static final Class<?> CLASS = TestCatchExceptionWithVarargs.class;
-+ private static final int MAX_MH_ARITY = 254;
-+
-+ public static MethodHandle target;
-+ public static MethodHandle handler;
-+
-+ private static Object firstArg;
-+
-+ static class MyException extends Exception {
-+ }
-+
-+ public static Object target(Object... a) throws Exception {
-+ if (a[0] != firstArg) {
-+ throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg);
-+ }
-+ throw new MyException();
-+ }
-+
-+ public static Object handler(Object... a) {
-+ if (a[0] != firstArg) {
-+ throw new AssertionError("first argument different than expected: " + a[0] + " != " + firstArg);
-+ }
-+ return a[0];
-+ }
-+
-+ static {
-+ try {
-+ MethodType mtype = MethodType.methodType(Object.class, Object[].class);
-+ target = MethodHandles.lookup().findStatic(CLASS, "target", mtype);
-+ handler = MethodHandles.lookup().findStatic(CLASS, "handler", mtype);
-+ } catch (Exception e) {
-+ throw new AssertionError(e);
-+ }
-+ }
-+
-+ public static void main(String[] args) throws Throwable {
-+ List<Class<?>> ptypes = new LinkedList<>();
-+ ptypes.add(Object[].class);
-+
-+ // We use MAX_MH_ARITY - 1 here to account for the Object[] argument.
-+ for (int i = 1; i < MAX_MH_ARITY - 1; i++) {
-+ ptypes.add(0, Object.class);
-+
-+ MethodHandle targetWithArgs = target.asType(MethodType.methodType(Object.class, ptypes));
-+ MethodHandle handlerWithArgs = handler.asType(MethodType.methodType(Object.class, ptypes));
-+ handlerWithArgs = MethodHandles.dropArguments(handlerWithArgs, 0, MyException.class);
-+
-+ MethodHandle gwc1 = MethodHandles.catchException(targetWithArgs, MyException.class, handlerWithArgs);
-+
-+ // The next line throws an IllegalArgumentException if there is a bug.
-+ MethodHandle gwc2 = MethodHandles.catchException(gwc1, MyException.class, handlerWithArgs);
-+
-+ // This is only to verify that the method handles can actually be invoked and do the right thing.
-+ firstArg = new Object();
-+ Object o = gwc2.asSpreader(Object[].class, ptypes.size() - 1).invoke(firstArg, new Object[i]);
-+ if (o != firstArg) {
-+ throw new AssertionError("return value different than expected: " + o + " != " + firstArg);
-+ }
-+ }
-+ }
-+}
---- ./jdk/test/java/lang/management/PlatformLoggingMXBean/LoggingMXBeanTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/management/PlatformLoggingMXBean/LoggingMXBeanTest.java Wed May 07 19:26:47 2014 -0700
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 7024172
-+ * @bug 7024172 7067691
- * @summary Test if proxy for PlatformLoggingMXBean is equivalent
- * to proxy for LoggingMXBean
- *
-@@ -36,12 +36,21 @@
- import java.util.logging.*;
- import java.util.ArrayList;
- import java.util.List;
-+import java.util.Map;
-+import java.util.HashMap;
-
- public class LoggingMXBeanTest
- {
-- static String LOGGER_NAME_1 = "com.sun.management.Logger";
-- static String LOGGER_NAME_2 = "com.sun.management.Logger.Logger2";
-- static String UNKNOWN_LOGGER_NAME = "com.sun.management.Unknown";
-+ static final String LOGGER_NAME_1 = "com.sun.management.Logger";
-+ static final String LOGGER_NAME_2 = "com.sun.management.Logger.Logger2";
-+ static final String UNKNOWN_LOGGER_NAME = "com.sun.management.Unknown";
-+
-+ // These instance variables prevent premature logger garbage collection
-+ // See getLogger() weak reference warnings.
-+ Logger logger1;
-+ Logger logger2;
-+
-+ static LoggingMXBeanTest test;
-
- public static void main(String[] argv) throws Exception {
- MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-@@ -51,7 +60,7 @@
- LoggingMXBean.class);
-
- // test LoggingMXBean proxy
-- LoggingMXBeanTest p = new LoggingMXBeanTest(proxy);
-+ test = new LoggingMXBeanTest(proxy);
-
- // check if the attributes implemented by PlatformLoggingMXBean
- // and LoggingMXBean return the same value
-@@ -64,9 +73,9 @@
- // same verification as in java/util/logging/LoggingMXBeanTest2
- public LoggingMXBeanTest(LoggingMXBean mbean) throws Exception {
-
-- Logger logger1 = Logger.getLogger( LOGGER_NAME_1 );
-+ logger1 = Logger.getLogger( LOGGER_NAME_1 );
- logger1.setLevel(Level.FINE);
-- Logger logger2 = Logger.getLogger( LOGGER_NAME_2 );
-+ logger2 = Logger.getLogger( LOGGER_NAME_2 );
- logger2.setLevel(null);
-
- /*
-@@ -206,20 +215,36 @@
- PlatformLoggingMXBean mxbean2) {
- // verify logger names
- List<String> loggers1 = mxbean1.getLoggerNames();
-+ System.out.println("Loggers: " + loggers1);
-+
-+ // Retrieve the named loggers to prevent them from being
-+ // spontaneously gc'ed.
-+ Map<String, Logger> loggersMap = new HashMap<>();
-+ for (String n : loggers1) {
-+ loggersMap.put(n, Logger.getLogger(n));
-+ }
-+
- List<String> loggers2 = mxbean2.getLoggerNames();
-+
-+ // loggers1 and loggers2 should be identical - no new logger should
-+ // have been created in between (at least no new logger name)
-+ //
- if (loggers1.size() != loggers2.size())
- throw new RuntimeException("LoggerNames: unmatched number of entries");
-- List<String> loggers3 = new ArrayList<>(loggers1);
-- loggers3.removeAll(loggers2);
-- if (loggers3.size() != 0)
-+ if (!loggers2.containsAll(loggersMap.keySet()))
- throw new RuntimeException("LoggerNames: unmatched loggers");
-
-+
- // verify logger's level and parent
- for (String logger : loggers1) {
-- if (!mxbean1.getLoggerLevel(logger)
-- .equals(mxbean2.getLoggerLevel(logger)))
-+ String level1 = mxbean1.getLoggerLevel(logger);
-+ String level2 = mxbean2.getLoggerLevel(logger);
-+ if (!java.util.Objects.equals(level1, level2)) {
- throw new RuntimeException(
-- "LoggerLevel: unmatched level for " + logger);
-+ "LoggerLevel: unmatched level for " + logger
-+ + ", " + level1 + ", " + level2);
-+ }
-+
- if (!mxbean1.getParentLoggerName(logger)
- .equals(mxbean2.getParentLoggerName(logger)))
- throw new RuntimeException(
---- ./jdk/test/java/lang/management/PlatformLoggingMXBean/PlatformLoggingMXBeanTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/lang/management/PlatformLoggingMXBean/PlatformLoggingMXBeanTest.java Wed May 07 19:26:47 2014 -0700
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 6876135 7024172
-+ * @bug 6876135 7024172 7067691
- *
- * @summary Test PlatformLoggingMXBean
- * This test performs similar testing as
-@@ -41,11 +41,15 @@
-
- public class PlatformLoggingMXBeanTest
- {
--
- ObjectName objectName = null;
- static String LOGGER_NAME_1 = "com.sun.management.Logger1";
- static String LOGGER_NAME_2 = "com.sun.management.Logger2";
-
-+ // Use Logger instance variables to prevent premature garbage collection
-+ // of weak references.
-+ Logger logger1;
-+ Logger logger2;
-+
- public PlatformLoggingMXBeanTest() throws Exception {
- }
-
-@@ -135,8 +139,8 @@
- System.out.println( "*********** Phase 3 ***********" );
- System.out.println( "*******************************" );
- System.out.println( " Create and test new Loggers" );
-- Logger logger1 = Logger.getLogger( LOGGER_NAME_1 );
-- Logger logger2 = Logger.getLogger( LOGGER_NAME_2 );
-+ logger1 = Logger.getLogger( LOGGER_NAME_1 );
-+ logger2 = Logger.getLogger( LOGGER_NAME_2 );
-
- // check that Level object are returned properly
- try {
-@@ -187,6 +191,7 @@
- System.out.println( " Set and Check the Logger Level" );
- log1 = false;
- log2 = false;
-+
- try {
- // Set the level of logger1 to ALL
- params = new Object[2];
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/lang/ref/FinalizeOverride.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,167 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.io.ByteArrayOutputStream;
-+import java.io.IOException;
-+import java.nio.file.Files;
-+import java.nio.file.Path;
-+import java.nio.file.Paths;
-+import java.util.concurrent.atomic.AtomicInteger;
-+
-+/* @test
-+ * @bug 8027351
-+ * @summary Basic test of the finalize method
-+ */
-+
-+public class FinalizeOverride {
-+ // finalizedCount is incremented when the finalize method is invoked
-+ private static AtomicInteger finalizedCount = new AtomicInteger();
-+
-+ // finalizedSum and privateFinalizedInvoke are used to verify
-+ // the right overrided finalize method is invoked
-+ private static AtomicInteger finalizedSum = new AtomicInteger();
-+ private static volatile boolean privateFinalizeInvoked = false;
-+
-+ public static void main(String[] argvs) throws IOException {
-+ patchPrivateFinalize();
-+
-+ test(new Base(10), 10);
-+ test(new Subclass(20), 0);
-+ test(new SubSubclass(30), 30);
-+ test(new PublicFinalize(40), 40*100+40);
-+ test(new PrivateFinalize(50), 50);
-+ test(new NoOverride(60), 60);
-+ }
-+
-+ static void test(Object o, int expected) {
-+ int count = finalizedCount.get();
-+ int sum = finalizedSum.get();
-+ privateFinalizeInvoked = false;
-+
-+ // force GC and finalization
-+ o = null;
-+ while (finalizedCount.get() != (count+1)) {
-+ System.gc();
-+ System.runFinalization();
-+ }
-+
-+ if (privateFinalizeInvoked) {
-+ throw new RuntimeException("private finalize method invoked");
-+ }
-+ if (finalizedCount.get() != (count+1)) {
-+ throw new RuntimeException("Unexpected count=" + finalizedCount +
-+ " expected=" + (count+1));
-+ }
-+ if (finalizedSum.get() != (sum+expected)) {
-+ throw new RuntimeException("Unexpected sum=" + finalizedSum +
-+ " prev=" + sum + " value=" + expected);
-+ }
-+ }
-+
-+ static void patchPrivateFinalize() throws IOException {
-+ // patch the private f_nal_ze method name to "finalize"
-+ String testClasses = System.getProperty("test.classes", ".");
-+ Path p = Paths.get(testClasses, "FinalizeOverride$PrivateFinalize.class");
-+ byte[] bytes = Files.readAllBytes(p);
-+ int len = "f_nal_ze".length();
-+ for (int i=0; i < bytes.length-len; i++) {
-+ if (bytes[i] == 'f' &&
-+ bytes[i+1] == '_' &&
-+ bytes[i+2] == 'n' &&
-+ bytes[i+3] == 'a' &&
-+ bytes[i+4] == 'l' &&
-+ bytes[i+5] == '_' &&
-+ bytes[i+6] == 'z' &&
-+ bytes[i+7] == 'e')
-+ {
-+ // s%_%i%
-+ bytes[i+1] = 'i';
-+ bytes[i+5] = 'i';
-+ break;
-+ }
-+ }
-+ Files.write(p, bytes);
-+ }
-+
-+ static class Base {
-+ protected int value;
-+ Base(int v) {
-+ this.value = v;
-+ }
-+ int called() {
-+ finalizedSum.addAndGet(value);
-+ return value;
-+ }
-+ protected void finalize() {
-+ System.out.println("Base.finalize() sum += " + called());
-+ finalizedCount.incrementAndGet();
-+ }
-+ }
-+ static class PublicFinalize extends Base {
-+ PublicFinalize(int v) {
-+ super(v);
-+ }
-+ public void finalize() {
-+ finalizedSum.addAndGet(value * 100);
-+ System.out.println("PublicFinalize.finalize() sum += " + called() +
-+ "+"+value+"*100");
-+ finalizedCount.incrementAndGet();
-+ }
-+ }
-+ static class Subclass extends Base {
-+ Subclass(int v) {
-+ super(v);
-+ }
-+ protected void finalize() {
-+ // no value added to sum
-+ System.out.println("Subclass.finalize() sum += 0");
-+ finalizedCount.incrementAndGet();
-+ }
-+ }
-+ static class SubSubclass extends Subclass {
-+ SubSubclass(int v) {
-+ super(v);
-+ }
-+ protected final void finalize() {
-+ finalizedSum.addAndGet(value);
-+ System.out.println("SubSubclass.finalize() sum +=" +value);
-+ finalizedCount.incrementAndGet();
-+ }
-+ }
-+ static class PrivateFinalize extends Base {
-+ PrivateFinalize(int v) {
-+ super(v);
-+ }
-+ private void f_nal_ze() {
-+ // finalization catches any exception
-+ System.out.println("Error: private finalize invoked!!");
-+ privateFinalizeInvoked = true;
-+ finalizedCount.incrementAndGet();
-+ }
-+ }
-+ static class NoOverride extends PrivateFinalize {
-+ NoOverride(int v) {
-+ super(v);
-+ }
-+ }
-+}
---- ./jdk/test/java/net/Authenticator/B4769350.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/net/Authenticator/B4769350.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2002, 2014, 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
-@@ -23,9 +23,7 @@
-
- /**
- * @test
-- * @bug 4769350
-- * @library ../../../sun/net/www/httptest/
-- * @build HttpCallback HttpServer ClosedChannelList HttpTransaction AbstractCallback
-+ * @bug 4769350 8017779
- * @run main/othervm B4769350 server
- * @run main/othervm B4769350 proxy
- * @summary proxy authentication username and password caching only works in serial case
-@@ -34,8 +32,17 @@
- * tests may already have invoked the HTTP handler.
- */
-
-+import com.sun.net.httpserver.HttpExchange;
-+import com.sun.net.httpserver.HttpHandler;
-+import com.sun.net.httpserver.HttpServer;
- import java.io.*;
- import java.net.*;
-+import java.util.concurrent.BrokenBarrierException;
-+import java.util.concurrent.CountDownLatch;
-+import java.util.concurrent.CyclicBarrier;
-+import java.util.concurrent.Executor;
-+import java.util.concurrent.ExecutorService;
-+import java.util.concurrent.Executors;
-
- public class B4769350 {
-
-@@ -43,13 +50,12 @@
- static boolean error = false;
-
- static void read (InputStream is) throws IOException {
-- int c;
-- while ((c=is.read()) != -1) {
-+ while (is.read() != -1) {
- //System.out.write (c);
- }
- }
-
-- static class Client extends Thread {
-+ static class Client extends Thread {
- String authority, path;
- boolean allowerror;
-
-@@ -64,8 +70,8 @@
- try {
- URI u = new URI ("http", authority, path, null, null);
- URL url = u.toURL();
-- URLConnection urlc = url.openConnection ();
-- InputStream is = urlc.getInputStream ();
-+ URLConnection urlc = url.openConnection();
-+ InputStream is = urlc.getInputStream();
- read (is);
- is.close();
- } catch (URISyntaxException e) {
-@@ -73,7 +79,8 @@
- error = true;
- } catch (IOException e) {
- if (!allowerror) {
-- System.out.println (Thread.currentThread().getName() + " " + e);
-+ System.out.println (Thread.currentThread().getName()
-+ + " " + e);
- e.printStackTrace();
- error = true;
- }
-@@ -81,55 +88,58 @@
- }
- }
-
-- static class CallBack extends AbstractCallback {
-+ class Server implements AutoCloseable {
-+ HttpServer server;
-+ Executor executor;
-+ CyclicBarrier t1Cond1;
-+ CyclicBarrier t1Cond2;
-
-- void errorReply (HttpTransaction req, String reply) throws IOException {
-- req.addResponseHeader ("Connection", "close");
-- req.addResponseHeader ("WWW-Authenticate", reply);
-- req.sendResponse (401, "Unauthorized");
-- req.orderlyClose();
-+ public String getAddress() {
-+ return server.getAddress().getHostName();
- }
-
-- void proxyReply (HttpTransaction req, String reply) throws IOException {
-- req.addResponseHeader ("Proxy-Authenticate", reply);
-- req.sendResponse (407, "Proxy Authentication Required");
-+ public void startServer() {
-+ InetSocketAddress addr = new InetSocketAddress(0);
-+
-+ try {
-+ server = HttpServer.create(addr, 0);
-+ } catch (IOException ioe) {
-+ throw new RuntimeException("Server could not be created");
-+ }
-+ executor = Executors.newFixedThreadPool(10);
-+ server.setExecutor(executor);
-+ server.createContext("/test/realm1/t1a",
-+ new AuthenticationHandlerT1a() );
-+ server.createContext("/test/realm2/t1b",
-+ new AuthenticationHandlerT1b());
-+ server.createContext("/test/realm1/t1c",
-+ new AuthenticationHandlerT1c());
-+ server.createContext("/test/realm2/t1d",
-+ new AuthenticationHandlerT1d());
-+ server.createContext("/test/realm3/t2a",
-+ new AuthenticationHandlerT2a());
-+ server.createContext("/test/realm3/t2b",
-+ new AuthenticationHandlerT2b());
-+ server.createContext("/test/realm4/t3a",
-+ new AuthenticationHandlerT3a());
-+ server.createContext("/test/realm4/t3b",
-+ new AuthenticationHandlerT3bc());
-+ server.createContext("/test/realm4/t3c",
-+ new AuthenticationHandlerT3bc());
-+ t1Cond1 = new CyclicBarrier(2);
-+ t1Cond2 = new CyclicBarrier(2);
-+ server.start();
- }
-
-- void okReply (HttpTransaction req) throws IOException {
-- req.addResponseHeader ("Connection", "close");
-- req.setResponseEntityBody ("Hello .");
-- req.sendResponse (200, "Ok");
-- req.orderlyClose();
-+ public int getPort() {
-+ return server.getAddress().getPort();
- }
-
-- public void request (HttpTransaction req, int count) {
-- try {
-- URI uri = req.getRequestURI();
-- String path = uri.getPath();
-- if (path.endsWith ("/t1a")) {
-- doT1a (req, count);
-- } else if (path.endsWith ("/t1b")) {
-- doT1b (req, count);
-- } else if (path.endsWith ("/t1c")) {
-- doT1c (req, count);
-- } else if (path.endsWith ("/t1d")) {
-- doT1d (req, count);
-- } else if (path.endsWith ("/t2a")) {
-- doT2a (req, count);
-- } else if (path.endsWith ("/t2b")) {
-- doT2b (req, count);
-- } else if (path.endsWith ("/t3a")) {
-- doT3a (req, count);
-- } else if (path.endsWith ("/t3b")) {
-- doT3bc (req, count);
-- } else if (path.endsWith ("/t3c")) {
-- doT3bc (req, count);
-- } else {
-- System.out.println ("unexpected request URI");
-- }
-- } catch (IOException e) {
-- e.printStackTrace();
-- }
-+ public void close() {
-+ if (executor != null)
-+ ((ExecutorService)executor).shutdownNow();
-+ if (server != null)
-+ server.stop(0);
- }
-
- /* T1 tests the client by sending 4 requests to 2 different realms
-@@ -138,90 +148,158 @@
- * the second requests should be executed without calling the authenticator.
- * The test succeeds if the authenticator was only called twice.
- */
-- void doT1a (HttpTransaction req, int count) throws IOException {
-- switch (count) {
-- case 0:
-- errorReply (req, "Basic realm=\"realm1\"");
-- HttpServer.rendezvous ("one", 2);
-- break;
-- case 1:
-- HttpServer.waitForCondition ("cond2");
-- okReply (req);
-- break;
-- default:
-- System.out.println ("Unexpected request");
-+ class AuthenticationHandlerT1a implements HttpHandler
-+ {
-+ volatile int count = -1;
-+
-+ @Override
-+ public void handle(HttpExchange exchange) throws IOException {
-+ count++;
-+ try {
-+ switch(count) {
-+ case 0:
-+ AuthenticationHandler.errorReply(exchange,
-+ "Basic realm=\"realm1\"");
-+ break;
-+ case 1:
-+ t1Cond1.await();
-+ t1cond2latch.await();
-+ AuthenticationHandler.okReply(exchange);
-+ break;
-+ default:
-+ System.out.println ("Unexpected request");
-+ }
-+ } catch (InterruptedException |
-+ BrokenBarrierException e)
-+ {
-+ throw new RuntimeException(e);
-+ }
- }
- }
-
-+ class AuthenticationHandlerT1b implements HttpHandler
-+ {
-+ volatile int count = -1;
-
-- void doT1b (HttpTransaction req, int count) throws IOException {
-- switch (count) {
-- case 0:
-- errorReply (req, "Basic realm=\"realm2\"");
-- HttpServer.rendezvous ("one", 2);
-- HttpServer.setCondition ("cond1");
-- break;
-- case 1:
-- HttpServer.waitForCondition ("cond2");
-- okReply (req);
-- break;
-- default:
-- System.out.println ("Unexpected request");
-+ @Override
-+ public void handle(HttpExchange exchange) throws IOException {
-+ count++;
-+ try {
-+ switch(count) {
-+ case 0:
-+ AuthenticationHandler.errorReply(exchange,
-+ "Basic realm=\"realm2\"");
-+ break;
-+ case 1:
-+ t1Cond1.await();
-+ t1cond1latch.countDown();
-+ t1cond2latch.await();
-+ AuthenticationHandler.okReply(exchange);
-+ break;
-+ default:
-+ System.out.println ("Unexpected request");
-+ }
-+ } catch (InterruptedException | BrokenBarrierException e) {
-+ throw new RuntimeException(e);
-+ }
- }
- }
-
-- void doT1c (HttpTransaction req, int count) throws IOException {
-- switch (count) {
-- case 0:
-- errorReply (req, "Basic realm=\"realm1\"");
-- HttpServer.rendezvous ("two", 2);
-- break;
-- case 1:
-- okReply (req);
-- break;
-- default:
-- System.out.println ("Unexpected request");
-+ class AuthenticationHandlerT1c implements HttpHandler
-+ {
-+ volatile int count = -1;
-+
-+ @Override
-+ public void handle(HttpExchange exchange) throws IOException {
-+ count++;
-+ switch(count) {
-+ case 0:
-+ AuthenticationHandler.errorReply(exchange,
-+ "Basic realm=\"realm1\"");
-+ try {
-+ t1Cond2.await();
-+ } catch (InterruptedException |
-+ BrokenBarrierException e)
-+ {
-+ throw new RuntimeException(e);
-+ }
-+ break;
-+ case 1:
-+ AuthenticationHandler.okReply(exchange);
-+ break;
-+ default:
-+ System.out.println ("Unexpected request");
-+ }
- }
- }
-
-- void doT1d (HttpTransaction req, int count) throws IOException {
-- switch (count) {
-- case 0:
-- errorReply (req, "Basic realm=\"realm2\"");
-- HttpServer.rendezvous ("two", 2);
-- HttpServer.setCondition ("cond2");
-- break;
-- case 1:
-- okReply (req);
-- break;
-- default:
-- System.out.println ("Unexpected request");
-+ class AuthenticationHandlerT1d implements HttpHandler
-+ {
-+ volatile int count = -1;
-+
-+ @Override
-+ public void handle(HttpExchange exchange) throws IOException {
-+ count++;
-+ switch(count) {
-+ case 0:
-+ AuthenticationHandler.errorReply(exchange,
-+ "Basic realm=\"realm2\"");
-+ try {
-+ t1Cond2.await();
-+ } catch (InterruptedException |
-+ BrokenBarrierException e)
-+ {
-+ throw new RuntimeException(e);
-+ }
-+ t1cond2latch.countDown();
-+ break;
-+ case 1:
-+ AuthenticationHandler.okReply(exchange);
-+ break;
-+ default:
-+ System.out.println ("Unexpected request");
-+ }
- }
- }
-
--
- /* T2 tests to check that if initial authentication fails, the second will
- * succeed, and the authenticator is called twice
- */
-
-- void doT2a (HttpTransaction req, int count) throws IOException {
-- /* This will be called several times */
-- if (count == 1) {
-- HttpServer.setCondition ("T2cond1");
-+ class AuthenticationHandlerT2a implements HttpHandler
-+ {
-+ volatile int count = -1;
-+
-+ @Override
-+ public void handle(HttpExchange exchange) throws IOException {
-+ count++;
-+ if (count == 1) {
-+ t2condlatch.countDown();
-+ }
-+ AuthenticationHandler.errorReply(exchange,
-+ "Basic realm=\"realm3\"");
-+
- }
-- errorReply (req, "Basic realm=\"realm3\"");
- }
-
-- void doT2b (HttpTransaction req, int count) throws IOException {
-- switch (count) {
-- case 0:
-- errorReply (req, "Basic realm=\"realm3\"");
-- break;
-- case 1:
-- okReply (req);
-- break;
-- default:
-- System.out.println ("Unexpected request");
-+ class AuthenticationHandlerT2b implements HttpHandler
-+ {
-+ volatile int count = -1;
-+
-+ @Override
-+ public void handle(HttpExchange exchange) throws IOException {
-+ count++;
-+ switch(count) {
-+ case 0:
-+ AuthenticationHandler.errorReply(exchange,
-+ "Basic realm=\"realm3\"");
-+ break;
-+ case 1:
-+ AuthenticationHandler.okReply(exchange);
-+ break;
-+ default:
-+ System.out.println ("Unexpected request");
-+ }
- }
- }
-
-@@ -229,36 +307,82 @@
- * resource at same time. Authenticator should be called once for server
- * and once for proxy
- */
-- void doT3a (HttpTransaction req, int count) throws IOException {
-- switch (count) {
-- case 0:
-- proxyReply (req, "Basic realm=\"proxy\"");
-- HttpServer.setCondition ("T3cond1");
-- break;
-- case 1:
-- errorReply (req, "Basic realm=\"realm4\"");
-- break;
-- case 2:
-- okReply (req);
-- break;
-- default:
-- System.out.println ("Unexpected request");
-+
-+ class AuthenticationHandlerT3a implements HttpHandler
-+ {
-+ volatile int count = -1;
-+
-+ @Override
-+ public void handle(HttpExchange exchange) throws IOException {
-+ count++;
-+ switch(count) {
-+ case 0:
-+ AuthenticationHandler.proxyReply(exchange,
-+ "Basic realm=\"proxy\"");
-+ break;
-+ case 1:
-+ t3cond1.countDown();
-+ AuthenticationHandler.errorReply(exchange,
-+ "Basic realm=\"realm4\"");
-+ break;
-+ case 2:
-+ AuthenticationHandler.okReply(exchange);
-+ break;
-+ default:
-+ System.out.println ("Unexpected request");
-+ }
- }
- }
-
-- void doT3bc (HttpTransaction req, int count) throws IOException {
-- switch (count) {
-- case 0:
-- proxyReply (req, "Basic realm=\"proxy\"");
-- break;
-- case 1:
-- okReply (req);
-- break;
-- default:
-- System.out.println ("Unexpected request");
-+ class AuthenticationHandlerT3bc implements HttpHandler
-+ {
-+ volatile int count = -1;
-+
-+ @Override
-+ public void handle(HttpExchange exchange) throws IOException {
-+ count++;
-+ switch(count) {
-+ case 0:
-+ AuthenticationHandler.proxyReply(exchange,
-+ "Basic realm=\"proxy\"");
-+ break;
-+ case 1:
-+ AuthenticationHandler.okReply(exchange);
-+ break;
-+ default:
-+ System.out.println ("Unexpected request");
-+ }
- }
- }
-- };
-+ }
-+
-+ static class AuthenticationHandler {
-+ static void errorReply(HttpExchange exchange, String reply)
-+ throws IOException
-+ {
-+ exchange.getResponseHeaders().add("Connection", "close");
-+ exchange.getResponseHeaders().add("WWW-Authenticate", reply);
-+ exchange.sendResponseHeaders(401, 0);
-+ exchange.close();
-+ }
-+
-+ static void proxyReply (HttpExchange exchange, String reply)
-+ throws IOException
-+ {
-+ exchange.getResponseHeaders().add("Proxy-Authenticate", reply);
-+ exchange.sendResponseHeaders(407, 0);
-+ }
-+
-+ static void okReply (HttpExchange exchange) throws IOException {
-+ exchange.getResponseHeaders().add("Connection", "close");
-+ String response = "Hello .";
-+ exchange.sendResponseHeaders(200, response.getBytes().length);
-+ OutputStream os = exchange.getResponseBody();
-+ os.write(response.getBytes());
-+ os.close();
-+ exchange.close();
-+ }
-+ }
-
- static HttpServer server;
- static MyAuthenticator auth = new MyAuthenticator ();
-@@ -267,7 +391,14 @@
-
- static Client c1,c2,c3,c4,c5,c6,c7,c8,c9;
-
-- static void doServerTests (String authority) throws Exception {
-+ static CountDownLatch t1cond1latch;
-+ static CountDownLatch t1cond2latch;
-+ static CountDownLatch t2condlatch;
-+ static CountDownLatch t3cond1;
-+
-+ static void doServerTests (String authority, Server server) throws Exception
-+ {
-+
- System.out.println ("Doing Server tests");
- System.out.println ("T1");
- c1 = new Client (authority, "/test/realm1/t1a", false);
-@@ -275,17 +406,20 @@
- c3 = new Client (authority, "/test/realm1/t1c", false);
- c4 = new Client (authority, "/test/realm2/t1d", false);
-
-+ t1cond1latch = new CountDownLatch(1);
-+ t1cond2latch = new CountDownLatch(1);
- c1.start(); c2.start();
-- HttpServer.waitForCondition ("cond1");
-+ t1cond1latch.await();
- c3.start(); c4.start();
- c1.join(); c2.join(); c3.join(); c4.join();
-
- int f = auth.getCount();
- if (f != 2) {
-- except ("Authenticator was called "+f+" times. Should be 2");
-+ except ("Authenticator was called "+f+" times. Should be 2",
-+ server);
- }
- if (error) {
-- except ("error occurred");
-+ except ("error occurred", server);
- }
-
- auth.resetCount();
-@@ -293,73 +427,71 @@
-
- c5 = new Client (authority, "/test/realm3/t2a", true);
- c6 = new Client (authority, "/test/realm3/t2b", false);
-+ t2condlatch = new CountDownLatch(1);
- c5.start ();
-- HttpServer.waitForCondition ("T2cond1");
-+ t2condlatch.await();
- c6.start ();
- c5.join(); c6.join();
-
- f = auth.getCount();
- if (f != redirects+1) {
-- except ("Authenticator was called "+f+" times. Should be: " + redirects+1);
-+ except ("Authenticator was called "+f+" times. Should be: "
-+ + redirects+1, server);
- }
- if (error) {
-- except ("error occurred");
-+ except ("error occurred", server);
- }
- }
-
-- static void doProxyTests (String authority) throws Exception {
-+ static void doProxyTests (String authority, Server server) throws Exception
-+ {
- System.out.println ("Doing Proxy tests");
- c7 = new Client (authority, "/test/realm4/t3a", false);
- c8 = new Client (authority, "/test/realm4/t3b", false);
- c9 = new Client (authority, "/test/realm4/t3c", false);
-+ t3cond1 = new CountDownLatch(1);
- c7.start ();
-- HttpServer.waitForCondition ("T3cond1");
-+ t3cond1.await();
- c8.start ();
- c9.start ();
- c7.join(); c8.join(); c9.join();
-
- int f = auth.getCount();
- if (f != 2) {
-- except ("Authenticator was called "+f+" times. Should be: " + 2);
-+ except ("Authenticator was called "+f+" times. Should be: " + 2,
-+ server);
- }
- if (error) {
-- except ("error occurred");
-+ except ("error occurred", server);
- }
- }
-
- public static void main (String[] args) throws Exception {
-+ new B4769350().runTest(args[0].equals ("proxy"));
-+ }
-+
-+ public void runTest(boolean proxy) throws Exception {
- System.setProperty ("http.maxRedirects", Integer.toString (redirects));
- System.setProperty ("http.auth.serializeRequests", "true");
- Authenticator.setDefault (auth);
-- boolean proxy = args[0].equals ("proxy");
-- try {
-- server = new HttpServer (new CallBack(), 10, 1, 0);
-- System.out.println ("Server: listening on port: " + server.getLocalPort());
-+ try (Server server = new Server()) {
-+ server.startServer();
-+ System.out.println ("Server: listening on port: "
-+ + server.getPort());
- if (proxy) {
- System.setProperty ("http.proxyHost", "localhost");
-- System.setProperty ("http.proxyPort",Integer.toString(server.getLocalPort()));
-- doProxyTests ("www.foo.com");
-+ System.setProperty ("http.proxyPort",
-+ Integer.toString(server.getPort()));
-+ doProxyTests ("www.foo.com", server);
- } else {
-- doServerTests ("localhost:"+server.getLocalPort());
-+ doServerTests ("localhost:"+server.getPort(), server);
- }
-- server.terminate();
-+ }
-
-- } catch (Exception e) {
-- if (server != null) {
-- server.terminate();
-- }
-- throw e;
-- }
- }
-
-- static void pause (int millis) {
-- try {
-- Thread.sleep (millis);
-- } catch (InterruptedException e) {}
-- }
--
-- public static void except (String s) {
-- server.terminate();
-+ public static void except (String s, Server server) {
-+ server.close();
- throw new RuntimeException (s);
- }
-
-@@ -368,13 +500,10 @@
- super ();
- }
-
-- int count = 0;
-+ volatile int count = 0;
-
-+ @Override
- public PasswordAuthentication getPasswordAuthentication () {
-- //System.out.println ("Authenticator called: " + getRequestingPrompt());
-- //try {
-- //Thread.sleep (1000);
-- //} catch (InterruptedException e) {}
- PasswordAuthentication pw;
- pw = new PasswordAuthentication ("user", "pass1".toCharArray());
- count ++;
-@@ -386,7 +515,7 @@
- }
-
- public int getCount () {
-- return (count);
-+ return count;
- }
- }
- }
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/net/IDN/UseSTD3ASCIIRules.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,80 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8023881
-+ * @summary IDN.USE_STD3_ASCII_RULES option is too strict to use Unicode
-+ * in IDN.toASCII
-+ */
-+
-+import java.net.*;
-+
-+public class UseSTD3ASCIIRules {
-+
-+ public static void main(String[] args) throws Exception {
-+ // Per Section 4.1, RFC 3490, if the UseSTD3ASCIIRules flag is set,
-+ // then perform these checks:
-+ //
-+ // (a) Verify the absence of non-LDH ASCII code points; that is, the
-+ // absence of 0..2C, 2E..2F, 3A..40, 5B..60, and 7B..7F.
-+ //
-+ // (b) Verify the absence of leading and trailing hyphen-minus; that
-+ // is, the absence of U+002D at the beginning and end of the
-+ // sequence.
-+ String[] illegalNames = {
-+ "www.example.com-",
-+ "-www.example.com",
-+ "-www.example.com-",
-+ "www.ex\u002Cmple.com",
-+ "www.ex\u007Bmple.com",
-+ "www.ex\u007Fmple.com"
-+ };
-+
-+ String[] legalNames = {
-+ "www.ex-ample.com",
-+ "www.ex\u002Dmple.com", // www.ex-mple.com
-+ "www.ex\u007Ample.com", // www.exzmple.com
-+ "www.ex\u3042mple.com", // www.xn--exmple-j43e.com
-+ "www.\u3042\u3044\u3046.com", // www.xn--l8jeg.com
-+ "www.\u793A\u4F8B.com" // www.xn--fsq092h.com
-+ };
-+
-+ for (String name : illegalNames) {
-+ try {
-+ System.out.println("Convering illegal IDN: " + name);
-+ IDN.toASCII(name, IDN.USE_STD3_ASCII_RULES);
-+ throw new Exception(
-+ "Expected to get IllegalArgumentException for " + name);
-+ } catch (IllegalArgumentException iae) {
-+ // That's the right behavior.
-+ }
-+ }
-+
-+ for (String name : legalNames) {
-+ System.out.println("Convering legal IDN: " + name);
-+ System.out.println("\tThe ACE form is: " +
-+ IDN.toASCII(name, IDN.USE_STD3_ASCII_RULES));
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/net/PlainSocketImpl/CustomSocketImplFactory.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,107 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8024952
-+ * @summary ClassCastException in PlainSocketImpl.accept() when using custom socketImpl
-+ * @run main/othervm CustomSocketImplFactory
-+ */
-+
-+import java.net.*;
-+import java.io.*;
-+
-+public class CustomSocketImplFactory implements SocketImplFactory {
-+
-+ @Override
-+ public SocketImpl createSocketImpl() {
-+ try {
-+ SocketImpl s = new CustomSocketImpl();
-+ System.out.println("Created " + s);
-+ return s;
-+ } catch (Exception e) {
-+ throw new RuntimeException(e);
-+ }
-+ }
-+
-+ public static void main(String[] args) throws Exception {
-+
-+ Socket.setSocketImplFactory(new CustomSocketImplFactory());
-+ try (ServerSocket ss = new ServerSocket(0)) {
-+ ss.setSoTimeout(1);
-+ ss.accept();
-+ System.out.println("PASS");
-+ } catch (SocketTimeoutException | NullPointerException e) {
-+ // Not a real socket impl
-+ }
-+ }
-+
-+ class CustomSocketImpl extends SocketImpl {
-+
-+ public void create(boolean stream) throws IOException {
-+ }
-+
-+ public void connect(String host, int port) throws IOException {
-+ }
-+
-+ public void connect(InetAddress addr, int port) throws IOException {
-+ }
-+
-+ public void connect(SocketAddress addr, int timeout) throws IOException {
-+ }
-+
-+ public void bind(InetAddress host, int port) throws IOException {
-+ }
-+
-+ public void listen(int backlog) throws IOException {
-+ }
-+
-+ public void accept(SocketImpl s) throws IOException {
-+ }
-+
-+ public InputStream getInputStream() throws IOException {
-+ return null;
-+ }
-+
-+ public OutputStream getOutputStream() throws IOException {
-+ return null;
-+ }
-+
-+ public int available() throws IOException {
-+ return 0;
-+ }
-+
-+ public void close() throws IOException {
-+ }
-+
-+ public void sendUrgentData(int data) throws IOException {
-+ }
-+
-+ public Object getOption(int i) throws SocketException {
-+ return null;
-+ }
-+
-+ public void setOption(int i, Object o) throws SocketException {
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/net/ServerSocket/AnotherSelectFdsLimit.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,78 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8035897
-+ * @summary FD_SETSIZE should be set on macosx
-+ * @run main/othervm AnotherSelectFdsLimit 1023
-+ * @run main/othervm AnotherSelectFdsLimit 1024
-+ * @run main/othervm AnotherSelectFdsLimit 1025
-+ * @run main/othervm AnotherSelectFdsLimit 1600
-+ */
-+
-+import java.io.IOException;
-+import java.net.ServerSocket;
-+import java.net.SocketTimeoutException;
-+import java.util.ArrayList;
-+import java.util.List;
-+
-+public class AnotherSelectFdsLimit {
-+ static final int DEFAULT_FDS_TO_USE = 1600;
-+
-+ public static void main(String [] args) throws Exception {
-+ if (!System.getProperty("os.name").contains("OS X")) {
-+ System.out.println("Test only run on MAC. Exiting.");
-+ return;
-+ }
-+
-+ int fdsToUse = DEFAULT_FDS_TO_USE;
-+ if (args.length == 1)
-+ fdsToUse = Integer.parseInt(args[0]);
-+
-+ System.out.println("Using " + fdsToUse + " fds.");
-+
-+ List<Thread> threads = new ArrayList<>();
-+ for (int i=0; i<fdsToUse; i++)
-+ threads.add(new WorkerThread());
-+
-+ for (Thread t : threads)
-+ t.start();
-+
-+ for (Thread t : threads)
-+ t.join();
-+ }
-+
-+ static class WorkerThread extends Thread {
-+ public void run() {
-+ try (ServerSocket ss = new ServerSocket(0)) {
-+ ss.setSoTimeout(2000);
-+ ss.accept();
-+ } catch (SocketTimeoutException x) {
-+ // expected
-+ } catch (IOException x) {
-+ throw new RuntimeException(x);
-+ }
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/net/ServerSocket/SelectFdsLimit.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,104 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8021820
-+ * @summary The total number of file descriptors is limited to
-+ * 1024(FDSET_SIZE) on MacOSX (the size of fd array passed to select()
-+ * call in java.net classes is limited to this value).
-+ * @run main/othervm SelectFdsLimit
-+ * @author aleksej.efimov@oracle.com
-+ */
-+
-+import java.io.File;
-+import java.io.FileInputStream;
-+import java.io.FileNotFoundException;
-+import java.io.IOException;
-+import java.io.InputStream;
-+import java.net.ServerSocket;
-+import java.net.SocketTimeoutException;
-+
-+
-+/*
-+ * Test must be run in othervm mode to ensure that all files
-+ * opened by openFiles() are closed propertly.
-+*/
-+public class SelectFdsLimit {
-+ static final int FDTOOPEN = 1023;
-+ static final String TESTFILE = "testfile";
-+ static FileInputStream [] testFIS;
-+
-+ static void prepareTestEnv() throws IOException {
-+ File fileToCreate = new File(TESTFILE);
-+ if (!fileToCreate.exists())
-+ if (!fileToCreate.createNewFile())
-+ throw new RuntimeException("Can't create test file");
-+ }
-+
-+ //If there will be some problem (i.e. ulimits on number of opened files will fail)
-+ //then this method will fail with exception and test will be considered as
-+ //failed. But allocated fds will be released because the test is executed by
-+ //dedicated VM (@run main/othervm).
-+ static void openFiles(int fn, File f) throws FileNotFoundException, IOException {
-+ testFIS = new FileInputStream[FDTOOPEN];
-+ for (;;) {
-+ if (0 == fn)
-+ break;
-+ FileInputStream fis = new FileInputStream(f);
-+ testFIS[--fn] = fis;
-+ }
-+ }
-+
-+ public static void main(String [] args) throws IOException, FileNotFoundException {
-+
-+ //The bug 8021820 is a Mac specific and because of that test will pass on all
-+ //other platforms
-+ if (!System.getProperty("os.name").contains("OS X")) {
-+ return;
-+ }
-+
-+ //Create test directory with test files
-+ prepareTestEnv();
-+
-+ //Consume FD ids for this java process to overflow the 1024
-+ openFiles(FDTOOPEN,new File(TESTFILE));
-+
-+ //Wait for incoming connection and make the select() used in java.net
-+ //classes fail the limitation on FDSET_SIZE
-+ ServerSocket socket = new ServerSocket(0);
-+
-+ //Set the minimal timeout, no one is
-+ //going to connect to this server socket
-+ socket.setSoTimeout(1);
-+
-+ // The accept() call will throw SocketException if the
-+ // select() has failed due to limitation on fds size,
-+ // indicating test failure. A SocketTimeoutException
-+ // is expected, so it is caught and ignored, and the test
-+ // passes.
-+ try {
-+ socket.accept();
-+ } catch (SocketTimeoutException e) { }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/net/Socket/asyncClose/Race.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,77 @@
-+/*
-+ * Copyright (c) 2013, 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8006395 8012244
-+ * @summary Tests racing code that reads and closes a Socket
-+ */
-+
-+import java.io.InputStream;
-+import java.net.ServerSocket;
-+import java.net.Socket;
-+import java.net.SocketException;
-+import java.util.concurrent.Phaser;
-+
-+// Racey test, will not always fail, but if it does then we have a problem.
-+
-+public class Race {
-+ final static int THREADS = 100;
-+
-+ public static void main(String[] args) throws Exception {
-+ try (ServerSocket ss = new ServerSocket(0)) {
-+ final int port = ss.getLocalPort();
-+ final Phaser phaser = new Phaser(THREADS + 1);
-+ for (int i=0; i<100; i++) {
-+ final Socket s = new Socket("localhost", port);
-+ s.setSoLinger(false, 0);
-+ try (Socket sa = ss.accept()) {
-+ sa.setSoLinger(false, 0);
-+ final InputStream is = s.getInputStream();
-+ Thread[] threads = new Thread[THREADS];
-+ for (int j=0; j<THREADS; j++) {
-+ threads[j] = new Thread() {
-+ public void run() {
-+ try {
-+ phaser.arriveAndAwaitAdvance();
-+ while (is.read() != -1)
-+ Thread.sleep(50);
-+ } catch (Exception x) {
-+ if (!(x instanceof SocketException
-+ && x.getMessage().equalsIgnoreCase("socket closed")))
-+ x.printStackTrace();
-+ // ok, expect Socket closed
-+ }
-+ }};
-+ }
-+ for (int j=0; j<100; j++)
-+ threads[j].start();
-+ phaser.arriveAndAwaitAdvance();
-+ s.close();
-+ for (int j=0; j<100; j++)
-+ threads[j].join();
-+ }
-+ }
-+ }
-+ }
-+}
---- ./jdk/test/java/net/URLClassLoader/closetest/CloseTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/net/URLClassLoader/closetest/CloseTest.java Wed May 07 19:26:47 2014 -0700
-@@ -25,7 +25,8 @@
- * @test
- * @bug 4167874
- * @library ../../../../com/sun/net/httpserver
-- * @build FileServerHandler
-+ * @library /lib/testlibrary
-+ * @build FileServerHandler jdk.testlibrary.FileUtils
- * @run shell build.sh
- * @run main/othervm CloseTest
- * @summary URL-downloaded jar files can consume all available file descriptors
---- ./jdk/test/java/net/URLClassLoader/closetest/Common.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/net/URLClassLoader/closetest/Common.java Wed May 07 19:26:47 2014 -0700
-@@ -23,6 +23,9 @@
-
- import java.io.*;
- import java.net.*;
-+import java.nio.file.Files;
-+import jdk.testlibrary.FileUtils;
-+import static java.nio.file.StandardCopyOption.*;
-
- public class Common {
-
-@@ -39,42 +42,16 @@
- if (!src.isFile()) {
- throw new RuntimeException ("File not found: " + src.toString());
- }
-- dst.delete();
-- dst.createNewFile();
-- FileInputStream i = new FileInputStream (src);
-- FileOutputStream o = new FileOutputStream (dst);
-- byte[] buf = new byte [1024];
-- int count;
-- while ((count=i.read(buf)) >= 0) {
-- o.write (buf, 0, count);
-- }
-- i.close();
-- o.close();
-+ Files.copy(src.toPath(), dst.toPath(), REPLACE_EXISTING);
- } catch (IOException e) {
- throw new RuntimeException (e);
- }
- }
-
-- static void rm_minus_rf (File path) {
-- if (!path.exists()) {
-+ static void rm_minus_rf (File path) throws IOException, InterruptedException {
-+ if (!path.exists())
- return;
-- }
-- if (path.isFile()) {
-- if (!path.delete()) {
-- throw new RuntimeException ("Could not delete " + path);
-- }
-- } else if (path.isDirectory ()) {
-- String[] names = path.list();
-- File[] files = path.listFiles();
-- for (int i=0; i<files.length; i++) {
-- rm_minus_rf (new File(path, names[i]));
-- }
-- if (!path.delete()) {
-- throw new RuntimeException ("Could not delete " + path);
-- }
-- } else {
-- throw new RuntimeException ("Trying to delete something that isn't a file or a directory");
-- }
-+ FileUtils.deleteFileTreeWithRetry(path.toPath());
- }
-
- static void copyDir (File src, File dst) {
---- ./jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java Wed May 07 19:26:47 2014 -0700
-@@ -24,6 +24,8 @@
- /**
- * @test
- * @bug 6899919
-+ * @library /lib/testlibrary
-+ * @build jdk.testlibrary.FileUtils
- * @run shell build2.sh
- * @run main/othervm GetResourceAsStream
- */
---- ./jdk/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java Wed May 07 19:26:47 2014 -0700
-@@ -36,44 +36,31 @@
- // number of concurrent completion handlers
- static final int CONCURRENCY_COUNT = 256;
-
-+ // set to true if an I/O operation fails
-+ static volatile boolean failed;
-+
-+ // set to true when the test is done
-+ static volatile boolean finished;
-+
- public static void main(String[] args) throws Exception {
-- // all accepted connections are added to a queue
-- final ArrayBlockingQueue<AsynchronousSocketChannel> queue =
-- new ArrayBlockingQueue<AsynchronousSocketChannel>(CONCURRENCY_COUNT);
--
- // create listener to accept connections
-- final AsynchronousServerSocketChannel listener =
-+ AsynchronousServerSocketChannel listener =
- AsynchronousServerSocketChannel.open()
- .bind(new InetSocketAddress(0));
-- listener.accept((Void)null, new CompletionHandler<AsynchronousSocketChannel,Void>() {
-- public void completed(AsynchronousSocketChannel ch, Void att) {
-- queue.add(ch);
-- listener.accept((Void)null, this);
-- }
-- public void failed(Throwable exc, Void att) {
-- }
-- });
-- System.out.println("Listener created.");
-
-- // establish lots of connections
-+ // establish connections
-+
-+ AsynchronousSocketChannel[] clients = new AsynchronousSocketChannel[CONCURRENCY_COUNT];
-+ AsynchronousSocketChannel[] peers = new AsynchronousSocketChannel[CONCURRENCY_COUNT];
-+
- int port = ((InetSocketAddress)(listener.getLocalAddress())).getPort();
- SocketAddress sa = new InetSocketAddress(InetAddress.getLocalHost(), port);
-- AsynchronousSocketChannel[] channels =
-- new AsynchronousSocketChannel[CONCURRENCY_COUNT];
-+
- for (int i=0; i<CONCURRENCY_COUNT; i++) {
-- int attempts = 0;
-- for (;;) {
-- try {
-- channels[i] = AsynchronousSocketChannel.open();
-- channels[i].connect(sa).get();
-- break;
-- } catch (IOException x) {
-- // probably resource issue so back off and retry
-- if (++attempts >= 3)
-- throw x;
-- Thread.sleep(50);
-- }
-- }
-+ clients[i] = AsynchronousSocketChannel.open();
-+ Future<Void> result = clients[i].connect(sa);
-+ peers[i] = listener.accept().get();
-+ result.get();
- }
- System.out.println("All connection established.");
-
-@@ -81,9 +68,9 @@
- final CyclicBarrier barrier = new CyclicBarrier(CONCURRENCY_COUNT+1);
-
- // initiate a read operation on each channel.
-- for (int i=0; i<CONCURRENCY_COUNT; i++) {
-+ for (AsynchronousSocketChannel client: clients) {
- ByteBuffer buf = ByteBuffer.allocateDirect(100);
-- channels[i].read( buf, channels[i],
-+ client.read(buf, client,
- new CompletionHandler<Integer,AsynchronousSocketChannel>() {
- public void completed(Integer bytesRead, AsynchronousSocketChannel ch) {
- try {
-@@ -94,23 +81,29 @@
- }
- }
- public void failed(Throwable exc, AsynchronousSocketChannel ch) {
-+ failed = true;
-+ System.err.println("read failed: " + exc);
-+ completed(0, ch);
- }
- });
- }
- System.out.println("All read operations outstanding.");
-
- // write data to each of the accepted connections
-- int remaining = CONCURRENCY_COUNT;
-- while (remaining > 0) {
-- AsynchronousSocketChannel ch = queue.take();
-- ch.write(ByteBuffer.wrap("welcome".getBytes())).get();
-- ch.close();
-- remaining--;
-+ for (AsynchronousSocketChannel peer: peers) {
-+ peer.write(ByteBuffer.wrap("welcome".getBytes())).get();
-+ peer.shutdownOutput();
-+ peer.close();
- }
-
- // wait for all threads to reach the barrier
- System.out.println("Waiting for all threads to reach barrier");
- barrier.await();
-+
-+ // finish up
-+ finished = true;
- listener.close();
-+ if (failed)
-+ throw new RuntimeException("I/O operation failed, see log for details");
- }
- }
---- ./jdk/test/java/nio/channels/SocketChannel/ShortWrite.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/nio/channels/SocketChannel/ShortWrite.java Wed May 07 19:26:47 2014 -0700
-@@ -22,7 +22,7 @@
- */
-
- /* @test
-- * @bug 7176630
-+ * @bug 7176630 7074436
- * @summary Check for short writes on SocketChannels configured in blocking mode
- */
-
-@@ -40,9 +40,10 @@
- /**
- * Returns a checksum on the remaining bytes in the given buffer.
- */
-- static long computeChecksum(ByteBuffer bb) {
-+ static long computeChecksum(ByteBuffer... bufs) {
- CRC32 crc32 = new CRC32();
-- crc32.update(bb.array());
-+ for (int i=0; i<bufs.length; i++)
-+ crc32.update(bufs[i].array());
- return crc32.getValue();
- }
-
-@@ -71,15 +72,15 @@
- }
-
- /**
-- * Run test with a write of the given number of bytes.
-+ * Exercise write(ByteBuffer) with given number of bytes.
- */
-- static void test(ExecutorService pool,
-- SocketChannel source,
-- SocketChannel sink,
-- int size)
-+ static void test1(ExecutorService pool,
-+ SocketChannel source,
-+ SocketChannel sink,
-+ int size)
- throws Exception
- {
-- System.out.println(size);
-+ System.out.println("write(ByteBuffer), size=" + size);
-
- // random bytes in the buffer
- ByteBuffer buf = ByteBuffer.allocate(size);
-@@ -101,6 +102,47 @@
- throw new RuntimeException("Checksum did not match");
- }
-
-+ /**
-+ * Exercise write(ByteBuffer[]) with buffers of the given sizes.
-+ */
-+ static void testN(ExecutorService pool,
-+ SocketChannel source,
-+ SocketChannel sink,
-+ int... sizes)
-+ throws Exception
-+ {
-+ System.out.print("write(ByteBuffer[]), sizes=");
-+ for (int size: sizes)
-+ System.out.print(size + " ");
-+ System.out.println();
-+
-+ int total = 0;
-+ int len = sizes.length;
-+ ByteBuffer[] bufs = new ByteBuffer[len];
-+ for (int i=0; i<len; i++) {
-+ int size = sizes[i];
-+ ByteBuffer buf = ByteBuffer.allocate(size);
-+ rand.nextBytes(buf.array());
-+ bufs[i] = buf;
-+ total += size;
-+ }
-+
-+ // submit task to read the bytes
-+ Future<Long> result = pool.submit(new Reader(sink, total));
-+
-+ // write the bytes
-+ long n = source.write(bufs);
-+ if (n != total)
-+ throw new RuntimeException("Short write detected");
-+
-+ // check the bytes that were received match
-+ for (int i=0; i<len; i++)
-+ bufs[i].rewind();
-+ long expected = computeChecksum(bufs);
-+ long actual = result.get();
-+ if (actual != expected)
-+ throw new RuntimeException("Checksum did not match");
-+ }
-
- public static void main(String[] args) throws Exception {
- ExecutorService pool = Executors.newSingleThreadExecutor();
-@@ -114,17 +156,47 @@
- try (SocketChannel source = SocketChannel.open(sa);
- SocketChannel sink = ssc.accept())
- {
-- // run tests on sizes around 128k as that is the problem
-- // area on Windows.
-+ // Exercise write(BufferBuffer) on sizes around 128k
- int BOUNDARY = 128 * 1024;
- for (int size=(BOUNDARY-2); size<=(BOUNDARY+2); size++) {
-- test(pool, source, sink, size);
-+ test1(pool, source, sink, size);
- }
-
-- // run tests on random sizes
-+ // Exercise write(BufferBuffer) on random sizes
- for (int i=0; i<20; i++) {
- int size = rand.nextInt(1024*1024);
-- test(pool, source, sink, size);
-+ test1(pool, source, sink, size);
-+ }
-+
-+ // Exercise write(BufferBuffer[]) on sizes around 128k
-+ for (int i=BOUNDARY-2; i<=BOUNDARY+2; i++) {
-+ testN(pool, source, sink, i);
-+ testN(pool, source, sink, 0, i);
-+ testN(pool, source, sink, i, 0);
-+ for (int j=BOUNDARY-2; j<=BOUNDARY+2; j++) {
-+ testN(pool, source, sink, i, j);
-+ testN(pool, source, sink, 0, i, j);
-+ testN(pool, source, sink, i, 0, j);
-+ testN(pool, source, sink, i, j, 0);
-+ for (int k=BOUNDARY-2; k<=BOUNDARY+2; k++) {
-+ testN(pool, source, sink, i, j, k);
-+ testN(pool, source, sink, 0, i, j, k);
-+ testN(pool, source, sink, i, 0, j, k);
-+ testN(pool, source, sink, i, j, 0, k);
-+ testN(pool, source, sink, i, j, k, 0);
-+ }
-+ }
-+ }
-+
-+ // Exercise write(BufferBuffer[]) on random sizes
-+ // (assumes IOV_MAX >= 8)
-+ for (int i=0; i<20; i++) {
-+ int n = rand.nextInt(9);
-+ int[] sizes = new int[n];
-+ for (int j=0; j<n; j++) {
-+ sizes[j] = rand.nextInt(1024*1024);
-+ }
-+ testN(pool, source, sink, sizes);
- }
- }
- }
---- ./jdk/test/java/nio/file/Files/BytesAndLines.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/nio/file/Files/BytesAndLines.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2011, 2013 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
-@@ -22,7 +22,9 @@
- */
-
- /* @test
-- * @bug 7006126
-+ * @bug 7006126 8020669 8024788
-+ * @build BytesAndLines PassThroughFileSystem
-+ * @run main BytesAndLines
- * @summary Unit test for methods for Files readAllBytes, readAllLines and
- * and write methods.
- */
-@@ -82,6 +84,26 @@
- write(file, lines, Charset.defaultCharset(), opts);
- throw new RuntimeException("NullPointerException expected");
- } catch (NullPointerException ignore) { }
-+
-+ // read from procfs
-+ if (System.getProperty("os.name").equals("Linux")) {
-+ // Refer to the Linux proc(5) man page for details about /proc/self/stat file
-+ // procfs reports it to be zero sized, even though data can be read from it
-+ String statFile = "/proc/self/stat";
-+ Path pathStat = Paths.get(statFile);
-+ byte[] data = Files.readAllBytes(pathStat);
-+ assertTrue(data.length > 0, "Files.readAllBytes('" + statFile + "') failed to read");
-+ }
-+
-+ // test readAllBytes on custom file system
-+ Path myfile = PassThroughFileSystem.create().getPath(file.toString());
-+ for (int size=0; size<=1024; size+=512) {
-+ byte[] b1 = new byte[size];
-+ rand.nextBytes(b1);
-+ Files.write(myfile, b1);
-+ byte[] b2 = Files.readAllBytes(myfile);
-+ assertTrue(Arrays.equals(b1, b2), "bytes not equal");
-+ }
- }
-
-
-@@ -174,6 +196,16 @@
- throw new RuntimeException("NullPointerException expected");
- } catch (NullPointerException ignore) { }
-
-+ // read from procfs
-+ if (System.getProperty("os.name").equals("Linux")) {
-+ // Refer to the Linux proc(5) man page for details about /proc/self/status file
-+ // procfs reports this file to be zero sized, even though data can be read from it
-+ String statusFile = "/proc/self/status";
-+ Path pathStatus = Paths.get(statusFile);
-+ lines = Files.readAllLines(pathStatus, US_ASCII);
-+ assertTrue(lines.size() > 0, "Files.readAllLines('" + pathStatus + "') failed to read");
-+ }
-+
- } finally {
- delete(tmpfile);
- }
---- ./jdk/test/java/rmi/testlibrary/TestLibrary.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/rmi/testlibrary/TestLibrary.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1998, 2013, 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
-@@ -127,6 +127,33 @@
- bomb(null, e);
- }
-
-+ /**
-+ * Helper method to determine if registry has started
-+ *
-+ * @param port The port number to check
-+ * @param msTimeout The amount of milliseconds to spend checking
-+ */
-+
-+ public static boolean checkIfRegistryRunning(int port, int msTimeout) {
-+ long stopTime = System.currentTimeMillis() + msTimeout;
-+ do {
-+ try {
-+ Registry r = LocateRegistry.getRegistry(port);
-+ String[] s = r.list();
-+ // no exception. We're now happy that registry is running
-+ return true;
-+ } catch (RemoteException e) {
-+ // problem - not ready ? Try again
-+ try {
-+ Thread.sleep(500);
-+ } catch (InterruptedException ie) {
-+ // not expected
-+ }
-+ }
-+ } while (stopTime > System.currentTimeMillis());
-+ return false;
-+ }
-+
- public static String getProperty(String property, String defaultVal) {
- final String prop = property;
- final String def = defaultVal;
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/util/Arrays/TimSortStackSize.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,123 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8011944
-+ * @summary Test TimSort stack size
-+ */
-+import java.util.Arrays;
-+import java.util.ArrayDeque;
-+import java.util.Comparator;
-+
-+public class TimSortStackSize {
-+
-+ public static void main(String[] args) {
-+ testComparableTimSort();
-+ testTimSort();
-+ }
-+
-+ static void testComparableTimSort() {
-+ System.out.printf("testComparableTimSort()%n");
-+ Arrays.sort(genData());
-+ }
-+
-+ static void testTimSort() {
-+ System.out.printf("testTimSort()%n");
-+ //Arrays.sort(genData(), Integer::compare);
-+ Arrays.sort(genData(),
-+ new java.util.Comparator<Integer>() {
-+ public int compare(Integer a1, Integer a2){
-+ return Integer.compare(a1.intValue(), a2.intValue());
-+ }
-+ });
-+ }
-+
-+ private static final int MIN = 16;
-+
-+ private static final int BOUND1 = 2 * MIN + 1;
-+ private static final int BOUND2 = BOUND1 + MIN + 2;
-+ private static final int BOUND3 = BOUND1 + 1 + BOUND2;
-+ private static final int BOUND4 = BOUND2 + 1 + BOUND3;
-+ private static final int BOUND5 = BOUND3 + 1 + BOUND4;
-+
-+ static int build(int size, int B, ArrayDeque<Integer> chunks) {
-+ chunks.addFirst(B);
-+ if (size < BOUND1) {
-+ chunks.addFirst(size);
-+ return size;
-+ }
-+
-+ int asize = (size + 2) / 2;
-+ if (size >= BOUND2 && asize < BOUND1) {
-+ asize = BOUND1;
-+ } else if (size >= BOUND3 && asize < BOUND2) {
-+ asize = BOUND2;
-+ } else if (size >= BOUND4 && asize < BOUND3) {
-+ asize = BOUND3;
-+ } else if (size >= BOUND5 && asize < BOUND4) {
-+ asize = BOUND4;
-+ }
-+ if (size - asize >= B) {
-+ throw new AssertionError(" " + size + " , " + asize + " , " + B);
-+ }
-+ return build(asize, size - asize, chunks);
-+ }
-+
-+ static Integer[] genData() {
-+ ArrayDeque<Integer> chunks = new ArrayDeque<Integer>();
-+ chunks.addFirst(MIN);
-+
-+ int B = MIN + 4;
-+ int A = B + MIN + 1;
-+
-+ for (int i = 0; i < 8; i++) {
-+ int eps = build(A, B, chunks);
-+ B = B + A + 1;
-+ A = B + eps + 1;
-+ }
-+ chunks.addFirst(B);
-+ chunks.addFirst(A);
-+ int total = 0;
-+ for (Integer len : chunks) {
-+ total += len;
-+ }
-+ int pow = MIN;
-+ while (pow < total) {
-+ pow += pow;
-+ }
-+ chunks.addLast(pow - total);
-+ System.out.println(" Total: " + total);
-+ Integer[] array = new Integer[pow];
-+ int off = 0;
-+ int pos = 0;
-+ for (Integer len : chunks) {
-+ for (int i = 0; i < len; i++) {
-+ array[pos++] = Integer.valueOf(i == 0 ? 0 : 1);
-+ }
-+ off++;
-+ }
-+ return array;
-+ }
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/util/jar/JarInputStream/ExtraFileInMetaInf.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,71 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8021788
-+ * @summary JarInputStream doesn't provide certificates for some file under META-INF
-+ */
-+
-+import java.util.jar.*;
-+import java.io.*;
-+import java.util.zip.ZipEntry;
-+import java.util.zip.ZipOutputStream;
-+
-+public class ExtraFileInMetaInf {
-+ public static void main(String args[]) throws Exception {
-+
-+ // Create a zip file with 2 entries
-+ try (ZipOutputStream zos =
-+ new ZipOutputStream(new FileOutputStream("x.jar"))) {
-+ zos.putNextEntry(new ZipEntry("META-INF/SUB/file"));
-+ zos.write(new byte[10]);
-+ zos.putNextEntry(new ZipEntry("x"));
-+ zos.write(new byte[10]);
-+ zos.close();
-+ }
-+
-+ // Sign it
-+ new File("ks").delete();
-+ sun.security.tools.KeyTool.main(
-+ ("-keystore ks -storepass changeit -keypass changeit " +
-+ "-alias a -dname CN=A -genkeypair").split(" "));
-+ sun.security.tools.JarSigner.main(
-+ "-keystore ks -storepass changeit x.jar a".split(" "));
-+
-+ // Check if the entries are signed
-+ try (JarInputStream jis =
-+ new JarInputStream(new FileInputStream("x.jar"))) {
-+ JarEntry je;
-+ while ((je = jis.getNextJarEntry()) != null) {
-+ String name = je.toString();
-+ if (name.equals("META-INF/SUB/file") || name.equals("x")) {
-+ while (jis.read(new byte[1000]) >= 0);
-+ if (je.getCertificates() == null) {
-+ throw new Exception(name + " not signed");
-+ }
-+ }
-+ }
-+ }
-+ }
-+}
---- ./jdk/test/java/util/logging/LevelResourceBundle.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/util/logging/LevelResourceBundle.java Wed May 07 19:26:47 2014 -0700
-@@ -33,15 +33,19 @@
-
- public class LevelResourceBundle {
- public static void main(String args[]) throws Exception {
-- final String name = "SEVERE";
-- String en = getLocalizedMessage(Locale.getDefault(), name);
-- String fr = getLocalizedMessage(Locale.FRANCE, name);
-+ final String key = "SEVERE";
-+ final String name = "Severe";
-+ String en = getLocalizedMessage(Locale.getDefault(), key);
-+ String fr = getLocalizedMessage(Locale.FRANCE, key);
- if (!name.equals(en)) {
- throw new RuntimeException("Expect " + name + " equals " + en);
- }
- if (name.equals(fr)) {
- throw new RuntimeException("Expect " + name + " not equals " + fr);
- }
-+ if (key.equals(fr)) {
-+ throw new RuntimeException("Expect " + key + " not equals " + fr);
-+ }
- }
-
- private static final String RBNAME = "sun.util.logging.resources.logging";
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/util/logging/LocalizedLevelName.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,103 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.util.*;
-+import java.util.logging.*;
-+
-+/*
-+ * @test
-+ * @bug 8016127 8024131
-+ * @summary test logging.properties localized
-+ * @run main/othervm LocalizedLevelName
-+ */
-+
-+public class LocalizedLevelName {
-+ private static Object[] namesMap = {
-+ "SEVERE", Locale.ENGLISH, "Severe", Level.SEVERE,
-+ "WARNING", Locale.FRENCH, "Avertissement", Level.WARNING,
-+ "INFO", Locale.ITALIAN, "Informazioni", Level.INFO,
-+ "SEVERE", Locale.FRENCH, "Grave", Level.SEVERE,
-+ "CONFIG", Locale.GERMAN, "Konfiguration", Level.CONFIG,
-+ "ALL", Locale.ROOT, "All", Level.ALL,
-+ "SEVERE", Locale.ROOT, "Severe", Level.SEVERE,
-+ "WARNING", Locale.ROOT, "Warning", Level.WARNING,
-+ "CONFIG", Locale.ROOT, "Config", Level.CONFIG,
-+ "INFO", Locale.ROOT, "Info", Level.INFO,
-+ "FINE", Locale.ROOT, "Fine", Level.FINE,
-+ "FINER", Locale.ROOT, "Finer", Level.FINER,
-+ "FINEST", Locale.ROOT, "Finest", Level.FINEST
-+ };
-+
-+ public static void main(String args[]) throws Exception {
-+ Locale defaultLocale = Locale.getDefault();
-+ for (int i=0; i<namesMap.length; i += 4) {
-+ final String key = (String) namesMap[i];
-+ final Locale locale = (Locale) namesMap[i+1];
-+ final String expectedTranslation = (String) namesMap[i+2];
-+ final Level level = (Level) namesMap[i+3];
-+
-+ final String en = getLocalizedMessage(Locale.ENGLISH, key);
-+ final String other = getLocalizedMessage(locale, key);
-+
-+ System.out.println(locale + ": " + key + "=" + expectedTranslation
-+ + ", (Level." + level.getName() + ")");
-+ System.out.println(" => localized(" + Locale.ENGLISH + ", "
-+ + key + ")=" + en);
-+ System.out.println(" => localized(" + locale + ", " + key
-+ + ")=" + other);
-+ if (!key.equals(en.toUpperCase(Locale.ROOT))) {
-+ throw new RuntimeException("Expect " + key
-+ + " equals upperCase(" + en + ")");
-+ }
-+ if (!Locale.ENGLISH.equals(locale) && !Locale.ROOT.equals(locale)
-+ && key.equals(other.toUpperCase(Locale.ROOT))) {
-+ throw new RuntimeException("Expect " + key
-+ + " not equals upperCase(" + other +")");
-+ }
-+ if ((Locale.ENGLISH.equals(locale) || Locale.ROOT.equals(locale))
-+ && !key.equals(other.toUpperCase(Locale.ROOT))) {
-+ throw new RuntimeException("Expect " + key
-+ + " equals upperCase(" + other +")");
-+ }
-+ if (!other.equals(expectedTranslation)) {
-+ throw new RuntimeException("Expected \"" + expectedTranslation
-+ + "\" for '" + locale + "' but got \"" + other + "\"");
-+ }
-+ Locale.setDefault(locale);
-+ final String levelName = level.getLocalizedName();
-+ System.out.println("Level.getLocalizedName() is: " + levelName);
-+ if (!levelName.equals(other.toUpperCase(locale))) {
-+ throw new RuntimeException("Expected \""
-+ + other.toUpperCase(locale) + "\" for '"
-+ + locale + "' but got \"" + levelName + "\"");
-+ }
-+ Locale.setDefault(defaultLocale);
-+ }
-+ }
-+
-+ private static final String RBNAME = "sun.util.logging.resources.logging";
-+ private static String getLocalizedMessage(Locale locale, String key) {
-+ ResourceBundle rb = ResourceBundle.getBundle(RBNAME, locale);
-+ return rb.getString(key);
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/util/logging/TestGetLoggerNPE.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,91 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+import java.io.PrintStream;
-+import java.security.Permission;
-+import java.security.Policy;
-+import java.security.ProtectionDomain;
-+import java.util.logging.LogManager;
-+import java.util.logging.Logger;
-+import sun.awt.SunToolkit;
-+
-+/*
-+ * @test
-+ * @bug 8025512
-+ *
-+ * @summary NPE with logging while launching webstart
-+ *
-+ * @build TestGetLoggerNPE
-+ * @run main/othervm TestGetLoggerNPE getLogger
-+ * @run main/othervm TestGetLoggerNPE getLogManager
-+ */
-+public class TestGetLoggerNPE {
-+ static volatile Throwable thrown = null;
-+ static volatile sun.awt.AppContext context = null;
-+ public static void main(String[] args) throws Exception {
-+ final String testCase = args.length == 0 ? "getLogger" : args[0];
-+ final ThreadGroup tg = new ThreadGroup("TestGroup");
-+ Thread t = new Thread(tg, "test") {
-+ public void run() {
-+ try {
-+ context = SunToolkit.createNewAppContext();
-+ final PrintStream out = System.out;
-+ System.setOut(null);
-+ try {
-+ if ("getLogger".equals(testCase)) {
-+ Logger.getLogger("sun.plugin");
-+ } else {
-+ LogManager.getLogManager();
-+ }
-+ } finally {
-+ System.setOut(out);
-+ }
-+
-+ System.out.println(Logger.global);
-+ } catch (Throwable x) {
-+ x.printStackTrace();
-+ thrown = x;
-+ }
-+ }
-+ };
-+ Policy.setPolicy(new Policy() {
-+ public boolean implies(ProtectionDomain domain,
-+ Permission permission) {
-+ return true; // all permissions
-+ }
-+ });
-+ System.setSecurityManager(new SecurityManager());
-+ t.start();
-+ t.join();
-+ if (context != null && !context.isDisposed()) {
-+ context.dispose();
-+ }
-+ if (thrown == null) {
-+ System.out.println("PASSED: " + testCase);
-+ } else {
-+ System.err.println("FAILED: " + testCase);
-+ throw new Error("Test failed: " + testCase + " - " + thrown, thrown);
-+ }
-+
-+ }
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/util/logging/TestLogConfigurationDeadLock.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,256 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+import java.lang.management.ManagementFactory;
-+import java.lang.management.ThreadInfo;
-+import java.security.Permission;
-+import java.security.Policy;
-+import java.security.ProtectionDomain;
-+import java.util.ArrayList;
-+import java.util.List;
-+import java.util.concurrent.atomic.AtomicLong;
-+import java.util.logging.LogManager;
-+import java.util.logging.Logger;
-+
-+
-+/**
-+ * @test
-+ * @bug 8029281 8027670
-+ * @summary Synchronization issues in Logger and LogManager. This test
-+ * focusses more particularly on potential deadlock in
-+ * drainLoggerRefQueueBounded / readConfiguration
-+ * @run main/othervm TestLogConfigurationDeadLock
-+ * @author danielfuchs
-+ */
-+// This test is a best effort to try & detect issues. The test itself will run
-+// for 8secs. This is usually unsufficient to detect issues.
-+// To get a greater confidence it is recommended to run this test in a loop:
-+// e.g. use something like:
-+// $ while jtreg -jdk:$JDK -verbose:all \
-+// test/java/util/logging/TestLogConfigurationDeadLock.java ; \
-+// do echo Running test again ; done
-+// and let it run for a few hours...
-+//
-+public class TestLogConfigurationDeadLock {
-+
-+ static volatile Exception thrown = null;
-+ static volatile boolean goOn = true;
-+
-+ static final int READERS = 2;
-+ static final int LOGGERS = 2;
-+ static final long TIME = 4 * 1000; // 4 sec.
-+ static final long STEP = 1 * 1000; // message every 1 sec.
-+ static final int LCOUNT = 50; // 50 loggers created in a row...
-+ static final AtomicLong nextLogger = new AtomicLong(0);
-+ static final AtomicLong readCount = new AtomicLong(0);
-+ static final AtomicLong checkCount = new AtomicLong(0);
-+
-+ /**
-+ * This test will run both with and without a security manager.
-+ *
-+ * The test starts a number of threads that will call
-+ * LogManager.readConfiguration() concurrently (ReadConf), then starts
-+ * a number of threads that will create new loggers concurrently
-+ * (AddLogger), and then two additional threads: one (Stopper) that
-+ * will stop the test after 4secs (TIME ms), and one DeadlockDetector
-+ * that will attempt to detect deadlocks.
-+ * If after 4secs no deadlock was detected and no exception was thrown
-+ * then the test is considered a success and passes.
-+ *
-+ * This procedure is done twice: once without a security manager and once
-+ * again with a security manager - which means the test takes ~8secs to
-+ * run.
-+ *
-+ * Note that 8sec may not be enough to detect issues if there are some.
-+ * This is a best effort test.
-+ *
-+ * @param args the command line arguments
-+ */
-+ public static void main(String[] args) throws Exception {
-+
-+ // test without security
-+ System.out.println("No security");
-+ test();
-+
-+ // test with security
-+ System.out.println("\nWith security");
-+ Policy.setPolicy(new Policy() {
-+ @Override
-+ public boolean implies(ProtectionDomain domain, Permission permission) {
-+ if (super.implies(domain, permission)) return true;
-+ // System.out.println("Granting " + permission);
-+ return true; // all permissions
-+ }
-+ });
-+ System.setSecurityManager(new SecurityManager());
-+ test();
-+ }
-+
-+ /**
-+ * Starts all threads, wait 4secs, then stops all threads.
-+ * @throws Exception if a deadlock was detected or an error occurred.
-+ */
-+ public static void test() throws Exception {
-+ goOn = true;
-+ thrown = null;
-+ long sNextLogger = nextLogger.get();
-+ long sReadCount = readCount.get();
-+ long sCheckCount = checkCount.get();
-+ List<Thread> threads = new ArrayList<>();
-+ for (int i = 0; i<READERS; i++) {
-+ threads.add(new ReadConf());
-+ }
-+ for (int i = 0; i<LOGGERS; i++) {
-+ threads.add(new AddLogger());
-+ }
-+ threads.add(new DeadlockDetector());
-+ threads.add(0, new Stopper(TIME));
-+ for (Thread t : threads) {
-+ t.start();
-+ }
-+ for (Thread t : threads) {
-+ try {
-+ t.join();
-+ } catch (Exception x) {
-+ fail(x);
-+ }
-+ }
-+ if (thrown != null) {
-+ throw thrown;
-+ }
-+ System.out.println("Passed: " + (nextLogger.get() - sNextLogger)
-+ + " loggers created by " + LOGGERS + " Thread(s),");
-+ System.out.println("\t LogManager.readConfiguration() called "
-+ + (readCount.get() - sReadCount) + " times by " + READERS
-+ + " Thread(s).");
-+ System.out.println("\t ThreadMXBean.findDeadlockedThreads called "
-+ + (checkCount.get() -sCheckCount) + " times by 1 Thread.");
-+
-+ }
-+
-+
-+ final static class ReadConf extends Thread {
-+ @Override
-+ public void run() {
-+ while (goOn) {
-+ try {
-+ LogManager.getLogManager().readConfiguration();
-+ readCount.incrementAndGet();
-+ Thread.sleep(1);
-+ } catch (Exception x) {
-+ fail(x);
-+ }
-+ }
-+ }
-+ }
-+
-+ final static class AddLogger extends Thread {
-+ @Override
-+ public void run() {
-+ try {
-+ while (goOn) {
-+ Logger l;
-+ Logger foo = Logger.getLogger("foo");
-+ Logger bar = Logger.getLogger("foo.bar");
-+ for (int i=0; i < LCOUNT ; i++) {
-+ l = Logger.getLogger("foo.bar.l"+nextLogger.incrementAndGet());
-+ l.fine("I'm fine");
-+ if (!goOn) break;
-+ Thread.sleep(1);
-+ }
-+ }
-+ } catch (InterruptedException | RuntimeException x ) {
-+ fail(x);
-+ }
-+ }
-+ }
-+
-+ final static class DeadlockDetector extends Thread {
-+
-+ @Override
-+ public void run() {
-+ while(goOn) {
-+ try {
-+ long[] ids = ManagementFactory.getThreadMXBean().findDeadlockedThreads();
-+ checkCount.incrementAndGet();
-+ ids = ids == null ? new long[0] : ids;
-+ if (ids.length == 1) {
-+ throw new RuntimeException("Found 1 deadlocked thread: "+ids[0]);
-+ } else if (ids.length > 0) {
-+ ThreadInfo[] infos = ManagementFactory.getThreadMXBean()
-+ .getThreadInfo(ids, Integer.MAX_VALUE);
-+ System.err.println("Found "+ids.length+" deadlocked threads: ");
-+ for (ThreadInfo inf : infos) {
-+ System.err.println(inf.toString());
-+ }
-+ throw new RuntimeException("Found "+ids.length+" deadlocked threads");
-+ }
-+ Thread.sleep(100);
-+ } catch(InterruptedException | RuntimeException x) {
-+ fail(x);
-+ }
-+ }
-+ }
-+
-+ }
-+
-+ static final class Stopper extends Thread {
-+ long start;
-+ long time;
-+
-+ Stopper(long time) {
-+ start = System.currentTimeMillis();
-+ this.time = time;
-+ }
-+
-+ @Override
-+ public void run() {
-+ try {
-+ long rest, previous;
-+ previous = time;
-+ while (goOn && (rest = start - System.currentTimeMillis() + time) > 0) {
-+ if (previous == time || previous - rest >= STEP) {
-+ Logger.getLogger("remaining").info(String.valueOf(rest)+"ms remaining...");
-+ previous = rest == time ? rest -1 : rest;
-+ System.gc();
-+ }
-+ if (goOn == false) break;
-+ Thread.sleep(Math.min(rest, 100));
-+ }
-+ System.out.println(System.currentTimeMillis() - start
-+ + " ms elapsed ("+time+ " requested)");
-+ goOn = false;
-+ } catch(InterruptedException | RuntimeException x) {
-+ fail(x);
-+ }
-+ }
-+
-+ }
-+
-+ static void fail(Exception x) {
-+ x.printStackTrace();
-+ if (thrown == null) {
-+ thrown = x;
-+ }
-+ goOn = false;
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/util/logging/TestLogConfigurationDeadLockWithConf.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,340 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+import java.io.File;
-+import java.io.PrintStream;
-+import java.lang.management.ManagementFactory;
-+import java.lang.management.ThreadInfo;
-+import java.security.Permission;
-+import java.security.Policy;
-+import java.security.ProtectionDomain;
-+import java.util.ArrayList;
-+import java.util.Collections;
-+import java.util.HashSet;
-+import java.util.List;
-+import java.util.Random;
-+import java.util.Set;
-+import java.util.concurrent.atomic.AtomicLong;
-+import java.util.logging.Level;
-+import java.util.logging.LogManager;
-+import java.util.logging.Logger;
-+
-+
-+/**
-+ * @test
-+ * @bug 8027670 8029281
-+ * @summary Deadlock in drainLoggerRefQueueBounded / readConfiguration
-+ * caused by synchronization issues in Logger and LogManager.
-+ * @run main/othervm TestLogConfigurationDeadLockWithConf
-+ * @author danielfuchs
-+ */
-+// This test is a best effort to try & detect issues. The test itself will run
-+// for 8secs. This is usually sufficient to detect issues.
-+// However to get a greater confidence it is recommended to run this test in a loop:
-+// e.g. use something like:
-+// $ while jtreg -jdk:$JDK -verbose:all \
-+// test/java/util/logging/TestLogConfigurationDeadLockWithConf.java ; \
-+// do echo Running test again ; done
-+// and let it run for a few hours...
-+//
-+public class TestLogConfigurationDeadLockWithConf {
-+
-+ static volatile Exception thrown = null;
-+ static volatile boolean goOn = true;
-+
-+ static final int READERS = 2;
-+ static final int LOGGERS = 2;
-+ static final long TIME = 4 * 1000; // 4 sec.
-+ static final long STEP = 1 * 1000; // message every 1 sec.
-+ static final int LCOUNT = 50; // 50 loggers created in a row...
-+ static final AtomicLong nextLogger = new AtomicLong(0);
-+ static final AtomicLong readCount = new AtomicLong(0);
-+ static final AtomicLong checkCount = new AtomicLong(0);
-+
-+ /**
-+ * This test will run both with and without a security manager.
-+ *
-+ * The test starts a number of threads that will call
-+ * LogManager.readConfiguration() concurrently (ReadConf), then starts
-+ * a number of threads that will create new loggers concurrently
-+ * (AddLogger), and then two additional threads: one (Stopper) that
-+ * will stop the test after 4secs (TIME ms), and one DeadlockDetector
-+ * that will attempt to detect deadlocks.
-+ * If after 4secs no deadlock was detected and no exception was thrown
-+ * then the test is considered a success and passes.
-+ *
-+ * This procedure is done twice: once without a security manager and once
-+ * again with a security manager - which means the test takes ~8secs to
-+ * run.
-+ *
-+ * Note that 8sec may not be enough to detect issues if there are some.
-+ * This is a best effort test.
-+ *
-+ * @param args the command line arguments
-+ * @throws java.lang.Exception if the test fails.
-+ */
-+ public static void main(String[] args) throws Exception {
-+ File config = new File(System.getProperty("test.src", "."),
-+ "deadlockconf.properties");
-+ if (!config.canRead()) {
-+ System.err.println("Can't read config file: test cannot execute.");
-+ System.err.println("Please check your test environment: ");
-+ System.err.println("\t -Dtest.src=" + System.getProperty("test.src", "."));
-+ System.err.println("\t config file is: " + config.getAbsolutePath());
-+ throw new RuntimeException("Can't read config file: "
-+ + config.getAbsolutePath());
-+ }
-+
-+ System.setProperty("java.util.logging.config.file",
-+ config.getAbsolutePath());
-+
-+ // test without security
-+ System.out.println("No security");
-+ test();
-+
-+ // test with security
-+ System.out.println("\nWith security");
-+ Policy.setPolicy(new Policy() {
-+ @Override
-+ public boolean implies(ProtectionDomain domain, Permission permission) {
-+ if (super.implies(domain, permission)) return true;
-+ // System.out.println("Granting " + permission);
-+ return true; // all permissions
-+ }
-+ });
-+ System.setSecurityManager(new SecurityManager());
-+ test();
-+ }
-+
-+ static Random rand = new Random(System.currentTimeMillis());
-+ private static int getBarCount() {
-+ return rand.nextInt(10);
-+ }
-+
-+ /**
-+ * Starts all threads, wait 4secs, then stops all threads.
-+ * @throws Exception if a deadlock was detected or an error occurred.
-+ */
-+ public static void test() throws Exception {
-+ goOn = true;
-+ thrown = null;
-+ long sNextLogger = nextLogger.get();
-+ long sReadCount = readCount.get();
-+ long sCheckCount = checkCount.get();
-+ List<Thread> threads = new ArrayList<>();
-+ for (int i = 0; i<READERS; i++) {
-+ threads.add(new ReadConf());
-+ }
-+ for (int i = 0; i<LOGGERS; i++) {
-+ threads.add(new AddLogger());
-+ }
-+ DeadlockDetector detector = new DeadlockDetector();
-+ threads.add(detector);
-+ threads.add(0, new Stopper(TIME));
-+ for (Thread t : threads) {
-+ t.start();
-+ }
-+
-+ // wait for the detector to finish.
-+ detector.join();
-+
-+ final PrintStream out = thrown == null ? System.out : System.err;
-+
-+ // Try to wait for all threads to finish.
-+ // This is a best effort: if some threads are in deadlock we can't
-+ // obviously wait for them, and other threads may have joined in
-+ // the deadlock since we last checked.
-+ // However, all threads which are succeptible of deadlocking
-+ // extend DeamonThread.
-+ for (Thread t : threads) {
-+ if (t == detector) {
-+ continue;
-+ }
-+ if (detector.deadlocked.contains(t.getId())) {
-+ out.println("Skipping deadlocked thread "
-+ + t.getClass().getSimpleName() + ": " + t);
-+ continue; // don't wait for deadlocked thread: they won't terminate
-+ }
-+ try {
-+ if (detector.deadlocked.isEmpty()) {
-+ t.join();
-+ } else {
-+ if (t instanceof DaemonThread) {
-+ // Some other threads may have join the deadlock.
-+ // don't wait forever.
-+ t.join(100);
-+ } else {
-+ // Those threads that don't extend DaemonThread
-+ // should be safe from deadlock.
-+ out.println("Waiting for "
-+ + t.getClass().getSimpleName() + ": " + t);
-+ t.join();
-+ }
-+ }
-+ } catch (Exception x) {
-+ fail(x);
-+ }
-+ }
-+ out.println("All threads joined.");
-+
-+ final String status = thrown == null ? "Passed" : "FAILED";
-+
-+ out.println(status + ": " + (nextLogger.get() - sNextLogger)
-+ + " loggers created by " + LOGGERS + " Thread(s),");
-+ out.println("\t LogManager.readConfiguration() called "
-+ + (readCount.get() - sReadCount) + " times by " + READERS
-+ + " Thread(s).");
-+ out.println("\t ThreadMXBean.findDeadlockedThreads called "
-+ + (checkCount.get() -sCheckCount) + " times by 1 Thread.");
-+
-+ if (thrown != null) {
-+ out.println("\t Error is: "+thrown.getMessage());
-+ throw thrown;
-+ }
-+ }
-+
-+ static class DaemonThread extends Thread {
-+ public DaemonThread() {
-+ this.setDaemon(true);
-+ }
-+ }
-+
-+ final static class ReadConf extends DaemonThread {
-+ @Override
-+ public void run() {
-+ while (goOn) {
-+ try {
-+ LogManager.getLogManager().readConfiguration();
-+ readCount.incrementAndGet();
-+ Thread.sleep(1);
-+ } catch (Exception x) {
-+ fail(x);
-+ }
-+ }
-+ }
-+ }
-+
-+ final static class AddLogger extends DaemonThread {
-+ @Override
-+ public void run() {
-+ try {
-+ while (goOn) {
-+ Logger l;
-+ int barcount = getBarCount();
-+ for (int i=0; i < LCOUNT ; i++) {
-+ l = Logger.getLogger("foo.bar"+barcount+".l"+nextLogger.incrementAndGet());
-+ l.fine("I'm fine");
-+ if (!goOn) break;
-+ Thread.sleep(1);
-+ }
-+ }
-+ } catch (InterruptedException | RuntimeException x ) {
-+ fail(x);
-+ }
-+ }
-+ }
-+
-+ final static class DeadlockDetector extends Thread {
-+
-+ final Set<Long> deadlocked = Collections.synchronizedSet(new HashSet<Long>());
-+
-+ static List<Long> asList(long... ids) {
-+ final List<Long> list = new ArrayList<>(ids.length);
-+ for (long id : ids) {
-+ list.add(id);
-+ }
-+ return list;
-+ }
-+
-+ @Override
-+ public void run() {
-+ while(goOn) {
-+ try {
-+ long[] ids = ManagementFactory.getThreadMXBean().findDeadlockedThreads();
-+ checkCount.incrementAndGet();
-+ ids = ids == null ? new long[0] : ids;
-+ if (ids.length > 0) {
-+ deadlocked.addAll(asList(ids));
-+ }
-+ if (ids.length == 1) {
-+ throw new RuntimeException("Found 1 deadlocked thread: "+ids[0]);
-+ } else if (ids.length > 0) {
-+ ThreadInfo[] infos = ManagementFactory.getThreadMXBean().getThreadInfo(ids, Integer.MAX_VALUE);
-+ System.err.println("Found "+ids.length+" deadlocked threads: ");
-+ for (ThreadInfo inf : infos) {
-+ System.err.println(inf.toString());
-+ }
-+ throw new RuntimeException("Found "+ids.length+" deadlocked threads");
-+ }
-+ Thread.sleep(100);
-+ } catch(InterruptedException | RuntimeException x) {
-+ fail(x);
-+ }
-+ }
-+ }
-+
-+ }
-+
-+ static final class Stopper extends Thread {
-+ long start;
-+ long time;
-+
-+ static final Logger logger = Logger.getLogger("remaining");
-+
-+ Stopper(long time) {
-+ start = System.currentTimeMillis();
-+ this.time = time;
-+ }
-+
-+ @Override
-+ public void run() {
-+ try {
-+ long rest, previous;
-+ previous = time;
-+ while (goOn && (rest = start - System.currentTimeMillis() + time) > 0) {
-+ if (previous == time || previous - rest >= STEP) {
-+ logger.log(Level.INFO,
-+ "{0}ms remaining...", String.valueOf(rest));
-+ previous = rest == time ? rest -1 : rest;
-+ System.gc();
-+ }
-+ if (goOn == false) break;
-+ Thread.sleep(Math.min(rest, 100));
-+ }
-+ System.out.println(System.currentTimeMillis() - start
-+ + " ms elapsed ("+time+ " requested)");
-+ goOn = false;
-+ } catch(InterruptedException | RuntimeException x) {
-+ fail(x);
-+ }
-+ }
-+
-+ }
-+
-+ static void fail(Exception x) {
-+ x.printStackTrace();
-+ if (thrown == null) {
-+ thrown = x;
-+ }
-+ goOn = false;
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/util/logging/TestLoggerBundleSync.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,535 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.lang.management.ManagementFactory;
-+import java.lang.management.ThreadInfo;
-+import java.security.Permission;
-+import java.security.Policy;
-+import java.security.ProtectionDomain;
-+import java.util.ArrayList;
-+import java.util.List;
-+import java.util.ListResourceBundle;
-+import java.util.Objects;
-+import java.util.ResourceBundle;
-+import java.util.concurrent.Callable;
-+import java.util.concurrent.ExecutorService;
-+import java.util.concurrent.Executors;
-+import java.util.concurrent.FutureTask;
-+import java.util.concurrent.atomic.AtomicLong;
-+import java.util.logging.Handler;
-+import java.util.logging.Level;
-+import java.util.logging.LogRecord;
-+import java.util.logging.Logger;
-+
-+/**
-+ * @test
-+ * @bug 8029281 8028763
-+ * @summary Attempts to detect synchronization issues with getResourceBundle()
-+ * and getResourceBundleName(). It might also detect issues in the way
-+ * that the logger tree is cleaned up after a logger has been garbage
-+ * collected. This test helped find the root cause of 8029092, so if
-+ * this test fails one might also expect failures in
-+ * java/util/logging/Logger/logrb/TestLogrbResourceBundle.java and
-+ * java/util/logging/Logger/setResourceBundle/TestSetResourceBundle.java.
-+ * Note that this is a best effort test. Running it in a loop to
-+ * reproduce intermittent issues can be a good idea.
-+ * @run main/othervm TestLoggerBundleSync
-+ * @author danielfuchs
-+ */
-+public class TestLoggerBundleSync {
-+
-+ static volatile Exception thrown = null;
-+ static volatile boolean goOn = true;
-+
-+ static final int READERS = 3;
-+ static final long TIME = 4 * 1000; // 4 sec.
-+ static final long STEP = 1 * 1000; // message every 1 sec.
-+ static final int LCOUNT = 50; // change bundle 50 times...
-+ static final AtomicLong setRBcount = new AtomicLong(0);
-+ static final AtomicLong setRBNameCount = new AtomicLong(0);
-+ static final AtomicLong getRBcount = new AtomicLong(0);
-+ static final AtomicLong checkCount = new AtomicLong(0);
-+ static final AtomicLong nextLong = new AtomicLong(0);
-+
-+ public static class MyBundle extends ListResourceBundle {
-+ @Override
-+ protected Object[][] getContents() {
-+ return new Object[][] {
-+ {"dummy", "foo"}
-+ };
-+ }
-+ }
-+
-+ public static final class MyBundle1 extends MyBundle { };
-+ public static final class MyBundle2 extends MyBundle { };
-+ public static final class MyBundle3 extends MyBundle { };
-+
-+
-+ public static final class LoggerRB {
-+ public final String resourceBundleName;
-+ public final ResourceBundle userBundle;
-+ public LoggerRB(String name, ResourceBundle bundle) {
-+ resourceBundleName = name;
-+ userBundle = bundle;
-+ }
-+ }
-+
-+ static final List<Class<? extends ResourceBundle>> classes = new ArrayList<>();
-+ static {
-+ classes.add(MyBundle1.class);
-+ classes.add(MyBundle2.class);
-+ classes.add(MyBundle3.class);
-+ }
-+
-+
-+ /**
-+ * This test will run both with and without a security manager.
-+ *
-+ * The test starts a number of threads that will attempt to concurrently
-+ * set resource bundles on Logger, and verifies the consistency of the
-+ * obtained results.
-+ *
-+ * This is a best effort test.
-+ *
-+ * @param args the command line arguments
-+ */
-+ public static void main(String[] args) throws Exception {
-+
-+ try {
-+ // test without security
-+ System.out.println("No security");
-+ test();
-+
-+ // test with security
-+ System.out.println("\nWith security");
-+ Policy.setPolicy(new Policy() {
-+ @Override
-+ public boolean implies(ProtectionDomain domain, Permission permission) {
-+ if (super.implies(domain, permission)) return true;
-+ // System.out.println("Granting " + permission);
-+ return true; // all permissions
-+ }
-+ });
-+ System.setSecurityManager(new SecurityManager());
-+ test();
-+ } finally {
-+ SetRB.executor.shutdownNow();
-+ SetRBName.executor.shutdownNow();
-+ }
-+ }
-+
-+ /**
-+ * Starts all threads, wait 15secs, then stops all threads.
-+ * @throws Exception if a deadlock was detected or an error occurred.
-+ */
-+ public static void test() throws Exception {
-+ goOn = true;
-+ thrown = null;
-+ long sGetRBCount = getRBcount.get();
-+ long sSetRBCount = setRBcount.get();
-+ long sSetRBNameCount = setRBNameCount.get();
-+ long sCheckCount = checkCount.get();
-+ long sNextLong = nextLong.get();
-+ List<Thread> threads = new ArrayList<>();
-+ for (Class<? extends ResourceBundle> type : classes) {
-+ threads.add(new SetRB(type));
-+ threads.add(new SetRBName(type));
-+ }
-+ for (int i =0 ; i < READERS ; i++) {
-+ threads.add(new GetRB());
-+ }
-+ threads.add(new DeadlockDetector());
-+ threads.add(0, new Stopper(TIME));
-+ for (Thread t : threads) {
-+ t.start();
-+ }
-+ for (Thread t : threads) {
-+ try {
-+ t.join();
-+ } catch (Exception x) {
-+ fail(x);
-+ }
-+ }
-+ if (thrown != null) {
-+ throw thrown;
-+ }
-+ System.out.println("Passed: " + (nextLong.longValue() - sNextLong)
-+ + " unique loggers created");
-+ System.out.println("\t " +(getRBcount.get() - sGetRBCount)
-+ + " loggers tested by " + READERS + " Thread(s),");
-+ System.out.println("\t " + (setRBcount.get() - sSetRBCount)
-+ + " resource bundles set by " + classes.size() + " Thread(s),");
-+ System.out.println("\t " + (setRBNameCount.get() - sSetRBNameCount)
-+ + " resource bundle names set by " + classes.size() + " Thread(s),");
-+ System.out.println("\t ThreadMXBean.findDeadlockedThreads called "
-+ + (checkCount.get() -sCheckCount) + " times by 1 Thread.");
-+
-+ }
-+
-+ final static class GetRB extends Thread {
-+ final static class MyHandler extends Handler {
-+ volatile ResourceBundle rb;
-+ volatile String rbName;
-+ @Override
-+ public synchronized void publish(LogRecord record) {
-+ rb = record.getResourceBundle();
-+ rbName = record.getResourceBundleName();
-+ }
-+
-+ @Override
-+ public void flush() {
-+ }
-+
-+ @Override
-+ public void close() throws SecurityException {
-+ }
-+ };
-+ final MyHandler handler = new MyHandler();
-+ @Override
-+ public void run() {
-+ try {
-+ handler.setLevel(Level.FINEST);
-+ while (goOn) {
-+ Logger l;
-+ Logger foo = Logger.getLogger("foo");
-+ Logger bar = Logger.getLogger("foo.bar");
-+ for (long i=0; i < nextLong.longValue() + 100 ; i++) {
-+ if (!goOn) break;
-+ l = Logger.getLogger("foo.bar.l"+i);
-+ final ResourceBundle b = l.getResourceBundle();
-+ final String name = l.getResourceBundleName();
-+ if (b != null) {
-+ if (!name.equals(b.getClass().getName())) {
-+ throw new RuntimeException("Unexpected bundle name: "
-+ +b.getClass().getName());
-+ }
-+ }
-+ Logger ll = Logger.getLogger(l.getName()+".bie.bye");
-+ ResourceBundle hrb;
-+ String hrbName;
-+ ll.setLevel(Level.FINEST);
-+ ll.addHandler(handler);
-+ ll.fine("dummy");
-+ ll.removeHandler(handler);
-+ hrb = handler.rb;
-+ hrbName = handler.rbName;
-+ if (name != null) {
-+ if (!name.equals(hrbName)) {
-+ throw new RuntimeException("Unexpected bundle name: "
-+ +hrb.getClass().getName());
-+ }
-+ if (!name.equals(hrb.getClass().getName())) {
-+ throw new RuntimeException("Unexpected bundle name: "
-+ +hrb.getClass().getName());
-+ }
-+ }
-+
-+ getRBcount.incrementAndGet();
-+ if (!goOn) break;
-+ Thread.sleep(1);
-+ }
-+ }
-+ } catch (Exception x) {
-+ fail(x);
-+ }
-+ }
-+ }
-+
-+ final static class SetRB extends Thread {
-+ final Class<? extends ResourceBundle> type;
-+ final static ExecutorService executor = Executors.newSingleThreadExecutor();
-+ final static class CheckRBTask implements Callable<Exception> {
-+ final Logger logger;
-+ volatile String rbName;
-+ volatile ResourceBundle rb;
-+
-+ public CheckRBTask(Logger logger) {
-+ this.logger = logger;
-+ }
-+
-+ @Override
-+ public Exception call() throws Exception {
-+ try {
-+ final String name = logger.getResourceBundleName();
-+ if (!Objects.equals(name, rbName)) {
-+ throw new RuntimeException("Unexpected rbname for "
-+ + logger.getName() + ": " + name);
-+ }
-+ final ResourceBundle b = logger.getResourceBundle();
-+ if (b != rb) {
-+ throw new RuntimeException("Unexpected rb for "
-+ + logger.getName() + ": " + b);
-+ }
-+ } catch(Exception x) {
-+ return x;
-+ }
-+ return null;
-+ }
-+
-+ public void check() throws Exception {
-+ final FutureTask<Exception> futureTask = new FutureTask<>(this);
-+ executor.submit(futureTask);
-+ Exception x = futureTask.get();
-+ if ( x != null) {
-+ throw new RuntimeException("Check failed: "+x,x);
-+ }
-+ }
-+ }
-+ SetRB(Class<? extends ResourceBundle> type) {
-+ super("SetRB["+type.getSimpleName()+"]");
-+ this.type = type;
-+ }
-+ @Override
-+ public void run() {
-+ try {
-+ while (goOn) {
-+ Logger l;
-+ Logger foo = Logger.getLogger("foo");
-+ Logger bar = Logger.getLogger("foo.bar");
-+ l = Logger.getLogger("foo.bar.l"+nextLong.incrementAndGet());
-+ final CheckRBTask checkTask = new CheckRBTask(l);
-+ checkTask.check();
-+ Logger l1 = l;
-+
-+ for (int i=0; i < LCOUNT ; i++) {
-+ if (!goOn) break;
-+
-+ ResourceBundle b = ResourceBundle.getBundle(type.getName());
-+ try {
-+ l = Logger.getLogger(l1.getName(), type.getName());
-+ checkTask.rb = b;
-+ checkTask.rbName = type.getName();
-+ checkTask.check();
-+ if (!goOn) break;
-+
-+ String name = l.getResourceBundleName();
-+ ResourceBundle bb = l.getResourceBundle();
-+ if (!type.getName().equals(name)) {
-+ throw new RuntimeException(this.getName()
-+ + ": Unexpected name: "+name);
-+ }
-+ if (!b.getClass().getName().equals(name)) {
-+ throw new RuntimeException(this.getName()
-+ + ": Unexpected base name: " +
-+ b.getClass().getName());
-+ }
-+ if (b != bb) {
-+ throw new RuntimeException(this.getName()
-+ + ": Unexpected bundle: "+bb);
-+ }
-+ setRBcount.incrementAndGet();
-+ } catch (IllegalArgumentException x) {
-+ final String name = l.getResourceBundleName();
-+ if (!name.startsWith(MyBundle.class.getName())) {
-+ throw new RuntimeException(this.getName()
-+ + ": Unexpected name: "+name, x);
-+ } else if (type.getName().equals(name)) {
-+ throw new RuntimeException(this.getName()
-+ + ": Unexpected exception for "+name, x);
-+ }
-+ throw x;
-+ }
-+ l.fine("I'm fine");
-+ if (!goOn) break;
-+ Thread.sleep(1);
-+ }
-+ }
-+ } catch (Exception x) {
-+ fail(x);
-+ }
-+ }
-+ }
-+
-+ final static class SetRBName extends Thread {
-+ int nexti = 0;
-+ final Class<? extends ResourceBundle> type;
-+ final static ExecutorService executor = Executors.newSingleThreadExecutor();
-+ final static class CheckRBNameTask implements Callable<Exception> {
-+ final Logger logger;
-+ volatile String rbName;
-+
-+ public CheckRBNameTask(Logger logger) {
-+ this.logger = logger;
-+ }
-+
-+ @Override
-+ public Exception call() throws Exception {
-+ try {
-+ final String name = logger.getResourceBundleName();
-+ if (!Objects.equals(name, rbName)) {
-+ throw new RuntimeException("Unexpected rbname for "
-+ + logger.getName() + ": " + name);
-+ }
-+ final ResourceBundle b = logger.getResourceBundle();
-+ if (!Objects.equals(b == null ? null : b.getClass().getName(), rbName)) {
-+ throw new RuntimeException("Unexpected base name for "
-+ + logger.getName() + ": " + b.getClass().getName());
-+ }
-+ } catch(Exception x) {
-+ return x;
-+ }
-+ return null;
-+ }
-+
-+ public void check() throws Exception {
-+ final FutureTask<Exception> futureTask = new FutureTask<>(this);
-+ executor.submit(futureTask);
-+ Exception x = futureTask.get();
-+ if ( x != null) {
-+ throw new RuntimeException("Check failed: "+x,x);
-+ }
-+ }
-+
-+ }
-+ SetRBName(Class<? extends ResourceBundle> type) {
-+ super("SetRB["+type.getSimpleName()+"]");
-+ this.type = type;
-+ }
-+ @Override
-+ public void run() {
-+ try {
-+ while (goOn) {
-+ Logger foo = Logger.getLogger("foo");
-+ Logger bar = Logger.getLogger("foo.bar");
-+ Logger l = Logger.getLogger("foo.bar.l"+nextLong.incrementAndGet());
-+ final CheckRBNameTask checkTask = new CheckRBNameTask(l);
-+ checkTask.check();
-+
-+ for (int i=0; i < LCOUNT ; i++) {
-+ if (!goOn) break;
-+
-+ try {
-+ Logger l2 = Logger.getLogger(l.getName(), type.getName());
-+ if (l2 != l) {
-+ System.err.println("**** ERROR WITH "+l.getName());
-+ throw new RuntimeException("l2 != l ["
-+ + l2 + "(" + l2.getName() + ") != "
-+ + l + "(" + l.getName() + ")]");
-+ }
-+ checkTask.rbName = type.getName();
-+ checkTask.check();
-+ if (!goOn) break;
-+
-+ String name = l.getResourceBundleName();
-+ ResourceBundle bb = l.getResourceBundle();
-+ if (!type.getName().equals(name)) {
-+ throw new RuntimeException(this.getName()
-+ + ": Unexpected name: "+name);
-+ }
-+ if (!bb.getClass().getName().equals(name)) {
-+ throw new RuntimeException(this.getName()
-+ + ": Unexpected base name: "
-+ + bb.getClass().getName());
-+ }
-+ setRBNameCount.incrementAndGet();
-+ } catch (IllegalArgumentException x) {
-+ final String name = l.getResourceBundleName();
-+ if (!name.startsWith(MyBundle.class.getName())) {
-+ throw new RuntimeException(this.getName()
-+ + ": Unexpected name: "+name, x);
-+ } else if (type.getName().equals(name)) {
-+ throw new RuntimeException(this.getName()
-+ + ": Unexpected exception for "+name, x);
-+ }
-+ throw x;
-+ }
-+ l.fine("I'm fine");
-+ if (!goOn) break;
-+ Thread.sleep(1);
-+ }
-+ }
-+ } catch (Exception x) {
-+ fail(x);
-+ }
-+ }
-+ }
-+
-+ final static class DeadlockDetector extends Thread {
-+
-+ @Override
-+ public void run() {
-+ while(goOn) {
-+ try {
-+ long[] ids = ManagementFactory.getThreadMXBean().findDeadlockedThreads();
-+ checkCount.incrementAndGet();
-+ ids = ids == null ? new long[0] : ids;
-+ if (ids.length == 1) {
-+ throw new RuntimeException("Found 1 deadlocked thread: "+ids[0]);
-+ } else if (ids.length > 0) {
-+ ThreadInfo[] infos = ManagementFactory.getThreadMXBean().getThreadInfo(ids);
-+ System.err.println("Found "+ids.length+" deadlocked threads: ");
-+ for (ThreadInfo inf : infos) {
-+ System.err.println(inf.toString());
-+ }
-+ throw new RuntimeException("Found "+ids.length+" deadlocked threads");
-+ }
-+ Thread.sleep(100);
-+ } catch(InterruptedException | RuntimeException x) {
-+ fail(x);
-+ }
-+ }
-+ }
-+
-+ }
-+
-+ static final class Stopper extends Thread {
-+ long start;
-+ long time;
-+
-+ Stopper(long time) {
-+ start = System.currentTimeMillis();
-+ this.time = time;
-+ }
-+
-+ @Override
-+ public void run() {
-+ try {
-+ long rest, previous;
-+ previous = time;
-+ while (goOn && (rest = start - System.currentTimeMillis() + time) > 0) {
-+ if (previous == time || previous - rest >= STEP) {
-+ Logger.getLogger("remaining").info(String.valueOf(rest)+"ms remaining...");
-+ previous = rest == time ? rest -1 : rest;
-+ System.gc();
-+ }
-+ if (goOn == false) break;
-+ Thread.sleep(Math.min(rest, 100));
-+ }
-+ System.out.println(System.currentTimeMillis() - start
-+ + " ms elapsed ("+time+ " requested)");
-+ goOn = false;
-+ } catch(InterruptedException | RuntimeException x) {
-+ fail(x);
-+ }
-+ }
-+
-+ }
-+
-+ static void fail(Exception x) {
-+ x.printStackTrace();
-+ if (thrown == null) {
-+ thrown = x;
-+ }
-+ goOn = false;
-+ }
-+}
---- ./jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java Wed May 07 19:26:47 2014 -0700
-@@ -59,9 +59,32 @@
- private static int numFail = 0;
- private static List<String> msgs = new ArrayList<>();
-
-+ // This test has been falling in timeout - so we're adding some
-+ // time stamp here and there to help diagnose whether it's a
-+ // simple system slowness or whether there's a deeper issue,
-+ // like a deadlock. The timeout issue should be fixed now,
-+ // but we leave the time stamps in case it reappears.
-+ //
-+ static final long stamp = System.currentTimeMillis();
-+ private static String getTimeStamp() {
-+ long time = System.currentTimeMillis();
-+ long delta = time - stamp;
-+ long min = delta/60000;
-+ long sec = (delta - min * 60000) / 10000;
-+ long msec = delta - min * 60000 - sec * 1000;
-+ return (min == 0 ? "" : (min + " min. ")) +
-+ (sec == 0 ? "" : (sec + " sec. ")) +
-+ (msec == 0 ? "" : (msec + "ms."));
-+ }
-+
- public static void main(String[] args) throws Throwable {
-+ System.out.println("ResourceBundleSearchTest starting: "+getTimeStamp());
- ResourceBundleSearchTest test = new ResourceBundleSearchTest();
-- test.runTests();
-+ try {
-+ test.runTests();
-+ } finally {
-+ System.out.println("ResourceBundleSearchTest terminated: "+getTimeStamp());
-+ }
- }
-
- private void runTests() throws Throwable {
-@@ -82,7 +105,8 @@
- // Test 1 - can we find a Logger bundle from doing a stack search?
- // We shouldn't be able to
- // unless -Djdk.logging.allowStackWalkSearch=true is set
--
-+ int testnb = 1;
-+ System.out.println("ResourceBundleSearchTest starting test #"+(testnb++)+": "+getTimeStamp());
- boolean allowStackWalkSearch = Boolean.getBoolean("jdk.logging.allowStackWalkSearch");
- if (allowStackWalkSearch) {
- assertTrue(testGetBundleFromStackSearch(), "1-testGetBundleFromStackSearch");
-@@ -93,6 +117,7 @@
-
- // Test 2 - can we find a Logger bundle off of the Thread context class
- // loader? We should be able to.
-+ System.out.println("ResourceBundleSearchTest starting test #"+(testnb++)+": "+getTimeStamp());
- assertTrue(testGetBundleFromTCCL(TCCL_TEST_BUNDLE, rbClassLoader),
- "2-testGetBundleFromTCCL");
-
-@@ -100,6 +125,7 @@
- // able to. We'll first check to make sure the setup is correct and
- // it actually is on the classpath before checking whether logging
- // can see it there.
-+ System.out.println("ResourceBundleSearchTest starting test #"+(testnb++)+": "+getTimeStamp());
- if (isOnClassPath(PROP_RB_NAME, myClassLoader)) {
- debug("We should be able to see " + PROP_RB_NAME + " on the classpath");
- assertTrue(testGetBundleFromSystemClassLoader(PROP_RB_NAME),
-@@ -111,17 +137,20 @@
-
- // Test 4 - we should be able to find a bundle from the caller's
- // classloader, but only one level up.
-+ System.out.println("ResourceBundleSearchTest starting test #"+(testnb++)+": "+getTimeStamp());
- assertTrue(testGetBundleFromCallersClassLoader(),
- "4-testGetBundleFromCallersClassLoader");
-
- // Test 5 - this ensures that getAnonymousLogger(String rbName)
- // can find the bundle from the caller's classloader
-+ System.out.println("ResourceBundleSearchTest starting test #"+(testnb++)+": "+getTimeStamp());
- assertTrue(testGetAnonymousLogger(), "5-testGetAnonymousLogger");
-
- // Test 6 - first call getLogger("myLogger").
- // Then call getLogger("myLogger","bundleName") from a different ClassLoader
- // Make sure we find the bundle
- if (!allowStackWalkSearch) {
-+ System.out.println("ResourceBundleSearchTest starting test #"+(testnb++)+": "+getTimeStamp());
- assertTrue(testGetBundleFromSecondCallersClassLoader(),
- "6-testGetBundleFromSecondCallersClassLoader");
- }
-@@ -144,6 +173,7 @@
- public void assertTrue(boolean testResult, String testName) {
- if (testResult) {
- numPass++;
-+ System.out.println("PASSED: " + testName);
- } else {
- numFail++;
- System.out.println("FAILED: " + testName
-@@ -154,6 +184,7 @@
- public void assertFalse(boolean testResult, String testName) {
- if (!testResult) {
- numPass++;
-+ System.out.println("PASSED: " + testName);
- } else {
- numFail++;
- System.out.println("FAILED: " + testName
-@@ -182,12 +213,10 @@
- debug("Looking for " + bundleName + " using TCCL");
- LoggingThread lr = new LoggingThread(bundleName, setOnTCCL);
- lr.start();
-- synchronized (lr) {
-- try {
-- lr.wait();
-- } catch (InterruptedException ex) {
-- throw ex;
-- }
-+ try {
-+ lr.join();
-+ } catch (InterruptedException ex) {
-+ throw ex;
- }
- msgs.add(lr.msg);
- return lr.foundBundle;
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/java/util/logging/deadlockconf.properties Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,22 @@
-+# This file is used by TestLogConfigurationDeadLockWithConf
-+handlers= java.util.logging.ConsoleHandler
-+.level= INFO
-+java.util.logging.ConsoleHandler.level = INFO
-+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
-+
-+
-+foo.bar0.level = INFO
-+foo.bar1.level = INFO
-+foo.bar2.level = INFO
-+foo.bar3.level = INFO
-+foo.bar4.level = INFO
-+
-+# We leave foo.bar5 out so that we have at least
-+# one logger whose parent won't be in the configuration
-+# file
-+#foo.bar5.level = INFO
-+
-+foo.bar6.level = INFO
-+foo.bar7.level = INFO
-+foo.bar8.level = INFO
-+foo.bar9.level = INFO
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/management/MBeanInfo/MBeanInfoEqualsNPETest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,216 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import javax.management.MBeanAttributeInfo;
-+import javax.management.MBeanConstructorInfo;
-+import javax.management.MBeanFeatureInfo;
-+import javax.management.MBeanInfo;
-+import javax.management.MBeanNotificationInfo;
-+import javax.management.MBeanOperationInfo;
-+import javax.management.MBeanParameterInfo;
-+import javax.management.modelmbean.DescriptorSupport;
-+import javax.management.openmbean.SimpleType;
-+
-+/*
-+ * @test
-+ * @bug 8023954
-+ * @summary Test that MBean*Info.equals do not throw NPE
-+ * @author Shanliang JIANG
-+ * @run clean MBeanInfoEqualsNPETest
-+ * @run build MBeanInfoEqualsNPETest
-+ * @run main MBeanInfoEqualsNPETest
-+ */
-+public class MBeanInfoEqualsNPETest {
-+ private static int failed = 0;
-+
-+ public static void main(String[] args) throws Exception {
-+ System.out.println("---MBeanInfoEqualsNPETest-main ...");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanAttributeInfo...");
-+ MBeanAttributeInfo mbeanAttributeInfo0 = new MBeanAttributeInfo(
-+ "name", SimpleType.INTEGER.getClassName(), "description", true, true, false);
-+ MBeanAttributeInfo mbeanAttributeInfo = new MBeanAttributeInfo(
-+ null, SimpleType.INTEGER.getClassName(), "description", true, true, false);
-+ test(mbeanAttributeInfo0, mbeanAttributeInfo, "class name");
-+
-+ mbeanAttributeInfo = new MBeanAttributeInfo(
-+ "name", null, "description", true, true, false);
-+ test(mbeanAttributeInfo0, mbeanAttributeInfo, "type");
-+
-+ mbeanAttributeInfo = new MBeanAttributeInfo(
-+ "name", SimpleType.INTEGER.getClassName(), null, true, true, false);
-+ test(mbeanAttributeInfo0, mbeanAttributeInfo, "description");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanConstructorInfo...");
-+ MBeanConstructorInfo mbeanConstructorInfo0 = new MBeanConstructorInfo(
-+ "", "", new MBeanParameterInfo[]{}, new DescriptorSupport());
-+ MBeanConstructorInfo mbeanConstructorInfo = new MBeanConstructorInfo(
-+ null, "", new MBeanParameterInfo[]{}, new DescriptorSupport());
-+ test(mbeanConstructorInfo0, mbeanConstructorInfo, "name");
-+
-+ mbeanConstructorInfo = new MBeanConstructorInfo(
-+ "", null, new MBeanParameterInfo[]{}, new DescriptorSupport());
-+ test(mbeanConstructorInfo0, mbeanConstructorInfo, "description");
-+
-+ mbeanConstructorInfo = new MBeanConstructorInfo(
-+ "", "", null, new DescriptorSupport());
-+ test(mbeanConstructorInfo0, mbeanConstructorInfo, "MBeanParameterInfo");
-+
-+ mbeanConstructorInfo = new MBeanConstructorInfo(
-+ "", "", new MBeanParameterInfo[]{}, null);
-+ test(mbeanConstructorInfo0, mbeanConstructorInfo, "descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanOperationInfo...");
-+ MBeanOperationInfo mbeanOperationInfo0 = new MBeanOperationInfo(
-+ "name", "description", new MBeanParameterInfo[]{}, "type",
-+ MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
-+
-+ MBeanOperationInfo mbeanOperationInfo = new MBeanOperationInfo(
-+ null, "description", new MBeanParameterInfo[]{}, "type",
-+ MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
-+ test(mbeanOperationInfo0, mbeanOperationInfo, "name");
-+
-+ mbeanOperationInfo = new MBeanOperationInfo(
-+ "name", null, new MBeanParameterInfo[]{}, "type",
-+ MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
-+ test(mbeanOperationInfo0, mbeanOperationInfo, "description");
-+
-+ mbeanOperationInfo = new MBeanOperationInfo(
-+ "name", "description", null, "type", 1, new DescriptorSupport());
-+ test(mbeanOperationInfo0, mbeanOperationInfo, "MBeanParameterInfo");
-+
-+ mbeanOperationInfo = new MBeanOperationInfo(
-+ "name", "description", new MBeanParameterInfo[]{}, null,
-+ MBeanOperationInfo.UNKNOWN, new DescriptorSupport());
-+ test(mbeanOperationInfo0, mbeanOperationInfo, "type");
-+
-+ mbeanOperationInfo = new MBeanOperationInfo(
-+ "name", "description", new MBeanParameterInfo[]{}, null,
-+ MBeanOperationInfo.UNKNOWN, null);
-+ test(mbeanOperationInfo0, mbeanOperationInfo, "Descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanParameterInfo...");
-+ MBeanParameterInfo mbeanParameterInfo0 = new MBeanParameterInfo(
-+ "name", "type", "description", new DescriptorSupport());
-+ MBeanParameterInfo mbeanParameterInfo = new MBeanParameterInfo(
-+ null, "type", "description", new DescriptorSupport());
-+ test(mbeanParameterInfo0, mbeanParameterInfo, "name");
-+
-+ mbeanParameterInfo = new MBeanParameterInfo(
-+ "name", null, "description", new DescriptorSupport());
-+ test(mbeanParameterInfo0, mbeanParameterInfo, "type");
-+
-+ mbeanParameterInfo = new MBeanParameterInfo(
-+ "name", "type", null, new DescriptorSupport());
-+ test(mbeanParameterInfo0, mbeanParameterInfo, "description");
-+
-+ mbeanParameterInfo = new MBeanParameterInfo(
-+ "name", "type", "description", null);
-+ test(mbeanParameterInfo0, mbeanParameterInfo, "Descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanFeatureInfo ...");
-+ MBeanFeatureInfo mbeanFeatureInfo0 = new MBeanFeatureInfo(
-+ "name", "description", new DescriptorSupport());
-+ MBeanFeatureInfo mbeanFeatureInfo = new MBeanFeatureInfo(
-+ null, "description", new DescriptorSupport());
-+ test(mbeanFeatureInfo0, mbeanFeatureInfo, "name");
-+
-+ mbeanFeatureInfo = new MBeanFeatureInfo(
-+ "name", null, new DescriptorSupport());
-+ test(mbeanParameterInfo0, mbeanParameterInfo, "description");
-+
-+ mbeanFeatureInfo = new MBeanFeatureInfo(
-+ "name", "description", null);
-+ test(mbeanParameterInfo0, mbeanParameterInfo, "Descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanInfo...");
-+ String className = "toto";
-+ String description = "titi";
-+ MBeanAttributeInfo[] attrInfos = new MBeanAttributeInfo[]{};
-+ MBeanConstructorInfo[] constrInfos = new MBeanConstructorInfo[]{};
-+ MBeanOperationInfo[] operaInfos = new MBeanOperationInfo[]{};
-+ MBeanNotificationInfo[] notifInfos = new MBeanNotificationInfo[]{};
-+
-+ MBeanInfo minfo0 = new MBeanInfo("toto", description, attrInfos, constrInfos, operaInfos, notifInfos);
-+ MBeanInfo minfo = new MBeanInfo(null, description, attrInfos, constrInfos, operaInfos, notifInfos);
-+ test(minfo0, minfo, "class name");
-+
-+ minfo = new MBeanInfo(className, null, attrInfos, constrInfos, operaInfos, notifInfos);
-+ test(minfo0, minfo, "description");
-+
-+ minfo = new MBeanInfo(className, description, null, constrInfos, operaInfos, notifInfos);
-+ test(minfo0, minfo, "attrInfos");
-+
-+ minfo = new MBeanInfo(className, description, attrInfos, null, operaInfos, notifInfos);
-+ test(minfo0, minfo, "constrInfos");
-+
-+ minfo = new MBeanInfo(className, description, attrInfos, constrInfos, null, notifInfos);
-+ test(minfo0, minfo, "operaInfos");
-+
-+ minfo = new MBeanInfo(className, description, attrInfos, constrInfos, operaInfos, null);
-+ test(minfo0, minfo, "notifInfos");
-+
-+ if (failed > 0) {
-+ throw new RuntimeException("Test failed: "+failed);
-+ } else {
-+ System.out.println("---Test: PASSED");
-+ }
-+ }
-+
-+ private static void test(Object obj1, Object obj2, String param) {
-+ try {
-+ obj1.equals(obj2);
-+ System.out.println("OK-1: "+obj1.getClass().getSimpleName()+".equals worked with a null paramer: "+param);
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO-1!!! "+obj1.getClass().getSimpleName()+".equals got NPE with a null paramer: "+param);
-+ npe.printStackTrace();
-+ failed++;
-+ }
-+
-+ try {
-+ obj2.equals(obj1);
-+ System.out.println("OK-2: "+obj2.getClass().getSimpleName()+".equals worked with a null paramer: "+param);
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO-2!!! "+obj2.getClass().getSimpleName()+".equals got NPE with a null paramer: "+param);
-+ npe.printStackTrace();
-+ failed++;
-+ }
-+
-+ try {
-+ obj1.equals(null);
-+ obj2.equals(null);
-+
-+ System.out.println("OK-3: "+obj1.getClass().getSimpleName()+".equals worked with a null field.");
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO-3!!! "+obj1.getClass().getSimpleName()+".equals got NPE with a null field.");
-+ npe.printStackTrace();
-+ failed++;
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/management/MBeanInfo/MBeanInfoHashCodeNPETest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,176 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import javax.management.MBeanAttributeInfo;
-+import javax.management.MBeanConstructorInfo;
-+import javax.management.MBeanInfo;
-+import javax.management.MBeanNotificationInfo;
-+import javax.management.MBeanOperationInfo;
-+import javax.management.MBeanParameterInfo;
-+import javax.management.modelmbean.DescriptorSupport;
-+import javax.management.openmbean.SimpleType;
-+
-+/*
-+ * @test
-+ * @bug 8023669
-+ * @summary Test that hashCode()throws NullPointerException
-+ * @author Shanliang JIANG
-+ * @run clean MBeanInfoHashCodeNPETest
-+ * @run build MBeanInfoHashCodeNPETest
-+ * @run main MBeanInfoHashCodeNPETest
-+ */
-+public class MBeanInfoHashCodeNPETest {
-+ private static int failed = 0;
-+
-+ public static void main(String[] args) throws Exception {
-+ System.out.println("---MBeanInfoHashCodeNPETest-main ...");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanAttributeInfo...");
-+ MBeanAttributeInfo mbeanAttributeInfo = new MBeanAttributeInfo(
-+ null, SimpleType.INTEGER.getClassName(), "description", true, true, false);
-+ test(mbeanAttributeInfo, "class name");
-+
-+ mbeanAttributeInfo = new MBeanAttributeInfo(
-+ "name", null, "description", true, true, false);
-+ test(mbeanAttributeInfo, "type");
-+
-+ mbeanAttributeInfo = new MBeanAttributeInfo(
-+ "name", SimpleType.INTEGER.getClassName(), null, true, true, false);
-+ test(mbeanAttributeInfo, "description");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanConstructorInfo...");
-+ MBeanConstructorInfo mbeanConstructorInfo = new MBeanConstructorInfo(
-+ null, "", new MBeanParameterInfo[]{}, new DescriptorSupport());
-+ test(mbeanConstructorInfo, "name");
-+
-+ mbeanConstructorInfo = new MBeanConstructorInfo(
-+ "", null, new MBeanParameterInfo[]{}, new DescriptorSupport());
-+ test(mbeanConstructorInfo, "description");
-+
-+ mbeanConstructorInfo = new MBeanConstructorInfo(
-+ "", "", null, new DescriptorSupport());
-+ test(mbeanConstructorInfo, "MBeanParameterInfo");
-+
-+ mbeanConstructorInfo = new MBeanConstructorInfo(
-+ "", "", new MBeanParameterInfo[]{}, null);
-+ test(mbeanConstructorInfo, "descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanOperationInfo...");
-+ MBeanOperationInfo mbeanOperationInfo = new MBeanOperationInfo(
-+ null, "description", new MBeanParameterInfo[]{}, "type", 1, new DescriptorSupport());
-+ test(mbeanOperationInfo, "name");
-+
-+ mbeanOperationInfo = new MBeanOperationInfo(
-+ "name", null, new MBeanParameterInfo[]{}, "type", 1, new DescriptorSupport());
-+ test(mbeanOperationInfo, "description");
-+
-+ mbeanOperationInfo = new MBeanOperationInfo(
-+ "name", "description", null, "type", 1, new DescriptorSupport());
-+ test(mbeanOperationInfo, "MBeanParameterInfo");
-+
-+ mbeanOperationInfo = new MBeanOperationInfo(
-+ "name", "description", new MBeanParameterInfo[]{}, null, 1, new DescriptorSupport());
-+ test(mbeanOperationInfo, "type");
-+
-+ mbeanOperationInfo = new MBeanOperationInfo(
-+ "name", "description", new MBeanParameterInfo[]{}, "type", -1, new DescriptorSupport());
-+ test(mbeanOperationInfo, "native impact");
-+
-+ mbeanOperationInfo = new MBeanOperationInfo(
-+ "name", "description", new MBeanParameterInfo[]{}, "type", 1, null);
-+ test(mbeanOperationInfo, "Descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanParameterInfo...");
-+ MBeanParameterInfo mbeanParameterInfo = new MBeanParameterInfo(
-+ null, "type", "description", new DescriptorSupport());
-+ test(mbeanParameterInfo, "name");
-+
-+ mbeanParameterInfo = new MBeanParameterInfo(
-+ "name", null, "description", new DescriptorSupport());
-+ test(mbeanParameterInfo, "description");
-+
-+ mbeanParameterInfo = new MBeanParameterInfo(
-+ "name", "type", null, new DescriptorSupport());
-+ test(mbeanParameterInfo, "description");
-+
-+ mbeanParameterInfo = new MBeanParameterInfo(
-+ "name", "type", "description", null);
-+ test(mbeanParameterInfo, "Descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on MBeanInfo...");
-+ String className = "toto";
-+ String description = "titi";
-+ MBeanAttributeInfo[] attrInfos = new MBeanAttributeInfo[]{};
-+ MBeanConstructorInfo[] constrInfos = new MBeanConstructorInfo[]{};
-+ MBeanOperationInfo[] operaInfos = new MBeanOperationInfo[]{};
-+ MBeanNotificationInfo[] notifInfos = new MBeanNotificationInfo[]{};
-+
-+ MBeanInfo minfo = new MBeanInfo(null, description, attrInfos, constrInfos, operaInfos, notifInfos);
-+ test(minfo, "class name");
-+
-+ minfo = new MBeanInfo(className, description, attrInfos, constrInfos, operaInfos, notifInfos);
-+ test(minfo, "name");
-+
-+ minfo = new MBeanInfo(className, null, attrInfos, constrInfos, operaInfos, notifInfos);
-+ test(minfo, "description");
-+
-+ minfo = new MBeanInfo(className, description, null, constrInfos, operaInfos, notifInfos);
-+ test(minfo, "attrInfos");
-+
-+ minfo = new MBeanInfo(className, description, attrInfos, constrInfos, null, notifInfos);
-+ test(minfo, "operaInfos");
-+
-+ minfo = new MBeanInfo(className, description, attrInfos, constrInfos, operaInfos, null);
-+ test(minfo, "notifInfos");
-+
-+ Thread.sleep(100);
-+ if (failed > 0) {
-+ throw new RuntimeException("Test failed: "+failed);
-+ } else {
-+ System.out.println("---Test: PASSED");
-+ }
-+ }
-+
-+ private static void test(Object obj, String param) {
-+ try {
-+ obj.hashCode();
-+ System.out.println("OK: "+obj.getClass().getSimpleName()+".hashCode worked with a null "+param);
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO!!! "+obj.getClass().getSimpleName()+".hashCode got NPE with a null "+param);
-+ failed++;
-+ }
-+
-+ try {
-+ obj.toString();
-+ System.out.println("OK: "+obj.getClass().getSimpleName()+".toString worked with a null "+param);
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO!!! "+obj.getClass().getSimpleName()+".toString got NPE.");
-+ failed++;
-+ }
-+ }
-+}
---- ./jdk/test/javax/management/monitor/CounterMonitorThresholdTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/management/monitor/CounterMonitorThresholdTest.java Wed May 07 19:26:47 2014 -0700
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 6229368
-+ * @bug 6229368 8025207
- * @summary Wrong threshold value in CounterMonitor with offset and modulus.
- * @author Luis-Miguel Alventosa
- * @run clean CounterMonitorThresholdTest
-@@ -144,16 +144,14 @@
- for (int i = 0; i < counter.length; i++) {
- mbean.setCounter(counter[i]);
- System.out.println("\nCounter = " + mbean.getCounter());
-- Thread.sleep(300);
-- Integer derivedGaugeValue = (Integer) cm.getDerivedGauge(name);
-- System.out.println("Derived Gauge = " + derivedGaugeValue);
-- if (derivedGaugeValue.intValue() != derivedGauge[i]) {
-- System.out.println("Wrong derived gauge! Current value = " +
-- derivedGaugeValue + " Expected value = " + derivedGauge[i]);
-- System.out.println("\nStop monitoring...");
-- cm.stop();
-- throw new IllegalArgumentException("wrong derived gauge");
-- }
-+ Integer derivedGaugeValue;
-+ // either pass or test timeout (killed by test harness)
-+ // see 8025207
-+ do {
-+ Thread.sleep(150);
-+ derivedGaugeValue = (Integer) cm.getDerivedGauge(name);
-+ } while (derivedGaugeValue.intValue() != derivedGauge[i]);
-+
- Number thresholdValue = cm.getThreshold(name);
- System.out.println("Threshold = " + thresholdValue);
- if (thresholdValue.intValue() != threshold[i]) {
-@@ -163,7 +161,6 @@
- cm.stop();
- throw new IllegalArgumentException("wrong threshold");
- }
-- Thread.sleep(300);
- }
-
- // Stop the monitor
---- ./jdk/test/javax/management/monitor/NullAttributeValueTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/management/monitor/NullAttributeValueTest.java Wed May 07 19:26:47 2014 -0700
-@@ -23,11 +23,12 @@
-
- /*
- * @test
-- * @bug 6200031
-+ * @bug 6200031 8025206
- * @summary Test that the counter/gauge/string monitors emit a
- * jmx.monitor.error.type notification when the attribute
- * being monitored returns a null value.
- * @author Luis-Miguel Alventosa
-+ * @author Shanliang JIANG
- * @run clean NullAttributeValueTest
- * @run build NullAttributeValueTest
- * @run main NullAttributeValueTest
-@@ -39,7 +40,7 @@
- public class NullAttributeValueTest implements NotificationListener {
-
- // Flag to notify that a message has been received
-- private boolean messageReceived = false;
-+ private volatile boolean messageReceived = false;
-
- // MBean class
- public class ObservedObject implements ObservedObjectMBean {
-@@ -83,7 +84,6 @@
- * Update the counter and check for notifications
- */
- public int counterMonitorNotification() throws Exception {
--
- CounterMonitor counterMonitor = null;
- try {
- MBeanServer server = MBeanServerFactory.newMBeanServer();
-@@ -134,31 +134,17 @@
- echo(">>> START the CounterMonitor");
- counterMonitor.start();
-
-- // Wait for granularity period (multiplied by 2 for sure)
-- //
-- Thread.sleep(granularityperiod * 2);
--
-- // Check if notification was received
-- //
-- if (messageReceived) {
-- echo("\tOK: CounterMonitor notification received");
-- } else {
-- echo("\tKO: CounterMonitor notification missed or not emitted");
-- return 1;
-- }
-+ return checkReceived(granularityperiod, "CounterMonitor");
- } finally {
- if (counterMonitor != null)
- counterMonitor.stop();
- }
--
-- return 0;
- }
-
- /**
- * Update the gauge and check for notifications
- */
- public int gaugeMonitorNotification() throws Exception {
--
- GaugeMonitor gaugeMonitor = null;
- try {
- MBeanServer server = MBeanServerFactory.newMBeanServer();
-@@ -212,31 +198,17 @@
- echo(">>> START the GaugeMonitor");
- gaugeMonitor.start();
-
-- // Wait for granularity period (multiplied by 2 for sure)
-- //
-- Thread.sleep(granularityperiod * 2);
--
-- // Check if notification was received
-- //
-- if (messageReceived) {
-- echo("\tOK: GaugeMonitor notification received");
-- } else {
-- echo("\tKO: GaugeMonitor notification missed or not emitted");
-- return 1;
-- }
-+ return checkReceived(granularityperiod, "GaugeMonitor");
- } finally {
- if (gaugeMonitor != null)
- gaugeMonitor.stop();
- }
--
-- return 0;
- }
-
- /**
- * Update the string and check for notifications
- */
- public int stringMonitorNotification() throws Exception {
--
- StringMonitor stringMonitor = null;
- try {
- MBeanServer server = MBeanServerFactory.newMBeanServer();
-@@ -289,24 +261,11 @@
- echo(">>> START the StringMonitor");
- stringMonitor.start();
-
-- // Wait for granularity period (multiplied by 2 for sure)
-- //
-- Thread.sleep(granularityperiod * 2);
--
-- // Check if notification was received
-- //
-- if (messageReceived) {
-- echo("\tOK: StringMonitor notification received");
-- } else {
-- echo("\tKO: StringMonitor notification missed or not emitted");
-- return 1;
-- }
-+ return checkReceived(granularityperiod, "StringMonitor");
- } finally {
- if (stringMonitor != null)
- stringMonitor.stop();
- }
--
-- return 0;
- }
-
- /**
-@@ -326,6 +285,21 @@
- return error;
- }
-
-+ private int checkReceived(long granularityperiod, String caller) throws InterruptedException {
-+ int i = 100;
-+ do {
-+ Thread.sleep(granularityperiod);
-+ } while (!messageReceived && i-- > 0);
-+
-+ if (messageReceived) {
-+ echo("\tOK: " + caller + " notification received");
-+ } else {
-+ echo("\tKO: " + caller + " notification missed or not emitted");
-+ }
-+
-+ return messageReceived ? 0 : 1;
-+ }
-+
- /*
- * Print message
- */
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/management/openmbean/OpenMBeanInfoEqualsNPETest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,196 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import javax.management.MBeanNotificationInfo;
-+import javax.management.MBeanOperationInfo;
-+import javax.management.modelmbean.DescriptorSupport;
-+import javax.management.openmbean.OpenMBeanAttributeInfo;
-+import javax.management.openmbean.OpenMBeanAttributeInfoSupport;
-+import javax.management.openmbean.OpenMBeanConstructorInfo;
-+import javax.management.openmbean.OpenMBeanConstructorInfoSupport;
-+import javax.management.openmbean.OpenMBeanInfo;
-+import javax.management.openmbean.OpenMBeanInfoSupport;
-+import javax.management.openmbean.OpenMBeanOperationInfo;
-+import javax.management.openmbean.OpenMBeanOperationInfoSupport;
-+import javax.management.openmbean.OpenMBeanParameterInfo;
-+import javax.management.openmbean.OpenMBeanParameterInfoSupport;
-+import javax.management.openmbean.SimpleType;
-+
-+/*
-+ * @test
-+ * @bug 8023529
-+ * @summary Test that OpenMBean*Info.equals do not throw NPE
-+ * @author Shanliang JIANG
-+ * @run clean OpenMBeanInfoEqualsNPETest
-+ * @run build OpenMBeanInfoEqualsNPETest
-+ * @run main OpenMBeanInfoEqualsNPETest
-+ */
-+public class OpenMBeanInfoEqualsNPETest {
-+ private static int failed = 0;
-+
-+ public static void main(String[] args) throws Exception {
-+ System.out.println("---OpenMBeanInfoEqualsNPETest-main ...");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanAttributeInfoSupport...");
-+ OpenMBeanAttributeInfo openMBeanAttributeInfo0 = new OpenMBeanAttributeInfoSupport(
-+ "name", "description", SimpleType.INTEGER, true, true, false, 1, new Integer[]{1, 2, 3});
-+ OpenMBeanAttributeInfo openMBeanAttributeInfo = new OpenMBeanAttributeInfoSupport(
-+ "name", "description", SimpleType.INTEGER, true, true, false, null, new Integer[]{1, 2, 3});
-+ test(openMBeanAttributeInfo0, openMBeanAttributeInfo, "defaultValue");
-+
-+ openMBeanAttributeInfo = new OpenMBeanAttributeInfoSupport(
-+ "name", "description", SimpleType.INTEGER, true, true, false, 1, null);
-+ test(openMBeanAttributeInfo0, openMBeanAttributeInfo, "legalValues");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanConstructorInfoSupport...");
-+ OpenMBeanConstructorInfo openMBeanConstructorInfo0 = new OpenMBeanConstructorInfoSupport(
-+ "name", "description", new OpenMBeanParameterInfo[]{}, new DescriptorSupport());
-+ OpenMBeanConstructorInfo openMBeanConstructorInfo;
-+
-+ openMBeanConstructorInfo = new OpenMBeanConstructorInfoSupport(
-+ "name", "description", null, new DescriptorSupport());
-+ test(openMBeanConstructorInfo0, openMBeanConstructorInfo, "sigs");
-+
-+ openMBeanConstructorInfo = new OpenMBeanConstructorInfoSupport(
-+ "name", "description", new OpenMBeanParameterInfo[]{}, null);
-+ test(openMBeanConstructorInfo0, openMBeanConstructorInfo, "Descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanOperationInfoSupport...");
-+ OpenMBeanOperationInfo openMBeanOperationInfo0 = new OpenMBeanOperationInfoSupport(
-+ "name", "description", new OpenMBeanParameterInfo[]{}, SimpleType.INTEGER, 1, new DescriptorSupport());
-+ OpenMBeanOperationInfo openMBeanOperationInfo;
-+
-+ openMBeanOperationInfo = new OpenMBeanOperationInfoSupport(
-+ "name", "description", null, SimpleType.INTEGER, 1, new DescriptorSupport());
-+ test(openMBeanOperationInfo0, openMBeanOperationInfo, "sigs");
-+
-+ openMBeanOperationInfo = new OpenMBeanOperationInfoSupport(
-+ "name", "description", new OpenMBeanParameterInfo[]{}, SimpleType.INTEGER, MBeanOperationInfo.UNKNOWN, null);
-+ test(openMBeanOperationInfo0, openMBeanOperationInfo, "Descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanParameterInfoSupport 1...");
-+ OpenMBeanParameterInfo openMBeanParameterInfo0 = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, 0, -1, 1);
-+ OpenMBeanParameterInfo openMBeanParameterInfo;
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, null, -1, 1);
-+ test(openMBeanParameterInfo0, openMBeanParameterInfo, "default value");
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, 0, null, 1);
-+ test(openMBeanParameterInfo0, openMBeanParameterInfo, "min value");
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, 0, -1, null);
-+ test(openMBeanParameterInfo0, openMBeanParameterInfo, "max value");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanParameterInfoSupport 2...");
-+ openMBeanParameterInfo0 = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, 1, new Integer[]{-1, 1, 2});
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, null, new Integer[]{-1, 1, 2});
-+ test(openMBeanParameterInfo0, openMBeanParameterInfo, "default value");
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, 1, null);
-+ test(openMBeanParameterInfo0, openMBeanParameterInfo, "legal values");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanInfoSupport...");
-+ String className = "toto";
-+ String description = "titi";
-+ OpenMBeanAttributeInfo[] attrInfos = new OpenMBeanAttributeInfo[]{};
-+ OpenMBeanConstructorInfo[] constrInfos = new OpenMBeanConstructorInfo[]{};
-+ OpenMBeanOperationInfo[] operaInfos = new OpenMBeanOperationInfo[]{};
-+ MBeanNotificationInfo[] notifInfos = new MBeanNotificationInfo[]{};
-+
-+ OpenMBeanInfo ominfo0 = new OpenMBeanInfoSupport("toto", description, attrInfos, constrInfos, operaInfos, notifInfos);
-+ OpenMBeanInfo ominfo = new OpenMBeanInfoSupport(null, description, attrInfos, constrInfos, operaInfos, notifInfos);
-+ test(ominfo0, ominfo, "class name");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, null, attrInfos, constrInfos, operaInfos, notifInfos);
-+ test(ominfo0, ominfo, "description");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, description, null, constrInfos, operaInfos, notifInfos);
-+ test(ominfo0, ominfo, "attrInfos");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, description, attrInfos, null, operaInfos, notifInfos);
-+ test(ominfo0, ominfo, "constructor infos");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, description, attrInfos, constrInfos, null, notifInfos);
-+ test(ominfo0, ominfo, "operation infos");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, description, attrInfos, constrInfos, operaInfos, null);
-+ test(ominfo0, ominfo, "notif infos");
-+
-+ if (failed > 0) {
-+ throw new RuntimeException("Test failed: "+failed);
-+ } else {
-+ System.out.println("---Test: PASSED");
-+ }
-+ }
-+
-+ private static void test(Object obj1, Object obj2, String param) {
-+ try {
-+ obj1.equals(obj2);
-+ System.out.println("OK-1: "+obj1.getClass().getSimpleName()+
-+ ".equals worked with a null field: "+param);
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO-1!!! "+obj1.getClass().getSimpleName()+
-+ ".equals got NPE with a null field: "+param);
-+ npe.printStackTrace();
-+ failed++;
-+ }
-+
-+ try {
-+ obj2.equals(obj1);
-+ System.out.println("OK-2: "+obj2.getClass().getSimpleName()+
-+ ".equals worked with a null field: "+param);
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO-2!!! "+obj2.getClass().getSimpleName()+
-+ ".equals got NPE with a null field: "+param);
-+ npe.printStackTrace();
-+ failed++;
-+ }
-+
-+ try {
-+ obj1.equals(null);
-+ obj2.equals(null);
-+
-+ System.out.println("OK-3: "+obj1.getClass().getSimpleName()+
-+ ".equals worked with a null object.");
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO-3!!! "+obj1.getClass().getSimpleName()+
-+ ".equals got NPE with a null object.");
-+ npe.printStackTrace();
-+ failed++;
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/management/openmbean/OpenMBeanInfoHashCodeNPETest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,173 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import javax.management.MBeanNotificationInfo;
-+import javax.management.modelmbean.DescriptorSupport;
-+import javax.management.openmbean.OpenMBeanAttributeInfo;
-+import javax.management.openmbean.OpenMBeanAttributeInfoSupport;
-+import javax.management.openmbean.OpenMBeanConstructorInfo;
-+import javax.management.openmbean.OpenMBeanConstructorInfoSupport;
-+import javax.management.openmbean.OpenMBeanInfo;
-+import javax.management.openmbean.OpenMBeanInfoSupport;
-+import javax.management.openmbean.OpenMBeanOperationInfo;
-+import javax.management.openmbean.OpenMBeanOperationInfoSupport;
-+import javax.management.openmbean.OpenMBeanParameterInfo;
-+import javax.management.openmbean.OpenMBeanParameterInfoSupport;
-+import javax.management.openmbean.SimpleType;
-+
-+/*
-+ * @test
-+ * @bug 8023529
-+ * @summary Test that OpenMBean*Info.hashCode do not throw NPE
-+ * @author Shanliang JIANG
-+ * @run clean OpenMBeanInfoHashCodeNPETest
-+ * @run build OpenMBeanInfoHashCodeNPETest
-+ * @run main OpenMBeanInfoHashCodeNPETest
-+ */
-+public class OpenMBeanInfoHashCodeNPETest {
-+ private static int failed = 0;
-+
-+ public static void main(String[] args) throws Exception {
-+ System.out.println("---OpenMBeanInfoHashCodeNPETest-main ...");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanInfohashCodeTest...");
-+ OpenMBeanAttributeInfo openMBeanAttributeInfo = new OpenMBeanAttributeInfoSupport(
-+ "name", "description", SimpleType.INTEGER, true, true, false, null, new Integer[]{1, 2, 3});
-+ test(openMBeanAttributeInfo, "defaultValue");
-+
-+ openMBeanAttributeInfo = new OpenMBeanAttributeInfoSupport(
-+ "name", "description", SimpleType.INTEGER, true, true, false, 1, null);
-+ test(openMBeanAttributeInfo, "legalValues");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanConstructorInfoSupport...");
-+ OpenMBeanConstructorInfo openMBeanConstructorInfo;
-+
-+ openMBeanConstructorInfo = new OpenMBeanConstructorInfoSupport(
-+ "name", "description", null, new DescriptorSupport());
-+ test(openMBeanConstructorInfo, "sigs");
-+
-+ openMBeanConstructorInfo = new OpenMBeanConstructorInfoSupport(
-+ "name", "description", new OpenMBeanParameterInfo[]{}, null);
-+ test(openMBeanConstructorInfo, "Descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanOperationInfoSupport...");
-+ OpenMBeanOperationInfo openMBeanOperationInfo;
-+
-+ openMBeanOperationInfo = new OpenMBeanOperationInfoSupport(
-+ "name", "description", null, SimpleType.INTEGER, 1, new DescriptorSupport());
-+ test(openMBeanOperationInfo, "sigs");
-+
-+ openMBeanOperationInfo = new OpenMBeanOperationInfoSupport(
-+ "name", "description", new OpenMBeanParameterInfo[]{}, SimpleType.INTEGER, 1, null);
-+ test(openMBeanOperationInfo, "Descriptor");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanParameterInfoSupport 1...");
-+ OpenMBeanParameterInfo openMBeanParameterInfo;
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, null, -1, 1);
-+ test(openMBeanParameterInfo, "default value");
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, 0, null, 1);
-+ test(openMBeanParameterInfo, "min value");
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, 0, -1, null);
-+ test(openMBeanParameterInfo, "max value");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanParameterInfoSupport 2...");
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, 1, new Integer[]{-1, 1, 2});
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, null, new Integer[]{-1, 1, 2});
-+ test(openMBeanParameterInfo, "default value");
-+
-+ openMBeanParameterInfo = new OpenMBeanParameterInfoSupport(
-+ "name", "description", SimpleType.INTEGER, 1, null);
-+ test(openMBeanParameterInfo, "legal values");
-+
-+ // ----
-+ System.out.println("\n---Testing on OpenMBeanInfoSupport...");
-+ String className = "toto";
-+ String description = "titi";
-+ OpenMBeanAttributeInfo[] attrInfos = new OpenMBeanAttributeInfo[]{};
-+ OpenMBeanConstructorInfo[] constrInfos = new OpenMBeanConstructorInfo[]{};
-+ OpenMBeanOperationInfo[] operaInfos = new OpenMBeanOperationInfo[]{};
-+ MBeanNotificationInfo[] notifInfos = new MBeanNotificationInfo[]{};
-+
-+ OpenMBeanInfo ominfo = new OpenMBeanInfoSupport(null, description, attrInfos, constrInfos, operaInfos, notifInfos);
-+ test(ominfo, "class name");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, null, attrInfos, constrInfos, operaInfos, notifInfos);
-+ test(ominfo, "description");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, description, null, constrInfos, operaInfos, notifInfos);
-+ test(ominfo, "attrInfos");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, description, attrInfos, null, operaInfos, notifInfos);
-+ test(ominfo, "constructor infos");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, description, attrInfos, constrInfos, null, notifInfos);
-+ test(ominfo, "operation infos");
-+
-+ ominfo = new OpenMBeanInfoSupport(className, description, attrInfos, constrInfos, operaInfos, null);
-+ test(ominfo, "notif infos");
-+
-+ if (failed > 0) {
-+ throw new RuntimeException("Test failed: "+failed);
-+ } else {
-+ System.out.println("---Test: PASSED");
-+ }
-+ }
-+
-+ private static void test(Object obj, String param) {
-+ try {
-+ obj.hashCode();
-+ System.out.println("OK-1: "+obj.getClass().getSimpleName()+
-+ ".hashCode worked with a null paramer: "+param);
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO-1!!! "+obj.getClass().getSimpleName()+
-+ ".hashCode got NPE with null paramer: "+param);
-+ npe.printStackTrace();
-+ failed++;
-+ }
-+
-+ try {
-+ obj.toString();
-+ System.out.println("OK-1: "+obj.getClass().getSimpleName()+
-+ ".toString worked with a null paramer: "+param);
-+ } catch (NullPointerException npe) {
-+ System.out.println("--->KO-1!!! "+obj.getClass().getSimpleName()+
-+ ".toString got NPE with null paramer: "+param);
-+ npe.printStackTrace();
-+ failed++;
-+ }
-+ }
-+}
---- ./jdk/test/javax/management/remote/mandatory/URLTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/management/remote/mandatory/URLTest.java Wed May 07 19:26:47 2014 -0700
-@@ -24,8 +24,6 @@
- /*
- * @test
- * @bug 5057532
-- * @ignore Test will fail until 6338951 is resolved (java.net.URI now
-- * accepts "http://-a").
- * @summary Tests that host names are parsed correctly in URLs
- * @author Eamonn McManus
- * @run clean URLTest
---- ./jdk/test/javax/management/remote/mandatory/connection/BrokenConnectionTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/management/remote/mandatory/connection/BrokenConnectionTest.java Wed May 07 19:26:47 2014 -0700
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 4940957
-+ * @bug 4940957 8025205
- * @summary Tests behaviour when connections break
- * @author Eamonn McManus
- * @run clean BrokenConnectionTest
-@@ -485,14 +485,13 @@
- }
- if (thisok) {
- System.out.println("Waiting for failure notif");
-- long deadline = System.currentTimeMillis() + 5000;
-- while (failureListener.count < 1
-- && System.currentTimeMillis() < deadline)
-- Thread.sleep(500);
-- if (failureListener.count < 1) {
-- System.out.println("Did not get failure notif!");
-- thisok = false;
-- } else if (failureListener.count > 1) {
-+ // pass or test timeout. see 8025205
-+ do {
-+ Thread.sleep(100);
-+ } while (failureListener.count < 1);
-+
-+ Thread.sleep(1000); // if more notif coming ...
-+ if (failureListener.count > 1) {
- System.out.println("Got too many failure notifs: " +
- failureListener.count);
- thisok = false;
---- ./jdk/test/javax/management/remote/mandatory/connection/IdleTimeoutTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/management/remote/mandatory/connection/IdleTimeoutTest.java Wed May 07 19:26:47 2014 -0700
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 4886838 4886830
-+ * @bug 4886838 4886830 8025204
- * @summary Tests that idle timeouts happen at appropriate times
- * @author Eamonn McManus
- * @run clean IdleTimeoutTest
-@@ -272,19 +272,11 @@
- }
-
- System.out.println("Waiting for id list to drop ours");
-- deadline = System.currentTimeMillis() + timeout*2 + 10000;
-- while (true) {
-- ids = Arrays.asList(server.getConnectionIds());
-- if (!ids.contains(connId)
-- || System.currentTimeMillis() >= deadline)
-- break;
-- Thread.sleep(500);
-- }
-- if (ids.contains(connId)) {
-- System.out.println("Client id still in list after " +
-- "deadline: " + ids);
-- return false;
-- }
-+ // pass or timed out by test harness - see 8025204
-+ do {
-+ Thread.sleep(100);
-+ ids = Arrays.asList(server.getConnectionIds());
-+ } while (ids.contains(connId));
-
- conn.getDefaultDomain();
- if (connId.equals(client.getConnectionId())) {
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/management/remote/mandatory/connection/RMIConnectorInternalMapTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,122 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.lang.management.ManagementFactory;
-+import java.lang.ref.WeakReference;
-+import java.lang.reflect.Field;
-+import java.util.Collections;
-+import java.util.Map;
-+import javax.management.MBeanServer;
-+import javax.management.MBeanServerConnection;
-+import javax.management.remote.JMXConnector;
-+import javax.management.remote.JMXConnectorFactory;
-+import javax.management.remote.JMXConnectorServer;
-+import javax.management.remote.JMXConnectorServerFactory;
-+import javax.management.remote.JMXPrincipal;
-+import javax.management.remote.JMXServiceURL;
-+import javax.management.remote.rmi.RMIConnector;
-+import javax.security.auth.Subject;
-+
-+/*
-+ * @test
-+ * @bug 6566891
-+ * @summary Check no memory leak on RMIConnector's rmbscMap
-+ * @author Shanliang JIANG
-+ * @run clean RMIConnectorInternalMapTest
-+ * @run build RMIConnectorInternalMapTest
-+ * @run main RMIConnectorInternalMapTest
-+ */
-+
-+public class RMIConnectorInternalMapTest {
-+ public static void main(String[] args) throws Exception {
-+ System.out.println("---RMIConnectorInternalMapTest starting...");
-+
-+ JMXConnectorServer connectorServer = null;
-+ JMXConnector connectorClient = null;
-+
-+ try {
-+ MBeanServer mserver = ManagementFactory.getPlatformMBeanServer();
-+ JMXServiceURL serverURL = new JMXServiceURL("rmi", "localhost", 0);
-+ connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(serverURL, null, mserver);
-+ connectorServer.start();
-+
-+ JMXServiceURL serverAddr = connectorServer.getAddress();
-+ connectorClient = JMXConnectorFactory.connect(serverAddr, null);
-+ connectorClient.connect();
-+
-+ Field rmbscMapField = RMIConnector.class.getDeclaredField("rmbscMap");
-+ rmbscMapField.setAccessible(true);
-+ Map<Subject, WeakReference<MBeanServerConnection>> map =
-+ (Map<Subject, WeakReference<MBeanServerConnection>>) rmbscMapField.get(connectorClient);
-+ if (map != null && !map.isEmpty()) { // failed
-+ throw new RuntimeException("RMIConnector's rmbscMap must be empty at the initial time.");
-+ }
-+
-+ Subject delegationSubject =
-+ new Subject(true,
-+ Collections.singleton(new JMXPrincipal("delegate")),
-+ Collections.EMPTY_SET,
-+ Collections.EMPTY_SET);
-+ MBeanServerConnection mbsc1 =
-+ connectorClient.getMBeanServerConnection(delegationSubject);
-+ MBeanServerConnection mbsc2 =
-+ connectorClient.getMBeanServerConnection(delegationSubject);
-+
-+ if (mbsc1 == null) {
-+ throw new RuntimeException("Got null connection.");
-+ }
-+ if (mbsc1 != mbsc2) {
-+ throw new RuntimeException("Not got same connection with a same subject.");
-+ }
-+
-+ map = (Map<Subject, WeakReference<MBeanServerConnection>>) rmbscMapField.get(connectorClient);
-+ if (map == null || map.isEmpty()) { // failed
-+ throw new RuntimeException("RMIConnector's rmbscMap has wrong size "
-+ + "after creating a delegated connection.");
-+ }
-+
-+ delegationSubject = null;
-+ mbsc1 = null;
-+ mbsc2 = null;
-+
-+ int i = 0;
-+ while (!map.isEmpty() && i++ < 60) {
-+ System.gc();
-+ Thread.sleep(100);
-+ }
-+ System.out.println("---GC times: " + i);
-+
-+ if (!map.isEmpty()) {
-+ throw new RuntimeException("Failed to clean RMIConnector's rmbscMap");
-+ } else {
-+ System.out.println("---RMIConnectorInternalMapTest: PASSED!");
-+ }
-+ } finally {
-+ try {
-+ connectorClient.close();
-+ connectorServer.stop();
-+ } catch (Exception e) {
-+ }
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/management/remote/mandatory/connection/RMIConnectorNullSubjectConnTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,105 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.lang.management.ManagementFactory;
-+import java.lang.ref.WeakReference;
-+import java.lang.reflect.Field;
-+import javax.management.MBeanServer;
-+import javax.management.MBeanServerConnection;
-+import javax.management.remote.JMXConnector;
-+import javax.management.remote.JMXConnectorFactory;
-+import javax.management.remote.JMXConnectorServer;
-+import javax.management.remote.JMXConnectorServerFactory;
-+import javax.management.remote.JMXServiceURL;
-+import javax.management.remote.rmi.RMIConnector;
-+
-+/*
-+ * @test
-+ * @bug 6566891
-+ * @summary Check no memory leak on RMIConnector's nullSubjectConn
-+ * @author Shanliang JIANG
-+ * @run clean RMIConnectorNullSubjectConnTest
-+ * @run build RMIConnectorNullSubjectConnTest
-+ * @run main RMIConnectorNullSubjectConnTest
-+ */
-+
-+public class RMIConnectorNullSubjectConnTest {
-+ public static void main(String[] args) throws Exception {
-+ System.out.println("---RMIConnectorNullSubjectConnTest starting...");
-+
-+ JMXConnectorServer connectorServer = null;
-+ JMXConnector connectorClient = null;
-+
-+ try {
-+ MBeanServer mserver = ManagementFactory.getPlatformMBeanServer();
-+ JMXServiceURL serverURL = new JMXServiceURL("rmi", "localhost", 0);
-+ connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(serverURL, null, mserver);
-+ connectorServer.start();
-+
-+ JMXServiceURL serverAddr = connectorServer.getAddress();
-+ connectorClient = JMXConnectorFactory.connect(serverAddr, null);
-+ connectorClient.connect();
-+
-+ Field nullSubjectConnField = RMIConnector.class.getDeclaredField("nullSubjectConnRef");
-+ nullSubjectConnField.setAccessible(true);
-+
-+ WeakReference<MBeanServerConnection> weak =
-+ (WeakReference<MBeanServerConnection>)nullSubjectConnField.get(connectorClient);
-+
-+ if (weak != null && weak.get() != null) {
-+ throw new RuntimeException("nullSubjectConnRef must be null at initial time.");
-+ }
-+
-+ MBeanServerConnection conn1 = connectorClient.getMBeanServerConnection(null);
-+ MBeanServerConnection conn2 = connectorClient.getMBeanServerConnection(null);
-+ if (conn1 == null) {
-+ throw new RuntimeException("A connection with null subject should not be null.");
-+ } else if (conn1 != conn2) {
-+ throw new RuntimeException("The 2 connections with null subject are not equal.");
-+ }
-+
-+ conn1 = null;
-+ conn2 = null;
-+ int i = 1;
-+ do {
-+ System.gc();
-+ Thread.sleep(100);
-+ weak = (WeakReference<MBeanServerConnection>)nullSubjectConnField.get(connectorClient);
-+ } while ((weak != null && weak.get() != null) && i++ < 60);
-+
-+ System.out.println("---GC times: " + i);
-+
-+ if (weak != null && weak.get() != null) {
-+ throw new RuntimeException("Failed to clean RMIConnector's nullSubjectConn");
-+ } else {
-+ System.out.println("---RMIConnectorNullSubjectConnTest: PASSED!");
-+ }
-+ } finally {
-+ try {
-+ connectorClient.close();
-+ connectorServer.stop();
-+ } catch (Exception e) {
-+ }
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/JComboBox/6236162/bug6236162.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,119 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/* @test
-+ @bug 6236162
-+ @summary Checks that there is no an inconsistence in combo box
-+ behavior when user points an item in combo popup
-+ by mouse and then uses UP/DOWN keys.
-+ @library ../../regtesthelpers
-+ @build Util
-+ @author Mikhail Lapshin
-+ @run main bug6236162
-+*/
-+
-+import sun.awt.SunToolkit;
-+
-+import javax.swing.*;
-+import javax.swing.plaf.basic.*;
-+import javax.swing.plaf.metal.MetalComboBoxUI;
-+import java.awt.*;
-+import java.awt.event.KeyEvent;
-+
-+public class bug6236162 {
-+ private static final SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ private static JFrame frame;
-+ private static JComboBox combo;
-+ private static MyComboUI comboUI;
-+
-+ public static void main(String[] args) throws Exception {
-+ UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ createAndShowGUI();
-+ }
-+ });
-+ toolkit.realSync();
-+ test();
-+ System.out.println("Test passed");
-+ }
-+
-+ private static void createAndShowGUI() {
-+ frame = new JFrame("bug6236162");
-+
-+ combo = new JComboBox(new String[]{"one", "two", "three", "four", "five"});
-+ combo.setEditable(true);
-+ comboUI = new MyComboUI();
-+ combo.setUI(comboUI);
-+ combo.setSelectedIndex(3);
-+ frame.getContentPane().add(combo);
-+
-+ frame.pack();
-+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-+ frame.setLocationRelativeTo(null);
-+ frame.setVisible(true);
-+ }
-+
-+ private static void test() throws AWTException {
-+ Robot robot = new Robot();
-+ robot.setAutoDelay(50);
-+
-+ // Open popup menu
-+ realSync();
-+ Util.hitKeys(robot, KeyEvent.VK_DOWN);
-+
-+ // Move mouse to the first popup menu item
-+ realSync();
-+ Point p = combo.getLocationOnScreen();
-+ Dimension size = combo.getSize();
-+ p.x += size.width / 2;
-+ p.y += size.height;
-+ float dy = 1;
-+ robot.mouseMove(p.x, p.y - 5);
-+ for (int i=1; i <= 10; i++) {
-+ robot.mouseMove((int)(p.x), (int)(p.y - 5 + dy*i));
-+ }
-+
-+ // Select the second popup menu item
-+ realSync();
-+ Util.hitKeys(robot, KeyEvent.VK_DOWN);
-+
-+ realSync();
-+ JList list = comboUI.getComboPopup().getList();
-+ if (list.getSelectedIndex() != 1) {
-+ throw new RuntimeException("There is an inconsistence in combo box " +
-+ "behavior when user points an item in combo popup " +
-+ "by mouse and then uses UP/DOWN keys.");
-+ }
-+ }
-+
-+ private static void realSync() {
-+ ((SunToolkit)Toolkit.getDefaultToolkit()).realSync();
-+ }
-+
-+ // Gives access to BasicComboBoxUI.popup field
-+ private static class MyComboUI extends MetalComboBoxUI {
-+ public ComboPopup getComboPopup() {
-+ return popup;
-+ }
-+ }
-+}
---- ./jdk/test/javax/swing/JFileChooser/4150029/bug4150029.html Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/swing/JFileChooser/4150029/bug4150029.html Wed May 07 19:26:47 2014 -0700
-@@ -1,6 +1,38 @@
- <html>
-+<!--
-+ Copyright (c) 2013, 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
-+ under the terms of the GNU General Public License version 2 only, as
-+ published by the Free Software Foundation.
-+
-+ This code is distributed in the hope that it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ version 2 for more details (a copy is included in the LICENSE file that
-+ accompanied this code).
-+
-+ You should have received a copy of the GNU General Public License version
-+ 2 along with this work; if not, write to the Free Software Foundation,
-+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+
-+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ or visit www.oracle.com if you need additional information or have any
-+ questions.
-+-->
-+
-+<!--
-+ @test
-+ @bug 4150029 8006087
-+ @summary BackSpace keyboard button does not lead to parent directory
-+ @author Oleg Mokhovikov
-+ @run applet/manual=done bug4150029.html
-+-->
-+
- <body>
- <applet code="bug4150029.class" width=200 height=200></applet>
-+Follow the instructions below.
- 1.Go into 'subDir' folder.
- 2.Press BACKSPACE key.
- 3.Push OPEN button.
---- ./jdk/test/javax/swing/JFileChooser/4150029/bug4150029.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/swing/JFileChooser/4150029/bug4150029.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2010, 2013, 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
-@@ -21,11 +21,10 @@
- * questions.
- */
-
--/* @test
-- @bug 4150029
-- @summary BackSpace keyboard button does not lead to parent directory
-- @author Oleg Mokhovikov
-- @run applet/manual=done bug4150029.html
-+/*
-+ bug 4150029 8006087
-+ summary BackSpace keyboard button does not lead to parent directory
-+ author Oleg Mokhovikov
- */
-
- import javax.swing.*;
-@@ -36,6 +35,14 @@
- private boolean res;
-
- public void init() {
-+ if (sun.awt.OSInfo.getOSType() == sun.awt.OSInfo.OSType.MACOSX) {
-+ try {
-+ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
-+ } catch (Exception e) {
-+ throw new RuntimeException(e);
-+ }
-+ }
-+
- String tmpDir = System.getProperty("java.io.tmpdir");
-
- if (tmpDir.length() == 0) {//'java.io.tmpdir' isn't guaranteed to be defined
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/JInternalFrame/4193219/IconCoord.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,161 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/*
-+ @test
-+ @bug 4193219
-+ @summary
-+ @author Your Name: Hania Gajewska area=swing
-+ @run main/manual IconCoord
-+*/
-+
-+import java.awt.*;
-+import java.awt.event.*;
-+import javax.swing.*;
-+
-+public class IconCoord {
-+ static Test test = new Test();
-+
-+ public static void main(String[] args) throws Exception {
-+ UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ new IconCoord().createAndShowGUI();
-+ }
-+ });
-+ test.waitTestResult();
-+ }
-+
-+ private void createAndShowGUI() {
-+ StringBuilder instrText = new StringBuilder();
-+ instrText.append("First, iconify internal frame \"Frame 1\" by clicking on its iconify button.\n");
-+ instrText.append("Now, maximize the top-level window \"IconCoord\".\n");
-+ instrText.append("The \"Frame 1\" icon should stay in the lower left corner of the desktop; ");
-+ instrText.append("if it doesn't, press \"Fail\".\n");
-+ instrText.append("Now move the icon to the middle of the desktop by dragging it by its ");
-+ instrText.append("bumpy left side. Then iconify \"Frame 2\" by clicking on its iconify button.\n");
-+ instrText.append("If the icon for frame two gets placed in the lower left corner of the ");
-+ instrText.append("desktop (where the icon for \"Frame 1\" used to be before you moved it), ");
-+ instrText.append("press \"Pass\". Otherwise, press \"Fail\".\n");
-+
-+ JDesktopPane dt = new JDesktopPane();
-+
-+ JButton tf;
-+ JInternalFrame if1 = new JInternalFrame("Frame 1", false, false, false, true);
-+ JComponent c = (JComponent) if1.getContentPane();
-+ c.setLayout(new BorderLayout());
-+
-+ tf = new JButton ("ignore");
-+ c.add (tf, BorderLayout.NORTH);
-+
-+ tf = new JButton ("ignore");
-+ c.add (tf, BorderLayout.CENTER);
-+
-+ JInternalFrame if2 = new JInternalFrame("Frame 2", false, false, false, true);
-+ c = (JComponent) if2.getContentPane();
-+ c.setLayout(new BorderLayout());
-+
-+ tf = new JButton ("ignore");
-+ c.add (tf, BorderLayout.NORTH);
-+
-+ tf = new JButton ("ignore");
-+ c.add (tf, BorderLayout.CENTER);
-+
-+ if1.pack();
-+ if1.setBounds(300, 0, 300, 80);
-+ if2.pack();
-+ if2.setBounds(0, 0, 300, 80);
-+ dt.add(if1);
-+ dt.add(if2);
-+
-+ if1.setVisible(true);
-+ if2.setVisible(true);
-+
-+ int frameHeight = 500;
-+
-+ JScrollPane dtScrollPane = new JScrollPane(dt);
-+ JFrame frame = test.createTestFrame("IconCoord", dtScrollPane, instrText.toString(), 250);
-+ dt.setPreferredSize(new Dimension(650, frameHeight - 250));
-+ frame.setSize (600,500);
-+ frame.setVisible(true);
-+ }
-+
-+ static class Test {
-+ private boolean pass;
-+ JFrame createTestFrame(String name, Component topComponent, String instructions, int instrHeight) {
-+ final String PASS = "Pass";
-+ final String FAIL = "Fail";
-+ JFrame frame = new JFrame(name);
-+ frame.setLayout(new BorderLayout());
-+
-+ JPanel testButtonsPanel = new JPanel();
-+ testButtonsPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 20));
-+
-+ ActionListener btnAL = new ActionListener() {
-+ public void actionPerformed(ActionEvent event) {
-+ switch (event.getActionCommand()) {
-+ case PASS:
-+ pass();
-+ break;
-+ default:
-+ throw new RuntimeException("Test failed.");
-+ }
-+ }
-+ };
-+ JButton passBtn = new JButton(PASS);
-+ passBtn.addActionListener(btnAL);
-+ passBtn.setActionCommand(PASS);
-+
-+ JButton failBtn = new JButton(FAIL);
-+ failBtn.addActionListener(btnAL);
-+ failBtn.setActionCommand(FAIL);
-+
-+ testButtonsPanel.add(BorderLayout.WEST, passBtn);
-+ testButtonsPanel.add(BorderLayout.EAST, failBtn);
-+
-+ JTextArea instrText = new JTextArea();
-+ instrText.setLineWrap(true);
-+ instrText.setEditable(false);
-+ JScrollPane instrScrollPane = new JScrollPane(instrText);
-+ instrScrollPane.setMaximumSize(new Dimension(Integer.MAX_VALUE, instrHeight));
-+ instrText.append(instructions);
-+
-+ JPanel servicePanel = new JPanel();
-+ servicePanel.setLayout(new BorderLayout());
-+ servicePanel.add(BorderLayout.CENTER, instrScrollPane);
-+ servicePanel.add(BorderLayout.SOUTH, testButtonsPanel);
-+
-+ frame.add(BorderLayout.SOUTH, servicePanel);
-+ frame.add(BorderLayout.CENTER, topComponent);
-+ return frame;
-+ }
-+ synchronized void pass() {
-+ pass = true;
-+ notifyAll();
-+ }
-+ synchronized void waitTestResult() throws InterruptedException {
-+ while (!pass) {
-+ wait();
-+ }
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/JInternalFrame/4251301/bug4251301.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,139 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/* @test
-+ @bug 4251301
-+ @summary Keybinding for show/hide the system menu.
-+ @author Andrey Pikalev
-+ @run main/manual bug4251301
-+*/
-+
-+import javax.swing.*;
-+import java.awt.*;
-+import java.awt.event.ActionEvent;
-+import java.awt.event.ActionListener;
-+import java.beans.*;
-+import sun.awt.OSInfo;
-+import sun.awt.SunToolkit;
-+
-+
-+public class bug4251301 {
-+ private static final SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ static Test test = new Test();
-+ public static void main(String[] args) throws Exception {
-+ if (OSInfo.getOSType() == OSInfo.OSType.MACOSX) {
-+ System.out.println("This test is not applicable for MacOS. Passed.");
-+ return;
-+ }
-+ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ createAndShowGUI();
-+ }
-+ });
-+ toolkit.realSync();
-+ test.waitTestResult();
-+ }
-+
-+ public static void createAndShowGUI() {
-+ final StringBuilder instructions = new StringBuilder();
-+ instructions.append("Click with your mouse the content area of the internal frame with the title \"IFrame\" ");
-+ instructions.append("and press Ctrl+Space. \n");
-+ instructions.append("If the system menu shows up, press Esc. Then system menu should hide. \n");
-+ instructions.append("If you success then press \"Pass\", else press \"Fail\".\n");
-+
-+ JDesktopPane dp = new JDesktopPane();
-+ JInternalFrame jif = new JInternalFrame("IFrame",true,true,true,true);
-+ dp.add(jif);
-+ jif.setBounds(20, 20, 220, 100);
-+ jif.setVisible(true);
-+ try {
-+ jif.setSelected(true);
-+ } catch(PropertyVetoException pve) {
-+ pve.printStackTrace();
-+ throw new Error("Occures PropertyVetoException while set selection...");
-+ }
-+ JScrollPane dtScrollPane = new JScrollPane(dp);
-+ JFrame testFrame = test.createTestFrame("Instructions", dtScrollPane, instructions.toString(), 500);
-+ testFrame.setSize(500, 400);
-+ testFrame.setVisible(true);
-+ }
-+ static class Test {
-+ private boolean pass;
-+ JFrame createTestFrame(String name, Component topComponent, String instructions, int instrHeight) {
-+ final String PASS = "Pass";
-+ final String FAIL = "Fail";
-+ JFrame frame = new JFrame(name);
-+ frame.setLayout(new BorderLayout());
-+
-+ JPanel testButtonsPanel = new JPanel();
-+ testButtonsPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 20));
-+
-+ ActionListener btnAL = new ActionListener() {
-+ public void actionPerformed(ActionEvent event) {
-+ switch (event.getActionCommand()) {
-+ case PASS:
-+ pass();
-+ break;
-+ default:
-+ throw new RuntimeException("Test failed.");
-+ }
-+ }
-+ };
-+ JButton passBtn = new JButton(PASS);
-+ passBtn.addActionListener(btnAL);
-+ passBtn.setActionCommand(PASS);
-+
-+ JButton failBtn = new JButton(FAIL);
-+ failBtn.addActionListener(btnAL);
-+ failBtn.setActionCommand(FAIL);
-+
-+ testButtonsPanel.add(BorderLayout.WEST, passBtn);
-+ testButtonsPanel.add(BorderLayout.EAST, failBtn);
-+
-+ JTextArea instrText = new JTextArea();
-+ instrText.setLineWrap(true);
-+ instrText.setEditable(false);
-+ JScrollPane instrScrollPane = new JScrollPane(instrText);
-+ instrScrollPane.setMaximumSize(new Dimension(Integer.MAX_VALUE, instrHeight));
-+ instrText.append(instructions);
-+
-+ JPanel servicePanel = new JPanel();
-+ servicePanel.setLayout(new BorderLayout());
-+ servicePanel.add(BorderLayout.CENTER, instrScrollPane);
-+ servicePanel.add(BorderLayout.SOUTH, testButtonsPanel);
-+
-+ frame.add(BorderLayout.SOUTH, servicePanel);
-+ frame.add(BorderLayout.CENTER, topComponent);
-+ return frame;
-+ }
-+ synchronized void pass() {
-+ pass = true;
-+ notifyAll();
-+ }
-+ synchronized void waitTestResult() throws InterruptedException {
-+ while (!pass) {
-+ wait();
-+ }
-+ }
-+ }
-+}
---- ./jdk/test/javax/swing/JInternalFrame/InternalFrameIsNotCollectedTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/swing/JInternalFrame/InternalFrameIsNotCollectedTest.java Wed May 07 19:26:47 2014 -0700
-@@ -27,19 +27,19 @@
- @author mcherkas
- @run main InternalFrameIsNotCollectedTest
- */
--
- import sun.awt.SunToolkit;
-
- import javax.swing.*;
- import java.awt.*;
--import java.awt.event.KeyEvent;
- import java.beans.PropertyVetoException;
- import java.util.Date;
-
- public class InternalFrameIsNotCollectedTest {
-
-- public static final int waitTime = 10000;
-+ public static final int maxWaitTime = 100000;
-+ public static final int waitTime = 5000;
- private static Robot robot;
-+ private static CustomInternalFrame iFrame;
-
- public static void sync() {
-
-@@ -62,12 +62,13 @@
- });
- sync();
- invokeGC();
-+ System.runFinalization();
- Thread.sleep(1000); // it's better to wait 1 sec now then 10 sec later
- Date startWaiting = new Date();
- synchronized (CustomInternalFrame.waiter) {
- // Sync with finalization thread.
- Date now = new Date();
-- while (now.getTime() - startWaiting.getTime() < waitTime && !CustomInternalFrame.finalized) {
-+ while (now.getTime() - startWaiting.getTime() < maxWaitTime && !CustomInternalFrame.finalized) {
- CustomInternalFrame.waiter.wait(waitTime);
- now = new Date();
- }
-@@ -83,10 +84,8 @@
- }
-
- private static void closeInternalFrame() throws PropertyVetoException {
-- robot.keyPress(KeyEvent.VK_CONTROL);
-- robot.keyPress(KeyEvent.VK_F4);
-- robot.keyRelease(KeyEvent.VK_F4);
-- robot.keyRelease(KeyEvent.VK_CONTROL);
-+ iFrame.setClosed(true);
-+ iFrame = null;
- }
-
- private static void initUI() {
-@@ -96,7 +95,7 @@
- desktopPane.setDesktopManager(new DefaultDesktopManager());
- frame.getContentPane().add(desktopPane, BorderLayout.CENTER);
-
-- CustomInternalFrame iFrame = new CustomInternalFrame("Dummy Frame");
-+ iFrame = new CustomInternalFrame("Dummy Frame");
-
- iFrame.setSize(200, 200);
- iFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/JMenuBar/4750590/bug4750590.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,98 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/* @test
-+ @library ../../regtesthelpers
-+ @build Util
-+ @bug 4750590 8015597
-+ @summary SwingSet: Cannot change Themes using menu accelerators
-+ @author Alexander Zuev
-+ @run main bug4750590
-+ */
-+
-+import javax.swing.*;
-+import java.awt.event.*;
-+import java.awt.*;
-+
-+public class bug4750590 {
-+
-+ public static PassedListener pass = new PassedListener();
-+ public static volatile boolean passed = false;
-+
-+ public static void main(String args[]) throws Throwable {
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ @Override
-+ public void run() {
-+ createAndShowGUI();
-+ }
-+ });
-+
-+ sun.awt.SunToolkit toolkit = (sun.awt.SunToolkit) Toolkit.getDefaultToolkit();
-+ toolkit.realSync();
-+
-+ Robot robo = new Robot();
-+ robo.setAutoDelay(500);
-+ Util.hitMnemonics(robo, KeyEvent.VK_F);
-+ robo.keyPress(KeyEvent.VK_M);
-+ robo.keyRelease(KeyEvent.VK_M);
-+
-+ toolkit.realSync();
-+
-+ if (passed) {
-+ System.out.println("Test passed!");
-+ } else {
-+ throw new RuntimeException("Test FAILED!");
-+ }
-+ }
-+
-+ private static void createAndShowGUI() {
-+ JFrame mainFrame = new JFrame("Bug 4750590");
-+ JMenuBar mbar = new JMenuBar();
-+ JMenu menu = new JMenu("File");
-+ menu.setMnemonic('F');
-+ JMenu submenu = new JMenu("Submenu");
-+ submenu.add(new JMenuItem("SubMenu Item 1")).setMnemonic('S');
-+ submenu.add(new JMenuItem("SubMenu Item 2"));
-+ menu.add(submenu);
-+
-+ menu.add(new JMenuItem("Menu Item 1"));
-+ JMenuItem menuItem = menu.add(new JMenuItem("Menu Item 2"));
-+ menuItem.setMnemonic('M');
-+ menuItem.addActionListener(pass);
-+ mbar.add(menu);
-+ mainFrame.setJMenuBar(mbar);
-+
-+ mainFrame.setSize(200, 200);
-+ mainFrame.setLocation(200, 200);
-+ mainFrame.setVisible(true);
-+ mainFrame.toFront();
-+ }
-+
-+ public static class PassedListener implements ActionListener {
-+ public void actionPerformed(ActionEvent ev) {
-+ passed = true;
-+ }
-+ }
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/JMenuItem/4171437/bug4171437.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,108 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/* @test
-+ @bug 4171437
-+ @library ../../regtesthelpers
-+ @build Util
-+ @author Georges Saab
-+ @run main bug4171437
-+*/
-+import java.awt.*;
-+import java.awt.event.*;
-+import java.util.ArrayList;
-+import javax.swing.*;
-+import javax.swing.event.*;
-+import sun.awt.SunToolkit;
-+
-+public class bug4171437 {
-+ static volatile boolean closeActivated = false;
-+ static volatile boolean customActivated = false;
-+
-+ public static void main(String[] args) throws Exception {
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ createAndShowGUI();
-+ }
-+ });
-+
-+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ toolkit.realSync();
-+
-+ Robot robot = new Robot();
-+ robot.setAutoDelay(50);
-+
-+ Util.hitMnemonics(robot, KeyEvent.VK_F);
-+ Util.hitKeys(robot, KeyEvent.VK_C);
-+
-+ toolkit.realSync();
-+ Thread.sleep(1000);
-+
-+ if (!closeActivated || customActivated) {
-+ throw new RuntimeException("Didn't pass the muster");
-+ }
-+ }
-+ public static void createAndShowGUI() {
-+ JMenuBar menubar = new JMenuBar();
-+
-+ JMenu fileMenu = new JMenu("File");
-+ fileMenu.setMnemonic('f');
-+
-+ JMenuItem fmi1 = new JMenuItem();
-+ fmi1 = new JMenuItem("Open");
-+ JMenuItem fmi2 = new JMenuItem();
-+ fmi2 = new JMenuItem("Close");
-+ fmi2.setMnemonic('c');
-+ fmi2.addActionListener(new ActionListener() {
-+ public void actionPerformed(ActionEvent e) {
-+ closeActivated = true;
-+ }
-+ });
-+
-+ fileMenu.add( fmi1);
-+ fileMenu.add( fmi2);
-+
-+ menubar.add( fileMenu);
-+
-+ JMenu custom = new JMenu("Custom");
-+ custom.setMnemonic('c');
-+ JMenuItem cmi = new JMenuItem();
-+ cmi = new JMenuItem("Properties");
-+ cmi.setMnemonic('p');
-+ custom.add( cmi);
-+ custom.addMenuListener(new MenuListener() {
-+ public void menuSelected(MenuEvent e) {
-+ customActivated = true;
-+ }
-+ public void menuDeselected(MenuEvent e) {}
-+ public void menuCanceled(MenuEvent e) {}
-+ });
-+ menubar.add( custom);
-+
-+ JFrame frame = new JFrame();
-+ frame.setJMenuBar( menubar);
-+ frame.setSize(300, 300);
-+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-+ frame.pack();
-+ frame.setVisible(true);
-+ }
-+}
---- ./jdk/test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java Wed May 07 19:26:47 2014 -0700
-@@ -35,11 +35,12 @@
- import javax.swing.*;
-
- public class ActionListenerCalledTwiceTest {
-- static String menuItems[] = { "Item1", "Item2", "Item3" };
-+ static String menuItems[] = { "Item1", "Item2", "Item3", "Item4" };
- static KeyStroke keyStrokes[] = {
- KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.META_MASK),
- KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),
- KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.SHIFT_MASK),
-+ KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.META_MASK)
- };
-
- static volatile int listenerCallCounter = 0;
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/JPopupMenu/4458079/bug4458079.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,110 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/* @test
-+ @bug 4458079
-+ @library ../../regtesthelpers
-+ @build Util
-+ @summary Tests calling removeAll() from PopupMenuListener
-+ @author Peter Zhelezniakov
-+ @run main bug4458079
-+*/
-+import java.awt.Robot;
-+import java.awt.Toolkit;
-+import java.awt.event.*;
-+import javax.swing.*;
-+import javax.swing.event.*;
-+import java.awt.event.KeyEvent;
-+import java.util.ArrayList;
-+import sun.awt.SunToolkit;
-+
-+public class bug4458079 extends JFrame implements PopupMenuListener {
-+ public JMenu menu;
-+
-+ static volatile boolean itemASelected = false;
-+ public static void main(String[] args) throws Exception {
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ new bug4458079().createAndShowGUI();
-+ }
-+ });
-+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ toolkit.realSync();
-+
-+ Robot robot = new Robot();
-+ robot.setAutoDelay(50);
-+
-+ Util.hitMnemonics(robot, KeyEvent.VK_M);
-+
-+ toolkit.realSync();
-+ Thread.sleep(1000);
-+
-+ Util.hitKeys(robot, KeyEvent.VK_DOWN);
-+ Util.hitKeys(robot, KeyEvent.VK_ENTER);
-+
-+ toolkit.realSync();
-+ Thread.sleep(1000);
-+
-+ if (!itemASelected) {
-+ throw new RuntimeException("Test failed: arrow key traversal in JMenu broken!");
-+ }
-+ }
-+ public void createAndShowGUI() {
-+ JMenuBar bar = new JMenuBar();
-+ menu = new JMenu("Menu");
-+ menu.add(new JMenuItem("1"));
-+ menu.add(new JMenuItem("2"));
-+ menu.setMnemonic(KeyEvent.VK_M);
-+ menu.getPopupMenu().addPopupMenuListener(this);
-+ bar.add(menu);
-+
-+ setJMenuBar(bar);
-+ getContentPane().add(new JButton(""));
-+ setSize(300, 300);
-+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-+ pack();
-+ setVisible(true);
-+ }
-+
-+ public void rebuildMenu() {
-+ menu.removeAll();
-+ final String itemCommand = "A";
-+ JMenuItem item = new JMenuItem(itemCommand);
-+ item.addActionListener(new ActionListener() {
-+ public void actionPerformed(ActionEvent e) {
-+ JMenuItem item = ((JMenuItem)e.getSource());
-+ if (e.getActionCommand() == itemCommand) {
-+ itemASelected = true;
-+ }
-+ }
-+ });
-+ menu.add(item);
-+ menu.add(new JMenuItem("B"));
-+ }
-+
-+ public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-+ rebuildMenu();
-+ }
-+
-+ public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
-+ public void popupMenuCanceled(PopupMenuEvent e) {}
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/JSplitPane/4816114/bug4816114.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,151 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/* @test
-+ @bug 4816114
-+ @summary REGRESSION: Regression in divider location behavior when JSplitPane is resized
-+ @author Andrey Pikalev
-+ @run main bug4816114
-+*/
-+
-+import javax.swing.*;
-+import java.awt.*;
-+import java.lang.reflect.*;
-+import sun.awt.SunToolkit;
-+
-+
-+public class bug4816114 {
-+
-+ JFrame fr;
-+ JSplitPane splitPane;
-+
-+ boolean[] resized = new boolean[] { false, false, false,
-+ false, false, false };
-+ static int step = 0;
-+ boolean h_passed = false;
-+ boolean v_passed = false;
-+
-+ static bug4816114 test = new bug4816114();
-+
-+ public static void main(String[] args) throws InterruptedException, InvocationTargetException {
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ test.createAndShowGUI();
-+ }
-+ });
-+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ toolkit.realSync();
-+ Thread.sleep(1000);
-+
-+ step++;
-+ test.doTest(150, 300);
-+
-+ step++;
-+ test.doTest(650, 300);
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ test.splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
-+ }
-+ });
-+
-+ step++;
-+ test.doTest(300, 650);
-+
-+ step++;
-+ test.doTest(300, 150);
-+
-+ step++;
-+ test.doTest(300, 650);
-+
-+ if ( !test.isPassed() ) {
-+ throw new Error("The divider location is wrong.");
-+ }
-+ }
-+ public void createAndShowGUI() {
-+ fr = new JFrame("Test");
-+
-+ splitPane = new TestSplitPane();
-+ splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
-+ splitPane.setResizeWeight(0);
-+ splitPane.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
-+
-+ JButton leftButton = new JButton("LEFT");
-+ leftButton.setPreferredSize(new Dimension(300, 300));
-+ leftButton.setMinimumSize(new Dimension(150, 150));
-+ splitPane.setLeftComponent(leftButton);
-+
-+ JButton rightButton = new JButton("RIGHT");
-+ rightButton.setPreferredSize(new Dimension(300, 300));
-+ rightButton.setMinimumSize(new Dimension(150, 150));
-+ splitPane.setRightComponent(rightButton);
-+
-+ fr.getContentPane().add(splitPane, BorderLayout.CENTER);
-+
-+ fr.pack();
-+ fr.setVisible(true);
-+ }
-+
-+ void doTest(final int width, final int height) throws InterruptedException, InvocationTargetException {
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ splitPane.setPreferredSize(new Dimension(width, height));
-+ fr.pack();
-+ }
-+ });
-+
-+ synchronized (bug4816114.this) {
-+ while (!resized[step]) {
-+ bug4816114.this.wait();
-+ }
-+ }
-+ }
-+
-+ synchronized void setPassed(int orientation, boolean passed) {
-+ if (orientation == JSplitPane.HORIZONTAL_SPLIT) {
-+ this.h_passed = passed;
-+ }
-+ else {
-+ this.v_passed = passed;
-+ }
-+ }
-+
-+ synchronized boolean isPassed() {
-+ return h_passed && v_passed;
-+ }
-+
-+
-+ class TestSplitPane extends JSplitPane {
-+ public void setDividerLocation(int location) {
-+ super.setDividerLocation(location);
-+
-+ if ( splitPane.getDividerLocation() == 151 ) {
-+ setPassed(getOrientation(), true);
-+ }
-+
-+ synchronized (bug4816114.this) {
-+ resized[step] = true;
-+ bug4816114.this.notifyAll();
-+ }
-+ }
-+ }
-+}
---- ./jdk/test/javax/swing/JTable/7068740/bug7068740.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/swing/JTable/7068740/bug7068740.java Wed May 07 19:26:47 2014 -0700
-@@ -37,6 +37,7 @@
- import java.awt.*;
- import java.awt.event.KeyEvent;
- import java.lang.reflect.InvocationTargetException;
-+import java.util.concurrent.atomic.AtomicInteger;
-
- public class bug7068740 extends JFrame {
-
-@@ -66,6 +67,7 @@
- };
-
- table = new JTable(model);
-+ table.setRowSelectionInterval(0, 0);
- LayerUI<JComponent> layerUI = new LayerUI<>();
- JLayer<JComponent> layer = new JLayer<>(table, layerUI);
- JScrollPane scrollPane = new JScrollPane(layer);
-@@ -78,7 +80,7 @@
- try {
- if (robot == null) {
- robot = new Robot();
-- robot.setAutoDelay(20);
-+ robot.setAutoDelay(50);
- }
-
- if (toolkit == null) {
-@@ -104,24 +106,37 @@
- }
- }
-
-- private static void doTest() {
-+ private static int getSelectedRow() throws Exception {
-+ final AtomicInteger row = new AtomicInteger(-1);
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ @Override
-+ public void run() {
-+ row.set(table.getSelectedRow());
-+ }
-+ });
-+ return row.intValue();
-+ }
-+
-+ private static void doTest() throws Exception {
- toolkit.realSync();
-- table.setRowSelectionInterval(0, 0);
-
- robot.keyPress(KeyEvent.VK_PAGE_DOWN);
-+ robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
- toolkit.realSync();
-- if (table.getSelectedRow() != 19) {
-+
-+ if (getSelectedRow() != 19) {
- throw new RuntimeException("Test failed");
- }
-
- robot.keyPress(KeyEvent.VK_PAGE_UP);
-+ robot.keyRelease(KeyEvent.VK_PAGE_UP);
- toolkit.realSync();
-- if (table.getSelectedRow() != 0) {
-+ if (getSelectedRow() != 0) {
- throw new RuntimeException("Test failed");
- }
- }
-
-- public static void main(String[] args) {
-+ public static void main(String[] args) throws Exception {
- try {
- UIManager.setLookAndFeel(new MetalLookAndFeel());
- setUp();
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/JTree/4927934/bug4927934.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,247 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/* @test
-+ @bug 4927934
-+ @summary JTree traversal is unlike Native windows tree traversal
-+ @author Andrey Pikalev
-+ @run main bug4927934
-+*/
-+
-+import javax.swing.*;
-+import javax.swing.event.*;
-+import javax.swing.tree.*;
-+import java.awt.*;
-+import java.awt.event.*;
-+import java.lang.reflect.InvocationTargetException;
-+import sun.awt.*;
-+
-+public class bug4927934 implements TreeSelectionListener, TreeExpansionListener, FocusListener {
-+
-+ final static Object listener = new bug4927934();
-+
-+ static boolean focusGained = false;
-+ public static boolean selectionChanged = false;
-+ public static boolean treeExpanded = false;
-+ public static boolean treeCollapsed = false;
-+
-+ static JFrame frame;
-+ static JTree tree;
-+ static Robot robot;
-+
-+ public static void main(String args[]) throws Exception {
-+ UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel());
-+
-+ robot = new Robot();
-+ robot.setAutoDelay(50);
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ frame = new JFrame();
-+
-+ DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
-+ createNodes(root);
-+ tree = new JTree(root);
-+ JScrollPane scrollPane = new JScrollPane(tree);
-+ frame.getContentPane().add(scrollPane);
-+
-+ tree.addFocusListener((FocusListener)listener);
-+ tree.addTreeSelectionListener((TreeSelectionListener)listener);
-+ tree.addTreeExpansionListener((TreeExpansionListener)listener);
-+
-+ frame.setSize(300, 300);
-+ frame.setVisible(true);
-+ }
-+ });
-+
-+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ toolkit.realSync();
-+ Thread.sleep(1000);
-+
-+ SwingUtilities.invokeLater(new Runnable() {
-+ public void run() {
-+ tree.requestFocus();
-+ }
-+ });
-+
-+ synchronized(listener) {
-+ if (!focusGained) {
-+ System.out.println("waiting focusGained...");
-+ try {
-+ listener.wait(10000);
-+ } catch (InterruptedException e) {
-+ e.printStackTrace();
-+ }
-+ }
-+ }
-+
-+ // GO TO RIGHT
-+ selectionChanged = false;
-+ hitKey(KeyEvent.VK_RIGHT);
-+ toolkit.realSync();
-+ if (!checkSelectionChanged(tree, 0)) {
-+ throw new RuntimeException("Root should be selected");
-+ }
-+
-+ selectionChanged = false;
-+ hitKey(KeyEvent.VK_RIGHT);
-+ toolkit.realSync();
-+ if (!checkSelectionChanged(tree, 1)) {
-+ throw new RuntimeException("Node should be selected");
-+ }
-+
-+ treeExpanded = false;
-+ hitKey(KeyEvent.VK_RIGHT);
-+ toolkit.realSync();
-+ if (!isTreeExpanded()) {
-+ throw new RuntimeException("Node should be expanded");
-+ }
-+
-+ selectionChanged = false;
-+ hitKey(KeyEvent.VK_RIGHT);
-+ toolkit.realSync();
-+ if (!checkSelectionChanged(tree, 2)) {
-+ throw new RuntimeException("Leaf1 should be selected");
-+ }
-+
-+ selectionChanged = false;
-+ hitKey(KeyEvent.VK_RIGHT);
-+ toolkit.realSync();
-+ if (!checkSelectionChanged(tree, 2)) {
-+ throw new RuntimeException("Leaf1 should be selected");
-+ }
-+
-+ // GO TO LEFT
-+ selectionChanged = false;
-+ hitKey(KeyEvent.VK_LEFT);
-+ toolkit.realSync();
-+ if (!checkSelectionChanged(tree, 1)) {
-+ throw new RuntimeException("Node should be selected");
-+ }
-+
-+ treeCollapsed = false;
-+ hitKey(KeyEvent.VK_LEFT);
-+ if (!isTreeCollapsed()) {
-+ throw new RuntimeException("Node should be collapsed");
-+ }
-+
-+ selectionChanged = false;
-+ hitKey(KeyEvent.VK_LEFT);
-+ toolkit.realSync();
-+ if (!checkSelectionChanged(tree, 0)) {
-+ throw new RuntimeException("Root should be selected");
-+ }
-+
-+ treeCollapsed = false;
-+ hitKey(KeyEvent.VK_LEFT);
-+ toolkit.realSync();
-+ if (!isTreeCollapsed()) {
-+ throw new RuntimeException("Root should be collapsed");
-+ }
-+ }
-+
-+
-+ synchronized public void focusLost(FocusEvent e) {
-+ }
-+
-+ synchronized public void focusGained(FocusEvent e) {
-+ focusGained = true;
-+ System.out.println("focusGained");
-+ listener.notifyAll();
-+ }
-+
-+ private static void createNodes(DefaultMutableTreeNode root) {
-+ DefaultMutableTreeNode node = new DefaultMutableTreeNode("Node");
-+ node.add(new DefaultMutableTreeNode("Leaf1"));
-+ node.add(new DefaultMutableTreeNode("Leaf2"));
-+ root.add(node);
-+ root.add(new DefaultMutableTreeNode("Leaf3"));
-+ }
-+
-+ synchronized public void valueChanged(TreeSelectionEvent e) {
-+ selectionChanged = true;
-+ System.out.println("selectionChanged");
-+ notifyAll();
-+ }
-+
-+ synchronized public void treeCollapsed(TreeExpansionEvent e) {
-+ System.out.println("treeCollapsed");
-+ treeCollapsed = true;
-+ notifyAll();
-+ }
-+
-+ synchronized public void treeExpanded(TreeExpansionEvent e) {
-+ System.out.println("treeExpanded");
-+ treeExpanded = true;
-+ notifyAll();
-+ }
-+
-+ private static void hitKey(int key) {
-+ System.out.println("key " + key + " pressed");
-+ robot.keyPress(key);
-+ robot.keyRelease(key);
-+ }
-+
-+ private static boolean checkSelectionChanged(JTree tree, int shouldBeSel) {
-+ synchronized(listener) {
-+ if (!selectionChanged) {
-+ System.out.println("waiting for selectionChanged...");
-+ try {
-+ listener.wait(5000);
-+ } catch (InterruptedException e) {
-+ e.printStackTrace();
-+ }
-+ }
-+ }
-+ int selRow = tree.getLeadSelectionRow();
-+ System.out.println("Selected row: " + selRow);
-+ return selRow == shouldBeSel;
-+ }
-+
-+ private static boolean isTreeExpanded() {
-+ synchronized(listener) {
-+ if (!treeExpanded) {
-+ System.out.println("waiting for treeExpanded...");
-+ try {
-+ listener.wait(5000);
-+ } catch (InterruptedException e) {
-+ e.printStackTrace();
-+ }
-+ }
-+ }
-+ return treeExpanded;
-+ }
-+
-+ private static boolean isTreeCollapsed() {
-+ synchronized(listener) {
-+ if (!treeCollapsed) {
-+ System.out.println("waiting for treeCollapsed...");
-+ try {
-+ listener.wait(5000);
-+ } catch (InterruptedException e) {
-+ e.printStackTrace();
-+ }
-+ }
-+ }
-+ return treeCollapsed;
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/Popup/TaskbarPositionTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,340 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import java.awt.*;
-+import java.awt.event.*;
-+import javax.swing.*;
-+import javax.swing.event.*;
-+
-+/**
-+ * @test @bug 4245587 4474813 4425878 4767478 8015599
-+ * @author Mark Davidson
-+ * @summary Tests the location of the heavy weight popup portion of JComboBox,
-+ * JMenu and JPopupMenu.
-+ * @library ../regtesthelpers
-+ * @build Util
-+ * @run main TaskbarPositionTest
-+ */
-+public class TaskbarPositionTest extends JFrame implements ActionListener {
-+
-+ private boolean done;
-+ private Throwable error;
-+ private static TaskbarPositionTest test;
-+ private static JPopupMenu popupMenu;
-+ private static JPanel panel;
-+ private static JComboBox<String> combo1;
-+ private static JComboBox<String> combo2;
-+ private static JMenuBar menubar;
-+ private static JMenu menu1;
-+ private static JMenu menu2;
-+ private static Rectangle fullScreenBounds;
-+ // The usable desktop space: screen size - screen insets.
-+ private static Rectangle screenBounds;
-+ private static String[] numData = {
-+ "One", "Two", "Three", "Four", "Five", "Six", "Seven"
-+ };
-+ private static String[] dayData = {
-+ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
-+ };
-+ private static char[] mnDayData = {
-+ 'M', 'T', 'W', 'R', 'F', 'S', 'U'
-+ };
-+
-+ public TaskbarPositionTest() {
-+ super("Use CTRL-down to show a JPopupMenu");
-+ setContentPane(panel = createContentPane());
-+ setJMenuBar(createMenuBar("1 - First Menu", true));
-+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-+
-+ // CTRL-down will show the popup.
-+ panel.getInputMap().put(KeyStroke.getKeyStroke(
-+ KeyEvent.VK_DOWN, InputEvent.CTRL_MASK), "OPEN_POPUP");
-+ panel.getActionMap().put("OPEN_POPUP", new PopupHandler());
-+
-+ pack();
-+
-+ Toolkit toolkit = Toolkit.getDefaultToolkit();
-+ fullScreenBounds = new Rectangle(new Point(), toolkit.getScreenSize());
-+ screenBounds = new Rectangle(new Point(), toolkit.getScreenSize());
-+
-+ // Place the frame near the bottom. This is a pretty wild guess.
-+ this.setLocation(0, (int) screenBounds.getHeight() - 2 * this.getHeight());
-+
-+ // Reduce the screen bounds by the insets.
-+ GraphicsConfiguration gc = this.getGraphicsConfiguration();
-+ if (gc != null) {
-+ Insets screenInsets = toolkit.getScreenInsets(gc);
-+ screenBounds = gc.getBounds();
-+ screenBounds.width -= (screenInsets.left + screenInsets.right);
-+ screenBounds.height -= (screenInsets.top + screenInsets.bottom);
-+ screenBounds.x += screenInsets.left;
-+ screenBounds.y += screenInsets.top;
-+ }
-+
-+ setVisible(true);
-+ }
-+
-+ public static class ComboPopupCheckListener implements PopupMenuListener {
-+
-+ public void popupMenuCanceled(PopupMenuEvent ev) {
-+ }
-+
-+ public void popupMenuWillBecomeVisible(PopupMenuEvent ev) {
-+ }
-+
-+ public void popupMenuWillBecomeInvisible(PopupMenuEvent ev) {
-+ Point cpos = combo1.getLocation();
-+ SwingUtilities.convertPointToScreen(cpos, panel);
-+
-+ JPopupMenu pm = (JPopupMenu) combo1.getUI().getAccessibleChild(combo1, 0);
-+
-+ if (pm != null) {
-+ Point p = pm.getLocation();
-+ SwingUtilities.convertPointToScreen(p, pm);
-+ if (p.y < cpos.y) {
-+ throw new RuntimeException("ComboBox popup is wrongly aligned");
-+ } // check that popup was opened down
-+ }
-+ }
-+ }
-+
-+ private class PopupHandler extends AbstractAction {
-+
-+ public void actionPerformed(ActionEvent e) {
-+ if (!popupMenu.isVisible()) {
-+ popupMenu.show((Component) e.getSource(), 40, 40);
-+ }
-+ isPopupOnScreen(popupMenu, fullScreenBounds);
-+ }
-+ }
-+
-+ class PopupListener extends MouseAdapter {
-+
-+ private JPopupMenu popup;
-+
-+ public PopupListener(JPopupMenu popup) {
-+ this.popup = popup;
-+ }
-+
-+ public void mousePressed(MouseEvent e) {
-+ maybeShowPopup(e);
-+ }
-+
-+ public void mouseReleased(MouseEvent e) {
-+ maybeShowPopup(e);
-+ }
-+
-+ private void maybeShowPopup(MouseEvent e) {
-+ if (e.isPopupTrigger()) {
-+ popup.show(e.getComponent(), e.getX(), e.getY());
-+ isPopupOnScreen(popup, fullScreenBounds);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Tests if the popup is on the screen.
-+ */
-+ public static void isPopupOnScreen(JPopupMenu popup, Rectangle checkBounds) {
-+ Dimension dim = popup.getSize();
-+ Point pt = new Point();
-+ SwingUtilities.convertPointToScreen(pt, popup);
-+ Rectangle bounds = new Rectangle(pt, dim);
-+
-+ if (!SwingUtilities.isRectangleContainingRectangle(checkBounds, bounds)) {
-+ throw new RuntimeException("We do not match! " + checkBounds + " / " + bounds);
-+ }
-+
-+ }
-+
-+ private JPanel createContentPane() {
-+ JPanel panel = new JPanel();
-+
-+ combo1 = new JComboBox<>(numData);
-+ panel.add(combo1);
-+ combo2 = new JComboBox<>(dayData);
-+ combo2.setEditable(true);
-+ panel.add(combo2);
-+ panel.setSize(300, 200);
-+
-+ popupMenu = new JPopupMenu();
-+ JMenuItem item;
-+ for (int i = 0; i < dayData.length; i++) {
-+ item = popupMenu.add(new JMenuItem(dayData[i], mnDayData[i]));
-+ item.addActionListener(this);
-+ }
-+ panel.addMouseListener(new PopupListener(popupMenu));
-+
-+ JTextField field = new JTextField("CTRL+down for Popup");
-+ // CTRL-down will show the popup.
-+ field.getInputMap().put(KeyStroke.getKeyStroke(
-+ KeyEvent.VK_DOWN, InputEvent.CTRL_MASK), "OPEN_POPUP");
-+ field.getActionMap().put("OPEN_POPUP", new PopupHandler());
-+
-+ panel.add(field);
-+
-+ return panel;
-+ }
-+
-+ /**
-+ * @param str name of Menu
-+ * @param bFlag set mnemonics on menu items
-+ */
-+ private JMenuBar createMenuBar(String str, boolean bFlag) {
-+ menubar = new JMenuBar();
-+
-+ menu1 = new JMenu(str);
-+ menu1.setMnemonic(str.charAt(0));
-+ menu1.addActionListener(this);
-+
-+ menubar.add(menu1);
-+ for (int i = 0; i < 8; i++) {
-+ JMenuItem menuitem = new JMenuItem("1 JMenuItem" + i);
-+ menuitem.addActionListener(this);
-+ if (bFlag) {
-+ menuitem.setMnemonic('0' + i);
-+ }
-+ menu1.add(menuitem);
-+ }
-+
-+ // second menu
-+ menu2 = new JMenu("2 - Second Menu");
-+ menu2.addActionListener(this);
-+ menu2.setMnemonic('2');
-+
-+ menubar.add(menu2);
-+ for (int i = 0; i < 5; i++) {
-+ JMenuItem menuitem = new JMenuItem("2 JMenuItem" + i);
-+ menuitem.addActionListener(this);
-+
-+ if (bFlag) {
-+ menuitem.setMnemonic('0' + i);
-+ }
-+ menu2.add(menuitem);
-+ }
-+ JMenu submenu = new JMenu("Sub Menu");
-+ submenu.setMnemonic('S');
-+ submenu.addActionListener(this);
-+ for (int i = 0; i < 5; i++) {
-+ JMenuItem menuitem = new JMenuItem("S JMenuItem" + i);
-+ menuitem.addActionListener(this);
-+ if (bFlag) {
-+ menuitem.setMnemonic('0' + i);
-+ }
-+ submenu.add(menuitem);
-+ }
-+ menu2.add(new JSeparator());
-+ menu2.add(submenu);
-+
-+ return menubar;
-+ }
-+
-+ public void actionPerformed(ActionEvent evt) {
-+ Object obj = evt.getSource();
-+ if (obj instanceof JMenuItem) {
-+ // put the focus on the noneditable combo.
-+ combo1.requestFocus();
-+ }
-+ }
-+
-+ public static void main(String[] args) throws Throwable {
-+
-+ sun.awt.SunToolkit toolkit = (sun.awt.SunToolkit) Toolkit.getDefaultToolkit();
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ test = new TaskbarPositionTest();
-+ }
-+ });
-+
-+ // Use Robot to automate the test
-+ Robot robot;
-+ robot = new Robot();
-+ robot.setAutoDelay(125);
-+
-+ // 1 - menu
-+ Util.hitMnemonics(robot, KeyEvent.VK_1);
-+
-+ toolkit.realSync();
-+ isPopupOnScreen(menu1.getPopupMenu(), screenBounds);
-+
-+ // 2 menu with sub menu
-+ robot.keyPress(KeyEvent.VK_RIGHT);
-+ robot.keyRelease(KeyEvent.VK_RIGHT);
-+ Util.hitMnemonics(robot, KeyEvent.VK_S);
-+
-+ toolkit.realSync();
-+ isPopupOnScreen(menu2.getPopupMenu(), screenBounds);
-+
-+ robot.keyPress(KeyEvent.VK_ENTER);
-+ robot.keyRelease(KeyEvent.VK_ENTER);
-+
-+ // Focus should go to non editable combo box
-+ toolkit.realSync();
-+ Thread.sleep(500);
-+
-+ robot.keyPress(KeyEvent.VK_DOWN);
-+
-+ // How do we check combo boxes?
-+
-+ // Editable combo box
-+ robot.keyPress(KeyEvent.VK_TAB);
-+ robot.keyRelease(KeyEvent.VK_TAB);
-+ robot.keyPress(KeyEvent.VK_DOWN);
-+ robot.keyRelease(KeyEvent.VK_DOWN);
-+
-+ // combo1.getUI();
-+
-+ // Popup from Text field
-+ robot.keyPress(KeyEvent.VK_TAB);
-+ robot.keyRelease(KeyEvent.VK_TAB);
-+ robot.keyPress(KeyEvent.VK_CONTROL);
-+ robot.keyPress(KeyEvent.VK_DOWN);
-+ robot.keyRelease(KeyEvent.VK_DOWN);
-+ robot.keyRelease(KeyEvent.VK_CONTROL);
-+
-+ // Popup from a mouse click.
-+ Point pt = new Point(2, 2);
-+ SwingUtilities.convertPointToScreen(pt, panel);
-+ robot.mouseMove((int) pt.getX(), (int) pt.getY());
-+ robot.mousePress(InputEvent.BUTTON3_MASK);
-+ robot.mouseRelease(InputEvent.BUTTON3_MASK);
-+
-+ toolkit.realSync();
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ test.setLocation(-30, 100);
-+ combo1.addPopupMenuListener(new ComboPopupCheckListener());
-+ combo1.requestFocus();
-+ }
-+ });
-+
-+ robot.keyPress(KeyEvent.VK_DOWN);
-+ robot.keyRelease(KeyEvent.VK_DOWN);
-+ robot.keyPress(KeyEvent.VK_ESCAPE);
-+ robot.keyRelease(KeyEvent.VK_ESCAPE);
-+
-+ toolkit.realSync();
-+ Thread.sleep(500);
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,89 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/* @test
-+ @bug 4983388 8015600
-+ @summary shortcuts on menus do not work on JDS
-+ @author Oleg Mokhovikov
-+ @library ../../../../regtesthelpers
-+ @build Util
-+ @run main bug4983388
-+*/
-+
-+import sun.awt.*;
-+import java.awt.*;
-+import javax.swing.*;
-+import javax.swing.event.MenuListener;
-+import javax.swing.event.MenuEvent;
-+import java.awt.event.KeyEvent;
-+
-+public class bug4983388 {
-+ static volatile boolean bMenuSelected = false;
-+
-+ private static class TestMenuListener implements MenuListener {
-+ public void menuCanceled(MenuEvent e) {}
-+ public void menuDeselected(MenuEvent e) {}
-+ public void menuSelected(MenuEvent e) {
-+ System.out.println("menuSelected");
-+ bMenuSelected = true;
-+ }
-+ }
-+
-+ private static void createAndShowGUI() {
-+ JMenuBar menuBar = new JMenuBar();
-+ JMenu menu = new JMenu("File");
-+ menu.setMnemonic('F');
-+ menuBar.add(menu);
-+ JFrame frame = new JFrame();
-+ frame.setJMenuBar(menuBar);
-+ frame.pack();
-+ frame.setVisible(true);
-+ MenuListener listener = new TestMenuListener();
-+ menu.addMenuListener(listener);
-+ }
-+
-+ public static void main(String[] args) throws Exception {
-+
-+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ try {
-+ UIManager.setLookAndFeel("com.sun.java.swing.plaf.gtk.GTKLookAndFeel");
-+ } catch (UnsupportedLookAndFeelException | ClassNotFoundException ex) {
-+ System.err.println("GTKLookAndFeel is not supported on this platform. Using defailt LaF for this platform.");
-+ }
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ createAndShowGUI();
-+ }
-+ });
-+
-+ Robot robot = new Robot();
-+ Util.hitMnemonics(robot, KeyEvent.VK_F);
-+
-+ toolkit.realSync();
-+
-+ if (!bMenuSelected) {
-+ throw new RuntimeException("shortcuts on menus do not work");
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/plaf/basic/BasicTreeUI/8023474/bug8023474.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,174 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8023474
-+ * @summary Tests that the first mouse press starts editing in JTree
-+ * @author Dmitry Markov
-+ * @run main bug8023474
-+ */
-+
-+import sun.awt.SunToolkit;
-+
-+import javax.swing.*;
-+import javax.swing.event.CellEditorListener;
-+import javax.swing.tree.DefaultMutableTreeNode;
-+import javax.swing.tree.DefaultTreeModel;
-+import javax.swing.tree.TreeCellEditor;
-+import javax.swing.tree.TreeCellRenderer;
-+import java.awt.*;
-+import java.awt.event.InputEvent;
-+import java.util.EventObject;
-+
-+public class bug8023474 {
-+ private static JTree tree;
-+
-+ public static void main(String[] args) throws Exception {
-+ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
-+ Robot robot = new Robot();
-+ robot.setAutoDelay(50);
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ createAndShowGUI();
-+ }
-+ });
-+
-+ toolkit.realSync();
-+
-+ Point point = getRowPointToClick(1);
-+ robot.mouseMove(point.x, point.y);
-+ robot.mousePress(InputEvent.BUTTON1_MASK);
-+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
-+
-+ toolkit.realSync();
-+
-+ Boolean result = (Boolean)tree.getCellEditor().getCellEditorValue();
-+ if (!result) {
-+ throw new RuntimeException("Test Failed!");
-+ }
-+ }
-+
-+ private static void createAndShowGUI() {
-+ try {
-+ UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
-+ } catch (Exception e) {
-+ throw new RuntimeException(e);
-+ }
-+
-+ DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
-+ DefaultMutableTreeNode item = new DefaultMutableTreeNode("item");
-+ DefaultMutableTreeNode subItem = new DefaultMutableTreeNode("subItem");
-+
-+ root.add(item);
-+ item.add(subItem);
-+
-+ DefaultTreeModel model = new DefaultTreeModel(root);
-+ tree = new JTree(model);
-+
-+ tree.setCellEditor(new Editor());
-+ tree.setEditable(true);
-+ tree.setRowHeight(30);
-+ tree.setCellRenderer(new CheckboxCellRenderer());
-+
-+ JFrame frame = new JFrame("bug8023474");
-+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-+ frame.add(new JScrollPane(tree));
-+ frame.setSize(400, 300);
-+ frame.setVisible(true);
-+ }
-+
-+ private static Point getRowPointToClick(final int row) throws Exception {
-+ final Point[] result = new Point[1];
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ Rectangle rect = tree.getRowBounds(row);
-+ Point point = new Point(rect.x + 10, rect.y + rect.height / 2);
-+ SwingUtilities.convertPointToScreen(point, tree);
-+ result[0] = point;
-+ }
-+ });
-+ return result[0];
-+ }
-+
-+ private static class Editor extends JPanel implements TreeCellEditor {
-+ private JCheckBox checkbox;
-+
-+ public Editor() {
-+ setOpaque(false);
-+ checkbox = new JCheckBox();
-+ add(checkbox);
-+ }
-+
-+ public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected,
-+ boolean expanded, boolean leaf, int row) {
-+ checkbox.setText(value.toString());
-+ checkbox.setSelected(false);
-+ return this;
-+ }
-+
-+ public Object getCellEditorValue() {
-+ return checkbox.isSelected();
-+ }
-+
-+ public boolean isCellEditable(EventObject anEvent) {
-+ return true;
-+ }
-+
-+ public boolean shouldSelectCell(EventObject anEvent) {
-+ return true;
-+ }
-+
-+ public boolean stopCellEditing() {
-+ return true;
-+ }
-+
-+ public void cancelCellEditing() {
-+ }
-+
-+ public void addCellEditorListener(CellEditorListener l) {
-+ }
-+
-+ public void removeCellEditorListener(CellEditorListener l) {
-+ }
-+ }
-+
-+ private static class CheckboxCellRenderer extends JPanel implements TreeCellRenderer {
-+ private JCheckBox checkbox;
-+
-+ public CheckboxCellRenderer() {
-+ setOpaque(false);
-+ checkbox = new JCheckBox();
-+ add(checkbox);
-+ }
-+
-+ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
-+ boolean leaf, int row, boolean hasFocus) {
-+ checkbox.setText(value.toString());
-+ checkbox.setSelected(false);
-+ return this;
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/swing/text/StyledEditorKit/8016833/bug8016833.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,270 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/* @test
-+ @bug 8016833
-+ @summary underlines and strikethroughs should be painted at the correct
-+ positions for different kind of text styles: normal, superscript and subscript
-+ @author Anton Nashatyrev
-+ @run main bug8016833
-+*/
-+import javax.swing.*;
-+import javax.swing.text.BadLocationException;
-+import javax.swing.text.Style;
-+import javax.swing.text.StyleConstants;
-+import javax.swing.text.StyledDocument;
-+import java.awt.*;
-+import java.awt.image.BufferedImage;
-+import java.lang.reflect.InvocationTargetException;
-+
-+public class bug8016833 {
-+
-+ void drawText(final Graphics g, final boolean underline, final boolean strikethrough, final boolean background) {
-+ drawText(g, "mama", underline, strikethrough, background);
-+ }
-+
-+ void drawText(final Graphics g, final String text, final boolean underline, final boolean strikethrough, final boolean background) {
-+ try {
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ @Override
-+ public void run() {
-+ final JTextPane comp = new JTextPane();
-+ final StyledDocument doc = comp.getStyledDocument();
-+
-+ Style style = comp.addStyle("superscript", null);
-+ setNormalStyle(style);
-+
-+ if (underline) {
-+ StyleConstants.setUnderline(style, true);
-+ }
-+ if (strikethrough) {
-+ StyleConstants.setStrikeThrough(style, true);
-+ }
-+ if (background) {
-+ StyleConstants.setBackground(style, Color.BLUE);
-+ }
-+ try {
-+ doc.insertString(doc.getLength(), "mama", style);
-+ } catch (BadLocationException e) {
-+ throw new RuntimeException(e);
-+ }
-+
-+ comp.setSize(200, 100);
-+ comp.paint(g);
-+ }
-+ });
-+ } catch (InterruptedException e) {
-+ throw new RuntimeException(e);
-+ } catch (InvocationTargetException e) {
-+ throw new RuntimeException(e);
-+ }
-+ }
-+
-+ void setNormalStyle(Style style) {
-+ StyleConstants.setSuperscript(style, true);
-+ }
-+
-+ int getEmptyPixel() {
-+ return 0xFFFFFFFF;
-+ }
-+
-+ boolean isPixelEmpty(int argb) {
-+ return (argb & 0x00FFFFFF) == (getEmptyPixel() & 0x00FFFFFF);
-+ }
-+
-+ boolean isLineEmpty(BufferedImage img, int coord, boolean isHorizontal) {
-+ int len = isHorizontal ? img.getWidth() : img.getHeight();
-+ for (int i = 0; i < len; i++) {
-+ int pixel = isHorizontal ? img.getRGB(i, coord) : img.getRGB(coord, i);
-+ if (!isPixelEmpty(pixel)) {
-+ return false;
-+ }
-+ }
-+ return true;
-+ }
-+
-+ Rectangle getPixelsOutline(BufferedImage img) {
-+ int x1 = 0;
-+ while (x1 < img.getWidth() && isLineEmpty(img, x1, false)) {
-+ x1++;
-+ }
-+ int x2 = img.getWidth() - 1;
-+ while (x2 >= 0 && isLineEmpty(img, x2, false)) {
-+ x2--;
-+ }
-+ int y1 = 0;
-+ while (y1 < img.getHeight() && isLineEmpty(img, y1, true)) {
-+ y1++;
-+ }
-+ int y2 = img.getHeight() - 1;
-+ while (y2 >= 0 && isLineEmpty(img, y2, true)) {
-+ y2--;
-+ }
-+
-+ return new Rectangle(x1, y1, x2 - x1 + 1, y2 - y1 + 1);
-+ }
-+
-+ BufferedImage createImage() {
-+ final BufferedImage img = new BufferedImage(200, 100, BufferedImage.TYPE_INT_ARGB);
-+ try {
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ @Override
-+ public void run() {
-+ Graphics g = img.getGraphics();
-+ g.setColor(new Color(getEmptyPixel()));
-+ g.fillRect(0, 0, 10000, 10000);
-+ }
-+ });
-+ } catch (InterruptedException e) {
-+ throw new RuntimeException(e);
-+ } catch (InvocationTargetException e) {
-+ throw new RuntimeException(e);
-+ }
-+ return img;
-+ }
-+
-+ int subPixels(int pix1, int pix2) {
-+ if (pix1 == pix2) {
-+ return getEmptyPixel();
-+ }
-+ return pix1;
-+ }
-+
-+ /**
-+ * Subtracts img2 from img1
-+ */
-+ BufferedImage subImages(BufferedImage img1, BufferedImage img2) {
-+ if (img1.getHeight() != img2.getHeight() ||
-+ img1.getWidth() != img2.getWidth()) {
-+ throw new RuntimeException("Different sizes");
-+ }
-+ BufferedImage ret = new BufferedImage(img1.getWidth(), img1.getHeight(), img1.getType());
-+
-+ for (int x = 0; x < ret.getWidth(); x++) {
-+ for (int y = 0; y < ret.getHeight(); y++) {
-+ ret.setRGB(x, y, subPixels(img1.getRGB(x, y), img2.getRGB(x, y)));
-+ }
-+ }
-+ return ret;
-+ }
-+
-+ void testUnderline() {
-+ System.out.println(" testUnderline()");
-+
-+ final BufferedImage img1 = createImage();
-+ drawText(img1.getGraphics(), true, false, false);
-+ final Rectangle out1 = getPixelsOutline(img1);
-+ System.out.println(" Underlined: " + out1);
-+
-+ final BufferedImage img2 = createImage();
-+ drawText(img2.getGraphics(), false, false, false);
-+ final Rectangle out2 = getPixelsOutline(img2);
-+ System.out.println(" Normal: " + out2);
-+
-+ final BufferedImage img3 = subImages(img1, img2);
-+ final Rectangle out3 = getPixelsOutline(img3);
-+ System.out.println(" Sub: " + out3);
-+
-+ // underline is not too thick
-+ assertTrue(out3.getHeight() <= 2);
-+ // not too wide
-+ assertTrue(out3.getWidth() * 0.8 < out2.getWidth());
-+ // not too low
-+ assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) < 3);
-+ // not too high
-+ assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) > 0);
-+ }
-+
-+ void testStrikthrough() {
-+ System.out.println(" testStrikthrough()");
-+
-+ final BufferedImage img1 = createImage();
-+ drawText(img1.getGraphics(), false, true, false);
-+ final Rectangle out1 = getPixelsOutline(img1);
-+ System.out.println(" Striked: " + out1);
-+
-+ final BufferedImage img2 = createImage();
-+ drawText(img2.getGraphics(), false, false, false);
-+ final Rectangle out2 = getPixelsOutline(img2);
-+ System.out.println(" Normal: " + out2);
-+
-+ final BufferedImage img3 = subImages(img1, img2);
-+ final Rectangle out3 = getPixelsOutline(img3);
-+ System.out.println(" Sub: " + out3);
-+
-+ // strikethrough is not too thick
-+ assertTrue(out3.getHeight() <= 2);
-+ // not too wide
-+ assertTrue(out3.getWidth() * 0.8 < out2.getWidth());
-+ // not too low
-+ assertTrue(out3.getY() - (out1.getY() + out2.getHeight()) < 0);
-+ // not too high
-+ assertTrue(out3.getY() - out1.getY() > 1);
-+ }
-+ void assertTrue(boolean b) {
-+ if (!b) {
-+ throw new RuntimeException("Assertion failed");
-+ }
-+ }
-+
-+ static void testSuperScript() {
-+ System.out.println("testSuperScript()");
-+ bug8016833 b = new bug8016833() {
-+ @Override
-+ void setNormalStyle(Style style) {
-+ StyleConstants.setSuperscript(style, true);
-+ }
-+ };
-+ b.testUnderline();
-+ b.testStrikthrough();
-+ }
-+
-+ static void testSubScript() {
-+ System.out.println("testSubScript()");
-+ bug8016833 b = new bug8016833() {
-+ @Override
-+ void setNormalStyle(Style style) {
-+ StyleConstants.setSubscript(style, true);
-+ }
-+ };
-+ b.testUnderline();
-+ b.testStrikthrough();
-+ }
-+
-+ static void testNormalScript() {
-+ System.out.println("testNormalScript()");
-+ bug8016833 b = new bug8016833() {
-+ @Override
-+ void setNormalStyle(Style style) {
-+ }
-+ };
-+ b.testUnderline();
-+ b.testStrikthrough();
-+ }
-+
-+ public static void main(String[] args) {
-+ testSubScript();
-+ testSuperScript();
-+ testNormalScript();
-+ }
-+}
---- ./jdk/test/javax/swing/text/View/8014863/bug8014863.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/swing/text/View/8014863/bug8014863.java Wed May 07 19:26:47 2014 -0700
-@@ -24,6 +24,7 @@
- /*
- * @test
- * @bug 8014863
-+ * @bug 8024395
- * @summary Tests the calculation of the line breaks when a text is inserted
- * @author Dmitry Markov
- * @library ../../../regtesthelpers
-@@ -34,91 +35,107 @@
- import sun.awt.SunToolkit;
-
- import javax.swing.*;
-+import javax.swing.text.GlyphView;
-+import javax.swing.text.View;
- import javax.swing.text.html.HTMLEditorKit;
- import java.awt.*;
- import java.awt.event.KeyEvent;
-+import java.lang.reflect.Field;
-+import java.util.ArrayList;
-+import java.util.Arrays;
-
- public class bug8014863 {
-
- private static JEditorPane editorPane;
-+ private static JFrame frame;
- private static Robot robot;
- private static SunToolkit toolkit;
-
-+ private static String text1 = "<p>one two qqqq <em>this is a test sentence</em> qqqq <em>pp</em> qqqq <em>pp</em> " +
-+ "qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq</p>";
-+ private static String text2 = "<p>qqqq <em>this is a test sentence</em> qqqq <em>pp</em> qqqq <em>pp</em> " +
-+ "qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq</p>";
-+
-+ private static ArrayList<GlyphView> glyphViews;
-+
- public static void main(String[] args) throws Exception {
- toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
- robot = new Robot();
-+ robot.setAutoDelay(50);
-+ glyphViews = new ArrayList<GlyphView>();
-
-- createAndShowGUI();
-+ createAndShowGUI(text1);
-+
-+ toolkit.realSync();
-+
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ retrieveGlyphViews(editorPane.getUI().getRootView(editorPane));
-+ }
-+ });
-+ GlyphView [] arr1 = glyphViews.toArray(new GlyphView[glyphViews.size()]);
-+
-+ frame.dispose();
-+ glyphViews.clear();
-+
-+ createAndShowGUI(text2);
-
- toolkit.realSync();
-
- Util.hitKeys(robot, KeyEvent.VK_HOME);
-- Util.hitKeys(robot, KeyEvent.VK_O);
--
- toolkit.realSync();
-
-- if (3 != getNumberOfTextLines()) {
-- throw new RuntimeException("The number of texts lines does not meet the expectation");
-- }
--
-+ Util.hitKeys(robot, KeyEvent.VK_O);
- Util.hitKeys(robot, KeyEvent.VK_N);
--
-- toolkit.realSync();
--
-- if (3 != getNumberOfTextLines()) {
-- throw new RuntimeException("The number of texts lines does not meet the expectation");
-- }
--
- Util.hitKeys(robot, KeyEvent.VK_E);
- Util.hitKeys(robot, KeyEvent.VK_SPACE);
- Util.hitKeys(robot, KeyEvent.VK_T);
- Util.hitKeys(robot, KeyEvent.VK_W);
-+ Util.hitKeys(robot, KeyEvent.VK_O);
-+ Util.hitKeys(robot, KeyEvent.VK_SPACE);
-
- toolkit.realSync();
-
-- if (3 != getNumberOfTextLines()) {
-- throw new RuntimeException("The number of texts lines does not meet the expectation");
-+ SwingUtilities.invokeAndWait(new Runnable() {
-+ public void run() {
-+ retrieveGlyphViews(editorPane.getUI().getRootView(editorPane));
-+ }
-+ });
-+ GlyphView [] arr2 = glyphViews.toArray(new GlyphView[glyphViews.size()]);
-+
-+ if (arr1.length != arr2.length) {
-+ throw new RuntimeException("Test Failed!");
-+ }
-+
-+ for (int i=0; i<arr1.length; i++) {
-+ GlyphView v1 = arr1[i];
-+ GlyphView v2 = arr2[i];
-+ Field field = GlyphView.class.getDeclaredField("breakSpots");
-+ field.setAccessible(true);
-+ int[] breakSpots1 = (int[])field.get(v1);
-+ int[] breakSpots2 = (int[])field.get(v2);
-+ if (!Arrays.equals(breakSpots1,breakSpots2)) {
-+ throw new RuntimeException("Test Failed!");
-+ }
-+ }
-+
-+ frame.dispose();
-+ }
-+
-+ private static void retrieveGlyphViews(View root) {
-+ for (int i=0; i<= root.getViewCount()-1; i++) {
-+ View view = root.getView(i);
-+ if (view instanceof GlyphView && view.isVisible()) {
-+ if (!glyphViews.contains(view)) {
-+ glyphViews.add((GlyphView)view);
-+ }
-+ } else {
-+ retrieveGlyphViews(view);
-+ }
- }
- }
-
-- private static int getNumberOfTextLines() throws Exception {
-- int numberOfLines = 0;
-- int caretPosition = getCaretPosition();
-- int current = 1;
-- int previous;
--
-- setCaretPosition(current);
-- do {
-- previous = current;
-- Util.hitKeys(robot, KeyEvent.VK_DOWN);
-- toolkit.realSync();
-- current = getCaretPosition();
-- numberOfLines++;
-- } while (current != previous);
--
-- setCaretPosition(caretPosition);
-- return numberOfLines;
-- }
--
-- private static int getCaretPosition() throws Exception {
-- final int[] result = new int[1];
-- SwingUtilities.invokeAndWait(new Runnable() {
-- public void run() {
-- result[0] = editorPane.getCaretPosition();
-- }
-- });
-- return result[0];
-- }
--
-- private static void setCaretPosition(final int position) throws Exception {
-- SwingUtilities.invokeAndWait(new Runnable() {
-- public void run() {
-- editorPane.setCaretPosition(position);
-- }
-- });
-- }
--
-- private static void createAndShowGUI() throws Exception {
-+ private static void createAndShowGUI(final String text) throws Exception {
- SwingUtilities.invokeAndWait(new Runnable() {
- public void run() {
- try {
-@@ -126,17 +143,14 @@
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
-- JFrame frame = new JFrame();
-+ frame = new JFrame();
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
- editorPane = new JEditorPane();
- HTMLEditorKit editorKit = new HTMLEditorKit();
- editorPane.setEditorKit(editorKit);
-- editorPane.setText("<p>qqqq <em>pp</em> qqqq <em>pp</em> " +
-- "qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp" +
-- "</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq <em>pp</em> qqqq</p>");
-+ editorPane.setText(text);
- editorPane.setCaretPosition(1);
--
- frame.add(editorPane);
- frame.setSize(200, 200);
- frame.setVisible(true);
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/XPath/8009579/XPathExceptionInitCause.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,220 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8009579
-+ * @summary The initCause() incorrectly initialise the cause in
-+ * XPathException class when used with XPathException(String)
-+ * constructor.
-+ * @run main XPathExceptionInitCause
-+ * @author aleksej.efimov@oracle.com
-+ */
-+
-+import javax.xml.xpath.XPathException;
-+import java.io.ByteArrayOutputStream;
-+import java.io.ByteArrayInputStream;
-+import java.io.ObjectOutputStream;
-+import java.io.ObjectInputStream;
-+import java.io.IOException;
-+import java.io.InvalidClassException;
-+
-+
-+public class XPathExceptionInitCause {
-+
-+ /* This is a serial form of XPathException with two causes serialized
-+ * by JDK7 code:
-+ *
-+ * ByteArrayOutputStream fser = new ByteArrayOutputStream();
-+ * ObjectOutputStream oos = new ObjectOutputStream(fser);
-+ * oos.writeObject(new XPathException(new Exception()).initCause(null));
-+ * oos.close();
-+ */
-+ static final byte [] TWOCAUSES = {-84,-19,0,5,115,114,0,30,106,97,118,97,120,46,120,
-+ 109,108,46,120,112,97,116,104,46,88,80,97,116,104,69,120,99,101,112,116,
-+ 105,111,110,-26,-127,97,60,-120,119,127,28,2,0,1,76,0,5,99,97,117,115,101,
-+ 116,0,21,76,106,97,118,97,47,108,97,110,103,47,84,104,114,111,119,97,98,
-+ 108,101,59,120,114,0,19,106,97,118,97,46,108,97,110,103,46,69,120,99,101,
-+ 112,116,105,111,110,-48,-3,31,62,26,59,28,-60,2,0,0,120,114,0,19,106,97,
-+ 118,97,46,108,97,110,103,46,84,104,114,111,119,97,98,108,101,-43,-58,53,
-+ 39,57,119,-72,-53,3,0,4,76,0,5,99,97,117,115,101,113,0,126,0,1,76,0,13,
-+ 100,101,116,97,105,108,77,101,115,115,97,103,101,116,0,18,76,106,97,118,
-+ 97,47,108,97,110,103,47,83,116,114,105,110,103,59,91,0,10,115,116,97,99,
-+ 107,84,114,97,99,101,116,0,30,91,76,106,97,118,97,47,108,97,110,103,47,83,
-+ 116,97,99,107,84,114,97,99,101,69,108,101,109,101,110,116,59,76,0,20,115,
-+ 117,112,112,114,101,115,115,101,100,69,120,99,101,112,116,105,111,110,115,
-+ 116,0,16,76,106,97,118,97,47,117,116,105,108,47,76,105,115,116,59,120,112,
-+ 112,112,117,114,0,30,91,76,106,97,118,97,46,108,97,110,103,46,83,116,97,99,
-+ 107,84,114,97,99,101,69,108,101,109,101,110,116,59,2,70,42,60,60,-3,34,57,
-+ 2,0,0,120,112,0,0,0,1,115,114,0,27,106,97,118,97,46,108,97,110,103,46,83,
-+ 116,97,99,107,84,114,97,99,101,69,108,101,109,101,110,116,97,9,-59,-102,
-+ 38,54,-35,-123,2,0,4,73,0,10,108,105,110,101,78,117,109,98,101,114,76,0,
-+ 14,100,101,99,108,97,114,105,110,103,67,108,97,115,115,113,0,126,0,4,76,
-+ 0,8,102,105,108,101,78,97,109,101,113,0,126,0,4,76,0,10,109,101,116,104,
-+ 111,100,78,97,109,101,113,0,126,0,4,120,112,0,0,0,31,116,0,23,88,80,97,116,
-+ 104,69,120,99,101,112,116,105,111,110,83,101,114,105,97,108,105,122,101,
-+ 116,0,28,88,80,97,116,104,69,120,99,101,112,116,105,111,110,83,101,114,105,
-+ 97,108,105,122,101,46,106,97,118,97,116,0,4,109,97,105,110,115,114,0,38,
-+ 106,97,118,97,46,117,116,105,108,46,67,111,108,108,101,99,116,105,111,110,
-+ 115,36,85,110,109,111,100,105,102,105,97,98,108,101,76,105,115,116,-4,15,
-+ 37,49,-75,-20,-114,16,2,0,1,76,0,4,108,105,115,116,113,0,126,0,6,120,114,
-+ 0,44,106,97,118,97,46,117,116,105,108,46,67,111,108,108,101,99,116,105,111,
-+ 110,115,36,85,110,109,111,100,105,102,105,97,98,108,101,67,111,108,108,101,
-+ 99,116,105,111,110,25,66,0,-128,-53,94,-9,30,2,0,1,76,0,1,99,116,0,22,76,
-+ 106,97,118,97,47,117,116,105,108,47,67,111,108,108,101,99,116,105,111,110,
-+ 59,120,112,115,114,0,19,106,97,118,97,46,117,116,105,108,46,65,114,114,97,
-+ 121,76,105,115,116,120,-127,-46,29,-103,-57,97,-99,3,0,1,73,0,4,115,105,
-+ 122,101,120,112,0,0,0,0,119,4,0,0,0,0,120,113,0,126,0,20,120,115,113,0,126,
-+ 0,2,113,0,126,0,21,112,117,113,0,126,0,8,0,0,0,1,115,113,0,126,0,10,0,0,0,
-+ 31,113,0,126,0,12,113,0,126,0,13,113,0,126,0,14,113,0,126,0,18,120
-+ };
-+
-+ /* This is a serial form of ordinary XPathException serialized by JDK7 code:
-+ *
-+ * Throwable cause = new Throwable( "message 1" );
-+ * XPathException xpathexcep = new XPathException( "message 2" );
-+ * xpathexcep.initCause( cause );
-+ * ByteArrayOutputStream fser = new ByteArrayOutputStream();
-+ * ObjectOutputStream oos = new ObjectOutputStream(fser);
-+ * oos.writeObject(xpathexcep);
-+ * oos.close();
-+ */
-+ static final byte [] NORMALJDK7SER = {-84,-19,0,5,115,114,0,30,106,97,118,97,120,
-+ 46,120,109,108,46,120,112,97,116,104,46,88,80,97,116,104,69,120,99,101,112,
-+ 116,105,111,110,-26,-127,97,60,-120,119,127,28,2,0,1,76,0,5,99,97,117,115,
-+ 101,116,0,21,76,106,97,118,97,47,108,97,110,103,47,84,104,114,111,119,97,
-+ 98,108,101,59,120,114,0,19,106,97,118,97,46,108,97,110,103,46,69,120,99,
-+ 101,112,116,105,111,110,-48,-3,31,62,26,59,28,-60,2,0,0,120,114,0,19,106,
-+ 97,118,97,46,108,97,110,103,46,84,104,114,111,119,97,98,108,101,-43,-58,
-+ 53,39,57,119,-72,-53,3,0,4,76,0,5,99,97,117,115,101,113,0,126,0,1,76,0,13,
-+ 100,101,116,97,105,108,77,101,115,115,97,103,101,116,0,18,76,106,97,118,
-+ 97,47,108,97,110,103,47,83,116,114,105,110,103,59,91,0,10,115,116,97,99,
-+ 107,84,114,97,99,101,116,0,30,91,76,106,97,118,97,47,108,97,110,103,47,83,
-+ 116,97,99,107,84,114,97,99,101,69,108,101,109,101,110,116,59,76,0,20,115,
-+ 117,112,112,114,101,115,115,101,100,69,120,99,101,112,116,105,111,110,115,
-+ 116,0,16,76,106,97,118,97,47,117,116,105,108,47,76,105,115,116,59,120,112,
-+ 115,113,0,126,0,3,113,0,126,0,8,116,0,9,109,101,115,115,97,103,101,32,49,
-+ 117,114,0,30,91,76,106,97,118,97,46,108,97,110,103,46,83,116,97,99,107,84,
-+ 114,97,99,101,69,108,101,109,101,110,116,59,2,70,42,60,60,-3,34,57,2,0,0,
-+ 120,112,0,0,0,1,115,114,0,27,106,97,118,97,46,108,97,110,103,46,83,116,97,
-+ 99,107,84,114,97,99,101,69,108,101,109,101,110,116,97,9,-59,-102,38,54,-35,
-+ -123,2,0,4,73,0,10,108,105,110,101,78,117,109,98,101,114,76,0,14,100,101,
-+ 99,108,97,114,105,110,103,67,108,97,115,115,113,0,126,0,4,76,0,8,102,105,
-+ 108,101,78,97,109,101,113,0,126,0,4,76,0,10,109,101,116,104,111,100,78,97,
-+ 109,101,113,0,126,0,4,120,112,0,0,0,19,116,0,23,88,80,97,116,104,69,120,
-+ 99,101,112,116,105,111,110,83,101,114,105,97,108,105,122,101,116,0,28,88,
-+ 80,97,116,104,69,120,99,101,112,116,105,111,110,83,101,114,105,97,108,105,
-+ 122,101,46,106,97,118,97,116,0,4,109,97,105,110,115,114,0,38,106,97,118,
-+ 97,46,117,116,105,108,46,67,111,108,108,101,99,116,105,111,110,115,36,85,
-+ 110,109,111,100,105,102,105,97,98,108,101,76,105,115,116,-4,15,37,49,-75,
-+ -20,-114,16,2,0,1,76,0,4,108,105,115,116,113,0,126,0,6,120,114,0,44,106,
-+ 97,118,97,46,117,116,105,108,46,67,111,108,108,101,99,116,105,111,110,115,
-+ 36,85,110,109,111,100,105,102,105,97,98,108,101,67,111,108,108,101,99,116,
-+ 105,111,110,25,66,0,-128,-53,94,-9,30,2,0,1,76,0,1,99,116,0,22,76,106,97,
-+ 118,97,47,117,116,105,108,47,67,111,108,108,101,99,116,105,111,110,59,120,
-+ 112,115,114,0,19,106,97,118,97,46,117,116,105,108,46,65,114,114,97,121,76,
-+ 105,115,116,120,-127,-46,29,-103,-57,97,-99,3,0,1,73,0,4,115,105,122,101,
-+ 120,112,0,0,0,0,119,4,0,0,0,0,120,113,0,126,0,22,120,116,0,9,109,101,115,
-+ 115,97,103,101,32,50,117,113,0,126,0,10,0,0,0,1,115,113,0,126,0,12,0,0,0,
-+ 20,113,0,126,0,14,113,0,126,0,15,113,0,126,0,16,113,0,126,0,20,120,112
-+ };
-+
-+ //Serialize XPathException
-+ static byte [] pickleXPE(XPathException xpe) throws IOException {
-+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
-+ ObjectOutputStream xpeos = new ObjectOutputStream(bos);
-+ xpeos.writeObject(xpe);
-+ xpeos.close();
-+ return bos.toByteArray();
-+ }
-+
-+ //Deserialize XPathException with byte array as serial data source
-+ static XPathException unpickleXPE(byte [] ser)
-+ throws IOException, ClassNotFoundException {
-+ XPathException xpe;
-+ ByteArrayInputStream bis = new ByteArrayInputStream(ser);
-+ ObjectInputStream xpeis = new ObjectInputStream(bis);
-+ xpe = (XPathException) xpeis.readObject();
-+ xpeis.close();
-+ return xpe;
-+ }
-+
-+ public static void main(String[] args) throws Exception {
-+ Throwable cause = new Throwable("message 1");
-+ XPathException xpathexcep = new XPathException("message 2");
-+
-+ //Test XPE initCause() method
-+ xpathexcep.initCause(cause);
-+ System.out.println("getCause() result: '" + xpathexcep.getCause()
-+ + "' Cause itself: '" + cause + "'");
-+ if (!xpathexcep.getCause().toString().equals(cause.toString())) {
-+ throw new Exception("Incorrect cause is set by initCause()");
-+ }
-+
-+ //Test serialization/deserialization of initialized XPE
-+ byte [] xpeserial;
-+ XPathException xpedeser;
-+ xpeserial = pickleXPE(xpathexcep);
-+ xpedeser = unpickleXPE(xpeserial);
-+ System.out.println("Serialized XPE: message='" + xpathexcep.getMessage()
-+ + "' cause='" + xpathexcep.getCause().toString() + "'");
-+ System.out.println("Deserialized XPE: message='" + xpedeser.getMessage()
-+ + "' cause='" + xpedeser.getCause().toString()+"'");
-+ if(xpedeser.getCause() == null ||
-+ !xpedeser.getCause().toString().equals(cause.toString()) ||
-+ !xpedeser.getMessage().toString().equals("message 2") )
-+ throw new Exception("XPathException incorrectly serialized/deserialized");
-+
-+ //Test serialization/deserialization of uninitialized cause in XPE
-+ XPathException xpeuninit = new XPathException("uninitialized cause");
-+ xpeserial = pickleXPE(xpeuninit);
-+ xpedeser = unpickleXPE(xpeserial);
-+ System.out.println("Serialized XPE: message='" + xpeuninit.getMessage()
-+ + "' cause='" + xpeuninit.getCause()+"'");
-+ System.out.println("Deserialized XPE: message='" + xpedeser.getMessage()
-+ + "' cause='" + xpedeser.getCause()+"'");
-+ if(xpedeser.getCause() != null ||
-+ !xpedeser.getMessage().toString().equals("uninitialized cause") )
-+ throw new Exception("XPathException incorrectly serialized/deserialized");
-+
-+ //Test deserialization of normal XPathException serialized by JDK7
-+ XPathException xpejdk7 = unpickleXPE(NORMALJDK7SER);
-+ if(xpejdk7 == null || xpejdk7.getCause() == null ||
-+ !xpejdk7.getMessage().equals("message 2") ||
-+ !xpejdk7.getCause().getMessage().equals("message 1"))
-+ throw new Exception("XpathException serialized by JDK7 was "
-+ + "incorrectly deserialized.");
-+
-+ //Test deserialization of XPathException with two causes from JDK7.
-+ //The serialization are done for the following XPathException object:
-+ // new XPathException(new Exception()).initCause(null)
-+ try {
-+ xpejdk7 = unpickleXPE(TWOCAUSES);
-+ throw new Exception("Expected InvalidClassException but it wasn't"
-+ + " observed");
-+ } catch(InvalidClassException e) {
-+ System.out.println("InvalidClassException caught as expected.");
-+ }
-+
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/XPath/8015978/XPathNegativeZero.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,72 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8015978
-+ * @summary Incorrect transformation of XPath expression "string(-0)"
-+ * @run main XPathNegativeZero
-+ * @author aleksej.efimov@oracle.com
-+ */
-+
-+import java.io.File;
-+import java.io.StringWriter;
-+import javax.xml.transform.TransformerFactory;
-+import javax.xml.transform.Templates;
-+import javax.xml.transform.Transformer;
-+import javax.xml.transform.Source;
-+import javax.xml.transform.Result;
-+import javax.xml.transform.stream.StreamSource;
-+import javax.xml.transform.stream.StreamResult;
-+
-+
-+public class XPathNegativeZero {
-+
-+ static final String EXPECTEDXML = "<newtop>\"0\"</newtop>";
-+
-+ public static void main(final String[] args) throws Exception {
-+ //file name of XML file to transform
-+ final String xml = System.getProperty("test.src", ".")+"/dummy.xml";
-+ //file name of XSL file w/ transformation
-+ final String xsl = System.getProperty("test.src", ".")+"/negativezero.xsl";
-+ final String result = xform(xml, xsl).trim();
-+
-+ System.out.println("transformed XML: '"+result+ "' expected XML: '"+EXPECTEDXML+"'");
-+ if (!result.equals(EXPECTEDXML))
-+ throw new Exception("Negative zero was incorrectly transformed");
-+ }
-+
-+ private static String xform(final String xml, final String xsl) throws Exception {
-+ final TransformerFactory tf = TransformerFactory.newInstance();
-+ final Source xslsrc = new StreamSource(new File(xsl));
-+ final Templates tmpl = tf.newTemplates(xslsrc);
-+ final Transformer t = tmpl.newTransformer();
-+
-+ StringWriter writer = new StringWriter();
-+ final Source src = new StreamSource(new File(xml));
-+ final Result res = new StreamResult(writer);
-+
-+ t.transform(src, res);
-+ return writer.toString();
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/XPath/8015978/dummy.xml Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,1 @@
-+<top/>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/XPath/8015978/negativezero.xsl Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,4 @@
-+<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
-+ <xsl:output method='xml' indent='yes' omit-xml-declaration='yes'/>
-+ <xsl:template match='/'><newtop>"<xsl:value-of select='string(-0.0)'/>"</newtop></xsl:template>
-+</xsl:stylesheet>
---- ./jdk/test/javax/xml/jaxp/parsers/8022548/XOMParserTest.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/javax/xml/jaxp/parsers/8022548/XOMParserTest.java Wed May 07 19:26:47 2014 -0700
-@@ -22,7 +22,8 @@
- */
-
- /**
-- * @test @bug 8022548
-+ * @test
-+ * @bug 8022548
- * @summary test that a parser can use DTDConfiguration
- * @run main XOMParserTest
- */
-@@ -60,30 +61,27 @@
- }
-
- public final void testTransform() {
-+ String inFilename = filePath + "/JDK8022548.xml";
-+ String xslFilename = filePath + "/JDK8022548.xsl";
-+ String outFilename = "JDK8022548.out";
-
-- try {
-+ try (InputStream xslInput = new FileInputStream(xslFilename);
-+ InputStream xmlInput = new FileInputStream(inFilename);
-+ OutputStream out = new FileOutputStream(outFilename);
-+ ) {
-
-- String inFilename = filePath + "/JDK8022548.xml";
-- String xslFilename = filePath + "/JDK8022548.xsl";
-- String outFilename = filePath + "/JDK8022548.out";
-
- StringWriter sw = new StringWriter();
- // Create transformer factory
- TransformerFactory factory = TransformerFactory.newInstance();
-- // set the translet name
--// factory.setAttribute("translet-name", "myTranslet");
--
-- // set the destination directory
--// factory.setAttribute("destination-directory", "c:\\temp");
--// factory.setAttribute("generate-translet", Boolean.TRUE);
-
- // Use the factory to create a template containing the xsl file
-- Templates template = factory.newTemplates(new StreamSource(new FileInputStream(xslFilename)));
-+ Templates template = factory.newTemplates(new StreamSource(xslInput));
- // Use the template to create a transformer
- Transformer xformer = template.newTransformer();
- // Prepare the input and output files
-- Source source = new StreamSource(new FileInputStream(inFilename));
-- Result result = new StreamResult(new FileOutputStream(outFilename));
-+ Source source = new StreamSource(xmlInput);
-+ Result result = new StreamResult(outFilename);
- //Result result = new StreamResult(sw);
- // Apply the xsl file to the source file and write the result to the output file
- xformer.transform(source, result);
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/parsers/8024707/TestFunc.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,35 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import org.w3c.dom.Node;
-+import org.w3c.dom.NodeList;
-+
-+/**
-+ * bug 8024707
-+ */
-+
-+public class TestFunc {
-+ public static Node test( NodeList list ) {
-+ return list.item(0);
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/parsers/8024707/XSLT.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,51 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test
-+ * @bug 8024707
-+ * @summary Test for XSLT extension function with 1 element sized nodelist
-+ * @compile TestFunc.java XSLT.java
-+ * @run main/othervm XSLT
-+ * @author aleksej.efimov@oracle.com
-+ */
-+
-+import javax.xml.transform.*;
-+import javax.xml.transform.stream.*;
-+import java.io.ByteArrayOutputStream;
-+
-+public class XSLT {
-+ static final String XMLTOTRANSFORM = "/in.xml";
-+ static final String XSLTRANSFORMER = "/test.xsl";
-+ static final String EXPECTEDRESULT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>inp1_1";
-+
-+ public static void main(String[] args) throws Exception {
-+ ByteArrayOutputStream resStream = new ByteArrayOutputStream();
-+ TransformerFactory trf = TransformerFactory.newInstance();
-+ Transformer tr = trf.newTransformer( new StreamSource(System.getProperty("test.src", ".")+XSLTRANSFORMER));
-+ tr.transform( new StreamSource(System.getProperty("test.src", ".")+XMLTOTRANSFORM), new StreamResult(resStream));
-+ System.out.println("Transformation completed. Result:"+resStream.toString());
-+ if (!resStream.toString().equals(EXPECTEDRESULT))
-+ throw new RuntimeException("Incorrect transformation result");
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/parsers/8024707/in.xml Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,4 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<root>
-+<input1><seq-elem1>inp1_1</seq-elem1></input1>
-+</root>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/parsers/8024707/test.xsl Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,10 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<xsl:transform exclude-result-prefixes="cscdt_ufunc" version="1.0"
-+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-+ xmlns:cscdt_ufunc="http://xml.apache.org/xalan/java">
-+ <xsl:template match="/">
-+ <xsl:value-of
-+ select="cscdt_ufunc:TestFunc.test(/root/input1/seq-elem1)"
-+ />
-+ </xsl:template>
-+</xsl:transform>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/transform/8004476/SecureProcessingTest.xml Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,2 @@
-+<?xml version="1.0"?>
-+<helloWorld/>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/transform/8004476/TestBase.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,82 @@
-+/*
-+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
-+ * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
-+ */
-+import java.security.Policy;
-+
-+/**
-+ *
-+ *
-+ * @author huizhe.wang@oracle.com
-+ */
-+public class TestBase {
-+ public static boolean isWindows = false;
-+ static {
-+ if (System.getProperty("os.name").indexOf("Windows")>-1) {
-+ isWindows = true;
-+ }
-+ };
-+
-+ String filepath;
-+ boolean hasSM;
-+ String curDir;
-+ Policy origPolicy;
-+ String testName;
-+ static String errMessage;
-+
-+ int passed = 0, failed = 0;
-+
-+ /**
-+ * Creates a new instance of StreamReader
-+ */
-+ public TestBase(String name) {
-+ testName = name;
-+ }
-+
-+ //junit @Override
-+ protected void setUp() {
-+ if (System.getSecurityManager() != null) {
-+ hasSM = true;
-+ System.setSecurityManager(null);
-+ }
-+
-+ filepath = System.getProperty("test.src");
-+ if (filepath == null) {
-+ //current directory
-+ filepath = System.getProperty("user.dir");
-+ }
-+ origPolicy = Policy.getPolicy();
-+
-+ }
-+
-+ //junit @Override
-+ public void tearDown() {
-+ // turn off security manager and restore policy
-+ System.setSecurityManager(null);
-+ Policy.setPolicy(origPolicy);
-+ if (hasSM) {
-+ System.setSecurityManager(new SecurityManager());
-+ }
-+ System.out.println("\nNumber of tests passed: " + passed);
-+ System.out.println("Number of tests failed: " + failed + "\n");
-+
-+ if (errMessage != null ) {
-+ throw new RuntimeException(errMessage);
-+ }
-+ }
-+
-+ void fail(String errMsg) {
-+ if (errMessage == null) {
-+ errMessage = errMsg;
-+ } else {
-+ errMessage = errMessage + "\n" + errMsg;
-+ }
-+ failed++;
-+ }
-+
-+ void success(String msg) {
-+ passed++;
-+ System.out.println(msg);
-+ }
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/transform/8004476/XPathExFuncTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,287 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/**
-+ * @test
-+ * @bug 8004476
-+ * @summary test XPath extension functions
-+ * @run main/othervm XPathExFuncTest
-+ */
-+import java.io.FileInputStream;
-+import java.io.InputStream;
-+import java.security.AllPermission;
-+import java.security.CodeSource;
-+import java.security.Permission;
-+import java.security.PermissionCollection;
-+import java.security.Permissions;
-+import java.security.Policy;
-+import java.security.ProtectionDomain;
-+import java.util.Iterator;
-+import java.util.List;
-+import javax.xml.XMLConstants;
-+import javax.xml.namespace.NamespaceContext;
-+import javax.xml.namespace.QName;
-+import javax.xml.parsers.DocumentBuilder;
-+import javax.xml.parsers.DocumentBuilderFactory;
-+import javax.xml.xpath.XPath;
-+import javax.xml.xpath.XPathExpressionException;
-+import javax.xml.xpath.XPathFactory;
-+import javax.xml.xpath.XPathFactoryConfigurationException;
-+import javax.xml.xpath.XPathFunction;
-+import javax.xml.xpath.XPathFunctionException;
-+import javax.xml.xpath.XPathFunctionResolver;
-+import org.w3c.dom.Document;
-+
-+/**
-+ * test XPath extension functions
-+ *
-+ * @author huizhe.wang@oracle.com
-+ */
-+public class XPathExFuncTest extends TestBase {
-+
-+ final static String ENABLE_EXTENSION_FUNCTIONS = "http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions";
-+ final static String CLASSNAME = "DocumentBuilderFactoryImpl";
-+ final String XPATH_EXPRESSION = "ext:helloWorld()";
-+
-+ /**
-+ * Creates a new instance of StreamReader
-+ */
-+ public XPathExFuncTest(String name) {
-+ super(name);
-+ }
-+ boolean hasSM;
-+ String xslFile, xslFileId;
-+ String xmlFile, xmlFileId;
-+
-+ protected void setUp() {
-+ super.setUp();
-+ xmlFile = filepath + "/SecureProcessingTest.xml";
-+
-+ }
-+
-+ /**
-+ * @param args the command line arguments
-+ */
-+ public static void main(String[] args) {
-+ XPathExFuncTest test = new XPathExFuncTest("OneTest");
-+ test.setUp();
-+
-+ test.testExtFunc();
-+ test.testExtFuncNotAllowed();
-+ test.testEnableExtFunc();
-+ test.tearDown();
-+
-+ }
-+
-+ /**
-+ * by default, extension function is enabled
-+ */
-+ public void testExtFunc() {
-+
-+ try {
-+ evaluate(false);
-+ System.out.println("testExtFunc: OK");
-+ } catch (XPathFactoryConfigurationException e) {
-+ fail(e.getMessage());
-+ } catch (XPathExpressionException e) {
-+ fail(e.getMessage());
-+ }
-+ }
-+
-+ /**
-+ * Security is enabled, extension function not allowed
-+ */
-+ public void testExtFuncNotAllowed() {
-+ Policy p = new SimplePolicy(new AllPermission());
-+ Policy.setPolicy(p);
-+ System.setSecurityManager(new SecurityManager());
-+
-+ try {
-+ evaluate(false);
-+ } catch (XPathFactoryConfigurationException e) {
-+ fail(e.getMessage());
-+ } catch (XPathExpressionException ex) {
-+ //expected since extension function is disallowed
-+ System.out.println("testExtFuncNotAllowed: OK");
-+ } finally {
-+ System.setSecurityManager(null);
-+ }
-+ }
-+
-+ /**
-+ * Security is enabled, use new feature: enableExtensionFunctions
-+ */
-+ public void testEnableExtFunc() {
-+ Policy p = new SimplePolicy(new AllPermission());
-+ Policy.setPolicy(p);
-+ System.setSecurityManager(new SecurityManager());
-+
-+
-+ try {
-+ evaluate(true);
-+ System.out.println("testEnableExt: OK");
-+ } catch (XPathFactoryConfigurationException e) {
-+ fail(e.getMessage());
-+ } catch (XPathExpressionException e) {
-+ fail(e.getMessage());
-+ } finally {
-+ System.setSecurityManager(null);
-+ }
-+ }
-+
-+ Document getDocument() {
-+ // the xml source
-+ DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
-+ DocumentBuilder documentBuilder = null;
-+ Document document = null;
-+
-+ try {
-+ documentBuilder = documentBuilderFactory.newDocumentBuilder();
-+ InputStream xmlStream = new FileInputStream(xmlFile);
-+ document = documentBuilder.parse(xmlStream);
-+ } catch (Exception e) {
-+ fail(e.toString());
-+ }
-+ return document;
-+ }
-+
-+ void evaluate(boolean enableExt) throws XPathFactoryConfigurationException, XPathExpressionException {
-+ Document document = getDocument();
-+
-+ XPathFactory xPathFactory = XPathFactory.newInstance();
-+ /**
-+ * Use of the extension function 'http://exslt.org/strings:tokenize' is
-+ * not allowed when the secure processing feature is set to true.
-+ * Attempt to use the new property to enable extension function
-+ */
-+ if (enableExt) {
-+ boolean isExtensionSupported = enableExtensionFunction(xPathFactory);
-+ }
-+
-+ xPathFactory.setXPathFunctionResolver(new MyXPathFunctionResolver());
-+ if (System.getSecurityManager() == null) {
-+ xPathFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false);
-+ }
-+
-+ XPath xPath = xPathFactory.newXPath();
-+ xPath.setNamespaceContext(new MyNamespaceContext());
-+
-+ String xPathResult = xPath.evaluate(XPATH_EXPRESSION, document);
-+ System.out.println(
-+ "XPath result (enableExtensionFunction == " + enableExt + ") = \""
-+ + xPathResult
-+ + "\"");
-+ }
-+
-+ public class MyXPathFunctionResolver
-+ implements XPathFunctionResolver {
-+
-+ public XPathFunction resolveFunction(QName functionName, int arity) {
-+
-+ // not a real ewsolver, always return a default XPathFunction
-+ return new MyXPathFunction();
-+ }
-+ }
-+
-+ public class MyXPathFunction
-+ implements XPathFunction {
-+
-+ public Object evaluate(List list) throws XPathFunctionException {
-+
-+ return "Hello World";
-+ }
-+ }
-+
-+ public class MyNamespaceContext implements NamespaceContext {
-+
-+ public String getNamespaceURI(String prefix) {
-+ if (prefix == null) {
-+ throw new IllegalArgumentException("The prefix cannot be null.");
-+ }
-+
-+ if (prefix.equals("ext")) {
-+ return "http://ext.com";
-+ } else {
-+ return null;
-+ }
-+ }
-+
-+ public String getPrefix(String namespace) {
-+
-+ if (namespace == null) {
-+ throw new IllegalArgumentException("The namespace uri cannot be null.");
-+ }
-+
-+ if (namespace.equals("http://ext.com")) {
-+ return "ext";
-+ } else {
-+ return null;
-+ }
-+ }
-+
-+ public Iterator getPrefixes(String namespace) {
-+ return null;
-+ }
-+ }
-+
-+ boolean enableExtensionFunction(XPathFactory factory) {
-+ boolean isSupported = true;
-+ try {
-+ factory.setFeature(ENABLE_EXTENSION_FUNCTIONS, true);
-+ } catch (XPathFactoryConfigurationException ex) {
-+ isSupported = false;
-+ }
-+ return isSupported;
-+ }
-+
-+ class SimplePolicy extends Policy {
-+
-+ private final Permissions perms;
-+
-+ public SimplePolicy(Permission... permissions) {
-+ perms = new Permissions();
-+ for (Permission permission : permissions) {
-+ perms.add(permission);
-+ }
-+ }
-+
-+ @Override
-+ public PermissionCollection getPermissions(CodeSource cs) {
-+ return perms;
-+ }
-+
-+ @Override
-+ public PermissionCollection getPermissions(ProtectionDomain pd) {
-+ return perms;
-+ }
-+
-+ @Override
-+ public boolean implies(ProtectionDomain pd, Permission p) {
-+ return perms.implies(p);
-+ }
-+
-+ //for older jdk
-+ @Override
-+ public void refresh() {
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/transform/8004476/XSLTExFuncTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,248 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+/**
-+ * @test
-+ * @bug 8004476
-+ * @summary test XSLT extension functions
-+ * @run main/othervm XSLTExFuncTest
-+ */
-+
-+import java.io.StringWriter;
-+import java.security.AllPermission;
-+import java.security.CodeSource;
-+import java.security.Permission;
-+import java.security.PermissionCollection;
-+import java.security.Permissions;
-+import java.security.Policy;
-+import java.security.ProtectionDomain;
-+import javax.xml.transform.*;
-+import javax.xml.transform.sax.SAXSource;
-+import javax.xml.transform.stream.StreamResult;
-+import org.xml.sax.InputSource;
-+
-+/**
-+ * test XSLT extension functions
-+ *
-+ * @author huizhe.wang@oracle.com
-+ */
-+public class XSLTExFuncTest extends TestBase {
-+
-+ final static String ENABLE_EXTENSION_FUNCTIONS = "http://www.oracle.com/xml/jaxp/properties/enableExtensionFunctions";
-+ final static String CLASSNAME = "DocumentBuilderFactoryImpl";
-+
-+ /**
-+ * Creates a new instance of StreamReader
-+ */
-+ public XSLTExFuncTest(String name) {
-+ super(name);
-+ }
-+ boolean hasSM;
-+ String xslFile, xslFileId;
-+ String xmlFile, xmlFileId;
-+
-+ protected void setUp() {
-+ super.setUp();
-+ xmlFile = filepath + "/tokenize.xml";
-+ xslFile = filepath + "/tokenize.xsl";
-+
-+ /**
-+ * On Windows platform it needs triple '/' for valid URL while double '/' is enough on Linux or Solaris.
-+ * Here use file:/// directly to make it work on Windows and it will not impact other platforms.
-+ */
-+ xslFileId = "file:///" + xslFile;
-+ }
-+
-+ /**
-+ * @param args the command line arguments
-+ */
-+ public static void main(String[] args) {
-+ XSLTExFuncTest test = new XSLTExFuncTest("OneTest");
-+ test.setUp();
-+
-+ test.testExtFunc();
-+ test.testExtFuncNotAllowed();
-+ test.testEnableExtFunc();
-+ test.testTemplatesEnableExtFunc();
-+ test.tearDown();
-+
-+ }
-+
-+ /**
-+ * by default, extension function is enabled
-+ */
-+ public void testExtFunc() {
-+ TransformerFactory factory = TransformerFactory.newInstance();
-+
-+ try {
-+ transform(factory);
-+ System.out.println("testExtFunc: OK");
-+ } catch (TransformerConfigurationException e) {
-+ fail(e.getMessage());
-+ } catch (TransformerException ex) {
-+ fail(ex.getMessage());
-+ }
-+ }
-+
-+ /**
-+ * Security is enabled, extension function not allowed
-+ */
-+ public void testExtFuncNotAllowed() {
-+ Policy p = new SimplePolicy(new AllPermission());
-+ Policy.setPolicy(p);
-+ System.setSecurityManager(new SecurityManager());
-+ TransformerFactory factory = TransformerFactory.newInstance();
-+
-+ try {
-+ transform(factory);
-+ } catch (TransformerConfigurationException e) {
-+ fail(e.getMessage());
-+ } catch (TransformerException ex) {
-+ //expected since extension function is disallowed
-+ System.out.println("testExtFuncNotAllowed: OK");
-+ } finally {
-+ System.setSecurityManager(null);
-+ }
-+ }
-+
-+ /**
-+ * Security is enabled, use new feature: enableExtensionFunctions
-+ */
-+ public void testEnableExtFunc() {
-+ Policy p = new SimplePolicy(new AllPermission());
-+ Policy.setPolicy(p);
-+ System.setSecurityManager(new SecurityManager());
-+ TransformerFactory factory = TransformerFactory.newInstance();
-+
-+ /**
-+ * Use of the extension function 'http://exslt.org/strings:tokenize' is
-+ * not allowed when the secure processing feature is set to true.
-+ * Attempt to use the new property to enable extension function
-+ */
-+ boolean isExtensionSupported = enableExtensionFunction(factory);
-+
-+ try {
-+ transform(factory);
-+ System.out.println("testEnableExt: OK");
-+ } catch (TransformerConfigurationException e) {
-+ fail(e.getMessage());
-+ } catch (TransformerException e) {
-+ fail(e.getMessage());
-+ } finally {
-+ System.setSecurityManager(null);
-+ }
-+ }
-+
-+ /**
-+ * use Templates template = factory.newTemplates(new StreamSource( new
-+ * FileInputStream(xslFilename))); // Use the template to create a
-+ * transformer Transformer xformer = template.newTransformer();
-+ *
-+ * @param factory
-+ * @return
-+ */
-+ /**
-+ * Security is enabled, use new feature: enableExtensionFunctions Use the
-+ * template to create a transformer
-+ */
-+ public void testTemplatesEnableExtFunc() {
-+ Policy p = new SimplePolicy(new AllPermission());
-+ Policy.setPolicy(p);
-+ System.setSecurityManager(new SecurityManager());
-+ TransformerFactory factory = TransformerFactory.newInstance();
-+
-+ /**
-+ * Use of the extension function 'http://exslt.org/strings:tokenize' is
-+ * not allowed when the secure processing feature is set to true.
-+ * Attempt to use the new property to enable extension function
-+ */
-+ boolean isExtensionSupported = enableExtensionFunction(factory);
-+
-+ try {
-+ SAXSource xslSource = new SAXSource(new InputSource(xslFile));
-+ xslSource.setSystemId(xslFileId);
-+ Templates template = factory.newTemplates(xslSource);
-+ Transformer transformer = template.newTransformer();
-+ StringWriter stringResult = new StringWriter();
-+ Result result = new StreamResult(stringResult);
-+ transformer.transform(new SAXSource(new InputSource(xmlFile)), result);
-+ System.out.println("testTemplatesEnableExtFunc: OK");
-+ } catch (TransformerConfigurationException e) {
-+ fail(e.getMessage());
-+ } catch (TransformerException e) {
-+ fail(e.getMessage());
-+ } finally {
-+ System.setSecurityManager(null);
-+ }
-+ }
-+
-+ boolean enableExtensionFunction(TransformerFactory factory) {
-+ boolean isSupported = true;
-+ try {
-+ factory.setFeature(ENABLE_EXTENSION_FUNCTIONS, true);
-+ } catch (TransformerConfigurationException ex) {
-+ isSupported = false;
-+ }
-+ return isSupported;
-+ }
-+
-+ void transform(TransformerFactory factory) throws TransformerConfigurationException, TransformerException {
-+ SAXSource xslSource = new SAXSource(new InputSource(xslFile));
-+ xslSource.setSystemId(xslFileId);
-+ Transformer transformer = factory.newTransformer(xslSource);
-+ StringWriter stringResult = new StringWriter();
-+ Result result = new StreamResult(stringResult);
-+ transformer.transform(new SAXSource(new InputSource(xmlFile)), result);
-+ }
-+
-+ class SimplePolicy extends Policy {
-+
-+ private final Permissions perms;
-+
-+ public SimplePolicy(Permission... permissions) {
-+ perms = new Permissions();
-+ for (Permission permission : permissions) {
-+ perms.add(permission);
-+ }
-+ }
-+
-+ @Override
-+ public PermissionCollection getPermissions(CodeSource cs) {
-+ return perms;
-+ }
-+
-+ @Override
-+ public PermissionCollection getPermissions(ProtectionDomain pd) {
-+ return perms;
-+ }
-+
-+ @Override
-+ public boolean implies(ProtectionDomain pd, Permission p) {
-+ return perms.implies(p);
-+ }
-+
-+ //for older jdk
-+ @Override
-+ public void refresh() {
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/transform/8004476/tokenize.xml Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,7 @@
-+<?xml version="1.0" encoding="UTF-8" ?>
-+<html>
-+<a>
-+ <b>Is this EXSLT? No. no</b>
-+ <c>Is this EXSLT? No. no</c>
-+</a>
-+</html>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/transform/8004476/tokenize.xsl Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,30 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-+ xmlns:str="http://exslt.org/strings"
-+ xmlns:xalan="http://xml.apache.org/xalan"
-+ version="1.0">
-+<xsl:template match="a">
-+ <xsl:apply-templates />
-+</xsl:template>
-+<xsl:template match="//a/c">
-+ <xsl:value-of select="." />
-+ -
-+ <xsl:value-of select="str:tokenize(string(.), ' ')" />
-+ <xsl:value-of select="str:tokenize(string(.), '')" />
-+ <xsl:for-each select="str:tokenize(string(.), ' ')">
-+ <xsl:value-of select="." />
-+ </xsl:for-each>
-+ <xsl:apply-templates select="*" />
-+</xsl:template>
-+<xsl:template match="//a/b">
-+ <xsl:value-of select="." />
-+ -
-+ <xsl:value-of select="xalan:tokenize(string(.), ' ')" />
-+ <xsl:value-of select="xalan:tokenize(string(.), '')" />
-+ <xsl:for-each select="xalan:tokenize(string(.), ' ')">
-+ <xsl:value-of select="." />
-+ </xsl:for-each>
-+ <xsl:apply-templates select="*" />
-+</xsl:template>
-+
-+</xsl:stylesheet>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/validation/8015092/XPathWhiteSpaceTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,60 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+
-+/**
-+ * @test
-+ * @bug 8015092
-+ * @summary whitespace within patterns in Selector XPath expression is accepted
-+ * @run main/othervm XPathWhiteSpaceTest
-+ */
-+
-+import java.io.*;
-+import javax.xml.XMLConstants;
-+import javax.xml.validation.Schema;
-+import javax.xml.validation.SchemaFactory;
-+import org.xml.sax.SAXException;
-+
-+/**
-+ * http://www.w3.org/TR/xmlschema-1/#coss-identity-constraint
-+ * For readability, whitespace may be used in selector XPath expressions even though
-+ * not explicitly allowed by the grammar:
-+ * whitespace may be freely added within patterns before or after any token.
-+ *
-+ * @author huizhe.wang@oracle.com
-+ */
-+public class XPathWhiteSpaceTest {
-+ static final String XSDFILE = "/idJ029.xsd";
-+
-+ public static void main(String[] args) throws Exception {
-+ try{
-+ SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-+ Schema schema = schemaFactory.newSchema(new File(System.getProperty("test.src", ".")+XSDFILE));
-+ } catch (SAXException e) {
-+ throw new RuntimeException(e.getMessage());
-+ }
-+
-+
-+ }
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/validation/8015092/idIxpns.xsd Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,12 @@
-+<?xml version="1.0"?>
-+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="xpns.org" xmlns:xpns="xpns.org">
-+ <xsd:element name="xsid" type="xsd:string"/>
-+ <xsd:element name="xiid">
-+ <xsd:complexType>
-+ <xsd:sequence>
-+ <xsd:element name="xiid2" type="xsd:string" maxOccurs="unbounded"/>
-+ </xsd:sequence>
-+ <xsd:attribute name="val" type="xsd:string"/>
-+ </xsd:complexType>
-+ </xsd:element>
-+</xsd:schema>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/validation/8015092/idIxpns1.xsd Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,12 @@
-+<?xml version="1.0"?>
-+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="xpns1.org" xmlns:xpns="xpns1.org">
-+ <xsd:element name="xsid" type="xsd:string"/>
-+ <xsd:element name="xiid">
-+ <xsd:complexType>
-+ <xsd:sequence>
-+ <xsd:element name="xiid2" type="xsd:string" maxOccurs="unbounded"/>
-+ </xsd:sequence>
-+ <xsd:attribute name="val" type="xsd:string"/>
-+ </xsd:complexType>
-+ </xsd:element>
-+</xsd:schema>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/validation/8015092/idJ029.xsd Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,21 @@
-+<?xml version="1.0"?>
-+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xpns="xpns.org" xmlns:xpns1="xpns1.org" xmlns:xpns2="xpns2.org" xmlns:imp="importNS">
-+ <xsd:import namespace="importNS" schemaLocation="idJimp.xsd"/>
-+ <xsd:import namespace="xpns.org" schemaLocation="idIxpns.xsd"/>
-+ <xsd:import namespace="xpns1.org" schemaLocation="idIxpns1.xsd"/>
-+ <xsd:element name="root">
-+ <xsd:complexType>
-+ <xsd:sequence>
-+ <xsd:element ref="tid" maxOccurs="unbounded"/>
-+ <xsd:element ref="imp:iid1" maxOccurs="unbounded"/>
-+ <xsd:element ref="imp:sid" maxOccurs="unbounded"/>
-+ <xsd:element ref="xpns:xiid" maxOccurs="unbounded"/>
-+ </xsd:sequence>
-+ </xsd:complexType>
-+ <xsd:unique id="foo123" name="uid">
-+ <xsd:selector xpath=".//tid"/>
-+ <xsd:field xpath=". //."/>
-+ </xsd:unique>
-+ </xsd:element>
-+ <xsd:element name="tid" type="xsd:string"/>
-+</xsd:schema>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/validation/8015092/idJimp.xsd Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,11 @@
-+<?xml version="1.0"?>
-+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="importNS" xmlns:imp="importNS">
-+ <xsd:element name="sid" type="xsd:string"/>
-+ <xsd:element name="iid1">
-+ <xsd:complexType>
-+ <xsd:sequence>
-+ <xsd:element name="iid2" type="xsd:string" maxOccurs="unbounded"/>
-+ </xsd:sequence>
-+ </xsd:complexType>
-+ </xsd:element>
-+</xsd:schema>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/validation/8015243/AnyURITest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,60 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+
-+/**
-+ * @test
-+ * @bug 8015243
-+ * @summary verifies that illegal URI such as // is rejected
-+ * @run main/othervm AnyURITest
-+ */
-+
-+import java.io.*;
-+import javax.xml.XMLConstants;
-+import javax.xml.validation.Schema;
-+import javax.xml.validation.SchemaFactory;
-+import org.xml.sax.SAXException;
-+
-+/**
-+ * Similar to java.net.URI, allow empty authority prior to non-empty
-+ * path, query component or fragment identifier
-+ *
-+ * @author huizhe.wang@oracle.com
-+ */
-+public class AnyURITest {
-+ static final String XSDFILE = "anyURI_b006.xsd";
-+
-+ public static void main(String[] args) throws Exception {
-+ try{
-+ SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-+ Schema schema = schemaFactory.newSchema(new File(System.getProperty("test.src", "."), XSDFILE));
-+ throw new RuntimeException("Illegal URI // should be rejected.");
-+ } catch (SAXException e) {
-+ //expected:
-+ //Enumeration value '//' is not in the value space of the base type, anyURI.
-+ }
-+
-+
-+ }
-+
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/jaxp/validation/8015243/anyURI_b006.xsd Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,32 @@
-+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-+
-+ <xsd:element name="root">
-+ <xsd:complexType>
-+ <xsd:choice maxOccurs="unbounded">
-+ <xsd:element ref="foo"/>
-+ <xsd:element ref="bar"/>
-+ </xsd:choice>
-+ </xsd:complexType>
-+ </xsd:element>
-+
-+ <xsd:element type="xsd:anyURI" name="foo"></xsd:element>
-+ <xsd:element type="st" name="bar"></xsd:element>
-+
-+ <xsd:simpleType name="st">
-+ <xsd:restriction base="xsd:anyURI">
-+ <xsd:enumeration value="/"/>
-+ <xsd:enumeration value="//"/>
-+ <xsd:enumeration value="///"/>
-+ <xsd:enumeration value="//a\\b"/>
-+ <xsd:enumeration value="\"/>
-+ <xsd:enumeration value="\\"/>
-+ <xsd:enumeration value="\\\"/>
-+ <xsd:enumeration value="\\/"/>
-+ <xsd:enumeration value="\\a\b"/>
-+ <xsd:enumeration value="\a\b"/>
-+ <xsd:enumeration value="/a\b"/>
-+ <xsd:enumeration value="..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\a"/>
-+ </xsd:restriction>
-+ </xsd:simpleType>
-+
-+</xsd:schema>
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/ws/clientjar/TestService.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,39 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+import javax.jws.WebService;
-+
-+@WebService(serviceName ="TestService", targetNamespace = "http://test/jaxws/sample/")
-+public class TestService {
-+ public void foo() {
-+ try {
-+ bar();
-+ } catch (Exception e) {
-+ throw new AssertionError(e);
-+ }
-+ }
-+
-+ private void bar() {
-+ // nothing done
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/javax/xml/ws/clientjar/TestWsImport.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,151 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8016271 8026405
-+ * @summary wsimport -clientjar does not create portable jar on windows due to hardcoded '\'
-+ * @run main/othervm TestWsImport
-+ */
-+
-+import javax.xml.namespace.QName;
-+import javax.xml.ws.Endpoint;
-+import javax.xml.ws.Service;
-+import java.io.InputStreamReader;
-+import java.io.IOException;
-+import java.io.BufferedReader;
-+import java.io.File;
-+import java.net.InetSocketAddress;
-+import java.net.URL;
-+import java.nio.file.Files;
-+import java.nio.file.FileVisitResult;
-+import java.nio.file.Path;
-+import java.nio.file.Paths;
-+import java.nio.file.SimpleFileVisitor;
-+import java.nio.file.attribute.BasicFileAttributes;
-+import static java.nio.file.FileVisitResult.*;
-+import java.util.Enumeration;
-+import java.util.jar.JarFile;
-+
-+import com.sun.net.httpserver.HttpContext;
-+import com.sun.net.httpserver.HttpServer;
-+
-+public class TestWsImport {
-+
-+ public static void main(String[] args) throws IOException {
-+
-+ String javaHome = System.getProperty("java.home");
-+ if (javaHome.endsWith("jre")) {
-+ javaHome = new File(javaHome).getParent();
-+ }
-+ String wsimport = javaHome + File.separator + "bin" + File.separator + "wsimport";
-+ if (System.getProperty("os.name").startsWith("Windows")) {
-+ wsimport = wsimport.concat(".exe");
-+ }
-+
-+ Endpoint endpoint = Endpoint.create(new TestService());
-+ HttpServer httpServer = null;
-+ try {
-+ // Manually create HttpServer here using ephemeral address for port
-+ // so as to not end up with attempt to bind to an in-use port
-+ httpServer = HttpServer.create(new InetSocketAddress(0), 0);
-+ HttpContext httpContext = httpServer.createContext("/hello");
-+ int port = httpServer.getAddress().getPort();
-+ System.out.println("port = " + port);
-+ httpServer.start();
-+ endpoint.publish(httpContext);
-+ String address = "http://localhost:" + port + "/hello";
-+
-+ Service service = Service.create(new URL(address + "?wsdl"),
-+ new QName("http://test/jaxws/sample/", "TestService"));
-+
-+ String[] wsargs = {
-+ wsimport,
-+ "-p",
-+ "wstest",
-+ "-J-Djavax.xml.accessExternalSchema=all",
-+ "-J-Dcom.sun.tools.internal.ws.Invoker.noSystemProxies=true",
-+ address + "?wsdl",
-+ "-clientjar",
-+ "wsjar.jar"
-+ };
-+ ProcessBuilder pb = new ProcessBuilder(wsargs);
-+ pb.redirectErrorStream(true);
-+ Process p = pb.start();
-+ BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
-+ String s = r.readLine();
-+ while (s != null) {
-+ System.out.println(s.trim());
-+ s = r.readLine();
-+ }
-+ p.waitFor();
-+ p.destroy();
-+
-+ try (JarFile jarFile = new JarFile("wsjar.jar")) {
-+ for (Enumeration em = jarFile.entries(); em.hasMoreElements();) {
-+ String fileName = em.nextElement().toString();
-+ if (fileName.contains("\\")) {
-+ throw new RuntimeException("\"\\\" character detected in jar file: " + fileName);
-+ }
-+ }
-+ }
-+ } catch (Exception e) {
-+ e.printStackTrace();
-+ throw new RuntimeException(e.getMessage());
-+ } finally {
-+ endpoint.stop();
-+ if (httpServer != null) {
-+ httpServer.stop(0);
-+ }
-+ Path p = Paths.get("wsjar.jar");
-+ Files.deleteIfExists(p);
-+ p = Paths.get("wstest");
-+ if (Files.exists(p)) {
-+ try {
-+ Files.walkFileTree(p, new SimpleFileVisitor<Path>() {
-+ @Override
-+ public FileVisitResult visitFile(Path file,
-+ BasicFileAttributes attrs) throws IOException {
-+
-+ Files.delete(file);
-+ return CONTINUE;
-+ }
-+ @Override
-+ public FileVisitResult postVisitDirectory(Path dir,
-+ IOException exc) throws IOException {
-+
-+ if (exc == null) {
-+ Files.delete(dir);
-+ return CONTINUE;
-+ } else {
-+ throw exc;
-+ }
-+ }
-+ });
-+ } catch (IOException ioe) {
-+ ioe.printStackTrace();
-+ }
-+ }
-+ }
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,194 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+package jdk.testlibrary;
-+
-+import java.io.IOException;
-+import java.nio.file.DirectoryNotEmptyException;
-+import java.nio.file.FileVisitResult;
-+import java.nio.file.Files;
-+import java.nio.file.NoSuchFileException;
-+import java.nio.file.Path;
-+import java.nio.file.SimpleFileVisitor;
-+import java.nio.file.attribute.BasicFileAttributes;
-+import java.util.ArrayList;
-+import java.util.List;
-+
-+
-+/**
-+ * Common library for various test file utility functions.
-+ */
-+public final class FileUtils {
-+
-+ private static final boolean isWindows =
-+ System.getProperty("os.name").startsWith("Windows");
-+ private static final int RETRY_DELETE_MILLIS = isWindows ? 500 : 0;
-+ private static final int MAX_RETRY_DELETE_TIMES = isWindows ? 15 : 0;
-+
-+ /**
-+ * Deletes a file, retrying if necessary.
-+ *
-+ * @param path the file to delete
-+ *
-+ * @throws NoSuchFileException
-+ * if the file does not exist (optional specific exception)
-+ * @throws DirectoryNotEmptyException
-+ * if the file is a directory and could not otherwise be deleted
-+ * because the directory is not empty (optional specific exception)
-+ * @throws IOException
-+ * if an I/O error occurs
-+ */
-+ public static void deleteFileWithRetry(Path path)
-+ throws IOException
-+ {
-+ try {
-+ deleteFileWithRetry0(path);
-+ } catch (InterruptedException x) {
-+ throw new IOException("Interrupted while deleting.", x);
-+ }
-+ }
-+
-+ /**
-+ * Deletes a file, retrying if necessary.
-+ * No exception thrown if file doesn't exist.
-+ *
-+ * @param path the file to delete
-+ *
-+ * @throws NoSuchFileException
-+ * if the file does not exist (optional specific exception)
-+ * @throws DirectoryNotEmptyException
-+ * if the file is a directory and could not otherwise be deleted
-+ * because the directory is not empty (optional specific exception)
-+ * @throws IOException
-+ * if an I/O error occurs
-+ */
-+ public static void deleteFileIfExistsWithRetry(Path path)
-+ throws IOException
-+ {
-+ try {
-+ if(Files.exists(path))
-+ deleteFileWithRetry0(path);
-+ } catch (InterruptedException x) {
-+ throw new IOException("Interrupted while deleting.", x);
-+ }
-+ }
-+
-+ private static void deleteFileWithRetry0(Path path)
-+ throws IOException, InterruptedException
-+ {
-+ int times = 0;
-+ IOException ioe = null;
-+ while (true) {
-+ try {
-+ Files.delete(path);
-+ while (Files.exists(path)) {
-+ times++;
-+ if (times > MAX_RETRY_DELETE_TIMES)
-+ throw new IOException("File still exists after " + times + " waits.");
-+ Thread.sleep(RETRY_DELETE_MILLIS);
-+ }
-+ break;
-+ } catch (NoSuchFileException | DirectoryNotEmptyException x) {
-+ throw x;
-+ } catch (IOException x) {
-+ // Backoff/retry in case another process is accessing the file
-+ times++;
-+ if (ioe == null)
-+ ioe = x;
-+ else
-+ ioe.addSuppressed(x);
-+
-+ if (times > MAX_RETRY_DELETE_TIMES)
-+ throw ioe;
-+ Thread.sleep(RETRY_DELETE_MILLIS);
-+ }
-+ }
-+ }
-+
-+ /**
-+ * Deletes a directory and its subdirectories, retrying if necessary.
-+ *
-+ * @param dir the directory to delete
-+ *
-+ * @throws IOException
-+ * If an I/O error occurs. Any such exceptions are caught
-+ * internally. If only one is caught, then it is re-thrown.
-+ * If more than one exception is caught, then the second and
-+ * following exceptions are added as suppressed exceptions of the
-+ * first one caught, which is then re-thrown.
-+ */
-+ public static void deleteFileTreeWithRetry(Path dir)
-+ throws IOException
-+ {
-+ IOException ioe = null;
-+ final List<IOException> excs = deleteFileTreeUnchecked(dir);
-+ if (!excs.isEmpty()) {
-+ ioe = excs.remove(0);
-+ for (IOException x : excs)
-+ ioe.addSuppressed(x);
-+ }
-+ if (ioe != null)
-+ throw ioe;
-+ }
-+
-+ public static List<IOException> deleteFileTreeUnchecked(Path dir) {
-+ final List<IOException> excs = new ArrayList<>();
-+ try {
-+ java.nio.file.Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
-+ @Override
-+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
-+ try {
-+ deleteFileWithRetry0(file);
-+ } catch (IOException x) {
-+ excs.add(x);
-+ } catch (InterruptedException x) {
-+ excs.add(new IOException("Interrupted while deleting.", x));
-+ return FileVisitResult.TERMINATE;
-+ }
-+ return FileVisitResult.CONTINUE;
-+ }
-+ @Override
-+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
-+ try {
-+ deleteFileWithRetry0(dir);
-+ } catch (IOException x) {
-+ excs.add(x);
-+ } catch (InterruptedException x) {
-+ excs.add(new IOException("Interrupted while deleting.", x));
-+ return FileVisitResult.TERMINATE;
-+ }
-+ return FileVisitResult.CONTINUE;
-+ }
-+ @Override
-+ public FileVisitResult visitFileFailed(Path file, IOException exc) {
-+ excs.add(exc);
-+ return FileVisitResult.CONTINUE;
-+ }
-+ });
-+ } catch (IOException x) {
-+ excs.add(x);
-+ }
-+ return excs;
-+ }
-+}
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/sun/awt/datatransfer/DataFlavorComparatorTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,46 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/* @test
-+ @bug 7173464
-+ @summary Clipboard.getAvailableDataFlavors: Comparison method violates contract
-+ @author Petr Pchelko
-+ @run main DataFlavorComparatorTest
-+*/
-+
-+import sun.awt.datatransfer.DataTransferer;
-+
-+import java.awt.datatransfer.DataFlavor;
-+
-+public class DataFlavorComparatorTest {
-+
-+ public static void main(String[] args) {
-+ DataTransferer.DataFlavorComparator comparator = new DataTransferer.DataFlavorComparator();
-+ DataFlavor flavor1 = new DataFlavor("application/image", "Image");
-+ DataFlavor flavor2 = new DataFlavor("application/html", "HTML");
-+ if (comparator.compare(flavor1, flavor2) == 0) {
-+ throw new RuntimeException(flavor1.getMimeType() + " and " + flavor2.getMimeType() +
-+ " should not be equal");
-+ }
-+ }
-+}
---- ./jdk/test/sun/management/jdp/JdpTest.sh Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/management/jdp/JdpTest.sh Wed May 07 19:26:47 2014 -0700
-@@ -84,15 +84,29 @@
- ${TESTJAVA}/bin/java -server $* -cp ${_testclasses} ${testappname} >> ${_logname} 2>&1 &
- _last_pid=$!
-
-- npid=`_get_pid`
-- if [ "${npid}" = "" ]
-- then
-- echo "ERROR: Test app not started. Please check machine resources before filing a bug."
-- if [ "${_jtreg}" = "yes" ]
-- then
-- exit 255
-- fi
-- fi
-+# wait until VM is actually starts.
-+# please note, if vm doesn't start for some reason
-+# jtreg kills the test by timeout. Don't file a bug.
-+ cnt=1
-+ while true
-+ do
-+ npid=`_get_pid`
-+ if [ "${npid}" != "" ]
-+ then
-+ break
-+ fi
-+ if [ "${cnt}" = "10" ]
-+ then
-+ echo "ERROR: Test app not started. Please check machine resources before filing a bug."
-+ if [ "${_jtreg}" = "yes" ]
-+ then
-+ exit 255
-+ fi
-+ break
-+ fi
-+ cnt=`expr $cnt + 1`
-+ sleep 1
-+ done
- }
-
- _get_pid(){
---- ./jdk/test/sun/misc/IoTrace/IoTraceAgent.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/misc/IoTrace/IoTraceAgent.java Wed May 07 19:26:47 2014 -0700
-@@ -27,6 +27,7 @@
- import static com.sun.xml.internal.ws.org.objectweb.asm.Opcodes.ACC_STATIC;
- import static com.sun.xml.internal.ws.org.objectweb.asm.Opcodes.ACC_SUPER;
- import static com.sun.xml.internal.ws.org.objectweb.asm.Opcodes.ILOAD;
-+import static com.sun.xml.internal.ws.org.objectweb.asm.Opcodes.ALOAD;
- import static com.sun.xml.internal.ws.org.objectweb.asm.Opcodes.INVOKESPECIAL;
- import static com.sun.xml.internal.ws.org.objectweb.asm.Opcodes.INVOKESTATIC;
- import static com.sun.xml.internal.ws.org.objectweb.asm.Opcodes.IRETURN;
-@@ -165,6 +166,7 @@
-
- // return the value from the called method
- mv.visitInsn(retType.getOpcode(IRETURN));
-+ mv.visitMaxs(0, 0);
- mv.visitEnd();
- }
-
-@@ -172,8 +174,10 @@
- MethodVisitor mv = cw.visitMethod(ACC_PRIVATE, "<init>", "()V", null,
- null);
- mv.visitCode();
-+ mv.visitVarInsn(ALOAD, 0);
- mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
- mv.visitInsn(RETURN);
-+ mv.visitMaxs(0, 0);
- mv.visitEnd();
-
- cw.visitEnd();
---- ./jdk/test/sun/misc/IoTrace/ioTraceTest.sh Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/misc/IoTrace/ioTraceTest.sh Wed May 07 19:26:47 2014 -0700
-@@ -31,4 +31,4 @@
- ${TESTJAVA}/bin/jar cfm iotraceagent.jar ${TESTSRC}/iotraceagent.mf IoTraceAgent.class IoTraceListener.class
-
- cd ${PWD}
--${TESTJAVA}/bin/java ${TESTVMOPTS} -javaagent:${TESTCLASSES}/iotraceagent.jar -cp ${TESTCLASSES} $*
-+${TESTJAVA}/bin/java -Xverify:all ${TESTVMOPTS} -javaagent:${TESTCLASSES}/iotraceagent.jar -cp ${TESTCLASSES} $*
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/sun/security/jgss/spnego/MechTokenMissing.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,53 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8024861
-+ * @summary Incomplete token triggers GSS-API NullPointerException
-+ */
-+
-+import org.ietf.jgss.GSSContext;
-+import org.ietf.jgss.GSSCredential;
-+import org.ietf.jgss.GSSException;
-+import org.ietf.jgss.GSSManager;
-+
-+public class MechTokenMissing {
-+ public static void main(String[] args) throws Exception {
-+ GSSCredential cred = null;
-+ GSSContext ctx = GSSManager.getInstance().createContext(cred);
-+
-+ String var =
-+ /*0000*/ "60 1C 06 06 2B 06 01 05 05 02 A0 12 30 10 A0 0E " +
-+ /*0010*/ "30 0C 06 0A 2B 06 01 04 01 82 37 02 02 0A ";
-+ byte[] token = new byte[var.length()/3];
-+ for (int i=0; i<token.length; i++) {
-+ token[i] = Integer.valueOf(var.substring(3*i,3*i+2), 16).byteValue();
-+ }
-+ try {
-+ ctx.acceptSecContext(token, 0, token.length);
-+ } catch (GSSException gsse) {
-+ System.out.println("Expected exception: " + gsse);
-+ }
-+ }
-+}
---- ./jdk/test/sun/security/krb5/ParseCAPaths.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/krb5/ParseCAPaths.java Wed May 07 19:26:47 2014 -0700
-@@ -22,7 +22,7 @@
- */
- /*
- * @test
-- * @bug 6789935
-+ * @bug 6789935 8012615
- * @run main/othervm ParseCAPaths
- * @summary cross-realm capath search error
- */
-@@ -35,37 +35,75 @@
- public static void main(String[] args) throws Exception {
- System.setProperty("java.security.krb5.conf",
- System.getProperty("test.src", ".") +"/krb5-capaths.conf");
-- //System.setProperty("sun.security.krb5.debug", "true");
-
-- // Standard example
-+ // MIT
- check("ANL.GOV", "TEST.ANL.GOV", "ANL.GOV");
- check("ANL.GOV", "ES.NET", "ANL.GOV");
- check("ANL.GOV", "PNL.GOV", "ANL.GOV", "ES.NET");
- check("ANL.GOV", "NERSC.GOV", "ANL.GOV", "ES.NET");
-+ check("NERSC.GOV", "TEST.ANL.GOV", "NERSC.GOV", "ES.NET", "ANL.GOV");
-+
-+ // RedHat
-+ // 3.6.2.1. Configuring a Shared Hierarchy of Names
-+ check("AA.EXAMPLE.COM", "BB.EXAMPLE.COM",
-+ "AA.EXAMPLE.COM", "EXAMPLE.COM");
-+ check("SITE1.SALES.EXAMPLE.COM", "EVERYWHERE.EXAMPLE.COM",
-+ "SITE1.SALES.EXAMPLE.COM", "SALES.EXAMPLE.COM",
-+ "EXAMPLE.COM");
-+ check("DEVEL.EXAMPLE.COM", "PROD.EXAMPLE.ORG",
-+ "DEVEL.EXAMPLE.COM", "EXAMPLE.COM", "COM",
-+ "ORG", "EXAMPLE.ORG");
-+ // 3.6.2.2. Configuring Paths in krb5.conf
-+ check("A.EXAMPLE.COM", "B.EXAMPLE.COM", "A.EXAMPLE.COM");
-+ check("A.EXAMPLE.COM", "C.EXAMPLE.COM",
-+ "A.EXAMPLE.COM", "B.EXAMPLE.COM");
-+ check("A.EXAMPLE.COM", "D.EXAMPLE.COM",
-+ "A.EXAMPLE.COM", "B.EXAMPLE.COM", "C.EXAMPLE.COM");
-+
-+ // The original JDK example
-+ check("TIVOLI.COM", "IBM.COM", "TIVOLI.COM", "LDAPCENTRAL.NET",
-+ "IBM_LDAPCENTRAL.COM", "MOONLITE.ORG");
-+
- // Hierachical
-- check("N1.N.COM", "N2.N.COM", "N1.N.COM", "N.COM"); // 2 common
-- check("N1.N.COM", "N2.N3.COM", "N1.N.COM", "N.COM", // 1 common
-+ check("N1.N.COM", "N2.N.COM", "N1.N.COM", "N.COM");
-+ check("N1.N.COM", "N2.N3.COM", "N1.N.COM", "N.COM",
- "COM", "N3.COM");
-- check("N1.COM", "N2.COM", "N1.COM", "COM"); // 1 common
-- check("N1", "N2", "N1"); // 0 common
-- // Extra garbages
-- check("A1.COM", "A4.COM", "A1.COM", "A2.COM");
-+ check("N1.COM", "N2.COM", "N1.COM", "COM");
-+ check("N1", "N2", "N1");
-+ check("N1.COM", "N2.ORG", "N1.COM", "COM", "ORG");
-+ check("N1.N.COM", "N.COM", "N1.N.COM");
-+ check("X.N1.N.COM", "N.COM", "X.N1.N.COM", "N1.N.COM");
-+ check("N.COM", "N1.N.COM", "N.COM");
-+ check("N.COM", "X.N1.N.COM", "N.COM", "N1.N.COM");
-+ check("A.B.C", "D.E.F", "A.B.C", "B.C", "C", "F", "E.F");
-+
-+ // Full path
-+ check("A1.COM", "A2.COM", "A1.COM");
-+ check("A1.COM", "A3.COM", "A1.COM", "A2.COM");
-+ check("A1.COM", "A4.COM", "A1.COM", "A2.COM", "A3.COM");
-+
-+ // Shortest path
-+ check("B1.COM", "B2.COM", "B1.COM");
- check("B1.COM", "B3.COM", "B1.COM", "B2.COM");
-+ check("B1.COM", "B4.COM", "B1.COM", "B2.COM", "B3.COM");
-+
- // Missing is "."
-+ check("C1.COM", "C2.COM", "C1.COM", "COM");
- check("C1.COM", "C3.COM", "C1.COM", "C2.COM");
-- // Multiple path
-- check("D1.COM", "D4.COM", "D1.COM", "D2.COM");
-- check("E1.COM", "E4.COM", "E1.COM", "E2.COM");
-- check("F1.COM", "F4.COM", "F1.COM", "F9.COM");
-- // Infinite loop
-- check("G1.COM", "G3.COM", "G1.COM", "COM");
-- check("H1.COM", "H3.COM", "H1.COM");
-+
-+ // cRealm = .
-+ check("D1.COM", "D2.COM", "D1.COM");
-+
-+ // Bad cases
-+ check("E1.COM", "E2.COM", "E1.COM");
-+ check("E1.COM", "E3.COM", "E1.COM", "E4.COM");
-+ check("G1.COM", "G3.COM", "G1.COM", "G2.COM");
- check("I1.COM", "I4.COM", "I1.COM", "I5.COM");
-- // J2=J1 is the same as J2=.
-- check("J1.COM", "J2.COM", "J1.COM");
-+
- // 7019384
- check("A9.PRAGUE.XXX.CZ", "SERVIS.XXX.CZ",
- "A9.PRAGUE.XXX.CZ", "PRAGUE.XXX.CZ", "ROOT.XXX.CZ");
-+
- if (failed != null) {
- throw failed;
- }
-@@ -75,6 +113,7 @@
- try {
- check2(from, to, paths);
- } catch (Exception e) {
-+ System.out.println(" " + e.getMessage());
- failed = e;
- }
- }
-@@ -84,18 +123,15 @@
- System.out.println(from + " -> " + to);
- System.out.println(" expected: " + Arrays.toString(paths));
- String[] result = Realm.getRealmsList(from, to);
-- System.out.println(" result: " + Arrays.toString(result));
-- if (result == null) {
-- if (paths.length == 0) {
-- // OK
-- } else {
-- throw new Exception("Shouldn't have a valid path.");
-- }
-+ System.out.println(" result: " + Arrays.toString(result));
-+ if (result == null || result.length == 0) {
-+ throw new Exception("There is always a valid path.");
- } else if(result.length != paths.length) {
- throw new Exception("Length of path not correct");
- } else {
- for (int i=0; i<result.length; i++) {
- if (!result[i].equals(paths[i])) {
-+ System.out.println(" result: " + Arrays.toString(result));
- throw new Exception("Path not same");
- }
- }
---- ./jdk/test/sun/security/krb5/auto/BadKdc.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/krb5/auto/BadKdc.java Wed May 07 19:26:47 2014 -0700
-@@ -39,7 +39,29 @@
- // ^ kdc# ^ timeout
- static final Pattern re = Pattern.compile(
- ">>> KDCCommunication: kdc=kdc.rabbit.hole UDP:(\\d)...., " +
-- "timeout=(\\d)000,");
-+ "timeout=(\\d+),");
-+
-+ // Ratio for timeout values of all timeout tests. Not final so that
-+ // each test can choose their own.
-+ static float ratio = 2f;
-+
-+ static void setRatio(float ratio) {
-+ BadKdc.ratio = ratio;
-+ }
-+
-+ static float getRatio() {
-+ return ratio;
-+ }
-+
-+ // Gets real timeout value. This method is called when writing krb5.conf
-+ static int toReal(int from) {
-+ return (int)(from * ratio + .5);
-+ }
-+
-+ // De-ratio a millisecond value to second
-+ static int toSymbolicSec(int from) {
-+ return (int)(from / ratio / 1000f + 0.5);
-+ }
-
- /*
- * There are several cases this test fails:
-@@ -97,7 +119,7 @@
-
- fw.write("[libdefaults]\n" +
- "default_realm = " + OneKDC.REALM + "\n" +
-- "kdc_timeout = 2000\n");
-+ "kdc_timeout = " + toReal(2000) + "\n");
- fw.write("[realms]\n" + OneKDC.REALM + " = {\n" +
- "kdc = " + OneKDC.KDCHOST + ":" + p1 + "\n" +
- "kdc = " + OneKDC.KDCHOST + ":" + p2 + "\n" +
-@@ -171,7 +193,8 @@
- Matcher m = re.matcher(line);
- if (m.find()) {
- System.out.println(line);
-- sb.append(m.group(1)).append(m.group(2));
-+ sb.append(m.group(1))
-+ .append(toSymbolicSec(Integer.parseInt(m.group(2))));
- }
- }
- if (failed) sb.append('-');
---- ./jdk/test/sun/security/krb5/auto/BadKdc1.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/krb5/auto/BadKdc1.java Wed May 07 19:26:47 2014 -0700
-@@ -28,14 +28,21 @@
- * @summary krb5 should not try to access unavailable kdc too often
- */
-
--import java.io.*;
- import java.security.Security;
-
- public class BadKdc1 {
-
- public static void main(String[] args)
- throws Exception {
-- Security.setProperty("krb5.kdc.bad.policy", "tryLess");
-+
-+ // 5 sec is default timeout for tryLess
-+ if (BadKdc.getRatio() > 2.5) {
-+ Security.setProperty("krb5.kdc.bad.policy",
-+ "tryLess:1," + BadKdc.toReal(2000));
-+ } else {
-+ Security.setProperty("krb5.kdc.bad.policy", "tryLess");
-+ }
-+
- BadKdc.go(
- "121212222222(32){1,2}1222(32){1,2}", // 1 2
- // The above line means try kdc1 for 2 seconds then kdc1
---- ./jdk/test/sun/security/krb5/auto/BadKdc2.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/krb5/auto/BadKdc2.java Wed May 07 19:26:47 2014 -0700
-@@ -35,7 +35,12 @@
-
- public static void main(String[] args)
- throws Exception {
-- Security.setProperty("krb5.kdc.bad.policy", "tryLess:2,1000");
-+
-+ // 1 sec is too short.
-+ BadKdc.setRatio(3.0f);
-+
-+ Security.setProperty(
-+ "krb5.kdc.bad.policy", "tryLess:2," + BadKdc.toReal(1000));
- BadKdc.go(
- "121212222222(32){1,2}11112121(32){1,2}", // 1 2
- "11112121(32){1,2}11112121(32){1,2}", // 1 2
---- ./jdk/test/sun/security/krb5/auto/KDC.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/krb5/auto/KDC.java Wed May 07 19:26:47 2014 -0700
-@@ -630,7 +630,7 @@
- * @return the response
- * @throws java.lang.Exception for various errors
- */
-- private byte[] processMessage(byte[] in) throws Exception {
-+ protected byte[] processMessage(byte[] in) throws Exception {
- if ((in[0] & 0x1f) == Krb5.KRB_AS_REQ)
- return processAsReq(in);
- else
-@@ -643,7 +643,7 @@
- * @return the response
- * @throws java.lang.Exception for various errors
- */
-- private byte[] processTgsReq(byte[] in) throws Exception {
-+ protected byte[] processTgsReq(byte[] in) throws Exception {
- TGSReq tgsReq = new TGSReq(in);
- PrincipalName service = tgsReq.reqBody.sname;
- if (options.containsKey(KDC.Option.RESP_NT)) {
-@@ -809,7 +809,7 @@
- * @return the response
- * @throws java.lang.Exception for various errors
- */
-- private byte[] processAsReq(byte[] in) throws Exception {
-+ protected byte[] processAsReq(byte[] in) throws Exception {
- ASReq asReq = new ASReq(in);
- int[] eTypes = null;
- List<PAData> outPAs = new ArrayList<>();
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/sun/security/krb5/auto/LoginNoPass.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,73 @@
-+/*
-+ * Copyright (c) 2012, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8028351
-+ * @summary JWS doesn't get authenticated when using kerberos auth proxy
-+ * @compile -XDignore.symbol.file LoginNoPass.java
-+ * @run main/othervm LoginNoPass
-+ */
-+
-+import sun.security.jgss.GSSUtil;
-+
-+import javax.security.auth.callback.Callback;
-+import javax.security.auth.callback.CallbackHandler;
-+import javax.security.auth.callback.NameCallback;
-+import javax.security.auth.callback.PasswordCallback;
-+import java.security.Security;
-+
-+public class LoginNoPass {
-+
-+ static boolean kdcTouched = false;
-+ public static void main(String[] args) throws Exception {
-+
-+ new OneKDC(null) {
-+ protected byte[] processAsReq(byte[] in) throws Exception {
-+ kdcTouched = true;
-+ return super.processAsReq(in);
-+ }
-+ }.writeJAASConf();
-+ Security.setProperty("auth.login.defaultCallbackHandler",
-+ "LoginNoPass$CallbackForClient");
-+ System.setProperty("javax.security.auth.useSubjectCredsOnly", "false");
-+
-+ try {
-+ Context c;
-+ c = Context.fromJAAS("client");
-+ c.startAsClient(OneKDC.SERVER, GSSUtil.GSS_KRB5_MECH_OID);
-+ c.take(new byte[0]);
-+ } catch (Exception e) {
-+ e.printStackTrace(System.out);
-+ // OK
-+ }
-+ if (kdcTouched) {
-+ throw new Exception("Failed");
-+ }
-+ }
-+ public static class CallbackForClient implements CallbackHandler {
-+ public void handle(Callback[] callbacks) {
-+ // Do nothing
-+ }
-+ }
-+}
---- ./jdk/test/sun/security/krb5/auto/MaxRetries.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/krb5/auto/MaxRetries.java Wed May 07 19:26:47 2014 -0700
-@@ -54,7 +54,7 @@
- test1(5000, 2); // 2 2
-
- // For tryLess
-- Security.setProperty("krb5.kdc.bad.policy", "tryless");
-+ Security.setProperty("krb5.kdc.bad.policy", "tryless:1," + BadKdc.toReal(5000));
- rewriteMaxRetries(4);
- test1(4000, 7); // 1 1 1 1 2 1 2
- test1(4000, 4); // 1 2 1 2
-@@ -86,7 +86,7 @@
- * @param count the expected total try
- */
- private static void test1(int timeout, int count) throws Exception {
-- String timeoutTag = "timeout=" + timeout;
-+ String timeoutTag = "timeout=" + BadKdc.toReal(timeout);
- ByteArrayOutputStream bo = new ByteArrayOutputStream();
- PrintStream oldout = System.out;
- System.setOut(new PrintStream(bo));
-@@ -184,12 +184,12 @@
- if (s.startsWith("[realms]")) {
- // Reconfig global setting
- fw.write("max_retries = 2\n");
-- fw.write("kdc_timeout = 5000\n");
-+ fw.write("kdc_timeout = " + BadKdc.toReal(5000) + "\n");
- } else if (s.trim().startsWith("kdc = ")) {
- if (value != -1) {
- // Reconfig for realm
- fw.write(" max_retries = " + value + "\n");
-- fw.write(" kdc_timeout = " + (value*1000) + "\n");
-+ fw.write(" kdc_timeout = " + BadKdc.toReal(value*1000) + "\n");
- }
- // Add a bad KDC as the first candidate
- fw.write(" kdc = localhost:33333\n");
---- ./jdk/test/sun/security/krb5/auto/SaslGSS.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/krb5/auto/SaslGSS.java Wed May 07 19:26:47 2014 -0700
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 8012082
-+ * @bug 8012082 8019267
- * @summary SASL: auth-conf negotiated, but unencrypted data is accepted,
- * reset to unencrypt
- * @compile -XDignore.symbol.file SaslGSS.java
-@@ -37,9 +37,16 @@
- import javax.security.sasl.RealmCallback;
- import javax.security.sasl.Sasl;
- import javax.security.sasl.SaslServer;
-+import java.io.ByteArrayOutputStream;
- import java.io.IOException;
-+import java.io.PrintStream;
- import java.util.HashMap;
- import java.util.Locale;
-+import java.util.logging.ConsoleHandler;
-+import java.util.logging.Handler;
-+import java.util.logging.Level;
-+import java.util.logging.Logger;
-+
- import org.ietf.jgss.*;
- import sun.security.jgss.GSSUtil;
-
-@@ -79,14 +86,28 @@
- }
- });
-
-- // Handshake
-+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
-+ PrintStream oldErr = System.err;
-+ System.setErr(new PrintStream(bout));
-+
-+ Logger.getLogger("javax.security.sasl").setLevel(Level.ALL);
-+ Handler h = new ConsoleHandler();
-+ h.setLevel(Level.ALL);
-+ Logger.getLogger("javax.security.sasl").addHandler(h);
-+
- byte[] token = new byte[0];
-- token = sc.initSecContext(token, 0, token.length);
-- token = ss.evaluateResponse(token);
-- token = sc.unwrap(token, 0, token.length, new MessageProp(0, false));
-- token[0] = (byte)(((token[0] & 4) != 0) ? 4 : 2);
-- token = sc.wrap(token, 0, token.length, new MessageProp(0, false));
-- ss.evaluateResponse(token);
-+
-+ try {
-+ // Handshake
-+ token = sc.initSecContext(token, 0, token.length);
-+ token = ss.evaluateResponse(token);
-+ token = sc.unwrap(token, 0, token.length, new MessageProp(0, false));
-+ token[0] = (byte)(((token[0] & 4) != 0) ? 4 : 2);
-+ token = sc.wrap(token, 0, token.length, new MessageProp(0, false));
-+ ss.evaluateResponse(token);
-+ } finally {
-+ System.setErr(oldErr);
-+ }
-
- // Talk
- // 1. Client sends a auth-int message
-@@ -102,5 +123,15 @@
- if (!qop.getPrivacy()) {
- throw new Exception();
- }
-+
-+ for (String s: bout.toString().split("\\n")) {
-+ if (s.contains("KRB5SRV04") && s.contains("NULL")) {
-+ return;
-+ }
-+ }
-+ System.out.println("=======================");
-+ System.out.println(bout.toString());
-+ System.out.println("=======================");
-+ throw new Exception("Haven't seen KRB5SRV04 with NULL");
- }
- }
---- ./jdk/test/sun/security/krb5/auto/TcpTimeout.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/krb5/auto/TcpTimeout.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2010, 2012, 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
-@@ -24,7 +24,8 @@
- /*
- * @test
- * @bug 6952519
-- * @run main/timeout=40/othervm TcpTimeout
-+ * @compile -XDignore.symbol.file TcpTimeout.java
-+ * @run main/othervm TcpTimeout
- * @summary kdc_timeout is not being honoured when using TCP
- */
-
-@@ -36,103 +37,71 @@
- public static void main(String[] args)
- throws Exception {
-
-+ // Set debug to grab debug output like ">>> KDCCommunication"
- System.setProperty("sun.security.krb5.debug", "true");
-- final int p1 = 10000 + new java.util.Random().nextInt(10000);
-- final int p2 = 20000 + new java.util.Random().nextInt(10000);
-- final int p3 = 30000 + new java.util.Random().nextInt(10000);
-
-- KDC k = new KDC(OneKDC.REALM, OneKDC.KDCHOST, p3, true);
-+ // Called before new ServerSocket on p1 and p2 to make sure
-+ // customized nameservice is used
-+ KDC k = new KDC(OneKDC.REALM, OneKDC.KDCHOST, 0, true);
-+ int p3 = k.getPort();
- k.addPrincipal(OneKDC.USER, OneKDC.PASS);
- k.addPrincipalRandKey("krbtgt/" + OneKDC.REALM);
-
- // Start two listener that does not communicate, simulate timeout
-- new Thread() {
-- public void run() {
-- try {
-- new ServerSocket(p1).accept();
-- } catch (Exception e) {
-- }}
-- }.start();
-- new Thread() {
-- public void run() {
-- try {
-- new ServerSocket(p2).accept();
-- } catch (Exception e) {
-- }}
-- }.start();
-+ ServerSocket ss1 = null;
-+ ServerSocket ss2 = null;
-
-- FileWriter fw = new FileWriter("alternative-krb5.conf");
-+ try {
-+ ss1 = new ServerSocket(0);
-+ ss2 = new ServerSocket(0);
-+ int p1 = ss1.getLocalPort();
-+ int p2 = ss2.getLocalPort();
-
-- fw.write("[libdefaults]\n" +
-- "udp_preference_limit = 1\n" +
-- "max_retries = 2\n" +
-- "default_realm = " + OneKDC.REALM + "\n" +
-- "kdc_timeout = 5000\n");
-- fw.write("[realms]\n" + OneKDC.REALM + " = {\n" +
-- "kdc = " + OneKDC.KDCHOST + ":" + p1 + "\n" +
-- "kdc = " + OneKDC.KDCHOST + ":" + p2 + "\n" +
-- "kdc = " + OneKDC.KDCHOST + ":" + p3 + "\n" +
-- "}\n");
-+ FileWriter fw = new FileWriter("alternative-krb5.conf");
-
-- fw.close();
-- System.setProperty("java.security.krb5.conf", "alternative-krb5.conf");
-- Config.refresh();
-+ fw.write("[libdefaults]\n" +
-+ "udp_preference_limit = 1\n" +
-+ "max_retries = 2\n" +
-+ "default_realm = " + OneKDC.REALM + "\n" +
-+ "kdc_timeout = " + BadKdc.toReal(5000) + "\n");
-+ fw.write("[realms]\n" + OneKDC.REALM + " = {\n" +
-+ "kdc = " + OneKDC.KDCHOST + ":" + p1 + "\n" +
-+ "kdc = " + OneKDC.KDCHOST + ":" + p2 + "\n" +
-+ "kdc = " + OneKDC.KDCHOST + ":" + p3 + "\n" +
-+ "}\n");
-
-- // The correct behavior should be:
-- // 5 sec on p1, 5 sec on p1, fail
-- // 5 sec on p2, 5 sec on p2, fail
-- // p3 ok, p3 ok again for preauth.
-- // The total time should be 20sec + 2x. x is processing time for AS-REQ.
-- int count = 6;
-- long start = System.nanoTime();
-+ fw.close();
-+ System.setProperty("java.security.krb5.conf",
-+ "alternative-krb5.conf");
-+ Config.refresh();
-
-- ByteArrayOutputStream bo = new ByteArrayOutputStream();
-- PrintStream oldout = System.out;
-- System.setOut(new PrintStream(bo));
-- Context c = Context.fromUserPass(OneKDC.USER, OneKDC.PASS, false);
-- System.setOut(oldout);
-+ System.out.println("Ports opened on " + p1 + ", " + p2 + ", " + p3);
-
-- String[] lines = new String(bo.toByteArray()).split("\n");
-- for (String line: lines) {
-- if (line.startsWith(">>> KDCCommunication")) {
-- System.out.println(line);
-- count--;
-+ // The correct behavior should be:
-+ // 5 sec on p1, 5 sec on p1, fail
-+ // 5 sec on p2, 5 sec on p2, fail
-+ // p3 ok, p3 ok again for preauth.
-+ int count = 6;
-+
-+ ByteArrayOutputStream bo = new ByteArrayOutputStream();
-+ PrintStream oldout = System.out;
-+ System.setOut(new PrintStream(bo));
-+ Context c = Context.fromUserPass(OneKDC.USER, OneKDC.PASS, false);
-+ System.setOut(oldout);
-+
-+ String[] lines = new String(bo.toByteArray()).split("\n");
-+ for (String line: lines) {
-+ if (line.startsWith(">>> KDCCommunication")) {
-+ System.out.println(line);
-+ count--;
-+ }
- }
-- }
-- if (count != 0) {
-- throw new Exception("Retry count is " + count + " less");
-- }
--
-- long end = System.nanoTime();
-- if ((end - start)/1000000000L < 20) {
-- throw new Exception("Too fast? " + (end - start)/1000000000L);
-+ if (count != 0) {
-+ throw new Exception("Retry count is " + count + " less");
-+ }
-+ } finally {
-+ if (ss1 != null) ss1.close();
-+ if (ss2 != null) ss2.close();
- }
- }
--
-- private static KDC on(int p) throws Exception {
-- KDC k = new KDC(OneKDC.REALM, OneKDC.KDCHOST, p, true);
-- k.addPrincipal(OneKDC.USER, OneKDC.PASS);
-- k.addPrincipalRandKey("krbtgt/" + OneKDC.REALM);
-- return k;
-- }
--
-- private static void addFakeKDCs()
-- throws Exception {
-- BufferedReader fr = new BufferedReader(new FileReader(OneKDC.KRB5_CONF));
-- FileWriter fw = new FileWriter("alternative-krb5.conf");
-- while (true) {
-- String s = fr.readLine();
-- if (s == null) {
-- break;
-- }
-- if (s.trim().startsWith("kdc = ")) {
-- fw.write(" kdc = localhost:33333\n");
-- fw.write(" kdc = localhost:22222\n");
-- }
-- fw.write(s + "\n");
-- }
-- fr.close();
-- fw.close();
-- sun.security.krb5.Config.refresh();
-- }
- }
---- ./jdk/test/sun/security/krb5/krb5-capaths.conf Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/krb5/krb5-capaths.conf Wed May 07 19:26:47 2014 -0700
-@@ -1,6 +1,6 @@
- [capaths]
-
--# Standard
-+# http://web.mit.edu/kerberos/krb5-1.5/krb5-1.5.4/doc/krb5-admin/capaths.html
-
- ANL.GOV = {
- TEST.ANL.GOV = .
-@@ -14,81 +14,86 @@
- PNL.GOV = {
- ANL.GOV = ES.NET
- }
--NERSC.GOV = {
-- ANL.GOV = ES.NET
--}
-+#NERSC.GOV = {
-+# ANL.GOV = ES.NET
-+#}
- ES.NET = {
- ANL.GOV = .
- }
-+NERSC.GOV = {
-+ ANL.GOV = ES.NET
-+ TEST.ANL.GOV = ES.NET
-+ TEST.ANL.GOV = ANL.GOV
-+ PNL.GOV = ES.NET
-+ ES.NET = .
-+}
-
--# Extra garbages
-+# The original JDK example
-+
-+TIVOLI.COM = {
-+ IBM.COM = IBM_LDAPCENTRAL.COM MOONLITE.ORG
-+ IBM_LDAPCENTRAL.COM = LDAPCENTRAL.NET
-+ LDAPCENTRAL.NET = .
-+}
-+
-+# https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Smart_Cards/Setting_Up_Cross_Realm_Authentication.html
-+
-+A.EXAMPLE.COM = {
-+ B.EXAMPLE.COM = .
-+ C.EXAMPLE.COM = B.EXAMPLE.COM
-+ D.EXAMPLE.COM = B.EXAMPLE.COM
-+ D.EXAMPLE.COM = C.EXAMPLE.COM
-+}
-+
-+# Full path
-
- A1.COM = {
- A2.COM = .
-+ A3.COM = A2.COM
- A4.COM = A2.COM
-- A3.COM = A4.COM
-- A3.COM = A2.COM
-+ A4.COM = A3.COM
- }
-
-+# Shortest path
-+
- B1.COM = {
- B2.COM = .
- B3.COM = B2.COM
-- B3.COM = B4.COM
-+ B4.COM = B3.COM
- }
-
--# Missing is "."
-+# If no sRealm key, fallback to hierarchy
-
- C1.COM = {
- C3.COM = C2.COM
- }
-
--# Multiple paths
-+# cRealm is "."
-
- D1.COM = {
-- D2.COM = .
-- D3.COM = .
-- D4.COM = D2.COM
-- D4.COM = D3.COM
-+ D2.COM=D1.COM
- }
-
-+# Bad cases
-+
- E1.COM = {
-- E2.COM = .
-+ E2.COM = E2.COM
-+ E3.COM = E4.COM
- E3.COM = .
-- E4.COM = E2.COM E3.COM E2.COM
- }
-
--# Shortest or First?
--
--F1.COM = {
-- F2.COM = .
-- F3.COM = F2.COM
-- F4.COM = F9.COM
-- F4.COM = F3.COM
-- F4.COM = F2.COM
--}
--
--# Infinite loop
--
- G1.COM = {
- G2.COM = G3.COM
- G3.COM = G2.COM
- }
-
--H1.COM = {
-- H2.COM = H3.COM
-- H3.COM = H2.COM
-- H3.COM = .
--}
--
- I1.COM = {
- I2.COM = I3.COM
- I3.COM = I2.COM
-- I4.COM = I2.COM I5.COM
-+ I4.COM = I5.COM
- }
-
--J1.COM = {
-- J2.COM=J1.COM
--}
-+# 7019384
-
- A9.PRAGUE.XXX.CZ = {
- PRAGUE.XXX.CZ = .
---- ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineDeadlock.java Tue Mar 18 12:35:25 2014 -0700
-+++ ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineDeadlock.java Wed May 07 19:26:47 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2007, 2013, 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
-@@ -75,6 +75,7 @@
- import java.io.*;
- import java.security.*;
- import java.nio.*;
-+import java.lang.management.*;
-
- public class SSLEngineDeadlock {
-
-@@ -145,6 +146,8 @@
- }
- SSLEngineDeadlock test = new SSLEngineDeadlock();
- test.runTest();
-+
-+ detectDeadLock();
- }
- System.out.println("Test Passed.");
- }
-@@ -362,6 +365,22 @@
- }
-
- /*
-+ * Detect dead lock
-+ */
-+ private static void detectDeadLock() throws Exception {
-+ ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
-+ long[] threadIds = threadBean.findDeadlockedThreads();
-+ if (threadIds != null && threadIds.length != 0) {
-+ for (long id : threadIds) {
-+ ThreadInfo info =
-+ threadBean.getThreadInfo(id, Integer.MAX_VALUE);
-+ System.out.println("Deadlocked ThreadInfo: " + info);
-+ }
-+ throw new Exception("Found Deadlock!");
-+ }
-+ }
-+
-+ /*
- * Logging code
- */
- private static boolean resultOnce = true;
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/sun/security/tools/jarsigner/EntriesOrder.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,204 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/**
-+ * @test
-+ * @bug 8031572
-+ * @summary jarsigner -verify exits with 0 when a jar file is not properly signed
-+ */
-+
-+import java.io.FileInputStream;
-+import java.io.FileOutputStream;
-+import java.nio.file.Files;
-+import java.nio.file.Paths;
-+import java.security.cert.Certificate;
-+import java.util.*;
-+import java.util.jar.JarEntry;
-+import java.util.jar.JarFile;
-+import java.util.jar.JarInputStream;
-+import java.util.zip.ZipEntry;
-+import java.util.zip.ZipOutputStream;
-+
-+public class EntriesOrder {
-+
-+ public static void main(String[] args) throws Exception {
-+
-+ String[] entries = {
-+ "META-INF/",
-+ "META-INF/MANIFEST.MF",
-+ "META-INF/A.RSA",
-+ "META-INF/A.SF",
-+ "META-INF/inf",
-+ "a"};
-+
-+ Map<String,byte[]> content = new HashMap<>();
-+
-+ // We will create a jar containing entries above. Try all permutations
-+ // and confirm 1) When opened as a JarFile, we can always get 3 signed
-+ // ones (MANIFEST, inf, a), and 2) When opened as a JarInputStream,
-+ // when the order is correct (MANIFEST at beginning, followed by RSA/SF,
-+ // directory ignored), we can get 2 signed ones (inf, a).
-+
-+ // Prepares raw files
-+ Files.write(Paths.get("a"), "a".getBytes());
-+ Files.createDirectory(Paths.get("META-INF/"));
-+ Files.write(Paths.get("META-INF/inf"), "inf".getBytes());
-+
-+ // Pack, sign, and extract to get all files
-+ sun.tools.jar.Main m =
-+ new sun.tools.jar.Main(System.out, System.err, "jar");
-+ if (!m.run("cvf a.jar a META-INF/inf".split(" "))) {
-+ throw new Exception("jar creation failed");
-+ }
-+ sun.security.tools.KeyTool.main(
-+ ("-keystore jks -storepass changeit -keypass changeit -dname" +
-+ " CN=A -alias a -genkeypair -keyalg rsa").split(" "));
-+ sun.security.tools.JarSigner.main(
-+ "-keystore jks -storepass changeit a.jar a".split(" "));
-+ m = new sun.tools.jar.Main(System.out, System.err, "jar");
-+ if (!m.run("xvf a.jar".split(" "))) {
-+ throw new Exception("jar extraction failed");
-+ }
-+
-+ // Data
-+ for (String s: entries) {
-+ if (!s.endsWith("/")) {
-+ content.put(s, Files.readAllBytes(Paths.get(s)));
-+ }
-+ }
-+
-+ // Test
-+ for (List<String> perm: Permute(entries)) {
-+
-+ // Recreate a jar
-+ try (ZipOutputStream zos
-+ = new ZipOutputStream(new FileOutputStream("x.jar"))) {
-+ for (String e: perm) {
-+ zos.putNextEntry(new ZipEntry(e));
-+ if (Paths.get(e).toFile().isDirectory()) continue;
-+ zos.write(content.get(e));
-+ }
-+ }
-+
-+ // Open with JarFile, number of signed entries should be 3.
-+ int cc = 0;
-+ try (JarFile jf = new JarFile("x.jar")) {
-+ Enumeration<JarEntry> jes = jf.entries();
-+ while (jes.hasMoreElements()) {
-+ JarEntry je = jes.nextElement();
-+ sun.misc.IOUtils.readFully(jf.getInputStream(je), -1, true);
-+ Certificate[] certs = je.getCertificates();
-+ if (certs != null && certs.length > 0) {
-+ cc++;
-+ }
-+ }
-+ }
-+
-+ if (cc != 3) {
-+ System.out.println(perm + " - jf - " + cc);
-+ throw new Exception();
-+ }
-+
-+ // Open with JarInputStream
-+ int signed;
-+
-+ perm.remove("META-INF/");
-+ if (perm.get(0).equals("META-INF/MANIFEST.MF") &&
-+ perm.get(1).contains("/A.") &&
-+ perm.get(2).contains("/A.")) {
-+ signed = 2; // Good order
-+ } else {
-+ signed = 0; // Bad order. In this case, the number of signed
-+ // entries is not documented. Just test impl.
-+ }
-+
-+ cc = 0;
-+ try (JarInputStream jis
-+ = new JarInputStream(new FileInputStream("x.jar"))) {
-+ while (true) {
-+ JarEntry je = jis.getNextJarEntry();
-+ if (je == null) break;
-+ sun.misc.IOUtils.readFully(jis, -1, true);
-+ Certificate[] certs = je.getCertificates();
-+ if (certs != null && certs.length > 0) {
-+ cc++;
-+ }
-+ }
-+ }
-+
-+ if (cc != signed) {
-+ System.out.println(perm + " - jis - " + cc + " " + signed);
-+ throw new Exception();
-+ }
-+ }
-+ }
-+
-+ // Helper method to return all permutations of an array. Each output can
-+ // be altered without damaging the iteration process.
-+ static Iterable<List<String>> Permute(final String[] entries) {
-+ return new Iterable<List<String>>() {
-+
-+ int s = entries.length;
-+ long c = factorial(s) - 1; // number of permutations
-+
-+ private long factorial(int n) {
-+ return (n == 1) ? 1: (n * factorial(n-1));
-+ }
-+
-+ @Override
-+ public Iterator<List<String>> iterator() {
-+ return new Iterator<List<String>>() {
-+ @Override
-+ public boolean hasNext() {
-+ return c >= 0;
-+ }
-+
-+ @Override
-+ public void remove() {
-+ throw new UnsupportedOperationException("remove");
-+ }
-+
-+ @Override
-+ public List<String> next() {
-+ if (c < 0) return null;
-+ List<String> result = new ArrayList<>(s);
-+ LinkedList<String> source = new LinkedList<>(
-+ Arrays.asList(entries));
-+ // Treat c as a integer with different radixes at
-+ // different digits, i.e. at digit 0, radix is s;
-+ // at digit 1, radix is s-1. Thus a s-digit number
-+ // is able to represent s! different values.
-+ long n = c;
-+ for (int i=s; i>=1; i--) {
-+ int x = (int)(n % i);
-+ result.add(source.remove(x));
-+ n = n / i;
-+ }
-+ c--;
-+ return result;
-+ }
-+ };
-+ }
-+ };
-+ }
-+}
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/sun/security/tools/jarsigner/jvindex.sh Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,76 @@
-+#
-+# Copyright (c) 2013, 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
-+# under the terms of the GNU General Public License version 2 only, as
-+# published by the Free Software Foundation.
-+#
-+# This code is distributed in the hope that it will be useful, but WITHOUT
-+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+# version 2 for more details (a copy is included in the LICENSE file that
-+# accompanied this code).
-+#
-+# You should have received a copy of the GNU General Public License version
-+# 2 along with this work; if not, write to the Free Software Foundation,
-+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+#
-+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+# or visit www.oracle.com if you need additional information or have any
-+# questions.
-+#
-+
-+# @test
-+# @bug 8022761
-+# @summary regression: SecurityException is NOT thrown while trying to pack a wrongly signed Indexed Jar file
-+#
-+
-+if [ "${TESTJAVA}" = "" ] ; then
-+ JAVAC_CMD=`which javac`
-+ TESTJAVA=`dirname $JAVAC_CMD`/..
-+fi
-+
-+# set platform-dependent variables
-+OS=`uname -s`
-+case "$OS" in
-+ Windows_* )
-+ FS="\\"
-+ ;;
-+ * )
-+ FS="/"
-+ ;;
-+esac
-+
-+F=abcde
-+KS=jvindex.jks
-+JFILE=jvindex.jar
-+
-+KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit \
-+ -keystore $KS"
-+JAR=$TESTJAVA${FS}bin${FS}jar
-+JARSIGNER="$TESTJAVA${FS}bin${FS}jarsigner -keystore $KS -storepass changeit"
-+
-+rm $F $KS $JFILE 2> /dev/null
-+
-+echo 12345 > $F
-+$JAR cvf $JFILE $F
-+
-+ERR=""
-+
-+$KT -alias a -dname CN=a -genkey -validity 300 || ERR="$ERR 1"
-+
-+$JARSIGNER $JFILE a || ERR="$ERR 2"
-+$JAR i $JFILE
-+
-+# Make sure the $F line has "sm" (signed and in manifest)
-+$JARSIGNER -verify -verbose $JFILE | grep $F | grep sm || ERR="$ERR 3"
-+
-+if [ "$ERR" = "" ]; then
-+ exit 0
-+else
-+ echo "ERR is $ERR"
-+ exit 1
-+fi
-+
-+
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./jdk/test/tools/launcher/I18NArgTest.java Wed May 07 19:26:47 2014 -0700
-@@ -0,0 +1,111 @@
-+/*
-+ * Copyright (c) 2013, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8016110
-+ * @summary verify Japanese character in an argument are treated correctly
-+ * @compile -XDignore.symbol.file I18NArgTest.java
-+ * @run main I18NArgTest
-+ */
-+import java.io.IOException;
-+
-+public class I18NArgTest extends TestHelper {
-+ public static void main(String... args) throws IOException {
-+ if (!isWindows) {
-+ return;
-+ }
-+ if (!"MS932".equals(System.getProperty("sun.jnu.encoding"))) {
-+ System.err.println("MS932 encoding not set, test skipped");
-+ return;
-+ }
-+ if (args.length == 0) {
-+ execTest(0x30bd); // MS932 Katakana SO, 0x835C
-+ } else {
-+ testCharacters(args);
-+ }
-+ }
-+ static void execTest(int unicodeValue) {
-+ String hexValue = Integer.toHexString(unicodeValue);
-+ String unicodeStr = Character.toString((char)unicodeValue);
-+ execTest("\"" + unicodeStr + "\"", hexValue);
-+ execTest("\\" + unicodeStr + "\\", hexValue);
-+ execTest(" " + unicodeStr + " ", hexValue);
-+ execTest("'" + unicodeStr + "'", hexValue);
-+ execTest("\t" + unicodeStr + "\t", hexValue);
-+ execTest("*" + unicodeStr + "*", hexValue);
-+ execTest("?" + unicodeStr + "?", hexValue);
-+
-+ execTest("\"" + unicodeStr + unicodeStr + "\"", hexValue + hexValue);
-+ execTest("\\" + unicodeStr + unicodeStr + "\\", hexValue + hexValue);
-+ execTest(" " + unicodeStr + unicodeStr + " ", hexValue + hexValue);
-+ execTest("'" + unicodeStr + unicodeStr + "'", hexValue + hexValue);
-+ execTest("\t" + unicodeStr + unicodeStr + "\t", hexValue + hexValue);
-+ execTest("*" + unicodeStr + unicodeStr + "*", hexValue + hexValue);
-+ execTest("?" + unicodeStr + unicodeStr + "?", hexValue + hexValue);
-+
-+ execTest("\"" + unicodeStr + "a" + unicodeStr + "\"", hexValue + "61" + hexValue);
-+ execTest("\\" + unicodeStr + "a" + unicodeStr + "\\", hexValue + "61" + hexValue);
-+ execTest(" " + unicodeStr + "a" + unicodeStr + " ", hexValue + "61"+ hexValue);
-+ execTest("'" + unicodeStr + "a" + unicodeStr + "'", hexValue + "61"+ hexValue);
-+ execTest("\t" + unicodeStr + "a" + unicodeStr + "\t", hexValue + "61"+ hexValue);
-+ execTest("*" + unicodeStr + "a" + unicodeStr + "*", hexValue + "61"+ hexValue);
-+ execTest("?" + unicodeStr + "a" + unicodeStr + "?", hexValue + "61"+ hexValue);
-+
-+ execTest("\"" + unicodeStr + "\u00b1" + unicodeStr + "\"", hexValue + "b1" + hexValue);
-+ execTest("\\" + unicodeStr + "\u00b1" + unicodeStr + "\\", hexValue + "b1" + hexValue);
-+ execTest(" " + unicodeStr + "\u00b1" + unicodeStr + " ", hexValue + "b1"+ hexValue);
-+ execTest("'" + unicodeStr + "\u00b1" + unicodeStr + "'", hexValue + "b1"+ hexValue);
-+ execTest("\t" + unicodeStr + "\u00b1" + unicodeStr + "\t", hexValue + "b1"+ hexValue);
-+ execTest("*" + unicodeStr + "\u00b1" + unicodeStr + "*", hexValue + "b1"+ hexValue);
-+ execTest("?" + unicodeStr + "\u00b1" + unicodeStr + "?", hexValue + "b1"+ hexValue);
-+ }
-+ static void execTest(String unicodeStr, String hexValue) {
-+ TestResult tr = doExec(javaCmd,
-+ "-Dtest.src=" + TEST_SOURCES_DIR.getAbsolutePath(),
-+ "-Dtest.classes=" + TEST_CLASSES_DIR.getAbsolutePath(),
-+ "-cp", TEST_CLASSES_DIR.getAbsolutePath(),
-+ "I18NArgTest", unicodeStr, hexValue);
-+ System.out.println(tr.testOutput);
-+ if (!tr.isOK()) {
-+ System.err.println(tr);
-+ throw new RuntimeException("test fails");
-+ }
-+ }
-+ static void testCharacters(String... args) {
-+ String input = args[0];
-+ String expected = args[1];
-+ String hexValue = "";
-+ for (int i = 0; i < input.length(); i++) {
-+ hexValue = hexValue.concat(Integer.toHexString((int)input.charAt(i)));
-+ }
-+ System.out.println("input:" + input);
-+ System.out.println("expected:" + expected);
-+ System.out.println("obtained:" + hexValue);
-+ if (!hexValue.contains(expected)) {
-+ String message = "Error: output does not contain expected value" +
-+ "expected:" + expected + " obtained:" + hexValue;
-+ throw new RuntimeException(message);
-+ }
-+ }
-+}
---- ./langtools/.hgtags Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/.hgtags Wed May 07 19:27:09 2014 -0700
-@@ -359,6 +359,7 @@
- 765bea9bfcfc8c472df0a2daced5e576095f46ac jdk7u40-b42
- 988ece7b686564084770e99ca26746c45ffb933f jdk7u40-b43
- a67dbf96bf86989d0392cc5b66e5d4139cbceec7 jdk7u40-b60
-+849b17bc6e9a08fa41e0ef631e51366a09842e64 jdk7u60-b00
- b2e29b79e54e58349c1dbcf5449f67fc5d5a235a jdk7u40-b61
- 94ea3d062a3c28c64a837fa8f999c6b6956ff7c4 jdk7u40-b62
- 9bbfba4981e1db5016bbfbc23025763966021c26 jdk7u45-b01
-@@ -416,3 +417,26 @@
- 2bdd105e433da7fbf7f37ec2f75fc4bed4e54280 jdk7u55-b11
- a3cdca5d3773f67a49091f9131a4d073bc6b83d9 jdk7u55-b12
- 81bf1ca3a3a71c628b7d952ba47c6f200a223f27 jdk7u55-b13
-+96d55b4d88fea1d9f8227e70003210a6c10a1dba jdk7u55-b30
-+c1964a222000b4884b992fdbaf8f62a45fb893c9 jdk7u55-b14
-+4f6115ba266e5489b5e1968a28304f82be1f5641 jdk7u55-b31
-+849b17bc6e9a08fa41e0ef631e51366a09842e64 jdk7u60-b00
-+b19e375d9829daf207b1bdc7f908a3e1d548462c jdk7u60-b01
-+954e1616449af74f68aed57261cbeb62403377f1 jdk7u60-b02
-+4170784840d510b4e8ae7ae250b92279aaf5eb25 jdk7u60-b03
-+772aad4e9681828b8ee193b9ed971cbfe6c7f347 jdk7u60-b04
-+744287fccf3b2c4fba2abf105863f0a44c3bd4da jdk7u60-b05
-+8f6db72756f3e4c3cca8731d20e978fb741846d2 jdk7u60-b06
-+02f050bc5569fb058ace44ed705bbb0f9022a6fe jdk7u60-b07
-+be8e34e4920ebd1cfb89739d636e363c7881a548 jdk7u60-b08
-+3f8b585403e596b7eadc231484f5480361c52c4b jdk7u60-b09
-+3ee98cd07065dfa9a982e6692a3e875684a7e820 jdk7u60-b10
-+3cc64ba8cf85942929b15c5ef21360f96db3b99c jdk7u60-b11
-+b79b8b1dc88faa73229b2bce04e979ff5ec854f5 jdk7u60-b12
-+3dc3e59e9580dfdf95dac57c54fe1a4209401125 jdk7u60-b13
-+a8b9c1929e50a9f3ae9ae1a23c06fa73a57afce3 jdk7u60-b14
-+7568ebdada118da1d1a6addcf6316ffda21801fd jdk7u60-b15
-+057caf9e0774e7c530c5710127f70c8d5f46deab jdk7u60-b16
-+b7cc00c573c294b144317d44803758a291b3deda jdk7u60-b18
-+b7cc00c573c294b144317d44803758a291b3deda jdk7u60-b17
-+40aa95c8477aa0a3f090859570f5536afc9026b7 jdk7u60-b19
---- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java Wed May 07 19:27:09 2014 -0700
-@@ -181,12 +181,14 @@
- String label, boolean strong,
- String stylename, String title, String target) {
- StringBuffer retlink = new StringBuffer();
-+ StringBuilder lnk = new StringBuilder();
- retlink.append("<a href=\"");
-- retlink.append(link);
-+ lnk.append(link);
- if (where != null && where.length() != 0) {
-- retlink.append("#");
-- retlink.append(where);
-+ lnk.append("#");
-+ lnk.append(where);
- }
-+ retlink.append(HtmlTree.encodeURL(lnk.toString()));
- retlink.append("\"");
- if (title != null && title.length() != 0) {
- retlink.append(" title=\"" + title + "\"");
---- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2010, 2014, 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
-@@ -26,6 +26,7 @@
- package com.sun.tools.doclets.formats.html.markup;
-
- import java.util.*;
-+import java.nio.charset.*;
- import com.sun.tools.doclets.internal.toolkit.Content;
- import com.sun.tools.doclets.internal.toolkit.util.*;
-
-@@ -116,6 +117,46 @@
- }
-
- /**
-+ * A set of ASCII URI characters to be left unencoded.
-+ */
-+ public static final BitSet NONENCODING_CHARS = new BitSet(256);
-+
-+ static {
-+ // alphabetic characters
-+ for (int i = 'a'; i <= 'z'; i++) {
-+ NONENCODING_CHARS.set(i);
-+ }
-+ for (int i = 'A'; i <= 'Z'; i++) {
-+ NONENCODING_CHARS.set(i);
-+ }
-+ // numeric characters
-+ for (int i = '0'; i <= '9'; i++) {
-+ NONENCODING_CHARS.set(i);
-+ }
-+ // Reserved characters as per RFC 3986. These are set of delimiting characters.
-+ String noEnc = ":/?#[]@!$&'()*+,;=";
-+ // Unreserved characters as per RFC 3986 which should not be percent encoded.
-+ noEnc += "-._~";
-+ for (int i = 0; i < noEnc.length(); i++) {
-+ NONENCODING_CHARS.set(noEnc.charAt(i));
-+ }
-+ }
-+
-+ protected static String encodeURL(String url) {
-+ byte[] urlBytes = url.getBytes(Charset.forName("UTF-8"));
-+ StringBuilder sb = new StringBuilder();
-+ for (int i = 0; i < urlBytes.length; i++) {
-+ int c = urlBytes[i];
-+ if (NONENCODING_CHARS.get(c & 0xFF)) {
-+ sb.append((char) c);
-+ } else {
-+ sb.append(String.format("%%%02X", c & 0xFF));
-+ }
-+ }
-+ return sb.toString();
-+ }
-+
-+ /**
- * Generates an HTML anchor tag.
- *
- * @param ref reference url for the anchor tag
-@@ -124,7 +165,7 @@
- */
- public static HtmlTree A(String ref, Content body) {
- HtmlTree htmltree = new HtmlTree(HtmlTag.A, nullCheck(body));
-- htmltree.addAttr(HtmlAttr.HREF, nullCheck(ref));
-+ htmltree.addAttr(HtmlAttr.HREF, encodeURL(ref));
- return htmltree;
- }
-
---- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1997, 2014, 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
-@@ -362,6 +362,12 @@
- " if (targetPage.indexOf(\":\") != -1 || (targetPage != \"\" && !validURL(targetPage)))" + DocletConstants.NL +
- " targetPage = \"undefined\";" + DocletConstants.NL +
- " function validURL(url) {" + DocletConstants.NL +
-+ " try {" + DocletConstants.NL +
-+ " url = decodeURIComponent(url);" + DocletConstants.NL +
-+ " }" + DocletConstants.NL +
-+ " catch (error) {" + DocletConstants.NL +
-+ " return false;" + DocletConstants.NL +
-+ " }" + DocletConstants.NL +
- " var pos = url.indexOf(\".html\");" + DocletConstants.NL +
- " if (pos == -1 || pos != url.length - 5)" + DocletConstants.NL +
- " return false;" + DocletConstants.NL +
-@@ -373,7 +379,8 @@
- " if ('a' <= ch && ch <= 'z' ||" + DocletConstants.NL +
- " 'A' <= ch && ch <= 'Z' ||" + DocletConstants.NL +
- " ch == '$' ||" + DocletConstants.NL +
-- " ch == '_') {" + DocletConstants.NL +
-+ " ch == '_' ||" + DocletConstants.NL +
-+ " ch.charCodeAt(0) > 127) {" + DocletConstants.NL +
- " allowNumber = true;" + DocletConstants.NL +
- " allowSep = true;" + DocletConstants.NL +
- " } else if ('0' <= ch && ch <= '9'" + DocletConstants.NL +
---- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties Wed May 07 19:27:09 2014 -0700
-@@ -25,7 +25,7 @@
- doclet.Href_Enum_Title={0}\u5185\u306E\u5217\u6319\u578B
- doclet.Href_Type_Param_Title={0}\u5185\u306E\u578B\u30D1\u30E9\u30E1\u30FC\u30BF
- doclet.Href_Class_Or_Interface_Title={0}\u5185\u306E\u30AF\u30E9\u30B9\u307E\u305F\u306F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9
--doclet.Summary=\u6982\u8981:
-+doclet.Summary=\u30B5\u30DE\u30EA\u30FC:
- doclet.Detail=\u8A73\u7D30:
- doclet.navNested=\u30CD\u30B9\u30C8
- doclet.navAnnotationTypeOptionalMember=\u30AA\u30D7\u30B7\u30E7\u30F3
-@@ -68,7 +68,7 @@
- doclet.see.class_or_package_not_found=\u30BF\u30B0{0}: \u53C2\u7167\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {1}
- doclet.see.class_or_package_not_accessible=\u30BF\u30B0{0}: \u53C2\u7167\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093: {1}
- doclet.see.malformed_tag={0}\u30BF\u30B0: \u4E0D\u6B63\u306A{1}\u30BF\u30B0
--doclet.Inherited_API_Summary=\u7D99\u627F\u3055\u308C\u305FAPI\u306E\u6982\u8981
-+doclet.Inherited_API_Summary=\u7D99\u627F\u3055\u308C\u305FAPI\u306E\u30B5\u30DE\u30EA\u30FC
- doclet.Deprecated_API=\u975E\u63A8\u5968\u306EAPI
- doclet.Deprecated_Packages=\u975E\u63A8\u5968\u306E\u30D1\u30C3\u30B1\u30FC\u30B8
- doclet.Deprecated_Classes=\u975E\u63A8\u5968\u306E\u30AF\u30E9\u30B9
-@@ -135,18 +135,18 @@
- doclet.Help_title=API\u30D8\u30EB\u30D7
- doclet.Window_Help_title=API\u30D8\u30EB\u30D7
- doclet.Help_line_1=API\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u69CB\u6210
--doclet.Help_line_2=\u3053\u306EAPI(Application Programming Interface)\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306B\u306F\u3001\u6B21\u306B\u8AAC\u660E\u3059\u308B\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u30FB\u30D0\u30FC\u306B\u3042\u308B\u9805\u76EE\u306B\u5BFE\u5FDC\u3059\u308B\u30DA\u30FC\u30B8\u304C\u542B\u307E\u308C\u307E\u3059\u3002
--doclet.Help_line_3={0}\u30DA\u30FC\u30B8\u306FAPI\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u30D5\u30ED\u30F3\u30C8\u30FB\u30DA\u30FC\u30B8\u3067\u3001\u5404\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u6982\u8981\u3092\u542B\u3080\u5168\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u30EA\u30B9\u30C8\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002\u4E00\u9023\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u6982\u8981\u8AAC\u660E\u3082\u8868\u793A\u3055\u308C\u307E\u3059\u3002
--doclet.Help_line_4=\u5404\u30D1\u30C3\u30B1\u30FC\u30B8\u306B\u306F\u3001\u305D\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u30EA\u30B9\u30C8\u3068\u3001\u305D\u308C\u305E\u308C\u306E\u6982\u8981\u3092\u542B\u3080\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u306E\u30DA\u30FC\u30B8\u306F6\u3064\u306E\u30AB\u30C6\u30B4\u30EA\u3067\u69CB\u6210\u3055\u308C\u307E\u3059\u3002
-+doclet.Help_line_2=\u3053\u306EAPI (Application Programming Interface)\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306B\u306F\u3001\u6B21\u306B\u8AAC\u660E\u3059\u308B\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u30FB\u30D0\u30FC\u306B\u3042\u308B\u9805\u76EE\u306B\u5BFE\u5FDC\u3059\u308B\u30DA\u30FC\u30B8\u304C\u542B\u307E\u308C\u307E\u3059\u3002
-+doclet.Help_line_3={0}\u30DA\u30FC\u30B8\u306FAPI\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306E\u30D5\u30ED\u30F3\u30C8\u30FB\u30DA\u30FC\u30B8\u3067\u3001\u5404\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u30B5\u30DE\u30EA\u30FC\u3092\u542B\u3080\u5168\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u30EA\u30B9\u30C8\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002\u4E00\u9023\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u5168\u4F53\u7684\u306A\u8AAC\u660E\u3082\u8868\u793A\u3055\u308C\u307E\u3059\u3002
-+doclet.Help_line_4=\u5404\u30D1\u30C3\u30B1\u30FC\u30B8\u306B\u306F\u3001\u305D\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u30EA\u30B9\u30C8\u3068\u3001\u305D\u308C\u305E\u308C\u306E\u30B5\u30DE\u30EA\u30FC\u3092\u542B\u3080\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u306E\u30DA\u30FC\u30B8\u306F6\u3064\u306E\u30AB\u30C6\u30B4\u30EA\u3067\u69CB\u6210\u3055\u308C\u307E\u3059\u3002
- doclet.Help_line_5=\u30AF\u30E9\u30B9\u307E\u305F\u306F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9
--doclet.Help_line_6=\u5404\u30AF\u30E9\u30B9\u3001\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u3001\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306B\u306F\u500B\u5225\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u3059\u3002\u5404\u30DA\u30FC\u30B8\u306B\u306F\u6B21\u306E\u3088\u3046\u306B\u3001\u30AF\u30E9\u30B9\u307E\u305F\u306F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u8AAC\u660E\u3068\u3001\u6982\u8981\u8868\u304A\u3088\u3073\u30E1\u30F3\u30D0\u30FC\u306E\u8A73\u7D30\u8AAC\u660E\u304C\u542B\u307E\u308C\u307E\u3059\u3002
-+doclet.Help_line_6=\u5404\u30AF\u30E9\u30B9\u3001\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u3001\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306B\u306F\u500B\u5225\u306E\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u3059\u3002\u5404\u30DA\u30FC\u30B8\u306B\u306F\u6B21\u306E\u3088\u3046\u306B\u3001\u30AF\u30E9\u30B9\u307E\u305F\u306F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u8AAC\u660E\u3068\u3001\u30B5\u30DE\u30EA\u30FC\u8868\u304A\u3088\u3073\u30E1\u30F3\u30D0\u30FC\u306E\u8A73\u7D30\u8AAC\u660E\u304C\u542B\u307E\u308C\u307E\u3059\u3002
- doclet.Help_line_7=\u30AF\u30E9\u30B9\u968E\u5C64\u8868\u793A
- doclet.Help_line_8=\u76F4\u7CFB\u306E\u30B5\u30D6\u30AF\u30E9\u30B9
- doclet.Help_line_9=\u65E2\u77E5\u306E\u30B5\u30D6\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u30EA\u30B9\u30C8
- doclet.Help_line_10=\u65E2\u77E5\u306E\u5B9F\u88C5\u30AF\u30E9\u30B9\u306E\u30EA\u30B9\u30C8
- doclet.Help_line_11=\u30AF\u30E9\u30B9\u307E\u305F\u306F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u5BA3\u8A00
- doclet.Help_line_12=\u30AF\u30E9\u30B9\u307E\u305F\u306F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u8AAC\u660E
--doclet.Help_line_13=\u5404\u6982\u8981\u30A8\u30F3\u30C8\u30EA\u306B\u306F\u3001\u305D\u306E\u9805\u76EE\u306E\u8A73\u7D30\u306A\u8AAC\u660E\u306E\u4E2D\u304B\u30891\u884C\u76EE\u306E\u6587\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002\u8A73\u7D30\u306A\u8AAC\u660E\u306F\u30BD\u30FC\u30B9\u30FB\u30B3\u30FC\u30C9\u306B\u73FE\u308C\u308B\u9806\u306B\u4E26\u3079\u3089\u308C\u307E\u3059\u304C\u3001\u6982\u8981\u30A8\u30F3\u30C8\u30EA\u306F\u30A2\u30EB\u30D5\u30A1\u30D9\u30C3\u30C8\u9806\u306B\u4E26\u3079\u3089\u308C\u307E\u3059\u3002\u3053\u308C\u306B\u3088\u3063\u3066\u3001\u30D7\u30ED\u30B0\u30E9\u30DE\u304C\u8A2D\u5B9A\u3057\u305F\u8AD6\u7406\u7684\u306A\u30B0\u30EB\u30FC\u30D7\u5206\u3051\u304C\u4FDD\u6301\u3055\u308C\u307E\u3059\u3002
-+doclet.Help_line_13=\u5404\u30B5\u30DE\u30EA\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306B\u306F\u3001\u305D\u306E\u9805\u76EE\u306E\u8A73\u7D30\u8AAC\u660E\u306E\u4E2D\u304B\u30891\u884C\u76EE\u306E\u6587\u304C\u8868\u793A\u3055\u308C\u307E\u3059\u3002\u30B5\u30DE\u30EA\u30FC\u30FB\u30A8\u30F3\u30C8\u30EA\u306F\u30A2\u30EB\u30D5\u30A1\u30D9\u30C3\u30C8\u9806\u3067\u3059\u304C\u3001\u8A73\u7D30\u8AAC\u660E\u306F\u30BD\u30FC\u30B9\u30FB\u30B3\u30FC\u30C9\u306B\u73FE\u308C\u308B\u9806\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u3053\u308C\u306B\u3088\u3063\u3066\u3001\u30D7\u30ED\u30B0\u30E9\u30DE\u304C\u8A2D\u5B9A\u3057\u305F\u8AD6\u7406\u7684\u306A\u30B0\u30EB\u30FC\u30D7\u5206\u3051\u304C\u4FDD\u6301\u3055\u308C\u307E\u3059\u3002
- doclet.Help_line_14=\u4F7F\u7528
- doclet.Help_line_15=\u5404\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u5316\u3055\u308C\u305F\u30D1\u30C3\u30B1\u30FC\u30B8\u3001\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306B\u306F\u305D\u308C\u305E\u308C\u300C\u4F7F\u7528\u300D\u30DA\u30FC\u30B8\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u306E\u30DA\u30FC\u30B8\u306B\u306F\u3001\u3069\u306E\u3088\u3046\u306A\u30D1\u30C3\u30B1\u30FC\u30B8\u3001\u30AF\u30E9\u30B9\u3001\u30E1\u30BD\u30C3\u30C9\u3001\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u304A\u3088\u3073\u30D5\u30A3\u30FC\u30EB\u30C9\u304C\u3001\u7279\u5B9A\u306E\u30AF\u30E9\u30B9\u307E\u305F\u306F\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u4E00\u90E8\u3092\u4F7F\u7528\u3057\u3066\u3044\u308B\u304B\u304C\u8A18\u8FF0\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u305F\u3068\u3048\u3070\u3001\u30AF\u30E9\u30B9A\u307E\u305F\u306F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9A\u306E\u5834\u5408\u3001\u305D\u306E\u300C\u4F7F\u7528\u300D\u30DA\u30FC\u30B8\u306B\u306F\u3001A\u306E\u30B5\u30D6\u30AF\u30E9\u30B9\u3001A\u3068\u3057\u3066\u5BA3\u8A00\u3055\u308C\u308B\u30D5\u30A3\u30FC\u30EB\u30C9\u3001A\u3092\u8FD4\u3059\u30E1\u30BD\u30C3\u30C9\u3068\u3001\u578BA\u3092\u6301\u3064\u30E1\u30BD\u30C3\u30C9\u304A\u3088\u3073\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u304C\u542B\u307E\u308C\u307E\u3059\u3002\u3053\u306E\u30DA\u30FC\u30B8\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u306B\u306F\u3001\u307E\u305A\u305D\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u3001\u30AF\u30E9\u30B9\u307E\u305F\u306F\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306B\u79FB\u52D5\u3057\u3001\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3\u30FB\u30D0\u30FC\u306E\u300C\u4F7F\u7528\u300D\u30EA\u30F3\u30AF\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002
- doclet.Help_line_16=\u968E\u5C64\u30C4\u30EA\u30FC(\u30AF\u30E9\u30B9\u968E\u5C64)
---- ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties Wed May 07 19:27:09 2014 -0700
-@@ -182,25 +182,32 @@
- doclet.0_and_1={0} and {1}
-
- #Documentation for Enums
--doclet.enum_values_doc=\n\
-+doclet.enum_values_doc.main=\n\
- Returns an array containing the constants of this enum type, in\n\
- the order they are declared. This method may be used to iterate\n\
- over the constants as follows:\n\
- <pre>\n\
- for ({0} c : {0}.values())\n\
- &nbsp; System.out.println(c);\n\
-- </pre>\n\
-- @return an array containing the constants of this enum type, in\n\
-- the order they are declared
-+ </pre>
-
--doclet.enum_valueof_doc=\n\
-+doclet.enum_values_doc.return=\n\
-+ an array containing the constants of this enum type, in the order they are declared
-+
-+doclet.enum_valueof_doc.main=\n\
- Returns the enum constant of this type with the specified name.\n\
- The string must match <i>exactly</i> an identifier used to declare an\n\
- enum constant in this type. (Extraneous whitespace characters are \n\
-- not permitted.)\n\
-- \n\
-- @param name the name of the enum constant to be returned.\n\
-- @return the enum constant with the specified name\n\
-- @throws IllegalArgumentException if this enum type has no constant\n\
-- with the specified name\n\
-- @throws NullPointerException if the argument is null
-+ not permitted.)
-+
-+doclet.enum_valueof_doc.param_name=\
-+ the name of the enum constant to be returned.
-+
-+doclet.enum_valueof_doc.return=\
-+ the enum constant with the specified name
-+
-+doclet.enum_valueof_doc.throws_ila=\
-+ if this enum type has no constant with the specified name
-+
-+doclet.enum_valueof_doc.throws_npe=\
-+ if the argument is null
---- ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties Wed May 07 19:27:09 2014 -0700
-@@ -66,22 +66,22 @@
- doclet.malformed_html_link_tag=<a> \u30BF\u30B0\u306E\u5F62\u5F0F\u304C\u4E0D\u6B63:\n"{0}"
- doclet.tag_misuse={0}\u30BF\u30B0\u306F{1}\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u5185\u3067\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u4F7F\u7528\u3067\u304D\u308B\u306E\u306F\u6B21\u306E\u30BF\u30A4\u30D7\u306E\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u5185\u306E\u307F\u3067\u3059: {2}\u3002
- doclet.javafx_tag_misuse=\u30BF\u30B0@propertyGetter\u3001@propertySetter\u304A\u3088\u3073@propertyDescription\u306F\u3001JavaFX\u306E\u30D7\u30ED\u30D1\u30C6\u30A3getter\u3068setter\u306E\u307F\u3067\u4F7F\u7528\u3067\u304D\u307E\u3059\u3002
--doclet.Package_Summary=\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u6982\u8981
--doclet.Interface_Summary=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u6982\u8981
--doclet.Annotation_Types_Summary=\u6CE8\u91C8\u578B\u306E\u6982\u8981
--doclet.Enum_Summary=\u5217\u6319\u578B\u306E\u6982\u8981
--doclet.Exception_Summary=\u4F8B\u5916\u306E\u6982\u8981
--doclet.Error_Summary=\u30A8\u30E9\u30FC\u306E\u6982\u8981
--doclet.Class_Summary=\u30AF\u30E9\u30B9\u306E\u6982\u8981
--doclet.Nested_Class_Summary=\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30AF\u30E9\u30B9\u306E\u6982\u8981
--doclet.Annotation_Type_Optional_Member_Summary=\u4EFB\u610F\u8981\u7D20\u306E\u6982\u8981
--doclet.Annotation_Type_Required_Member_Summary=\u5FC5\u9808\u8981\u7D20\u306E\u6982\u8981
--doclet.Field_Summary=\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u6982\u8981
--doclet.Property_Summary=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u6982\u8981
--doclet.Enum_Constant_Summary=\u5217\u6319\u578B\u5B9A\u6570\u306E\u6982\u8981
--doclet.Constructor_Summary=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u6982\u8981
--doclet.Method_Summary=\u30E1\u30BD\u30C3\u30C9\u306E\u6982\u8981
--doclet.Factory_Method_Summary=static\u30D5\u30A1\u30AF\u30C8\u30EA\u30FB\u30E1\u30BD\u30C3\u30C9\u306E\u6982\u8981
-+doclet.Package_Summary=\u30D1\u30C3\u30B1\u30FC\u30B8\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Interface_Summary=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Annotation_Types_Summary=\u6CE8\u91C8\u578B\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Enum_Summary=\u5217\u6319\u578B\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Exception_Summary=\u4F8B\u5916\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Error_Summary=\u30A8\u30E9\u30FC\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Class_Summary=\u30AF\u30E9\u30B9\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Nested_Class_Summary=\u30CD\u30B9\u30C8\u3055\u308C\u305F\u30AF\u30E9\u30B9\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Annotation_Type_Optional_Member_Summary=\u4EFB\u610F\u8981\u7D20\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Annotation_Type_Required_Member_Summary=\u5FC5\u9808\u8981\u7D20\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Field_Summary=\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Property_Summary=\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Enum_Constant_Summary=\u5217\u6319\u578B\u5B9A\u6570\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Constructor_Summary=\u30B3\u30F3\u30B9\u30C8\u30E9\u30AF\u30BF\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Method_Summary=\u30E1\u30BD\u30C3\u30C9\u306E\u30B5\u30DE\u30EA\u30FC
-+doclet.Factory_Method_Summary=static\u30D5\u30A1\u30AF\u30C8\u30EA\u30FB\u30E1\u30BD\u30C3\u30C9\u306E\u30B5\u30DE\u30EA\u30FC
- doclet.Interfaces=\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9
- doclet.Enums=\u5217\u6319\u578B
- doclet.AnnotationTypes=\u6CE8\u91C8\u578B
-@@ -180,6 +180,16 @@
- doclet.0_and_1={0}\u3068{1}
-
- #Documentation for Enums
--doclet.enum_values_doc=\n\u3053\u306E\u5217\u6319\u578B\u306E\u5B9A\u6570\u3092\u542B\u3080\u914D\u5217\u3092\u5BA3\u8A00\u3055\u308C\u3066\u3044\u308B\u9806\u5E8F\u3067\u8FD4\u3057\u307E\u3059\u3002\n\u3053\u306E\u30E1\u30BD\u30C3\u30C9\u306F\u6B21\u306E\u3088\u3046\u306B\u3057\u3066\u5B9A\u6570\u3092\u53CD\u5FA9\u3059\u308B\u305F\u3081\u306B\n\u4F7F\u7528\u3067\u304D\u307E\u3059:\n<pre>\nfor({0} c: {0}.values())\n&nbsp; System.out.println(c);\n</pre>\n@return \u3053\u306E\u5217\u6319\u578B\u306E\u5B9A\u6570\u3092\u5BA3\u8A00\u3055\u308C\u3066\u3044\u308B\u9806\u5E8F\u3067\n\u542B\u3080\u914D\u5217
-+doclet.enum_values_doc.main=\n\u3053\u306E\u5217\u6319\u578B\u306E\u5B9A\u6570\u3092\u542B\u3080\u914D\u5217\u3092\u5BA3\u8A00\u3055\u308C\u3066\u3044\u308B\u9806\u5E8F\u3067\u8FD4\u3057\u307E\u3059\u3002\n\u3053\u306E\u30E1\u30BD\u30C3\u30C9\u306F\u6B21\u306E\u3088\u3046\u306B\u3057\u3066\u5B9A\u6570\u3092\u53CD\u5FA9\u3059\u308B\u305F\u3081\u306B\n\u4F7F\u7528\u3067\u304D\u307E\u3059:\n<pre>\nfor({0} c: {0}.values())\n&nbsp; System.out.println(c);\n</pre>\n
-
--doclet.enum_valueof_doc=\n\u6307\u5B9A\u3057\u305F\u540D\u524D\u3092\u6301\u3064\u3053\u306E\u578B\u306E\u5217\u6319\u578B\u5B9A\u6570\u3092\u8FD4\u3057\u307E\u3059\u3002\n\u6587\u5B57\u5217\u306F\u3001\u3053\u306E\u578B\u306E\u5217\u6319\u578B\u5B9A\u6570\u3092\u5BA3\u8A00\u3059\u308B\u306E\u306B\u4F7F\u7528\u3057\u305F\u8B58\u5225\u5B50\u3068<i>\u6B63\u78BA\u306B</i>\n\u4E00\u81F4\u3057\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n(\u4F59\u5206\u306A\u7A7A\u767D\u6587\u5B57\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002)\n\n@param name \u8FD4\u3055\u308C\u308B\u5217\u6319\u578B\u5B9A\u6570\u306E\u540D\u524D\n@return \u6307\u5B9A\u3055\u308C\u305F\u540D\u524D\u3092\u6301\u3064\u5217\u6319\u578B\u5B9A\u6570\n@throws IllegalArgumentException \u6307\u5B9A\u3055\u308C\u305F\u540D\u524D\u3092\u6301\u3064\u5B9A\u6570\u3092\n\u3053\u306E\u5217\u6319\u578B\u304C\u6301\u3063\u3066\u3044\u306A\u3044\u5834\u5408\n@throws NullPointerException \u5F15\u6570\u304Cnull\u306E\u5834\u5408
-+doclet.enum_values_doc.return=\n\u3053\u306E\u5217\u6319\u578B\u306E\u5B9A\u6570\u3092\u542B\u3080\u3001\u5BA3\u8A00\u3055\u308C\u3066\u3044\u308B\u9806\u5E8F\u3067\u306E\u914D\u5217
-+
-+doclet.enum_valueof_doc.main=\n\u6307\u5B9A\u3057\u305F\u540D\u524D\u3092\u6301\u3064\u3053\u306E\u578B\u306E\u5217\u6319\u578B\u5B9A\u6570\u3092\u8FD4\u3057\u307E\u3059\u3002\n\u6587\u5B57\u5217\u306F\u3001\u3053\u306E\u578B\u306E\u5217\u6319\u578B\u5B9A\u6570\u3092\u5BA3\u8A00\u3059\u308B\u306E\u306B\u4F7F\u7528\u3057\u305F\u8B58\u5225\u5B50\u3068<i>\u6B63\u78BA\u306B</i>\n\u4E00\u81F4\u3057\u3066\u3044\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n(\u4F59\u5206\u306A\u7A7A\u767D\u6587\u5B57\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002)\n
-+
-+doclet.enum_valueof_doc.param_name=\u8FD4\u3055\u308C\u308B\u5217\u6319\u578B\u5B9A\u6570\u306E\u540D\u524D\u3002
-+
-+doclet.enum_valueof_doc.return=\u6307\u5B9A\u3057\u305F\u540D\u524D\u306E\u5217\u6319\u578B\u5B9A\u6570
-+
-+doclet.enum_valueof_doc.throws_ila=\u3053\u306E\u5217\u6319\u578B\u306B\u3001\u6307\u5B9A\u3057\u305F\u540D\u524D\u306E\u5B9A\u6570\u304C\u306A\u3044\u5834\u5408
-+
-+doclet.enum_valueof_doc.throws_npe=\u5F15\u6570\u304Cnull\u306E\u5834\u5408
---- ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties Wed May 07 19:27:09 2014 -0700
-@@ -180,6 +180,16 @@
- doclet.0_and_1={0}\u548C{1}
-
- #Documentation for Enums
--doclet.enum_values_doc=\n\u6309\u7167\u58F0\u660E\u8BE5\u679A\u4E3E\u7C7B\u578B\u7684\u5E38\u91CF\u7684\u987A\u5E8F, \u8FD4\u56DE\n\u5305\u542B\u8FD9\u4E9B\u5E38\u91CF\u7684\u6570\u7EC4\u3002\u8BE5\u65B9\u6CD5\u53EF\u7528\u4E8E\u8FED\u4EE3\n\u5E38\u91CF, \u5982\u4E0B\u6240\u793A:\n<pre>\nfor ({0} c : {0}.values())\n&nbsp; System.out.println(c);\n</pre>\n@return \u6309\u7167\u58F0\u660E\u8BE5\u679A\u4E3E\u7C7B\u578B\u7684\u5E38\u91CF\u7684\u987A\u5E8F, \u8FD4\u56DE\n\u5305\u542B\u8FD9\u4E9B\u5E38\u91CF\u7684\u6570\u7EC4
-+doclet.enum_values_doc.main=\n\u6309\u7167\u58F0\u660E\u8BE5\u679A\u4E3E\u7C7B\u578B\u7684\u5E38\u91CF\u7684\u987A\u5E8F, \u8FD4\u56DE\n\u5305\u542B\u8FD9\u4E9B\u5E38\u91CF\u7684\u6570\u7EC4\u3002\u8BE5\u65B9\u6CD5\u53EF\u7528\u4E8E\u8FED\u4EE3\n\u5E38\u91CF, \u5982\u4E0B\u6240\u793A:\n<pre>\nfor ({0} c : {0}.values())\n&nbsp; System.out.println(c);\n</pre>
-
--doclet.enum_valueof_doc=\n\u8FD4\u56DE\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u8BE5\u7C7B\u578B\u7684\u679A\u4E3E\u5E38\u91CF\u3002\n\u5B57\u7B26\u4E32\u5FC5\u987B\u4E0E\u7528\u4E8E\u58F0\u660E\u8BE5\u7C7B\u578B\u7684\u679A\u4E3E\u5E38\u91CF\u7684\n\u6807\u8BC6\u7B26<i>\u5B8C\u5168</i>\u5339\u914D\u3002(\u4E0D\u5141\u8BB8\u6709\u591A\u4F59\n\u7684\u7A7A\u683C\u5B57\u7B26\u3002)\n\n@param name \u8981\u8FD4\u56DE\u7684\u679A\u4E3E\u5E38\u91CF\u7684\u540D\u79F0\u3002\n@return \u8FD4\u56DE\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u679A\u4E3E\u5E38\u91CF\n@throws IllegalArgumentException \u5982\u679C\u8BE5\u679A\u4E3E\u7C7B\u578B\u6CA1\u6709\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u5E38\u91CF, \n\u5219\u629B\u51FA IllegalArgumentException\n@throws NullPointerException \u5982\u679C\u53C2\u6570\u4E3A\u7A7A\u503C, \u5219\u629B\u51FA NullPointerException
-+doclet.enum_values_doc.return=\n\u6309\u7167\u58F0\u660E\u8BE5\u679A\u4E3E\u7C7B\u578B\u7684\u5E38\u91CF\u7684\u987A\u5E8F\u8FD4\u56DE\u7684\u5305\u542B\u8FD9\u4E9B\u5E38\u91CF\u7684\u6570\u7EC4
-+
-+doclet.enum_valueof_doc.main=\n\u8FD4\u56DE\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u8BE5\u7C7B\u578B\u7684\u679A\u4E3E\u5E38\u91CF\u3002\n\u5B57\u7B26\u4E32\u5FC5\u987B\u4E0E\u7528\u4E8E\u58F0\u660E\u8BE5\u7C7B\u578B\u7684\u679A\u4E3E\u5E38\u91CF\u7684\n\u6807\u8BC6\u7B26<i>\u5B8C\u5168</i>\u5339\u914D\u3002(\u4E0D\u5141\u8BB8\u6709\u591A\u4F59\n\u7684\u7A7A\u683C\u5B57\u7B26\u3002)
-+
-+doclet.enum_valueof_doc.param_name=\u8981\u8FD4\u56DE\u7684\u679A\u4E3E\u5E38\u91CF\u7684\u540D\u79F0\u3002
-+
-+doclet.enum_valueof_doc.return=\u8FD4\u56DE\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u679A\u4E3E\u5E38\u91CF
-+
-+doclet.enum_valueof_doc.throws_ila=\u5982\u679C\u8BE5\u679A\u4E3E\u7C7B\u578B\u6CA1\u6709\u5E26\u6709\u6307\u5B9A\u540D\u79F0\u7684\u5E38\u91CF
-+
-+doclet.enum_valueof_doc.throws_npe=\u5982\u679C\u53C2\u6570\u4E3A\u7A7A\u503C
---- ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Wed May 07 19:27:09 2014 -0700
-@@ -852,16 +852,28 @@
- for (int j = 0; j < methods.length; j++) {
- MethodDoc currentMethod = methods[j];
- if (currentMethod.name().equals("values") &&
-- currentMethod.parameters().length == 0) {
-- currentMethod.setRawCommentText(
-- configuration.getText("doclet.enum_values_doc", classDoc.name()));
-+ currentMethod.parameters().length == 0) {
-+ StringBuilder sb = new StringBuilder();
-+ sb.append(configuration.getText("doclet.enum_values_doc.main", classDoc.name()));
-+ sb.append("\n@return ");
-+ sb.append(configuration.getText("doclet.enum_values_doc.return"));
-+ currentMethod.setRawCommentText(sb.toString());
- } else if (currentMethod.name().equals("valueOf") &&
-- currentMethod.parameters().length == 1) {
-+ currentMethod.parameters().length == 1) {
- Type paramType = currentMethod.parameters()[0].type();
- if (paramType != null &&
-- paramType.qualifiedTypeName().equals(String.class.getName())) {
-- currentMethod.setRawCommentText(
-- configuration.getText("doclet.enum_valueof_doc"));
-+ paramType.qualifiedTypeName().equals(String.class.getName())) {
-+ StringBuilder sb = new StringBuilder();
-+ sb.append(configuration.getText("doclet.enum_valueof_doc.main", classDoc.name()));
-+ sb.append("\n@param name ");
-+ sb.append(configuration.getText("doclet.enum_valueof_doc.param_name"));
-+ sb.append("\n@return ");
-+ sb.append(configuration.getText("doclet.enum_valueof_doc.return"));
-+ sb.append("\n@throws IllegalArgumentException ");
-+ sb.append(configuration.getText("doclet.enum_valueof_doc.throws_ila"));
-+ sb.append("\n@throws NullPointerException ");
-+ sb.append(configuration.getText("doclet.enum_valueof_doc.throws_npe"));
-+ currentMethod.setRawCommentText(sb.toString());
- }
- }
- }
---- ./langtools/src/share/classes/com/sun/tools/javac/code/Type.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/javac/code/Type.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 1999, 2014, 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
-@@ -597,6 +597,10 @@
- };
- }
-
-+ public List<Type> getComponents() {
-+ return interfaces_field.prepend(supertype_field);
-+ }
-+
- /** The Java source which this type represents.
- */
- public String toString() {
---- ./langtools/src/share/classes/com/sun/tools/javac/code/Types.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2014, 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
-@@ -1012,23 +1012,10 @@
- }
- }
-
-- if (t.isCompound()) {
-- Warner oldWarner = warnStack.head;
-- warnStack.head = Warner.noWarnings;
-- if (!visit(supertype(t), s))
-- return false;
-- for (Type intf : interfaces(t)) {
-- if (!visit(intf, s))
-- return false;
-- }
-- if (warnStack.head.hasLint(LintCategory.UNCHECKED))
-- oldWarner.warn(LintCategory.UNCHECKED);
-- return true;
-- }
--
-- if (s.isCompound()) {
-- // call recursively to reuse the above code
-- return visitClassType((ClassType)s, t);
-+ if (t.isCompound() || s.isCompound()) {
-+ return !t.isCompound() ?
-+ visitIntersectionType((ClassType)s, t, true) :
-+ visitIntersectionType(t, s, false);
- }
-
- if (s.tag == CLASS || s.tag == ARRAY) {
-@@ -1106,6 +1093,18 @@
- return false;
- }
-
-+ boolean visitIntersectionType(ClassType ict, Type s, boolean reverse) {
-+ Warner warn = Warner.noWarnings;
-+ for (Type c : ict.getComponents()) {
-+ warn.clear();
-+ if (reverse ? !isCastable(s, c, warn) : !isCastable(c, s, warn))
-+ return false;
-+ }
-+ if (warn.hasLint(LintCategory.UNCHECKED))
-+ warnStack.head.warn(LintCategory.UNCHECKED);
-+ return true;
-+ }
-+
- @Override
- public Boolean visitArrayType(ArrayType t, Type s) {
- switch (s.tag) {
-@@ -3369,11 +3368,18 @@
- }
-
- private boolean giveWarning(Type from, Type to) {
-- Type subFrom = asSub(from, to.tsym);
-- return to.isParameterized() &&
-- (!(isUnbounded(to) ||
-- isSubtype(from, to) ||
-- ((subFrom != null) && containsType(to.allparams(), subFrom.allparams()))));
-+ List<Type> bounds = to.isCompound() ?
-+ ((ClassType)to).getComponents() : List.of(to);
-+ for (Type b : bounds) {
-+ Type subFrom = asSub(from, b.tsym);
-+ if (b.isParameterized() &&
-+ (!(isUnbounded(b) ||
-+ isSubtype(from, b) ||
-+ ((subFrom != null) && containsType(b.allparams(), subFrom.allparams()))))) {
-+ return true;
-+ }
-+ }
-+ return false;
- }
-
- private List<Type> superClosure(Type t, Type s) {
---- ./langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties Wed May 07 19:27:09 2014 -0700
-@@ -30,14 +30,14 @@
- javac.opt.g.lines.vars.source=\u3044\u304F\u3064\u304B\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\u306E\u307F\u3092\u751F\u6210\u3059\u308B
- javac.opt.nowarn=\u8B66\u544A\u3092\u767A\u751F\u3055\u305B\u306A\u3044
- javac.opt.verbose=\u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u52D5\u4F5C\u306B\u3064\u3044\u3066\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B
--javac.opt.deprecation=\u975E\u63A8\u5968\u306EAPI\u304C\u4F7F\u7528\u3055\u308C\u3066\u3044\u308B\u30BD\u30FC\u30B9\u306E\u4F4D\u7F6E\u3092\u51FA\u529B\u3059\u308B
-+javac.opt.deprecation=\u975E\u63A8\u5968\u306EAPI\u304C\u4F7F\u7528\u3055\u308C\u3066\u3044\u308B\u30BD\u30FC\u30B9\u306E\u5834\u6240\u3092\u51FA\u529B\u3059\u308B
- javac.opt.classpath=\u30E6\u30FC\u30B6\u30FC\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u304A\u3088\u3073\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u3092\u691C\u7D22\u3059\u308B\u4F4D\u7F6E\u3092\u6307\u5B9A\u3059\u308B
- javac.opt.sourcepath=\u5165\u529B\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u4F4D\u7F6E\u3092\u6307\u5B9A\u3059\u308B
--javac.opt.bootclasspath=\u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u4F4D\u7F6E\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
-+javac.opt.bootclasspath=\u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
- javac.opt.Xbootclasspath.p=\u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306B\u4ED8\u52A0\u3059\u308B
- javac.opt.Xbootclasspath.a=\u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D1\u30B9\u306B\u8FFD\u52A0\u3059\u308B
--javac.opt.endorseddirs=\u63A8\u5968\u898F\u683C\u30D1\u30B9\u306E\u4F4D\u7F6E\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
--javac.opt.extdirs=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F\u62E1\u5F35\u6A5F\u80FD\u306E\u4F4D\u7F6E\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
-+javac.opt.endorseddirs=\u63A8\u5968\u898F\u683C\u30D1\u30B9\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
-+javac.opt.extdirs=\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E08\u307F\u62E1\u5F35\u6A5F\u80FD\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
- javac.opt.processorpath=\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u3092\u691C\u7D22\u3059\u308B\u4F4D\u7F6E\u3092\u6307\u5B9A\u3059\u308B
- javac.opt.processor=\u5B9F\u884C\u3059\u308B\u6CE8\u91C8\u30D7\u30ED\u30BB\u30C3\u30B5\u306E\u540D\u524D\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u691C\u51FA\u51E6\u7406\u3092\u30D0\u30A4\u30D1\u30B9
- javac.opt.proc.none.only=\u6CE8\u91C8\u51E6\u7406\u3084\u30B3\u30F3\u30D1\u30A4\u30EB\u3092\u5B9F\u884C\u3059\u308B\u304B\u3069\u3046\u304B\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002
-@@ -115,7 +115,7 @@
-
- javac.msg.usage.nonstandard.footer=\u3053\u308C\u3089\u306F\u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3042\u308A\u4E88\u544A\u306A\u3057\u306B\u5909\u66F4\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002
-
--javac.msg.bug=\u30B3\u30F3\u30D1\u30A4\u30E9\u3067\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F({0})\u3002Bug Parade\u306B\u540C\u3058\u30D0\u30B0\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u306A\u3044\u3053\u3068\u3092\u3054\u78BA\u8A8D\u306E\u4E0A\u3001Java Developer Connection(http://java.sun.com/webapps/bugreport)\u3067\u30D0\u30B0\u306E\u767B\u9332\u3092\u304A\u9858\u3044\u3044\u305F\u3057\u307E\u3059\u3002\u30EC\u30DD\u30FC\u30C8\u306B\u306F\u3001\u305D\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3068\u4E0B\u8A18\u306E\u8A3A\u65AD\u5185\u5BB9\u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044\u3002\u3054\u5354\u529B\u3042\u308A\u304C\u3068\u3046\u3054\u3056\u3044\u307E\u3059\u3002
-+javac.msg.bug=\u30B3\u30F3\u30D1\u30A4\u30E9\u3067\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F({0})\u3002Bug Parade\u306B\u540C\u3058\u30D0\u30B0\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u306A\u3044\u3053\u3068\u3092\u3054\u78BA\u8A8D\u306E\u4E0A\u3001Java Developer Connection (http://java.sun.com/webapps/bugreport)\u3067\u30D0\u30B0\u306E\u767B\u9332\u3092\u304A\u9858\u3044\u3044\u305F\u3057\u307E\u3059\u3002\u30EC\u30DD\u30FC\u30C8\u306B\u306F\u3001\u305D\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3068\u4E0B\u8A18\u306E\u8A3A\u65AD\u5185\u5BB9\u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044\u3002\u3054\u5354\u529B\u3042\u308A\u304C\u3068\u3046\u3054\u3056\u3044\u307E\u3059\u3002
-
- javac.msg.io=\n\n\u5165\u51FA\u529B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\n\u8A73\u7D30\u306F\u6B21\u306E\u30B9\u30BF\u30C3\u30AF\u30FB\u30C8\u30EC\u30FC\u30B9\u3067\u8ABF\u67FB\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n
-
---- ./langtools/src/share/classes/com/sun/tools/javah/resources/l10n_ja.properties Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/src/share/classes/com/sun/tools/javah/resources/l10n_ja.properties Wed May 07 19:27:09 2014 -0700
-@@ -55,8 +55,8 @@
- main.opt.o=\ -o <file> \u51FA\u529B\u30D5\u30A1\u30A4\u30EB(-d\u304B-o\u306E\u3069\u3061\u3089\u304B\u4E00\u65B9\u3092\u4F7F\u7528\u3059\u308B)
- main.opt.d=\ -d <dir> \u51FA\u529B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA
- main.opt.v=\ -v -verbose \u8A73\u7D30\u306A\u51FA\u529B\u3092\u884C\u3046
--main.opt.h=\ -h --help -? \u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8868\u793A\u3059\u308B
--main.opt.version=\ -version \u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\u8868\u793A\u3059\u308B
-+main.opt.h=\ -h --help -? \u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B
-+main.opt.version=\ -version \u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u3092\u51FA\u529B\u3059\u308B
- main.opt.jni=\ -jni JNI\u5F62\u5F0F\u306E\u30D8\u30C3\u30C0\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u751F\u6210\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8)
- main.opt.force=\ -force \u5E38\u306B\u51FA\u529B\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304D\u8FBC\u3080
- main.opt.classpath=\ -classpath <path> \u30AF\u30E9\u30B9\u3092\u30ED\u30FC\u30C9\u3059\u308B\u30D1\u30B9
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./langtools/src/share/classes/com/sun/tools/javap/resources/javap_ja.properties Wed May 07 19:27:09 2014 -0700
-@@ -0,0 +1,63 @@
-+
-+err.prefix=\u30A8\u30E9\u30FC:
-+
-+err.bad.constant.pool={0}\u306E\u5B9A\u6570\u30D7\u30FC\u30EB\u306E\u8AAD\u53D6\u308A\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {1}
-+err.class.not.found=\u30AF\u30E9\u30B9\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {0}
-+err.crash=\u91CD\u5927\u306A\u5185\u90E8\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {0}\n\u6B21\u306E\u60C5\u5831\u3092\u542B\u3080\u30D0\u30B0\u30FB\u30EC\u30DD\u30FC\u30C8\u3092\u30D5\u30A1\u30A4\u30EB\u3057\u3066\u304F\u3060\u3055\u3044:\n{1}
-+err.end.of.file={0}\u306E\u8AAD\u53D6\u308A\u4E2D\u306B\u4E88\u671F\u3057\u306A\u3044\u30D5\u30A1\u30A4\u30EB\u306E\u7D42\u308F\u308A\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F
-+err.file.not.found=\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: {0}
-+err.h.not.supported=-h\u306F\u4F7F\u7528\u53EF\u80FD\u3067\u306A\u304F\u306A\u308A\u307E\u3057\u305F - 'javah'\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
-+err.incompatible.options=\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u7D44\u5408\u305B\u304C\u4E0D\u6B63\u3067\u3059: {0}
-+err.internal.error=\u5185\u90E8\u30A8\u30E9\u30FC: {0} {1} {2}
-+err.invalid.arg.for.option=\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u5F15\u6570\u304C\u7121\u52B9\u3067\u3059: {0}
-+err.ioerror={0}\u306E\u8AAD\u53D6\u308A\u4E2D\u306BIO\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F: {1}
-+err.missing.arg={0}\u306B\u5024\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093
-+err.no.classes.specified=\u30AF\u30E9\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093
-+err.not.standard.file.manager=\u6A19\u6E96\u30D5\u30A1\u30A4\u30EB\u30FB\u30DE\u30CD\u30FC\u30B8\u30E3\u3092\u4F7F\u7528\u3057\u3066\u3044\u308B\u5834\u5408\u306F\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u307F\u6307\u5B9A\u3067\u304D\u307E\u3059
-+err.unknown.option=\u4E0D\u660E\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: {0}
-+err.verify.not.supported=-verify\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093
-+err.no.SourceFile.attribute=SourceFile\u5C5E\u6027\u304C\u3042\u308A\u307E\u305B\u3093
-+err.source.file.not.found=\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
-+err.bad.innerclasses.attribute={0}\u306EInnerClasses\u5C5E\u6027\u304C\u4E0D\u6B63\u3067\u3059
-+warn.Xold.not.supported=-Xold\u306F\u4F7F\u7528\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3057\u305F
-+
-+main.usage.summary=\u4F7F\u7528\u65B9\u6CD5: {0} <options> <classes>\n\u4F7F\u7528\u53EF\u80FD\u306A\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u30EA\u30B9\u30C8\u306B\u3064\u3044\u3066\u306F\u3001-help\u3092\u4F7F\u7528\u3057\u307E\u3059
-+
-+warn.prefix=\u8B66\u544A:
-+warn.unexpected.class=\u30D0\u30A4\u30CA\u30EA\u30FB\u30D5\u30A1\u30A4\u30EB{0}\u306B{1}\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059
-+
-+note.prefix=\u6CE8:
-+
-+main.usage.summary=\u4F7F\u7528\u65B9\u6CD5: {0} <options> <classes>\n\u4F7F\u7528\u53EF\u80FD\u306A\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u30EA\u30B9\u30C8\u306B\u3064\u3044\u3066\u306F\u3001-help\u3092\u4F7F\u7528\u3057\u307E\u3059
-+
-+main.usage=\u4F7F\u7528\u65B9\u6CD5: {0} <options> <classes>\n\u4F7F\u7528\u53EF\u80FD\u306A\u30AA\u30D7\u30B7\u30E7\u30F3\u306B\u306F\u6B21\u306E\u3082\u306E\u304C\u3042\u308A\u307E\u3059:
-+
-+
-+main.opt.help=\ -help --help -? \u3053\u306E\u4F7F\u7528\u65B9\u6CD5\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B
-+
-+main.opt.version=\ -version \u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831
-+
-+main.opt.v=\ -v -verbose \u8FFD\u52A0\u60C5\u5831\u3092\u51FA\u529B\u3059\u308B
-+
-+main.opt.l=\ -l \u884C\u756A\u53F7\u3068\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u8868\u3092\u51FA\u529B\u3059\u308B
-+
-+main.opt.public=\ -public public\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30E1\u30F3\u30D0\u30FC\u306E\u307F\u3092\u8868\u793A\u3059\u308B
-+
-+main.opt.protected=\ -protected protected/public\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30E1\u30F3\u30D0\u30FC\u306E\u307F\u3092\u8868\u793A\u3059\u308B
-+
-+main.opt.package=\ -package package/protected/public\u30AF\u30E9\u30B9\u304A\u3088\u3073\n \u30E1\u30F3\u30D0\u30FC\u306E\u307F\u3092\u8868\u793A\u3059\u308B(\u30C7\u30D5\u30A9\u30EB\u30C8)
-+
-+main.opt.p=\ -p -private \u3059\u3079\u3066\u306E\u30AF\u30E9\u30B9\u3068\u30E1\u30F3\u30D0\u30FC\u3092\u8868\u793A\u3059\u308B
-+
-+main.opt.c=\ -c \u30B3\u30FC\u30C9\u3092\u9006\u30A2\u30BB\u30F3\u30D6\u30EB\u3059\u308B
-+
-+main.opt.s=\ -s \u5185\u90E8\u30BF\u30A4\u30D7\u7F72\u540D\u3092\u51FA\u529B\u3059\u308B
-+
-+main.opt.classpath=\ -classpath <path> \u30E6\u30FC\u30B6\u30FC\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3059\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B
-+
-+main.opt.bootclasspath=\ -bootclasspath <path> \u30D6\u30FC\u30C8\u30B9\u30C8\u30E9\u30C3\u30D7\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B
-+
-+main.opt.constants=\ -constants \u9759\u7684final\u5B9A\u6570\u3092\u8868\u793A\u3059\u308B
-+
-+
-+main.opt.sysinfo=\ -sysinfo \u51E6\u7406\u3057\u3066\u3044\u308B\u30AF\u30E9\u30B9\u306E\u30B7\u30B9\u30C6\u30E0\u60C5\u5831(\u30D1\u30B9\u3001\u30B5\u30A4\u30BA\u3001\u65E5\u4ED8\u3001MD5\u30CF\u30C3\u30B7\u30E5)\n \u3092\u8868\u793A\u3059\u308B
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./langtools/src/share/classes/com/sun/tools/javap/resources/javap_zh_CN.properties Wed May 07 19:27:09 2014 -0700
-@@ -0,0 +1,63 @@
-+
-+err.prefix=\u9519\u8BEF:
-+
-+err.bad.constant.pool=\u8BFB\u53D6{0}\u7684\u5E38\u91CF\u6C60\u65F6\u51FA\u9519: {1}
-+err.class.not.found=\u627E\u4E0D\u5230\u7C7B: {0}
-+err.crash=\u51FA\u73B0\u4E25\u91CD\u7684\u5185\u90E8\u9519\u8BEF: {0}\n\u8BF7\u5EFA\u7ACB Bug \u62A5\u544A, \u5E76\u5305\u62EC\u4EE5\u4E0B\u4FE1\u606F:\n{1}
-+err.end.of.file=\u8BFB\u53D6{0}\u65F6\u51FA\u73B0\u610F\u5916\u7684\u6587\u4EF6\u7ED3\u5C3E
-+err.file.not.found=\u627E\u4E0D\u5230\u6587\u4EF6: {0}
-+err.h.not.supported=-h \u4E0D\u518D\u53EF\u7528 - \u8BF7\u4F7F\u7528 'javah' \u7A0B\u5E8F
-+err.incompatible.options=\u9009\u9879\u7EC4\u5408\u9519\u8BEF: {0}
-+err.internal.error=\u5185\u90E8\u9519\u8BEF: {0} {1} {2}
-+err.invalid.arg.for.option=\u9009\u9879\u7684\u53C2\u6570\u65E0\u6548: {0}
-+err.ioerror=\u8BFB\u53D6{0}\u65F6\u51FA\u73B0 IO \u9519\u8BEF: {1}
-+err.missing.arg=\u6CA1\u6709\u4E3A{0}\u6307\u5B9A\u503C
-+err.no.classes.specified=\u672A\u6307\u5B9A\u7C7B
-+err.not.standard.file.manager=\u4F7F\u7528\u6807\u51C6\u6587\u4EF6\u7BA1\u7406\u5668\u65F6\u53EA\u80FD\u6307\u5B9A\u7C7B\u6587\u4EF6
-+err.unknown.option=\u672A\u77E5\u9009\u9879: {0}
-+err.verify.not.supported=\u4E0D\u652F\u6301 -verify
-+err.no.SourceFile.attribute=\u6CA1\u6709 SourceFile \u5C5E\u6027
-+err.source.file.not.found=\u627E\u4E0D\u5230\u6E90\u6587\u4EF6
-+err.bad.innerclasses.attribute={0}\u7684 InnerClasses \u5C5E\u6027\u9519\u8BEF
-+warn.Xold.not.supported=-Xold \u4E0D\u518D\u53EF\u7528
-+
-+main.usage.summary=\u7528\u6CD5: {0} <options> <classes>\n\u4F7F\u7528 -help \u5217\u51FA\u53EF\u80FD\u7684\u9009\u9879
-+
-+warn.prefix=\u8B66\u544A:
-+warn.unexpected.class=\u4E8C\u8FDB\u5236\u6587\u4EF6{0}\u5305\u542B{1}
-+
-+note.prefix=\u6CE8:
-+
-+main.usage.summary=\u7528\u6CD5: {0} <options> <classes>\n\u4F7F\u7528 -help \u5217\u51FA\u53EF\u80FD\u7684\u9009\u9879
-+
-+main.usage=\u7528\u6CD5: {0} <options> <classes>\n\u5176\u4E2D, \u53EF\u80FD\u7684\u9009\u9879\u5305\u62EC:
-+
-+
-+main.opt.help=\ -help --help -? \u8F93\u51FA\u6B64\u7528\u6CD5\u6D88\u606F
-+
-+main.opt.version=\ -version \u7248\u672C\u4FE1\u606F
-+
-+main.opt.v=\ -v -verbose \u8F93\u51FA\u9644\u52A0\u4FE1\u606F
-+
-+main.opt.l=\ -l \u8F93\u51FA\u884C\u53F7\u548C\u672C\u5730\u53D8\u91CF\u8868
-+
-+main.opt.public=\ -public \u4EC5\u663E\u793A\u516C\u5171\u7C7B\u548C\u6210\u5458
-+
-+main.opt.protected=\ -protected \u663E\u793A\u53D7\u4FDD\u62A4\u7684/\u516C\u5171\u7C7B\u548C\u6210\u5458
-+
-+main.opt.package=\ -package \u663E\u793A\u7A0B\u5E8F\u5305/\u53D7\u4FDD\u62A4\u7684/\u516C\u5171\u7C7B\n \u548C\u6210\u5458 (\u9ED8\u8BA4)
-+
-+main.opt.p=\ -p -private \u663E\u793A\u6240\u6709\u7C7B\u548C\u6210\u5458
-+
-+main.opt.c=\ -c \u5BF9\u4EE3\u7801\u8FDB\u884C\u53CD\u6C47\u7F16
-+
-+main.opt.s=\ -s \u8F93\u51FA\u5185\u90E8\u7C7B\u578B\u7B7E\u540D
-+
-+main.opt.classpath=\ -classpath <path> \u6307\u5B9A\u67E5\u627E\u7528\u6237\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E
-+
-+main.opt.bootclasspath=\ -bootclasspath <path> \u8986\u76D6\u5F15\u5BFC\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E
-+
-+main.opt.constants=\ -constants \u663E\u793A\u9759\u6001\u6700\u7EC8\u5E38\u91CF
-+
-+
-+main.opt.sysinfo=\ -sysinfo \u663E\u793A\u6B63\u5728\u5904\u7406\u7684\u7C7B\u7684\n \u7CFB\u7EDF\u4FE1\u606F (\u8DEF\u5F84, \u5927\u5C0F, \u65E5\u671F, MD5 \u6563\u5217)
---- ./langtools/test/com/sun/javadoc/testHref/TestHref.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/com/sun/javadoc/testHref/TestHref.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2014, 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
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 4663254
-+ * @bug 4663254 8016328
- * @summary Verify that spaces do not appear in hrefs and anchors.
- * @author jamieh
- * @library ../lib/
-@@ -46,11 +46,11 @@
- private static final String[][] TEST = {
- //External link.
- {BUG_ID + FS + "pkg" + FS + "C1.html",
-- "href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait(long, int)\""
-+ "href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)\""
- },
- //Member summary table link.
- {BUG_ID + FS + "pkg" + FS + "C1.html",
-- "href=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\""
-+ "href=\"../pkg/C1.html#method(int,%20int,%20java.util.ArrayList)\""
- },
- //Anchor test.
- {BUG_ID + FS + "pkg" + FS + "C1.html",
-@@ -66,11 +66,11 @@
- },
- //{@link} test.
- {BUG_ID + FS + "pkg" + FS + "C2.html",
-- "Link: <a href=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
-+ "Link: <a href=\"../pkg/C1.html#method(int,%20int,%20java.util.ArrayList)\">"
- },
- //@see test.
- {BUG_ID + FS + "pkg" + FS + "C2.html",
-- "See Also:</span></dt><dd><a href=\"../pkg/C1.html#method(int, int, java.util.ArrayList)\">"
-+ "See Also:</span></dt><dd><a href=\"../pkg/C1.html#method(int,%20int,%20java.util.ArrayList)\">"
- },
-
- //Header does not link to the page itself.
---- ./langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2014, 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
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 4665566 4855876 7025314 8012375 8015998
-+ * @bug 4665566 4855876 7025314 8012375 8015998 8016328
- * @summary Verify that the output has the right javascript.
- * @author jamieh
- * @library ../lib/
-@@ -56,6 +56,12 @@
- " if (targetPage.indexOf(\":\") != -1 || (targetPage != \"\" && !validURL(targetPage)))" + NL +
- " targetPage = \"undefined\";" + NL +
- " function validURL(url) {" + NL +
-+ " try {" + NL +
-+ " url = decodeURIComponent(url);" + NL +
-+ " }" + NL +
-+ " catch (error) {" + NL +
-+ " return false;" + NL +
-+ " }" + NL +
- " var pos = url.indexOf(\".html\");" + NL +
- " if (pos == -1 || pos != url.length - 5)" + NL +
- " return false;" + NL +
-@@ -67,7 +73,8 @@
- " if ('a' <= ch && ch <= 'z' ||" + NL +
- " 'A' <= ch && ch <= 'Z' ||" + NL +
- " ch == '$' ||" + NL +
-- " ch == '_') {" + NL +
-+ " ch == '_' ||" + NL +
-+ " ch.charCodeAt(0) > 127) {" + NL +
- " allowNumber = true;" + NL +
- " allowSep = true;" + NL +
- " } else if ('0' <= ch && ch <= '9'" + NL +
---- ./langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2004, 2014, 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
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 4732864 6280605 7064544
-+ * @bug 4732864 6280605 7064544 8016328
- * @summary Make sure that you can link from one member to another using
- * non-qualified name, furthermore, ensure the right one is linked.
- * @author jamieh
-@@ -49,9 +49,9 @@
- "Qualified Link: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
- " Unqualified Link1: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
- " Unqualified Link2: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
-- " Qualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><code>method(pkg.C.InnerC, pkg.C.InnerC2)</code></a>.<br/>\n" +
-- " Unqualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><code>method(C.InnerC, C.InnerC2)</code></a>.<br/>\n" +
-- " Unqualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC, pkg.C.InnerC2)\"><code>method(InnerC, InnerC2)</code></a>.<br/>"
-+ " Qualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC,%20pkg.C.InnerC2)\"><code>method(pkg.C.InnerC, pkg.C.InnerC2)</code></a>.<br/>\n" +
-+ " Unqualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC,%20pkg.C.InnerC2)\"><code>method(C.InnerC, C.InnerC2)</code></a>.<br/>\n" +
-+ " Unqualified Link: <a href=\"../pkg/C.html#method(pkg.C.InnerC,%20pkg.C.InnerC2)\"><code>method(InnerC, InnerC2)</code></a>.<br/>"
- },
- {BUG_ID + FS + "pkg" + FS + "C.InnerC.html",
- "Link to member in outer class: <a href=\"../pkg/C.html#MEMBER\"><code>C.MEMBER</code></a> <br/>\n" +
---- ./langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2003, 2014, 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
-@@ -23,7 +23,7 @@
-
- /*
- * @test
-- * @bug 4780441 4874845 4978816
-+ * @bug 4780441 4874845 4978816 8016328
- * @summary Make sure that when the -private flag is not used, members
- * inherited from package private class are documented in the child.
- *
-@@ -175,7 +175,7 @@
- // Should document that a method overrides method from private class.
- {BUG_ID + "-2" + FS + "pkg" + FS + "PublicChild.html",
- "<dt><strong>Overrides:</strong></dt>" + NL +
-- "<dd><code><a href=\"../pkg/PrivateParent.html#methodOverridenFromParent(char[], int, T, V, java.util.List)\">" +
-+ "<dd><code><a href=\"../pkg/PrivateParent.html#methodOverridenFromParent(char[],%20int,%20T,%20V,%20java.util.List)\">" +
- "methodOverridenFromParent</a></code>&nbsp;in class&nbsp;<code>" +
- "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
- "PrivateParent</a></code></dd>"},
---- ./langtools/test/tools/javac/6567415/T6567415.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/6567415/T6567415.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2010, 2014, 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
-@@ -137,7 +137,7 @@
- }
- };
- t.start();
-- t.join(1000*10);
-+ t.join(1000*60);
- System.out.println(t.getState());
- if (t.isAlive()) {
- throw new RuntimeException("Error: compilation is looping");
---- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ ./langtools/test/tools/javac/T8033294/RedundantWarningInIntersectionTest.java Wed May 07 19:27:09 2014 -0700
-@@ -0,0 +1,58 @@
-+/*
-+ * Copyright (c) 2014, 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
-+ * under the terms of the GNU General Public License version 2 only, as
-+ * published by the Free Software Foundation.
-+ *
-+ * This code is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ * version 2 for more details (a copy is included in the LICENSE file that
-+ * accompanied this code).
-+ *
-+ * You should have received a copy of the GNU General Public License version
-+ * 2 along with this work; if not, write to the Free Software Foundation,
-+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-+ *
-+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-+ * or visit www.oracle.com if you need additional information or have any
-+ * questions.
-+ */
-+
-+/*
-+ * @test
-+ * @bug 8033294
-+ * @summary javac, spurious warning for instanceof operator
-+ * @compile -Werror -Xlint:unchecked RedundantWarningInIntersectionTest.java
-+ */
-+
-+import java.math.BigDecimal;
-+
-+public class RedundantWarningInIntersectionTest {
-+
-+ class A<S extends A<S, T>, T> {
-+
-+ protected T p;
-+
-+ A(T p) {}
-+
-+ public S m(T parameter) {
-+ @SuppressWarnings("unchecked")
-+ S self = (S) new A<>(parameter);
-+ return self;
-+ }
-+ }
-+
-+ class B<K extends Number & Comparable<? super K>> extends A<B<K>, K> {
-+
-+ B(K parameter) {
-+ super(parameter);
-+ }
-+
-+ public boolean m2() {
-+ return (p instanceof BigDecimal);
-+ }
-+ }
-+}
---- ./langtools/test/tools/javac/api/6406133/T6406133.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6406133/T6406133.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2008, 2013, 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
-@@ -27,6 +27,8 @@
- * @summary Compiler API ignores locale settings
- * @author Maurizio Cimadamore
- * @library ../lib
-+ * @build ToolTester
-+ * @run main T6406133
- */
-
- import javax.tools.*;
---- ./langtools/test/tools/javac/api/6410643/T6410643.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6410643/T6410643.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,8 @@
- * @summary JSR 199: The method JavaCompilerTool.run fails to handle null arguments
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
-+ * @run main T6410643
- */
-
- import javax.tools.JavaFileObject;
---- ./langtools/test/tools/javac/api/6411310/T6411310.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6411310/T6411310.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary JSR 199: FileObject should support user-friendly names via getName()
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6411310.java
- * @run main T6411310
- */
---- ./langtools/test/tools/javac/api/6411333/T6411333.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6411333/T6411333.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary Ensure 6400208, 6400225, and 6400267 are tested
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6411333.java
- * @run main T6411333
- */
---- ./langtools/test/tools/javac/api/6412656/T6412656.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6412656/T6412656.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,8 @@
- * @summary JSR 199: pass annotation processor instances to compiler
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
-+ * @run main T6412656
- */
-
- import java.util.Set;
---- ./langtools/test/tools/javac/api/6415780/T6415780.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6415780/T6415780.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, 2007, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -28,6 +28,8 @@
- * @author igor.tseytin@...
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
-+ * @run main T6415780
- */
-
- import static javax.tools.StandardLocation.CLASS_PATH;
---- ./langtools/test/tools/javac/api/6418694/T6418694.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6418694/T6418694.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary JSR 199: JavaFileManager.hasLocation(Location)
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6418694.java
- * @run main T6418694
- */
---- ./langtools/test/tools/javac/api/6421111/T6421111.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6421111/T6421111.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary NullPointerException thrown when retrieving bounds for the type parameter
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile -Xlint:all T6421111.java
- * @run main T6421111
- */
---- ./langtools/test/tools/javac/api/6421756/T6421756.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6421756/T6421756.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary 6421756 JSR 199: In the method JavaCompilerTool.getTask 'options' can be supplied in the place of 'classes'
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6421756.java
- * @run main T6421756
- */
---- ./langtools/test/tools/javac/api/6422215/T6422215.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6422215/T6422215.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,8 @@
- * @summary JSR 199: What happens if a directory is missing
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
-+ * @run main T6422215
- */
-
- import java.io.File;
---- ./langtools/test/tools/javac/api/6422327/T6422327.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6422327/T6422327.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,8 @@
- * @summary JSR 199: JavaCompilerTool can compile and generate '.class' of non '.java' files
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
-+ * @run main T6422327
- */
-
- import java.io.File;
---- ./langtools/test/tools/javac/api/6423003/T6423003.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6423003/T6423003.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary JSR 199: confusing help message with compiler API
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6423003.java
- * @run main T6423003
- */
---- ./langtools/test/tools/javac/api/6431257/T6431257.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6431257/T6431257.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary JSR 199: Changes to JavaFileManager to support JSR 269 Filer API
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6431257.java package-info.java
- * @run main T6431257 foo.bar.baz foo/bar/baz
- */
---- ./langtools/test/tools/javac/api/6437349/T6437349.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6437349/T6437349.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -26,6 +26,7 @@
- * @bug 6437349
- * @summary JSR 199: JavaFileObject.isNameCompatible() will give true with some incompatible kinds
- * @library ../lib
-+ * @build ToolTester
- * @compile T6437349.java
- * @run main T6437349
- */
---- ./langtools/test/tools/javac/api/6437999/T6437999.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6437999/T6437999.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary Unit test for encoding argument to standard file manager
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6437999.java
- * @run main T6437999
- */
---- ./langtools/test/tools/javac/api/6440333/T6440333.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6440333/T6440333.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, 2009, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary SimpleJavaFileObject.toString() generates URI with some extra message
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6440333.java
- * @run main T6440333
- */
---- ./langtools/test/tools/javac/api/6440528/T6440528.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6440528/T6440528.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary javac deposits package-info.class in bogus directory
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6440528.java
- * @run main T6440528
- */
---- ./langtools/test/tools/javac/api/6468404/T6468404.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6468404/T6468404.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -28,6 +28,7 @@
- * @author jesse.glick@...
- * @author Peter von der Ah\u00e9
- * @library ../lib
-+ * @build ToolTester
- * @compile T6468404.java
- * @run main T6468404
- */
---- ./langtools/test/tools/javac/api/6731573/T6731573.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6731573/T6731573.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2008, 2013, 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
-@@ -27,6 +27,8 @@
- * @summary diagnostic output should optionally include source line
- * @author Maurizio Cimadamore
- * @library ../lib
-+ * @build ToolTester
-+ * @run main T6731573
- */
-
- import java.io.*;
---- ./langtools/test/tools/javac/api/6733837/T6733837.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/6733837/T6733837.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2008, 2013, 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
-@@ -27,6 +27,8 @@
- * @summary Compiler API ignores locale settings
- * @author Maurizio Cimadamore
- * @library ../lib
-+ * @build ToolTester
-+ * @run main T6733837
- */
-
- import java.io.StringWriter;
---- ./langtools/test/tools/javac/api/TestJavacTaskScanner.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/TestJavacTaskScanner.java Wed May 07 19:27:09 2014 -0700
-@@ -27,6 +27,7 @@
- * @summary Additional functionality test of task and JSR 269
- * @author Peter von der Ah\u00e9
- * @library ./lib
-+ * @build ToolTester
- * @run main TestJavacTaskScanner TestJavacTaskScanner.java
- */
-
-@@ -159,7 +160,7 @@
- StandardJavaFileManager fm = tool.getStandardFileManager(dl, null, encoding);
- try {
- fm.setLocation(SOURCE_PATH, Arrays.asList(test_src));
-- fm.setLocation(CLASS_PATH, Arrays.asList(test_classes, javac_classes));
-+ fm.setLocation(CLASS_PATH, join(test_class_path, Arrays.asList(javac_classes)));
- fm.setLocation(CLASS_OUTPUT, Arrays.asList(test_classes));
- } catch (IOException e) {
- throw new AssertionError(e);
---- ./langtools/test/tools/javac/api/guide/Test.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/guide/Test.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -27,6 +27,7 @@
- * @summary Various bugs fixed while writing Compiler API Guide
- * @author Peter von der Ah\u0081
- * @library ../lib
-+ * @build ToolTester
- * @compile Test.java
- * @run main Test
- */
---- ./langtools/test/tools/javac/api/lib/ToolTester.java Tue Mar 18 12:45:26 2014 -0700
-+++ ./langtools/test/tools/javac/api/lib/ToolTester.java Wed May 07 19:27:09 2014 -0700
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
-+ * Copyright (c) 2006, 2013, 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
-@@ -24,7 +24,7 @@
- import java.io.File;
- import java.io.IOException;
- import java.nio.charset.Charset;
--import java.util.Arrays;
-+import java.util.*;
- import javax.tools.*;
-
- import static javax.tools.StandardLocation.CLASS_PATH;
-@@ -34,6 +34,8 @@
- public class ToolTester {
- public final File test_src = new File(System.getProperty("test.src", "."));
- public final File test_classes = new File(System.getProperty("test.classes", "."));
-+ public final List<File> test_class_path = pathToFiles(System.getProperty("test.class.path"),
-+ Arrays.asList(test_classes));
- public final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
- public final StandardJavaFileManager fm = getFileManager(tool, null, null);
- public JavaCompiler.CompilationTask task = null;
-@@ -43,11 +45,36 @@
- StandardJavaFileManager fm = tool.getStandardFileManager(dl, null, encoding);
- try {
- fm.setLocation(SOURCE_PATH, Arrays.asList(test_src));
-- fm.setLocation(CLASS_PATH, Arrays.asList(test_classes));
-+ fm.setLocation(CLASS_PATH, test_class_path);
- fm.setLocation(CLASS_OUTPUT, Arrays.asList(test_classes));
- } catch (IOException e) {
- throw new AssertionError(e);
- }
- return fm;
- }
-+
-+ protected List<File> pathToFiles(String path, List<File> defaultPath) {
-+ List<File> files = new ArrayList<>();
-+ for (String f: path.split(File.pathSeparator)) {
-+ if (f.isEmpty())
-+ continue;
-+ File file = new File(f);
-+ if (file.exists())
-+ files.add(file);
-+ }
-+ if (files.isEmpty())
-+ files.addAll(defaultPath);
-+ return files;
-+ }
-+
-+ protected <T> List<T> join(List<T> a, List<T> b) {
-+ if (a.isEmpty())
-+ return b;
-+ if (b.isEmpty())
-+ return a;
-+ List<T> result = new ArrayList<>();
-+ result.addAll(a);
-+ result.addAll(b);
-+ return result;
-+ }
- }