diff options
-rw-r--r-- | java/openjdk7/Makefile | 5 | ||||
-rw-r--r-- | java/openjdk7/files/patch-jdk-make-sun-splashscreen-Makefile | 28 | ||||
-rw-r--r-- | java/openjdk7/files/patch-set | 56491 | ||||
-rw-r--r-- | java/openjdk7/files/patch-src-solaris-bin-java_md_solinux.c | 38 |
4 files changed, 54126 insertions, 2436 deletions
diff --git a/java/openjdk7/Makefile b/java/openjdk7/Makefile index 33cb93918536..fdff8396ac25 100644 --- a/java/openjdk7/Makefile +++ b/java/openjdk7/Makefile @@ -3,7 +3,6 @@ PORTNAME= openjdk PORTVERSION= ${JDK_MAJOR_VERSION}.${PORT_MINOR_VERSION}.${PORT_BUILD_NUMBER} -PORTREVISION= 5 PORTEPOCH= 1 CATEGORIES= java devel MASTER_SITES= http://download.java.net/openjdk/jdk${JDK_MAJOR_VERSION}u${JDK_MINOR_VERSION}/promoted/b${JDK_BUILD_NUMBER}/ \ @@ -37,8 +36,8 @@ DEBUG_DESC= Enable extra debugging info POLICY_DESC= Install the Unlimited Strength Policy Files TZUPDATE_DESC= Update the time zone data -PORT_MINOR_VERSION= 55 -PORT_BUILD_NUMBER= 13 +PORT_MINOR_VERSION= 60 +PORT_BUILD_NUMBER= 19 JDK_MAJOR_VERSION= 7 JDK_MINOR_VERSION= 40 JDK_BUILD_NUMBER= 43 diff --git a/java/openjdk7/files/patch-jdk-make-sun-splashscreen-Makefile b/java/openjdk7/files/patch-jdk-make-sun-splashscreen-Makefile deleted file mode 100644 index 5d8b1a4e63bf..000000000000 --- a/java/openjdk7/files/patch-jdk-make-sun-splashscreen-Makefile +++ /dev/null @@ -1,28 +0,0 @@ ---- jdk/make/sun/splashscreen/Makefile 2013-09-06 14:27:41.000000000 -0400 -+++ jdk/make/sun/splashscreen/Makefile 2014-04-30 00:10:52.000000000 -0400 -@@ -61,6 +61,12 @@ - - CFLAGS += -DSPLASHSCREEN - -+CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/splashscreen -+CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/image/jpeg -+ifneq ($(SYSTEM_ZLIB),true) -+ CPPFLAGS += -I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION) -+endif -+ - ifeq ($(PLATFORM), macosx) - CFLAGS += -DWITH_MACOSX - -@@ -121,11 +127,7 @@ - CPPFLAGS += $(call NativeSrcDirList,-I,native/$(PKGDIR)/splashscreen) - CPPFLAGS += $(call NativeSrcDirList,-I,/native/sun/osxapp) - endif --CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/splashscreen --CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/image/jpeg --ifneq ($(SYSTEM_ZLIB),true) -- CPPFLAGS += -I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION) --else -+ifeq ($(SYSTEM_ZLIB),true) - OTHER_CFLAGS += $(ZLIB_CFLAGS) - OTHER_LDLIBS += $(ZLIB_LIBS) - endif diff --git a/java/openjdk7/files/patch-set b/java/openjdk7/files/patch-set index 068d8d47f2cc..94f5403ab834 100644 --- a/java/openjdk7/files/patch-set +++ b/java/openjdk7/files/patch-set @@ -1,5 +1,5 @@ ---- .hgtags 2013-09-06 11:20:33.000000000 -0700 -+++ .hgtags 2014-04-20 12:39:52.000000000 -0700 +--- ./.hgtags 2013-09-06 11:20:33.000000000 -0700 ++++ ./.hgtags 2014-06-06 19:56:10.000000000 -0700 @@ -123,6 +123,7 @@ 2d38c2a79c144c30cd04d143d83ee7ec6af40771 jdk7-b146 3ac30b3852876ccad6bd61697b5f9efa91ca7bc6 jdk7u1-b01 @@ -40,10 +40,11 @@ da376fd5e4d68f8a45003a6e175267dc840711cc jdk7u40-b32 3fdfe7f1b06354e11e8af51b7c653c8a0adb3987 jdk7u40-b33 a1ae13479e8767329fa20774b5cea5976aaeb37b jdk7u40-b34 -@@ -341,3 +358,59 @@ +@@ -341,3 +358,83 @@ 3af81bfe320c12758234233da6fa27c3c0ffcdc4 jdk7u40-b42 1d53bd8fd2a62bcf336727ebec377ef7498dd4a6 jdk7u40-b43 dc1e099cd62d250b4a997ce694b47fe2f50d2905 jdk7u40-b60 ++11147a12bd8c6b02f98016a8d1151e56f42a43b6 jdk7u60-b00 +6359fa34199c9619dfec0f41d2eb22a4083ce610 jdk7u40-b61 +a2605cf03226ce2fef7a899ce41521c654300975 jdk7u40-b62 +07e41ff8674c9438cb1124cf78eed8636ed5d4fa jdk7u45-b02 @@ -84,6 +85,8 @@ +6c778574d87336a2e55156544af92ce2de799696 jdk7u51-b13 +d2eeac0235eda77d0a6c72c7235a6e96bc9ad4fb jdk7u51-b30 +626e76f127a44ba0118a545d37410f80000db8fb jdk7u51-b31 ++472d67871307433bf3e2687c48237c48ffbf068e jdk7u51-b33 ++503f1d094a1bbbd94386f5c3342130dc5f4ba6ee jdk7u51-b34 +df53ec7eb789e7dec375a685dce1fa5cf63618b4 jdk7u55-b00 +15bc13cd7f5d0bb06ab59935e25944fa7cb15bc8 jdk7u55-b01 +b829c5947c6cd473f42cadfe2c61399fb67c2da6 jdk7u55-b02 @@ -100,8 +103,29 @@ +de268da51b54a4f36bcc1a9af60faea285e94330 jdk7u55-b12 +d972a2d9e4f3f864d26c33ccfdacd8269e0f29a8 jdk7u55-b13 +0820b4707cfa75f8211b88b0daa67bba8475f498 jdk7u55-b30 ---- Makefile 2013-09-06 11:20:33.000000000 -0700 -+++ Makefile 2014-04-20 12:39:52.000000000 -0700 ++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 +--- ./Makefile 2013-09-06 11:20:33.000000000 -0700 ++++ ./Makefile 2013-12-01 11:13:37.000000000 -0800 @@ -264,7 +264,7 @@ DEBUG_NAME=$(DEBUG_NAME) \ GENERATE_DOCS=false \ @@ -111,8 +135,8 @@ $(BOOT_CYCLE_DEBUG_SETTINGS) \ generic_build_repo_series ---- corba/.hgtags 2013-09-06 11:20:46.000000000 -0700 -+++ corba/.hgtags 2014-04-20 12:39:46.000000000 -0700 +--- ./corba/.hgtags 2013-09-06 11:20:46.000000000 -0700 ++++ ./corba/.hgtags 2014-06-06 19:56:11.000000000 -0700 @@ -123,6 +123,7 @@ 770227a4087e4e401fe87ccd19738440111c3948 jdk7-b146 36f0efbc66ef8ace3cca8aa8d0c88f3334080f8a jdk7u1-b01 @@ -144,7 +168,7 @@ ef8e6f8305d524f3b448a85f901aadf1adc81fc0 jdk7u25-b12 eca480919c71072a31f62a61cb3aad30677007e3 jdk7u25-b13 577c4dd1a6e9bc1bb2c2e5d5ecbab8eacb4121af jdk7u25-b14 -@@ -343,3 +360,60 @@ +@@ -343,3 +360,83 @@ b4a480a039bc19b27bfb5fcbbbf75e651d2718b7 jdk7u40-b42 e29ea0b297e519010e661603a07bb8d48fa904a2 jdk7u40-b43 08737d863a7aa5eb39374b26c9585e1770affe92 jdk7u40-b60 @@ -189,6 +213,8 @@ +e2f0036f712aa636cfd55334ac21ea7ca2587a7b jdk7u51-b13 +6563d12c48c92af39a27ca46b4515fad8e994667 jdk7u51-b30 +0ad990211737fe1b1e2737a3498ab266146d2c53 jdk7u51-b31 ++ee7d9f5d18fb67564e88a10f1bd682660db60aa2 jdk7u51-b33 ++65ef96a075a43e9201866d1c9b8ee3138ebcc424 jdk7u51-b34 +55a509ccc0e4ed49e311c7ecf2ed29a908bc1d6b jdk7u55-b00 +aabfdc799c0799837dcbbf9ea8d6df1511978b1f jdk7u55-b01 +db2e6d87bade9d2061646ff9a6b39b5159fba0ec jdk7u55-b02 @@ -205,8 +231,29 @@ +3cce2a49d18d93dfca2634db32368486ebbb1590 jdk7u55-b12 +8efa6e66c13a5329c312d1a521ffab75d9a330e3 jdk7u55-b13 +e041c52fe69128ec3439d26afef9b0fcba00684c jdk7u55-b30 ---- corba/make/Makefile 2013-09-06 11:20:46.000000000 -0700 -+++ corba/make/Makefile 2014-04-20 12:39:43.000000000 -0700 ++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 +--- ./corba/make/Makefile 2013-09-06 11:20:46.000000000 -0700 ++++ ./corba/make/Makefile 2014-01-18 12:16:05.000000000 -0800 @@ -160,7 +160,7 @@ # # CORBA @@ -216,8 +263,977 @@ build: $(SUBDIRS-loop) ---- corba/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java 2013-09-06 11:20:47.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/copyobject/JavaInputStream.sjava 2013-09-06 11:20:47.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/copyobject/JavaInputStream.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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 2013-09-06 11:20:47.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/copyobject/JavaOutputStream.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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/corba/AnyImpl.java 2013-09-06 11:20:47.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/corba/AnyImpl.java 2014-01-18 12:16:06.000000000 -0800 @@ -82,11 +82,18 @@ super((ORB)orb); } @@ -242,8 +1258,8 @@ } } ---- corba/src/share/classes/com/sun/corba/se/impl/encoding/EncapsInputStream.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/encoding/EncapsInputStream.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/encoding/EncapsInputStream.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/encoding/EncapsInputStream.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. @@ -273,8 +1289,8 @@ } protected CodeSetConversion.BTCConverter createCharBTCConverter() { ---- corba/src/share/classes/com/sun/corba/se/impl/encoding/EncapsOutputStream.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/encoding/EncapsOutputStream.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/encoding/EncapsOutputStream.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/encoding/EncapsOutputStream.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved. @@ -308,8 +1324,8 @@ } protected CodeSetConversion.CTBConverter createCharCTBConverter() { ---- corba/src/share/classes/com/sun/corba/se/impl/encoding/TypeCodeInputStream.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/encoding/TypeCodeInputStream.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/encoding/TypeCodeInputStream.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/encoding/TypeCodeInputStream.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved. @@ -344,8 +1360,8 @@ } encap.setEnclosingInputStream(is); encap.makeEncapsulation(); ---- corba/src/share/classes/com/sun/corba/se/impl/encoding/TypeCodeOutputStream.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/encoding/TypeCodeOutputStream.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/encoding/TypeCodeOutputStream.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/encoding/TypeCodeOutputStream.java 2014-01-18 12:16:06.000000000 -0800 @@ -61,6 +61,8 @@ import java.math.BigInteger; import java.nio.ByteBuffer; @@ -368,8 +1384,8 @@ //if (TypeCodeImpl.debug) { //System.out.println("Created TypeCodeInputStream " + tcis + " with no parent"); //tcis.printBuffer(); ---- corba/src/share/classes/com/sun/corba/se/impl/interceptors/CDREncapsCodec.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/interceptors/CDREncapsCodec.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/interceptors/CDREncapsCodec.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/interceptors/CDREncapsCodec.java 2014-01-18 12:16:06.000000000 -0800 @@ -33,6 +33,8 @@ import com.sun.corba.se.spi.ior.iiop.GIOPVersion; import com.sun.corba.se.spi.logging.CORBALogDomains; @@ -391,8 +1407,175 @@ cdrIn.consumeEndian(); ---- corba/src/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/interceptors/ThreadCurrentStack.sjava 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/interceptors/ThreadCurrentStack.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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/io/IIOPInputStream.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/io/IIOPInputStream.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. @@ -454,8 +1637,8 @@ String repositoryID, com.sun.org.omg.SendingContext.CodeBase sender, int offset) ---- corba/src/share/classes/com/sun/corba/se/impl/io/InputStreamHook.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/io/InputStreamHook.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/io/InputStreamHook.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/io/InputStreamHook.java 2014-01-18 12:16:06.000000000 -0800 @@ -201,7 +201,7 @@ readObjectState.endDefaultReadObject(this); } @@ -465,8 +1648,8 @@ abstract void readFields(java.util.Map fieldToValueMap) throws java.io.InvalidClassException, java.io.StreamCorruptedException, ---- corba/src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java 2014-04-19 01:27:00.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. @@ -853,8 +2036,8 @@ Package pkg1 = cl1.getPackage(), pkg2 = cl2.getPackage(); return ((pkg1 == pkg2) || ((pkg1 != null) && (pkg1.equals(pkg2)))); } ---- corba/src/share/classes/com/sun/corba/se/impl/ior/EncapsulationUtility.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/ior/EncapsulationUtility.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/ior/EncapsulationUtility.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/ior/EncapsulationUtility.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. @@ -882,8 +2065,8 @@ result.consumeEndian() ; return result ; } ---- corba/src/share/classes/com/sun/corba/se/impl/ior/ObjectKeyFactoryImpl.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/ior/ObjectKeyFactoryImpl.java 2014-04-20 12:39:44.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/ior/ObjectKeyFactoryImpl.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/ior/ObjectKeyFactoryImpl.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved. @@ -909,8 +2092,8 @@ ObjectKeyTemplate oktemp = create( is, fullKey, osh ) ; if (oktemp == null) ---- corba/src/share/classes/com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl.java 2013-09-06 11:20:48.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl.java 2013-09-06 11:20:48.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl.java 2014-01-18 12:16:06.000000000 -0800 @@ -70,6 +70,8 @@ import com.sun.corba.se.impl.encoding.EncapsInputStream ; import com.sun.corba.se.impl.encoding.EncapsOutputStream ; @@ -931,8 +2114,131 @@ istr.consumeEndian(); init( istr ) ; } ---- corba/src/share/classes/com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3.java 2013-09-06 11:20:49.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/DefineWrapper.sjava 2013-09-06 11:20:49.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/DefineWrapper.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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/ObjectStreamClassUtil_1_3.java 2013-09-06 11:20:49.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/ObjectStreamClassUtil_1_3.java 2014-04-19 01:27:00.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved. @@ -978,8 +2284,8 @@ if (classWithThisMethod == null) classWithThisMethod = java.io.ObjectStreamClass.class; ---- corba/src/share/classes/com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1.java 2013-09-06 11:20:49.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1.java 2013-09-06 11:20:49.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/ObjectStreamClass_1_3_1.java 2014-04-19 01:27:00.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. @@ -1225,8 +2531,19 @@ return (c1.getName()).compareTo(c2.getName()); } } ---- corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl.java 2013-09-06 11:20:49.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/resources/sunorb_pt_BR.properties 2013-09-06 11:20:49.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/orbutil/resources/sunorb_pt_BR.properties 2014-06-06 19:56:11.000000000 -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.java 2013-09-06 11:20:49.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl.java 2013-12-01 11:13:38.000000000 -0800 @@ -905,28 +905,4 @@ return contents.toString(); @@ -1256,8 +2573,1443 @@ - } - } } ---- corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/InvocationHandlerFactoryImpl.java 2013-09-06 11:20:50.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/InvocationHandlerFactoryImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl_save.sjava 2013-09-06 11:20:49.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLNameTranslatorImpl_save.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/IDLTypesUtil_save.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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/presentation/rmi/InvocationHandlerFactoryImpl.java 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/InvocationHandlerFactoryImpl.java 2013-12-01 11:13:38.000000000 -0800 @@ -43,6 +43,8 @@ import com.sun.corba.se.spi.orbutil.proxy.DelegateInvocationHandlerImpl ; import com.sun.corba.se.spi.orbutil.proxy.CompositeInvocationHandler ; @@ -1302,8 +4054,8 @@ // If the method passed to invoke is not from DynamicStub or its superclasses, // it must be from an implemented interface, so we just handle ---- corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryDynamicBase.java 2013-09-06 11:20:50.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryDynamicBase.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryDynamicBase.java 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryDynamicBase.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. @@ -1354,8 +4106,8 @@ + public abstract org.omg.CORBA.Object makeStub() ; } ---- corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryProxyImpl.java 2013-09-06 11:20:50.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryProxyImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryProxyImpl.java 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/presentation/rmi/StubFactoryFactoryProxyImpl.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. @@ -1390,8 +4142,8 @@ + }); } } ---- corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaClientRequestDispatcherImpl.java 2013-09-06 11:20:50.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaClientRequestDispatcherImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaClientRequestDispatcherImpl.java 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/protocol/CorbaClientRequestDispatcherImpl.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. @@ -1418,8 +4170,8 @@ in.consumeEndian(); String msg = ---- corba/src/share/classes/com/sun/corba/se/impl/protocol/SharedCDRClientRequestDispatcherImpl.java 2013-09-06 11:20:50.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/protocol/SharedCDRClientRequestDispatcherImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/protocol/SharedCDRClientRequestDispatcherImpl.java 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/protocol/SharedCDRClientRequestDispatcherImpl.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. @@ -1488,8 +4240,720 @@ messageMediator.setInputObject(cdrInputObject); cdrInputObject.setMessageMediator(messageMediator); ---- corba/src/share/classes/com/sun/corba/se/impl/resolver/INSURLOperationImpl.java 2013-09-06 11:20:50.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/resolver/INSURLOperationImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalClientRequestImpl.sjava 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalClientRequestImpl.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalClientResponseImpl.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalServerRequestImpl.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/protocol/oldlocal/LocalServerResponseImpl.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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/resolver/INSURLOperationImpl.java 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/resolver/INSURLOperationImpl.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. @@ -1517,8 +4981,773 @@ s.consumeEndian(); return s.read_Object() ; } ---- corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java 2013-09-06 11:20:50.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/impl/transport/BufferConnectionImpl.sjava 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/transport/BufferConnectionImpl.sjava 1969-12-31 16:00:00.000000000 -0800 +@@ -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 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/transport/DefaultSocketFactoryImpl.java 2014-06-06 19:56:11.000000000 -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); + } + } + +--- ./corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java 2013-09-06 11:20:50.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/impl/transport/SelectorImpl.java 2013-12-01 11:13:38.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. @@ -1535,8 +5764,8 @@ extends Thread implements ---- corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java 2013-09-06 11:20:51.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java 2013-09-06 11:20:51.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/spi/orb/ORB.java 2014-04-19 01:27:00.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. @@ -1588,8 +5817,8 @@ } /** Get the appropriate StubFactoryFactory. This ---- corba/src/share/classes/com/sun/corba/se/spi/orbutil/proxy/CompositeInvocationHandlerImpl.java 2013-09-06 11:20:51.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/spi/orbutil/proxy/CompositeInvocationHandlerImpl.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/spi/orbutil/proxy/CompositeInvocationHandlerImpl.java 2013-09-06 11:20:51.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/spi/orbutil/proxy/CompositeInvocationHandlerImpl.java 2014-01-18 12:16:06.000000000 -0800 @@ -36,6 +36,7 @@ import com.sun.corba.se.spi.logging.CORBALogDomains ; @@ -1627,8 +5856,8 @@ + + private static final long serialVersionUID = 4571178305984833743L; } ---- corba/src/share/classes/com/sun/corba/se/spi/servicecontext/ServiceContexts.java 2013-09-06 11:20:52.000000000 -0700 -+++ corba/src/share/classes/com/sun/corba/se/spi/servicecontext/ServiceContexts.java 2014-04-20 12:39:43.000000000 -0700 +--- ./corba/src/share/classes/com/sun/corba/se/spi/servicecontext/ServiceContexts.java 2013-09-06 11:20:52.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/corba/se/spi/servicecontext/ServiceContexts.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. @@ -1663,8 +5892,8 @@ eis.consumeEndian(); // Now the input stream passed to a ServiceContext ---- corba/src/share/classes/com/sun/tools/corba/se/idl/idl_ja.prp 2013-09-06 11:20:53.000000000 -0700 -+++ corba/src/share/classes/com/sun/tools/corba/se/idl/idl_ja.prp 2014-04-20 12:39:44.000000000 -0700 +--- ./corba/src/share/classes/com/sun/tools/corba/se/idl/idl_ja.prp 2013-09-06 11:20:53.000000000 -0700 ++++ ./corba/src/share/classes/com/sun/tools/corba/se/idl/idl_ja.prp 2014-01-18 12:16:06.000000000 -0800 @@ -110,7 +110,7 @@ ParseException.badCustom=%0 (\u884C%1): forward\u5024\u5BA3\u8A00\u306Fcustom\u3068\u3057\u3066\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\u3002\n%2\n%3 ParseException.badRepIDAlreadyAssigned=%0 (\u884C%1): \u578B%2\u306B\u306F\u3001\u524D\u306EID\u30D7\u30E9\u30B0\u30DE\u30FB\u30C7\u30A3\u30EC\u30AF\u30C6\u30A3\u30D6\u306E\u30EA\u30DD\u30B8\u30C8\u30EAID\u304C\u3059\u3067\u306B\u5272\u308A\u5F53\u3066\u3089\u308C\u3066\u3044\u307E\u3059\u3002\n%3\n%4 @@ -1674,8 +5903,8 @@ ParseException.badState=%0 (\u884C%1): %2\u306F\u30B9\u30C6\u30FC\u30C8\u30D5\u30EB\u30FB\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306B\u3067\u304D\u307E\u305B\u3093\u3002\u8907\u6570\u306E\u30B9\u30C6\u30FC\u30C8\u30D5\u30EB\u89AA\u304C\u3042\u308A\u307E\u3059\u3002\n%3\n%4 ParseException.branchLabel=%0 (\u884C%1): case %2\u306F\u3059\u3067\u306B\u5BA3\u8A00\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n%3\n%4 ParseException.branchName=%0 (\u884C%1): %2\u3068\u3044\u3046\u540D\u524D\u306E\u5206\u5C90\u306F\u3059\u3067\u306B\u5BA3\u8A00\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n%3\n%4 ---- corba/src/share/classes/javax/rmi/CORBA/Stub.java 2013-09-06 11:20:53.000000000 -0700 -+++ corba/src/share/classes/javax/rmi/CORBA/Stub.java 2014-04-20 12:39:44.000000000 -0700 +--- ./corba/src/share/classes/javax/rmi/CORBA/Stub.java 2013-09-06 11:20:53.000000000 -0700 ++++ ./corba/src/share/classes/javax/rmi/CORBA/Stub.java 2014-01-18 12:16:06.000000000 -0800 @@ -61,13 +61,11 @@ private transient StubDelegate stubDelegate = null; private static Class stubDelegateClass = null; @@ -1709,8 +5938,8 @@ } try { ---- corba/src/share/classes/javax/rmi/CORBA/Util.java 2013-09-06 11:20:53.000000000 -0700 -+++ corba/src/share/classes/javax/rmi/CORBA/Util.java 2014-04-20 12:39:44.000000000 -0700 +--- ./corba/src/share/classes/javax/rmi/CORBA/Util.java 2013-09-06 11:20:53.000000000 -0700 ++++ ./corba/src/share/classes/javax/rmi/CORBA/Util.java 2014-01-18 12:16:06.000000000 -0800 @@ -60,14 +60,11 @@ public class Util { @@ -1748,8 +5977,8 @@ } try { ---- corba/src/share/classes/javax/rmi/PortableRemoteObject.java 2013-09-06 11:20:53.000000000 -0700 -+++ corba/src/share/classes/javax/rmi/PortableRemoteObject.java 2014-04-20 12:39:44.000000000 -0700 +--- ./corba/src/share/classes/javax/rmi/PortableRemoteObject.java 2013-09-06 11:20:53.000000000 -0700 ++++ ./corba/src/share/classes/javax/rmi/PortableRemoteObject.java 2014-01-18 12:16:06.000000000 -0800 @@ -65,17 +65,14 @@ */ public class PortableRemoteObject { @@ -1788,8 +6017,8 @@ } try { ---- corba/src/share/classes/org/omg/CORBA/ORB.java 2013-09-06 11:20:54.000000000 -0700 -+++ corba/src/share/classes/org/omg/CORBA/ORB.java 2014-04-20 12:39:44.000000000 -0700 +--- ./corba/src/share/classes/org/omg/CORBA/ORB.java 2013-09-06 11:20:54.000000000 -0700 ++++ ./corba/src/share/classes/org/omg/CORBA/ORB.java 2014-04-19 01:27:00.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. @@ -1923,8 +6152,8 @@ java.lang.reflect.Method meth = this.getClass().getMethod("create_operation_list", argc); ---- corba/src/share/classes/org/omg/CORBA_2_3/portable/InputStream.java 2013-09-06 11:20:55.000000000 -0700 -+++ corba/src/share/classes/org/omg/CORBA_2_3/portable/InputStream.java 2014-04-20 12:39:44.000000000 -0700 +--- ./corba/src/share/classes/org/omg/CORBA_2_3/portable/InputStream.java 2013-09-06 11:20:55.000000000 -0700 ++++ ./corba/src/share/classes/org/omg/CORBA_2_3/portable/InputStream.java 2014-01-18 12:16:06.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2000, Oracle and/or its affiliates. All rights reserved. @@ -1987,8 +6216,8 @@ /** * Unmarshalls a value type from the input stream. * @return the value type unmarshalled from the input stream ---- corba/src/share/classes/sun/corba/EncapsInputStreamFactory.java 1969-12-31 16:00:00.000000000 -0800 -+++ corba/src/share/classes/sun/corba/EncapsInputStreamFactory.java 2014-04-20 12:39:44.000000000 -0700 +--- ./corba/src/share/classes/sun/corba/EncapsInputStreamFactory.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./corba/src/share/classes/sun/corba/EncapsInputStreamFactory.java 2014-01-18 12:16:06.000000000 -0800 @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -2143,8 +6372,8 @@ + }); + } +} ---- corba/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java 2013-09-06 11:20:56.000000000 -0700 -+++ corba/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java 2014-04-20 12:39:44.000000000 -0700 +--- ./corba/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java 2013-09-06 11:20:56.000000000 -0700 ++++ ./corba/src/share/classes/sun/rmi/rmic/iiop/StubGenerator.java 2013-12-01 11:13:38.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. @@ -2296,8 +6525,8 @@ p.plnI(idExtInputStream + " "+in+" = "); p.pln("(" + idExtInputStream + ") "+_in+";"); p.pO(); ---- hotspot/.hgtags 2013-09-06 11:21:49.000000000 -0700 -+++ hotspot/.hgtags 2014-04-20 12:39:37.000000000 -0700 +--- ./hotspot/.hgtags 2013-09-06 11:21:49.000000000 -0700 ++++ ./hotspot/.hgtags 2014-06-06 19:56:22.000000000 -0700 @@ -182,6 +182,7 @@ 38fa55e5e79232d48f1bb8cf27d88bc094c9375a hs21-b16 81d815b05abb564aa1f4100ae13491c949b9a07e jdk7-b147 @@ -2331,7 +6560,7 @@ e3d2c238e29c421c3b5c001e400acbfb30790cfc jdk7u14-b14 860ae068f4dff62a77c8315f0335b7e935087e86 hs24-b34 12619005c5e29be6e65f0dc9891ca19d9ffb1aaa jdk7u14-b15 -@@ -550,3 +569,60 @@ +@@ -550,3 +569,92 @@ b8d8caf6df744d5342b5d284376a005e86c0b108 hs24-b56 eceae04782438987cd747e1c76e4085f50b43a18 jdk7u40-b43 af1fc2868a2b919727bfbb0858449bd991bbee4a jdk7u40-b60 @@ -2376,6 +6605,8 @@ +6c6a2299029ad02fa2820b8ff8c61c2bbcae799c jdk7u51-b13 +a398ddc79d2310ad37b131cc3794b3cf574f088e jdk7u51-b30 +cf4110c35afb10456d8264c47b7cde1c20150cab jdk7u51-b31 ++208419914859dd77abdb5ec755b32c237ee6e4eb jdk7u51-b33 ++f8457a75bdb5052f1d8c547027a926f9b755b808 jdk7u51-b34 +dee2a38ef6b26534c44c550ef4da2c3146c612c2 jdk7u55-b00 +ac0063b4452bc724e8648e64f4b2d495054bb308 jdk7u55-b01 +408028d410e316a99495c42df0031018890c22fe jdk7u55-b02 @@ -2392,8 +6623,38 @@ +aadc864abd1ced3049bf59ce32786a07997ba190 jdk7u55-b12 +b021fd817a0177b31d1e3d65127a27458e85801e jdk7u55-b13 +d27b468d5f3be3329ff1ff342f3347e6b2e0303b jdk7u55-b30 ---- hotspot/agent/src/os/bsd/ps_proc.c 2013-09-06 11:21:50.000000000 -0700 -+++ hotspot/agent/src/os/bsd/ps_proc.c 2014-04-20 12:39:33.000000000 -0700 ++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 +--- ./hotspot/agent/src/os/bsd/ps_proc.c 2013-09-06 11:21:50.000000000 -0700 ++++ ./hotspot/agent/src/os/bsd/ps_proc.c 2014-06-06 19:56:22.000000000 -0700 @@ -131,7 +131,7 @@ static bool ptrace_continue(pid_t pid, int signal) { @@ -2403,8 +6664,97 @@ print_debug("ptrace(PTRACE_CONT, ..) failed for %d\n", pid); return false; } ---- hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java 2013-09-06 11:21:51.000000000 -0700 -+++ hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java 2014-04-20 12:39:33.000000000 -0700 +--- ./hotspot/agent/src/os/linux/ps_core.c 2013-09-06 11:21:50.000000000 -0700 ++++ ./hotspot/agent/src/os/linux/ps_core.c 2014-06-06 19:56:20.000000000 -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); ++ ++ 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)) { +- if (add_map_info(ph, lib_fd, lib_php->p_offset, lib_php->p_vaddr + lib_base, lib_php->p_filesz) == NULL) +- goto err; ++ // 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/HotSpotAgent.java 2013-09-06 11:21:51.000000000 -0700 ++++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/HotSpotAgent.java 2014-06-06 19:56:22.000000000 -0700 @@ -33,6 +33,7 @@ import sun.jvm.hotspot.debugger.remote.*; import sun.jvm.hotspot.debugger.windbg.*; @@ -2413,8 +6763,8 @@ import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.oops.*; import sun.jvm.hotspot.runtime.*; ---- hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java 2013-09-06 11:21:52.000000000 -0700 -+++ hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java 2014-04-20 12:39:33.000000000 -0700 +--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java 2013-09-06 11:21:52.000000000 -0700 ++++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/bugspot/BugSpotAgent.java 2014-06-06 19:56:22.000000000 -0700 @@ -35,6 +35,7 @@ import sun.jvm.hotspot.debugger.windbg.*; import sun.jvm.hotspot.debugger.linux.*; @@ -2423,8 +6773,91 @@ import sun.jvm.hotspot.debugger.remote.*; import sun.jvm.hotspot.livejvm.*; import sun.jvm.hotspot.memory.*; ---- hotspot/make/bsd/Makefile 2013-09-06 11:21:59.000000000 -0700 -+++ hotspot/make/bsd/Makefile 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java 2013-09-06 11:21:55.000000000 -0700 ++++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:21:56.000000000 -0700 ++++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/JVMTIThreadState.java 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:21:57.000000000 -0700 ++++ ./hotspot/agent/src/share/classes/sun/jvm/hotspot/runtime/OSThread.java 2014-06-06 19:56:21.000000000 -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/Makefile 2013-09-06 11:21:59.000000000 -0700 ++++ ./hotspot/make/bsd/Makefile 2014-06-06 19:56:22.000000000 -0700 @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. @@ -2454,8 +6887,8 @@ # Synonyms for win32-like targets. compiler2: jvmg product ---- hotspot/make/bsd/makefiles/arm.make 2013-09-06 11:21:59.000000000 -0700 -+++ hotspot/make/bsd/makefiles/arm.make 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/make/bsd/makefiles/arm.make 2013-09-06 11:21:59.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/arm.make 2014-06-06 19:56:22.000000000 -0700 @@ -1,5 +1,5 @@ # -# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. @@ -2473,8 +6906,8 @@ +endif CFLAGS += -DVM_LITTLE_ENDIAN ---- hotspot/make/bsd/makefiles/build_vm_def.sh 2013-09-06 11:21:59.000000000 -0700 -+++ hotspot/make/bsd/makefiles/build_vm_def.sh 2014-04-28 17:39:01.000000000 -0700 +--- ./hotspot/make/bsd/makefiles/build_vm_def.sh 2013-09-06 11:21:59.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/build_vm_def.sh 2014-06-06 19:56:22.000000000 -0700 @@ -7,6 +7,16 @@ NM=nm fi @@ -2492,16 +6925,33 @@ { if ($3 ~ /^_ZTV/ || $3 ~ /^gHotSpotVM/) print "\t" $3 } ' +fi ---- hotspot/make/bsd/makefiles/buildtree.make 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/bsd/makefiles/buildtree.make 2014-04-20 12:39:31.000000000 -0700 -@@ -1,5 +1,5 @@ +--- ./hotspot/make/bsd/makefiles/buildtree.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/buildtree.make 2014-06-06 19:57:03.000000000 -0700 +@@ -1,5 +1,6 @@ # --# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. -+# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. + # 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 -@@ -253,6 +253,16 @@ +@@ -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)"; \ +@@ -253,6 +255,16 @@ echo "$(call gamma-path,commonsrc,os/posix/vm)"; \ [ -n "$(CFLAGS_BROWSE)" ] && \ echo && echo "CFLAGS_BROWSE = $(CFLAGS_BROWSE)"; \ @@ -2518,7 +6968,7 @@ [ -n "$(HOTSPOT_EXTRA_SYSDEFS)" ] && \ echo && \ echo "HOTSPOT_EXTRA_SYSDEFS\$$(HOTSPOT_EXTRA_SYSDEFS) = $(HOTSPOT_EXTRA_SYSDEFS)" && \ -@@ -382,7 +392,7 @@ +@@ -382,7 +394,7 @@ $(QUIETLY) ( \ $(BUILDTREE_COMMENT); \ echo "JDK=${JAVA_HOME}"; \ @@ -2527,9 +6977,29 @@ .dbxrc: $(BUILDTREE_MAKE) @echo Creating $@ ... ---- hotspot/make/bsd/makefiles/gcc.make 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/bsd/makefiles/gcc.make 2014-04-28 17:39:01.000000000 -0700 -@@ -116,7 +116,10 @@ +--- ./hotspot/make/bsd/makefiles/gcc.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/gcc.make 2014-06-06 19:56:22.000000000 -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 +@@ -116,7 +117,10 @@ CFLAGS += -fno-rtti CFLAGS += -fno-exceptions CFLAGS += -pthread @@ -2541,7 +7011,7 @@ # version 4 and above support fvisibility=hidden (matches jni_x86.h file) # except 4.1.2 gives pointless warnings that can't be disabled (afaik) ifneq "$(shell expr \( $(CC_VER_MAJOR) \> 4 \) \| \( \( $(CC_VER_MAJOR) = 4 \) \& \( $(CC_VER_MINOR) \>= 3 \) \))" "0" -@@ -214,7 +217,11 @@ +@@ -214,7 +218,11 @@ # Flags for generating make dependency flags. ifneq ("${CC_VER_MAJOR}", "2") @@ -2554,8 +7024,8 @@ endif # -DDONT_USE_PRECOMPILED_HEADER will exclude all includes in precompiled.hpp. ---- hotspot/make/bsd/makefiles/jsig.make 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/bsd/makefiles/jsig.make 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/make/bsd/makefiles/jsig.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/jsig.make 2014-06-06 19:56:22.000000000 -0700 @@ -36,9 +36,16 @@ LIBJSIG_G = lib$(JSIG_G).so endif @@ -2608,8 +7078,8 @@ $(QUIETLY) cp -f $(LIBJSIG) $(DEST_JSIG) && echo "Done" .PHONY: install_jsig ---- hotspot/make/bsd/makefiles/launcher.make 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/bsd/makefiles/launcher.make 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/make/bsd/makefiles/launcher.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/launcher.make 2014-06-06 19:56:22.000000000 -0700 @@ -50,7 +50,7 @@ LIBS_LAUNCHER += $(STATIC_STDCXX) $(LIBS) else @@ -2619,8 +7089,8 @@ # The gamma launcher runs the JDK from $JAVA_HOME, overriding the JVM with a # freshly built JVM at ./libjvm.{so|dylib}. This is accomplished by setting ---- hotspot/make/bsd/makefiles/mapfile-vers-product 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/bsd/makefiles/mapfile-vers-product 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/make/bsd/makefiles/mapfile-vers-product 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/mapfile-vers-product 2014-06-06 19:56:22.000000000 -0700 @@ -1,5 +1,5 @@ # -# Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. @@ -3099,8 +7569,8 @@ + *; +}; ---- hotspot/make/bsd/makefiles/ppc.make 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/bsd/makefiles/ppc.make 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/make/bsd/makefiles/ppc.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/ppc.make 2014-06-06 19:56:22.000000000 -0700 @@ -28,3 +28,6 @@ # Must also specify if CPU is big endian CFLAGS += -DVM_BIG_ENDIAN @@ -3108,8 +7578,8 @@ +ifdef E500V2 +ASFLAGS += -Wa,-mspe -Wa,--defsym -Wa,E500V2=1 +endif ---- hotspot/make/bsd/makefiles/saproc.make 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/bsd/makefiles/saproc.make 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/make/bsd/makefiles/saproc.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/saproc.make 2014-06-06 19:56:22.000000000 -0700 @@ -36,6 +36,11 @@ LIBSAPROC_G = lib$(SAPROC_G).so endif @@ -3166,8 +7636,41 @@ cp -f $(LIBSAPROC) $(DEST_SAPROC) && echo "Done"; \ fi ---- hotspot/make/hotspot_version 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/hotspot_version 2014-04-20 12:39:32.000000000 -0700 +--- ./hotspot/make/bsd/makefiles/vm.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/bsd/makefiles/vm.make 2014-06-06 19:56:22.000000000 -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 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/hotspot_version 2014-06-06 19:56:21.000000000 -0700 @@ -1,5 +1,5 @@ # -# Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. @@ -3185,13 +7688,13 @@ HS_MAJOR_VER=24 -HS_MINOR_VER=0 -HS_BUILD_NUMBER=56 -+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/arm.make 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/linux/makefiles/arm.make 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/make/linux/makefiles/arm.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/linux/makefiles/arm.make 2014-04-19 01:27:07.000000000 -0700 @@ -1,5 +1,5 @@ # -# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. @@ -3209,8 +7712,98 @@ +endif CFLAGS += -DVM_LITTLE_ENDIAN ---- hotspot/make/solaris/makefiles/defs.make 2013-09-06 11:22:00.000000000 -0700 -+++ hotspot/make/solaris/makefiles/defs.make 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/make/linux/makefiles/buildtree.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/linux/makefiles/buildtree.make 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/linux/makefiles/gcc.make 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/linux/makefiles/vm.make 2014-06-06 19:56:21.000000000 -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/make/solaris/makefiles/defs.make 2013-09-06 11:22:00.000000000 -0700 ++++ ./hotspot/make/solaris/makefiles/defs.make 2014-06-06 19:56:22.000000000 -0700 @@ -221,8 +221,8 @@ endif ifeq ($(JVM_VARIANT_CLIENT),true) @@ -3222,8 +7815,8 @@ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX) ifeq ($(ARCH_DATA_MODEL),32) EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX) ---- hotspot/make/windows/makefiles/compile.make 2013-09-06 11:22:01.000000000 -0700 -+++ hotspot/make/windows/makefiles/compile.make 2014-04-20 12:39:32.000000000 -0700 +--- ./hotspot/make/windows/makefiles/compile.make 2013-09-06 11:22:01.000000000 -0700 ++++ ./hotspot/make/windows/makefiles/compile.make 2013-12-01 11:14:01.000000000 -0800 @@ -172,6 +172,7 @@ PRODUCT_OPT_OPTION = /O2 /Oy- FASTDEBUG_OPT_OPTION = /O2 /Oy- @@ -3262,8 +7855,8 @@ !endif # If NO_OPTIMIZATIONS is defined in the environment, turn everything off ---- hotspot/make/windows/makefiles/sa.make 2013-09-06 11:22:01.000000000 -0700 -+++ hotspot/make/windows/makefiles/sa.make 2014-04-20 12:39:32.000000000 -0700 +--- ./hotspot/make/windows/makefiles/sa.make 2013-09-06 11:22:01.000000000 -0700 ++++ ./hotspot/make/windows/makefiles/sa.make 2013-12-01 11:14:01.000000000 -0800 @@ -107,6 +107,9 @@ !if "$(ENABLE_FULL_DEBUG_SYMBOLS)" == "1" SA_LFLAGS = $(SA_LFLAGS) -map -debug @@ -3274,8 +7867,72 @@ # Note that we do not keep sawindbj.obj around as it would then # get included in the dumpbin command in build_vm_def.sh ---- hotspot/src/cpu/sparc/vm/globals_sparc.hpp 2013-09-06 11:22:02.000000000 -0700 -+++ hotspot/src/cpu/sparc/vm/globals_sparc.hpp 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/src/cpu/sparc/vm/assembler_sparc.cpp 2013-09-06 11:22:01.000000000 -0700 ++++ ./hotspot/src/cpu/sparc/vm/assembler_sparc.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:01.000000000 -0700 ++++ ./hotspot/src/cpu/sparc/vm/c1_Runtime1_sparc.cpp 2014-06-06 19:56:21.000000000 -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/globals_sparc.hpp 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/sparc/vm/globals_sparc.hpp 2014-06-06 19:56:22.000000000 -0700 @@ -71,7 +71,11 @@ define_pd_global(bool, RewriteBytecodes, true); define_pd_global(bool, RewriteFrequentPairs, true); @@ -3288,8 +7945,464 @@ // GC Ergo Flags define_pd_global(intx, CMSYoungGenPerWorker, 16*M); // default max size of CMS young gen, per GC worker thread ---- hotspot/src/os/bsd/vm/attachListener_bsd.cpp 2013-09-06 11:22:03.000000000 -0700 -+++ hotspot/src/os/bsd/vm/attachListener_bsd.cpp 2014-04-20 12:39:29.000000000 -0700 +--- ./hotspot/src/cpu/sparc/vm/sparc.ad 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/sparc/vm/sparc.ad 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/sparc/vm/templateInterpreter_sparc.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/assembler_x86.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp 2014-06-06 19:56:22.000000000 -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 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/frame_x86.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/globals_x86.hpp 2014-06-06 19:56:22.000000000 -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 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/templateInterpreter_x86_32.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:02.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/x86_32.ad 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/cpu/x86/vm/x86_64.ad 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/cpu/zero/vm/entryFrame_zero.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/cpu/zero/vm/frame_zero.inline.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/os/bsd/vm/attachListener_bsd.cpp 2014-06-06 19:56:22.000000000 -0700 @@ -460,14 +460,14 @@ void AttachListener::vm_start() { @@ -3307,8 +8420,8 @@ if (ret == 0) { ret = ::unlink(fn); if (ret == -1) { ---- hotspot/src/os/bsd/vm/decoder_bsd.cpp 1969-12-31 16:00:00.000000000 -0800 -+++ hotspot/src/os/bsd/vm/decoder_bsd.cpp 2014-04-20 12:39:29.000000000 -0700 +--- ./hotspot/src/os/bsd/vm/decoder_bsd.cpp 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/src/os/bsd/vm/decoder_bsd.cpp 2014-06-06 19:56:22.000000000 -0700 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -3356,8 +8469,8 @@ + return false; +} + ---- hotspot/src/os/bsd/vm/os_bsd.cpp 2013-09-06 11:22:03.000000000 -0700 -+++ hotspot/src/os/bsd/vm/os_bsd.cpp 2014-04-28 17:39:01.000000000 -0700 +--- ./hotspot/src/os/bsd/vm/os_bsd.cpp 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/os/bsd/vm/os_bsd.cpp 2014-06-06 19:56:22.000000000 -0700 @@ -187,6 +187,8 @@ static int SR_signum = SIGUSR2; sigset_t SR_sigset; @@ -3433,6 +8546,19 @@ #else osthread->set_thread_id(::pthread_self()); #endif +@@ -1570,10 +1590,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(); @@ -1830,7 +1850,7 @@ intx os::current_thread_id() { @@ -3572,7 +8698,18 @@ } void os::numa_make_global(char *addr, size_t bytes) { -@@ -3829,6 +3884,7 @@ +@@ -3422,7 +3477,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"); +@@ -3829,6 +3886,7 @@ return OS_OK; #elif defined(__FreeBSD__) int ret = pthread_setprio(thread->osthread()->pthread_id(), newpri); @@ -3580,8 +8717,18 @@ #elif defined(__APPLE__) || defined(__NetBSD__) struct sched_param sp; int policy; ---- hotspot/src/os/bsd/vm/os_bsd.hpp 2013-09-06 11:22:03.000000000 -0700 -+++ hotspot/src/os/bsd/vm/os_bsd.hpp 2014-04-20 12:39:29.000000000 -0700 +@@ -6093,3 +6151,9 @@ + return n; + } + ++#ifndef PRODUCT ++void TestReserveMemorySpecial_test() { ++ // No tests available for this platform ++} ++#endif ++ +--- ./hotspot/src/os/bsd/vm/os_bsd.hpp 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/os/bsd/vm/os_bsd.hpp 2014-06-06 19:56:22.000000000 -0700 @@ -103,6 +103,12 @@ static bool hugetlbfs_sanity_check(bool warn, size_t page_size); @@ -3595,8 +8742,8 @@ public: static void init_thread_fpu_state(); ---- hotspot/src/os/bsd/vm/os_bsd.inline.hpp 2013-09-06 11:22:03.000000000 -0700 -+++ hotspot/src/os/bsd/vm/os_bsd.inline.hpp 2014-04-20 12:39:29.000000000 -0700 +--- ./hotspot/src/os/bsd/vm/os_bsd.inline.hpp 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/os/bsd/vm/os_bsd.inline.hpp 2014-06-06 19:56:22.000000000 -0700 @@ -31,10 +31,22 @@ # include "atomic_bsd_x86.inline.hpp" # include "orderAccess_bsd_x86.inline.hpp" @@ -3620,8 +8767,8 @@ // System includes ---- hotspot/src/os/bsd/vm/thread_bsd.inline.hpp 2013-09-06 11:22:03.000000000 -0700 -+++ hotspot/src/os/bsd/vm/thread_bsd.inline.hpp 2014-04-20 12:39:29.000000000 -0700 +--- ./hotspot/src/os/bsd/vm/thread_bsd.inline.hpp 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/os/bsd/vm/thread_bsd.inline.hpp 2014-06-06 19:56:22.000000000 -0700 @@ -34,11 +34,26 @@ # include "orderAccess_bsd_x86.inline.hpp" # include "prefetch_bsd_x86.inline.hpp" @@ -3649,56 +8796,1244 @@ // Contains inlined functions for class Thread and ThreadLocalStorage ---- hotspot/src/os/linux/vm/os_linux.cpp 2013-09-06 11:22:03.000000000 -0700 -+++ hotspot/src/os/linux/vm/os_linux.cpp 2014-04-20 12:39:29.000000000 -0700 -@@ -2696,6 +2696,14 @@ - alignment_hint, exec, strerror(err), err); - } +--- ./hotspot/src/os/linux/vm/globals_linux.hpp 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/os/linux/vm/globals_linux.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/os/linux/vm/jsig.c 2014-06-06 19:56:21.000000000 -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 @@ -+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); -+} + 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 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/os/linux/vm/os_linux.cpp 2014-06-06 19:56:23.000000000 -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 + - // 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 -@@ -2746,6 +2754,8 @@ - #define MADV_HUGEPAGE 14 - #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(); ++ } + } -+volatile jint os::Linux::num_largepage_commit_fails = 0; + 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); +@@ -2748,35 +2777,7 @@ + int os::Linux::commit_memory_impl(char* addr, size_t size, size_t alignment_hint, bool exec) { - int err; -@@ -2770,7 +2780,9 @@ - // 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. +- 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. - warn_fail_commit_memory(addr, size, alignment_hint, exec, err); -+ 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 ---- hotspot/src/os/linux/vm/os_linux.hpp 2013-09-06 11:22:03.000000000 -0700 -+++ hotspot/src/os/linux/vm/os_linux.hpp 2014-04-20 12:39:29.000000000 -0700 -@@ -100,6 +100,7 @@ +-// 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); + } +@@ -2801,7 +2802,7 @@ + } - 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); - ---- hotspot/src/os/posix/vm/os_posix.cpp 2013-09-06 11:22:04.000000000 -0700 -+++ hotspot/src/os/posix/vm/os_posix.cpp 2014-04-20 12:39:29.000000000 -0700 -@@ -173,11 +173,19 @@ + 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); +@@ -2814,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); + } + } +@@ -3183,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. +@@ -3208,12 +3229,10 @@ + } + fclose(fp); + } +- munmap (p, page_size); +- if (result) +- return true; ++ munmap(p, page_size); + } + +- if (warn) { ++ if (warn && !result) { + warning("HugeTLBFS is not supported by the operating system."); + } + +@@ -3261,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; +- } +- } ++size_t os::Linux::find_large_page_size() { ++ size_t large_page_size = 0; + +- 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. ++ // 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); + } ++ fclose(fp); + } + +- // print a warning if any large page related flag is specified on command line +- bool warn_on_failure = !FLAG_IS_DEFAULT(UseHugeTLBFS); ++ 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; ++ return; ++ } + +- UseLargePages = UseHugeTLBFS || UseSHM; ++ size_t large_page_size = Linux::setup_large_page_size(); ++ UseLargePages = Linux::setup_large_page_type(large_page_size); + + set_coredump_filter(); + } +@@ -3345,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]; +@@ -3402,42 +3471,220 @@ + return NULL; + } + +- if ((addr != NULL) && UseNUMAInterleaving) { +- numa_make_global(addr, bytes); ++ 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; + } + +- // The memory is committed +- MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, mtNone, CALLER_PC); ++ 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 +@@ -4493,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 +@@ -4575,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", +@@ -4591,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) { +@@ -5339,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; ++ ++ 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; + } +- abstime->tv_nsec = usec * 1000; + return abstime; + } + +@@ -5445,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, +@@ -5524,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. +@@ -5546,32 +5833,50 @@ + + static void unpackTime(timespec* absTime, bool isAbsolute, jlong time) { + assert (time > 0, "convertTime"); ++ time_t max_secs = 0; + +- 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; +- } +- else { +- absTime->tv_sec = secs; ++ 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 ++ } ++ } + } +- 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 +@@ -5650,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"); +@@ -5688,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") ; +@@ -5914,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 2013-09-06 11:22:03.000000000 -0700 ++++ ./hotspot/src/os/linux/vm/os_linux.hpp 2014-06-06 19:56:21.000000000 -0700 +@@ -32,6 +32,7 @@ + + class Linux { + friend class os; ++ friend class TestReserveMemorySpecial; + + // For signal-chaining + #define MAXSIGNUM 32 +@@ -92,8 +93,21 @@ + 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); +@@ -207,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 +@@ -273,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"); +@@ -288,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") ; } +@@ -303,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 2013-09-06 11:22:04.000000000 -0700 ++++ ./hotspot/src/os/posix/vm/os_posix.cpp 2014-06-06 19:56:23.000000000 -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 +@@ -173,11 +175,19 @@ if (rlim.rlim_cur == RLIM_INFINITY) st->print("infinity"); else st->print("%d", rlim.rlim_cur); @@ -3718,8 +10053,64 @@ } void os::Posix::print_uname_info(outputStream* st) { ---- hotspot/src/os/windows/vm/os_windows.cpp 2013-09-06 11:22:04.000000000 -0700 -+++ hotspot/src/os/windows/vm/os_windows.cpp 2014-04-20 12:39:29.000000000 -0700 +@@ -203,11 +213,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 +233,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 2013-09-06 11:22:04.000000000 -0700 ++++ ./hotspot/src/os/solaris/vm/os_solaris.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:04.000000000 -0700 ++++ ./hotspot/src/os/windows/vm/os_windows.cpp 2014-06-06 19:56:21.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. @@ -3727,7 +10118,35 @@ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it -@@ -1591,6 +1591,7 @@ +@@ -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() { +@@ -1591,6 +1597,7 @@ void os::win32::print_windows_version(outputStream* st) { OSVERSIONINFOEX osvi; @@ -3735,7 +10154,7 @@ ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); -@@ -1600,6 +1601,18 @@ +@@ -1600,6 +1607,18 @@ } int os_vers = osvi.dwMajorVersion * 1000 + osvi.dwMinorVersion; @@ -3754,7 +10173,7 @@ if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) { switch (os_vers) { case 3051: st->print(" Windows NT 3.51"); break; -@@ -1607,57 +1620,48 @@ +@@ -1607,57 +1626,48 @@ case 5000: st->print(" Windows 2000"); break; case 5001: st->print(" Windows XP"); break; case 5002: @@ -3848,7 +10267,7 @@ st->print(" Windows NT %d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion); } } else { -@@ -1669,6 +1673,11 @@ +@@ -1669,6 +1679,11 @@ st->print(" Windows %d.%d", osvi.dwMajorVersion, osvi.dwMinorVersion); } } @@ -3860,8 +10279,32 @@ st->print(" Build %d", osvi.dwBuildNumber); st->print(" %s", osvi.szCSDVersion); // service pack st->cr(); ---- hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp 2013-09-06 11:22:04.000000000 -0700 -+++ hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp 2014-04-28 17:39:01.000000000 -0700 +@@ -3079,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; +@@ -5584,3 +5604,9 @@ + } + + #endif ++ ++#ifndef PRODUCT ++void TestReserveMemorySpecial_test() { ++ // No tests available for this platform ++} ++#endif +--- ./hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp 2013-09-06 11:22:04.000000000 -0700 ++++ ./hotspot/src/os_cpu/bsd_x86/vm/os_bsd_x86.cpp 2014-06-06 19:56:22.000000000 -0700 @@ -945,7 +945,7 @@ if (rslt != 0) fatal(err_msg("pthread_stackseg_np failed with err = %d", rslt)); @@ -3871,8 +10314,8 @@ *size = ss.ss_size; #elif defined(_ALLBSD_SOURCE) pthread_attr_t attr; ---- hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp 2013-09-06 11:22:04.000000000 -0700 -+++ hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp 2014-04-20 12:39:31.000000000 -0700 +--- ./hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp 2013-09-06 11:22:04.000000000 -0700 ++++ ./hotspot/src/os_cpu/bsd_zero/vm/os_bsd_zero.cpp 2014-06-06 19:56:22.000000000 -0700 @@ -24,7 +24,7 @@ */ @@ -3882,8 +10325,158 @@ # include <pthread_np.h> /* For pthread_attr_get_np */ #endif ---- hotspot/src/share/vm/classfile/classFileParser.cpp 2013-09-06 11:22:10.000000000 -0700 -+++ hotspot/src/share/vm/classfile/classFileParser.cpp 2014-04-20 12:39:30.000000000 -0700 +--- ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp 2013-09-06 11:22:04.000000000 -0700 ++++ ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:04.000000000 -0700 ++++ ./hotspot/src/os_cpu/linux_x86/vm/os_linux_x86.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:09.000000000 -0700 ++++ ./hotspot/src/share/vm/c1/c1_GraphBuilder.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:09.000000000 -0700 ++++ ./hotspot/src/share/vm/c1/c1_LIR.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:09.000000000 -0700 ++++ ./hotspot/src/share/vm/c1/c1_LinearScan.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:09.000000000 -0700 ++++ ./hotspot/src/share/vm/c1/c1_Runtime1.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/classfile/classFileParser.cpp 2014-06-06 19:56:21.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. @@ -3932,13 +10525,714 @@ - // skip private, static and <init> methods - if ((!m->is_private()) && - (!m->is_static()) && -+ // 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/code/relocInfo.hpp 2013-09-06 11:22:10.000000000 -0700 -+++ hotspot/src/share/vm/code/relocInfo.hpp 2014-04-28 17:39:01.000000000 -0700 +--- ./hotspot/src/share/vm/classfile/javaClasses.cpp 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/classfile/javaClasses.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/classfile/javaClasses.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/classfile/symbolTable.cpp 2014-06-06 19:56:21.000000000 -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] ", *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=%d size=" SIZE_FORMAT "K] ", total, ++ 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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/classfile/symbolTable.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/classfile/systemDictionary.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/classfile/systemDictionary.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/classfile/vmSymbols.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/code/nmethod.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/code/nmethod.hpp 2014-06-06 19:56:20.000000000 -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/code/relocInfo.hpp 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/code/relocInfo.hpp 2014-06-06 19:56:22.000000000 -0700 @@ -371,7 +371,7 @@ // "immediate" in the prefix header word itself. This optimization // is invisible outside this module.) @@ -3957,9 +11251,5455 @@ assert(relocInfo::fits_into_immediate(datalen), "datalen in limits"); return relocInfo(relocInfo::data_prefix_tag, relocInfo::RAW_BITS, relocInfo::datalen_tag | datalen); } ---- hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp 2013-09-06 11:22:12.000000000 -0700 -+++ hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp 2014-04-20 12:39:30.000000000 -0700 -@@ -109,7 +109,7 @@ +--- ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsOopClosures.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp 2014-06-06 19:56:20.000000000 -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()), +- ¬Older, +- 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()), ++ ¬Older, ++ 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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmCMSOperations.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:10.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1CardCounts.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-06-06 19:56:20.000000000 -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); ++ char* addr = Universe::preferred_heap_base(total_reserved, heap_alignment, Universe::UnscaledNarrowOop); + +- ReservedHeapSpace heap_rs(total_reserved, HeapRegion::GrainBytes, ++ 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); ++ addr = Universe::preferred_heap_base(total_reserved, heap_alignment, Universe::ZeroBasedNarrowOop); + +- ReservedHeapSpace heap_rs0(total_reserved, HeapRegion::GrainBytes, ++ 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()) { +- 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); ++ if (!silent) { gclog_or_tty->print("Roots (excluding permgen) "); } ++ VerifyRootsClosure rootsCl(vo); + ++ 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(®_cl); ++} ++ ++void G1CollectedHeap::unregister_nmethod(nmethod* nm) { ++ CollectedHeap::unregister_nmethod(nm); ++ ++ guarantee(nm != NULL, "sanity"); ++ UnregisterNMethodOopClosure reg_cl(this, nm); ++ nm->oops_do(®_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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1EvacFailure.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp 2014-06-06 19:56:21.000000000 -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(¤t); ++ 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(¤t); ++} + + void G1RemSet::print_summary_info() { +- G1CollectedHeap* g1 = G1CollectedHeap::heap(); ++ G1RemSetSummary current; ++ current.initialize(this); ++ ++ print_summary_info(¤t, " 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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1RemSet.hpp 2014-06-06 19:56:21.000000000 -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 { +--- ./hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp 2014-06-06 19:56:21.000000000 -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); ++} +--- ./hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.hpp 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1RemSetSummary.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:11.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/shared/gcTimer.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/shared/gcTimer.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/shared/gcTrace.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/shared/gcTrace.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/shared/gcTraceSend.cpp 2014-06-06 19:56:23.000000000 -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" +@@ -109,7 +111,7 @@ if (e.should_commit()) { e.set_gcId(_shared_gc_info.id()); e.set_data(to_trace_struct(pf_info)); @@ -3968,8 +16708,1127 @@ e.commit(); } } ---- hotspot/src/share/vm/oops/objArrayKlass.cpp 2013-09-06 11:22:13.000000000 -0700 -+++ hotspot/src/share/vm/oops/objArrayKlass.cpp 2014-04-20 12:39:30.000000000 -0700 +--- ./hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/shared/gcTraceTime.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_implementation/shared/objectCountEventSender.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_interface/collectedHeap.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/gc_interface/collectedHeap.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/interpreter/interpreterRuntime.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/interpreter/interpreterRuntime.hpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/cardTableModRefBS.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/cardTableModRefBS.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/collectorPolicy.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:12.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/defNewGeneration.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/genCollectedHeap.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/generation.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/generation.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/iterator.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/sharedHeap.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/sharedHeap.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/universe.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/memory/universe.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/oops/constantPoolOop.cpp 2014-06-06 19:56:23.000000000 -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,32 +1067,77 @@ + } // end compare_entry_to() + + +-// 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) { ++// 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); ++ } + +- int dest_i = to_i; // leave original alone for debug purposes ++} // end extend_operands() + +- for (int src_i = start_i; src_i <= end_i; /* see loop bottom */ ) { +- copy_entry_to(from_cp, src_i, to_cp, dest_i, CHECK); + +- switch (from_cp->tag_at(src_i).value()) { +- case JVM_CONSTANT_Double: +- case JVM_CONSTANT_Long: +- // double and long take two constant pool entries +- src_i += 2; +- dest_i += 2; +- break; +- +- default: +- // all others take one constant pool entry +- src_i++; +- dest_i++; +- break; +- } ++// 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()); +@@ -1116,7 +1150,7 @@ + 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); ++ 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), +@@ -1124,7 +1158,7 @@ + (len = old_off) * sizeof(u2)); + fillp += len; + // first part of src +- Copy::conjoint_memory_atomic(to_cp->operands()->short_at_addr(0), ++ Copy::conjoint_memory_atomic(from_cp->operands()->short_at_addr(0), + new_operands->short_at_addr(fillp), + (len = from_off) * sizeof(u2)); + fillp += len; +@@ -1134,7 +1168,7 @@ + (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), ++ 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; +@@ -1152,8 +1186,39 @@ + to_cp->set_operands(new_operands()); + } + } ++} // end copy_operands() + +-} // end copy_cp_to() ++ ++// 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 */ ) { ++ copy_entry_to(from_cp, src_i, to_cp, dest_i, CHECK); ++ ++ switch (from_cp->tag_at(src_i).value()) { ++ case JVM_CONSTANT_Double: ++ case JVM_CONSTANT_Long: ++ // double and long take two constant pool entries ++ src_i += 2; ++ dest_i += 2; ++ break; ++ ++ default: ++ // all others take one constant pool entry ++ src_i++; ++ dest_i++; ++ break; ++ } ++ } ++ copy_operands(from_cp, to_cp, CHECK); ++ ++} // 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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/oops/constantPoolOop.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/oops/instanceKlass.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/oops/instanceKlass.hpp 2014-06-06 19:56:21.000000000 -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/oops/objArrayKlass.cpp 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/oops/objArrayKlass.cpp 2014-04-19 01:27:07.000000000 -0700 @@ -149,7 +149,7 @@ if (element_is_null || Klass::cast((new_val->klass()))->is_subtype_of(bound)) { @@ -3979,8 +17838,621 @@ } else { // We must do a barrier to cover the partial copy. const size_t pd = pointer_delta(p, dst, (size_t)heapOopSize); ---- hotspot/src/share/vm/opto/matcher.cpp 2013-09-06 11:22:14.000000000 -0700 -+++ hotspot/src/share/vm/opto/matcher.cpp 2014-04-20 12:39:30.000000000 -0700 +--- ./hotspot/src/share/vm/opto/bytecodeInfo.cpp 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/bytecodeInfo.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:13.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/c2_globals.hpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/callGenerator.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/coalesce.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/compile.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/compile.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/doCall.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/graphKit.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/library_call.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/loopTransform.cpp 2014-06-06 19:56:21.000000000 -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/matcher.cpp 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/matcher.cpp 2014-04-19 01:27:07.000000000 -0700 @@ -464,17 +464,17 @@ C->FIRST_STACK_mask().Clear(); @@ -4042,8 +18514,76 @@ aligned_stack_mask.clear_to_sets(RegMask::SlotsPerVecY); assert(aligned_stack_mask.is_AllStack(), "should be infinite stack"); *idealreg2spillmask[Op_VecY] = *idealreg2regmask[Op_VecY]; ---- hotspot/src/share/vm/opto/output.cpp 2013-09-06 11:22:14.000000000 -0700 -+++ hotspot/src/share/vm/opto/output.cpp 2014-04-20 12:39:30.000000000 -0700 +--- ./hotspot/src/share/vm/opto/memnode.cpp 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/memnode.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/memnode.hpp 2014-06-06 19:56:21.000000000 -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/output.cpp 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/output.cpp 2014-04-19 01:27:07.000000000 -0700 @@ -345,6 +345,11 @@ uint* jmp_offset = NEW_RESOURCE_ARRAY(uint,nblocks); uint* jmp_size = NEW_RESOURCE_ARRAY(uint,nblocks); @@ -4082,14 +18622,794 @@ if (needs_padding && offset <= 0) offset -= nop_size; ---- hotspot/src/share/vm/prims/methodHandles.cpp 2013-09-06 11:22:15.000000000 -0700 -+++ hotspot/src/share/vm/prims/methodHandles.cpp 2014-04-20 12:39:30.000000000 -0700 -@@ -175,30 +175,32 @@ +--- ./hotspot/src/share/vm/opto/reg_split.cpp 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/opto/reg_split.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/prims/jni.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:14.000000000 -0700 ++++ ./hotspot/src/share/vm/prims/jvmtiClassFileReconstituter.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/prims/jvmtiRedefineClasses.cpp 2014-06-06 19:56:20.000000000 -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"); + +- // attach new constant pool to klass +- scratch_cp->set_pool_holder(scratch_class()); ++ // 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_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 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/prims/jvmtiRedefineClasses.hpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/prims/methodHandles.cpp 2014-06-06 19:56:20.000000000 -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_method_MemberName(oop mname_oop, methodOop m, bool do_dispatch, +-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,31 +178,34 @@ + return NULL; + } + +-oop MethodHandles::init_method_MemberName(oop mname_oop, methodOop m, bool do_dispatch, - klassOop receiver_limit) { -+ 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 @@ -4128,7 +19448,7 @@ vmindex = vt->index_of_miranda(m->name(), m->signature()); } else if (!do_dispatch || m->can_be_statically_bound()) { flags |= IS_METHOD | (JVM_REF_invokeSpecial << REFERENCE_KIND_SHIFT); -@@ -207,10 +209,36 @@ +@@ -207,10 +214,37 @@ vmindex = m->vtable_index(); } @@ -4158,6 +19478,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 @@ -4166,7 +19487,66 @@ // Note: name and type can be lazily computed by resolve_MemberName, // if Java code needs them as resolved String and MethodType objects. // The clazz must be eagerly stored, because it provides a GC -@@ -571,7 +599,7 @@ +@@ -218,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, +@@ -242,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) +@@ -270,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(); +@@ -571,7 +606,7 @@ // An unresolved member name is a mere symbolic reference. // Resolving it plants a vmtarget/vmindex in it, // which refers dirctly to JVM internals. @@ -4175,7 +19555,7 @@ Handle empty; assert(java_lang_invoke_MemberName::is_instance(mname()), ""); -@@ -650,21 +678,49 @@ +@@ -650,21 +685,49 @@ if (ref_kind == JVM_REF_invokeStatic) { //do_dispatch = false; // no need, since statics are never dispatched LinkResolver::resolve_static_call(result, @@ -4230,7 +19610,16 @@ } else { assert(false, err_msg("ref_kind=%d", ref_kind)); } -@@ -681,7 +737,7 @@ +@@ -672,7 +735,7 @@ + return empty; + } + } +- return init_method_MemberName(mname(), result, THREAD); ++ return init_method_MemberName(mname, result, THREAD); + } + case IS_CONSTRUCTOR: + { +@@ -681,7 +744,7 @@ assert(!HAS_PENDING_EXCEPTION, ""); if (name == vmSymbols::object_initializer_name()) { LinkResolver::resolve_special_call(result, @@ -4239,7 +19628,199 @@ } else { break; // will throw after end of switch } -@@ -1025,7 +1081,12 @@ +@@ -690,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: + { +@@ -703,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; + } +@@ -795,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: +@@ -832,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) +@@ -841,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 +@@ -882,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) +@@ -895,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 +@@ -911,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 +@@ -1002,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 + +@@ -1025,7 +1167,12 @@ if (VerifyMethodHandles && caller_jh != NULL && java_lang_invoke_MemberName::clazz(mname()) != NULL) { klassOop reference_klass = java_lang_Class::as_klassOop(java_lang_invoke_MemberName::clazz(mname())); @@ -4253,7 +19834,7 @@ // Emulate LinkResolver::check_klass_accessability. klassOop caller = java_lang_Class::as_klassOop(JNIHandles::resolve_non_null(caller_jh)); if (!Reflection::verify_class_access(caller, -@@ -1036,7 +1097,11 @@ +@@ -1036,7 +1183,11 @@ } } @@ -4266,9 +19847,52 @@ if (resolved.is_null()) { int flags = java_lang_invoke_MemberName::flags(mname()); int ref_kind = (flags >> REFERENCE_KIND_SHIFT) & REFERENCE_KIND_MASK; ---- hotspot/src/share/vm/prims/methodHandles.hpp 2013-09-06 11:22:15.000000000 -0700 -+++ hotspot/src/share/vm/prims/methodHandles.hpp 2014-04-20 12:39:30.000000000 -0700 -@@ -51,12 +51,12 @@ +@@ -1109,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()); +@@ -1156,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 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/prims/methodHandles.hpp 2014-06-06 19:56:20.000000000 -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); + +@@ -51,21 +50,21 @@ public: // working with member names @@ -4276,15 +19900,253 @@ + 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, +- 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 receiver_limit); -+ klassOop resolved_klass); - static oop init_field_MemberName(oop mname_oop, klassOop field_holder, +- 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); ---- hotspot/src/share/vm/runtime/atomic.cpp 2013-09-06 11:22:15.000000000 -0700 -+++ hotspot/src/share/vm/runtime/atomic.cpp 2014-04-20 12:39:30.000000000 -0700 +- 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 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/prims/whitebox.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/arguments.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/arguments.hpp 2014-06-06 19:56:20.000000000 -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/atomic.cpp 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/atomic.cpp 2014-06-06 19:56:22.000000000 -0700 @@ -54,6 +54,12 @@ #ifdef TARGET_OS_ARCH_windows_x86 # include "atomic_windows_x86.inline.hpp" @@ -4298,9 +20160,124 @@ #ifdef TARGET_OS_ARCH_linux_arm # include "atomic_linux_arm.inline.hpp" #endif ---- hotspot/src/share/vm/runtime/mutexLocker.cpp 2013-09-06 11:22:15.000000000 -0700 -+++ hotspot/src/share/vm/runtime/mutexLocker.cpp 2014-04-20 12:39:30.000000000 -0700 -@@ -133,13 +133,15 @@ +--- ./hotspot/src/share/vm/runtime/frame.cpp 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/frame.cpp 2014-06-06 19:56:20.000000000 -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 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/globals.hpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/mutexLocker.cpp 2014-06-06 19:56:23.000000000 -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; +@@ -133,13 +134,15 @@ Mutex* Management_lock = NULL; Monitor* Service_lock = NULL; @@ -4319,7 +20296,7 @@ #define MAX_NUM_MUTEX 128 static Monitor * _mutex_array[MAX_NUM_MUTEX]; -@@ -215,7 +217,6 @@ +@@ -215,7 +218,6 @@ def(Patching_lock , Mutex , special, true ); // used for safepointing and code patching. def(ObjAllocPost_lock , Monitor, special, false); def(Service_lock , Monitor, special, true ); // used for service thread operations @@ -4327,7 +20304,15 @@ def(JmethodIdCreation_lock , Mutex , leaf, true ); // used for creating jmethodIDs. def(SystemDictionary_lock , Monitor, leaf, true ); // lookups done by VM thread -@@ -278,12 +279,17 @@ +@@ -262,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 ); +@@ -278,12 +281,17 @@ def(MethodCompileQueue_lock , Monitor, nonleaf+4, true ); def(Debug2_lock , Mutex , nonleaf+4, true ); def(Debug3_lock , Mutex , nonleaf+4, true ); @@ -4347,9 +20332,24 @@ } GCMutexLocker::GCMutexLocker(Monitor * mutex) { ---- hotspot/src/share/vm/runtime/mutexLocker.hpp 2013-09-06 11:22:15.000000000 -0700 -+++ hotspot/src/share/vm/runtime/mutexLocker.hpp 2014-04-20 12:39:30.000000000 -0700 -@@ -135,13 +135,15 @@ +--- ./hotspot/src/share/vm/runtime/mutexLocker.hpp 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/mutexLocker.hpp 2014-06-06 19:56:23.000000000 -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 +@@ -135,13 +136,15 @@ extern Mutex* Management_lock; // a lock used to serialize JVM management extern Monitor* Service_lock; // a lock used for service thread operation @@ -4368,8 +20368,8 @@ // A MutexLocker provides mutual exclusion with respect to a given mutex // for the scope which contains the locker. The lock is an OS lock, not ---- hotspot/src/share/vm/runtime/objectMonitor.cpp 2013-09-06 11:22:15.000000000 -0700 -+++ hotspot/src/share/vm/runtime/objectMonitor.cpp 2014-04-20 12:39:30.000000000 -0700 +--- ./hotspot/src/share/vm/runtime/objectMonitor.cpp 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/objectMonitor.cpp 2014-06-06 19:56:22.000000000 -0700 @@ -1684,7 +1684,7 @@ } iterator->_notified = 1 ; @@ -4388,8 +20388,8 @@ if (Policy != 4) { iterator->TState = ObjectWaiter::TS_ENTER ; } ---- hotspot/src/share/vm/runtime/os.cpp 2013-09-06 11:22:15.000000000 -0700 -+++ hotspot/src/share/vm/runtime/os.cpp 2014-04-28 17:39:01.000000000 -0700 +--- ./hotspot/src/share/vm/runtime/os.cpp 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/os.cpp 2014-06-06 19:56:22.000000000 -0700 @@ -399,13 +399,6 @@ if (_native_java_library == NULL) { vm_exit_during_initialization("Unable to load native library", ebuf); @@ -4414,8 +20414,8 @@ "%/classes"; char* sysclasspath = format_boot_path(classpath_format, home, home_len, fileSep, pathSep); if (sysclasspath == NULL) return false; ---- hotspot/src/share/vm/runtime/os.hpp 2013-09-06 11:22:15.000000000 -0700 -+++ hotspot/src/share/vm/runtime/os.hpp 2014-04-20 12:39:30.000000000 -0700 +--- ./hotspot/src/share/vm/runtime/os.hpp 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/os.hpp 2014-06-06 19:56:23.000000000 -0700 @@ -30,6 +30,9 @@ #include "runtime/extendedPC.hpp" #include "runtime/handles.hpp" @@ -4426,6 +20426,17 @@ #ifdef TARGET_OS_FAMILY_linux # include "jvm_linux.h" # include <setjmp.h> +@@ -330,8 +333,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(); @@ -755,8 +758,8 @@ # include "os_windows.hpp" #endif @@ -4436,8 +20447,8 @@ #endif #ifdef TARGET_OS_ARCH_linux_x86 # include "os_linux_x86.hpp" ---- hotspot/src/share/vm/runtime/reflection.cpp 2013-09-06 11:22:15.000000000 -0700 -+++ hotspot/src/share/vm/runtime/reflection.cpp 2014-04-20 12:39:30.000000000 -0700 +--- ./hotspot/src/share/vm/runtime/reflection.cpp 2013-09-06 11:22:15.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/reflection.cpp 2014-01-18 12:16:14.000000000 -0800 @@ -460,7 +460,7 @@ // doesn't have a classloader. if ((current_class == NULL) || @@ -4447,8 +20458,453 @@ is_same_class_package(current_class, new_class)) { return true; } ---- hotspot/src/share/vm/runtime/vmThread.cpp 2013-09-06 11:22:16.000000000 -0700 -+++ hotspot/src/share/vm/runtime/vmThread.cpp 2014-04-20 12:39:30.000000000 -0700 +--- ./hotspot/src/share/vm/runtime/sweeper.cpp 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/sweeper.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/sweeper.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/thread.cpp 2014-06-06 19:56:23.000000000 -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 +- 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); ++ ++ // 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); + call_initializeSystemClass(CHECK_0); + + // get the Java runtime name after java.lang.System is initialized +--- ./hotspot/src/share/vm/runtime/virtualspace.cpp 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/virtualspace.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/virtualspace.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/vmThread.cpp 2014-06-06 19:56:23.000000000 -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(); @@ -390,7 +390,7 @@ // Only write caller thread information for non-concurrent vm operations. // For concurrent vm operations, the thread id is set to 0 indicating thread is unknown. @@ -4458,8 +20914,95 @@ event.commit(); } ---- hotspot/src/share/vm/services/gcNotifier.cpp 2013-09-06 11:22:16.000000000 -0700 -+++ hotspot/src/share/vm/services/gcNotifier.cpp 2014-04-20 12:39:29.000000000 -0700 +--- ./hotspot/src/share/vm/runtime/vm_operations.cpp 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/vm_operations.cpp 2014-06-06 19:56:23.000000000 -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 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/runtime/vm_operations.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/services/attachListener.cpp 2014-06-06 19:56:21.000000000 -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/gcNotifier.cpp 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/services/gcNotifier.cpp 2014-01-18 12:16:14.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. @@ -4483,8 +21026,366 @@ klassOop k = Management::sun_management_GarbageCollectorImpl_klass(CHECK); instanceKlassHandle gc_mbean_klass(THREAD, k); ---- hotspot/src/share/vm/trace/tracetypes.xml 2013-09-06 11:22:17.000000000 -0700 -+++ hotspot/src/share/vm/trace/tracetypes.xml 2014-04-20 12:39:30.000000000 -0700 +--- ./hotspot/src/share/vm/services/management.cpp 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/services/management.cpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:16.000000000 -0700 ++++ ./hotspot/src/share/vm/services/memTracker.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/noTraceBackend.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/trace.xml 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/traceBackend.hpp 2014-06-06 19:56:21.000000000 -0700 +@@ -26,10 +26,11 @@ + + #if INCLUDE_TRACE + +-#include "trace/traceTime.hpp" +-#include "tracefiles/traceEventIds.hpp" + #include "runtime/globals.hpp" + #include "runtime/os.hpp" ++#include "trace/traceTime.hpp" ++#include "tracefiles/traceEventIds.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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/traceEvent.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/traceEventClasses.xsl 2014-06-06 19:56:21.000000000 -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:output method="text" indent="no" omit-xml-declaration="yes"/> + <xsl:import href="xsl_util.xsl"/> ++<xsl:output method="text" indent="no" omit-xml-declaration="yes"/> + + <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& time) {} ++ void set_endtime(const Ticks& 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& time) { _', @field, ' = time; }')"/> + #else +- <xsl:value-of select="concat('void set_', @field, '(jlong ignore) {}')"/> ++<xsl:value-of select="concat(' void set_', @field, '(const Ticks& 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& time) { _', @field, ' = time; }')"/> + #else +- <xsl:value-of select="concat('void set_', @field, '(jlong ignore) {}')"/> ++ <xsl:value-of select="concat(' void set_', @field, '(const Tickspan& 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("', @label, '", _', @field, ');')"/> ++ <xsl:choose> ++ <xsl:when test="@type='TICKSPAN'"> ++ <xsl:value-of select="concat(' ts.print_val("', @label, '", _', @field, '.value());')"/> ++ </xsl:when> ++ <xsl:when test="@type='TICKS'"> ++ <xsl:value-of select="concat(' ts.print_val("', @label, '", _', @field, '.value());')"/> ++ </xsl:when> ++ <xsl:otherwise> ++ <xsl:value-of select="concat(' ts.print_val("', @label, '", _', @field, ');')"/> ++ </xsl:otherwise> ++ </xsl:choose> + <xsl:if test="position() != last()"> + <xsl:text> + ts.print(", "); +--- ./hotspot/src/share/vm/trace/traceEventIds.xsl 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/traceEventIds.xsl 2014-06-06 19:56:21.000000000 -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:output method="text" indent="no" omit-xml-declaration="yes"/> + <xsl:import href="xsl_util.xsl"/> ++<xsl:output method="text" indent="no" omit-xml-declaration="yes"/> + + <xsl:template match="/"> + <xsl:call-template name="file-header"/> +--- ./hotspot/src/share/vm/trace/traceMacros.hpp 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/traceMacros.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/traceTime.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/traceTypes.xsl 2014-06-06 19:56:21.000000000 -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:output method="text" indent="no" omit-xml-declaration="yes"/> + <xsl:import href="xsl_util.xsl"/> ++<xsl:output method="text" indent="no" omit-xml-declaration="yes"/> + + <xsl:template match="/"> + <xsl:call-template name="file-header"/> +@@ -32,11 +32,13 @@ + #ifndef TRACEFILES_JFRTYPES_HPP + #define TRACEFILES_JFRTYPES_HPP + +-#include "trace/traceDataTypes.hpp" +-#include "utilities/globalDefinitions.hpp" +-#include "oops/symbol.hpp" ++ + #include "oops/klassOop.hpp" + #include "oops/methodOop.hpp" ++#include "oops/symbol.hpp" ++#include "trace/traceDataTypes.hpp" ++#include "utilities/globalDefinitions.hpp" ++#include "utilities/ticks.hpp" + + enum JVMContentType { + _not_a_content_type = (JVM_CONTENT_TYPES_START - 1), +--- ./hotspot/src/share/vm/trace/tracetypes.xml 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/tracetypes.xml 2014-06-06 19:56:23.000000000 -0700 @@ -60,7 +60,7 @@ <types> <content_types> @@ -4494,6 +21395,25 @@ <value type="UTF8" field="name" label="Thread name"/> </content_type> +@@ -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" @@ -294,8 +294,8 @@ type="u8" sizeop="sizeof(u8)"/> @@ -4505,29 +21425,374 @@ <!-- VM Thread ID Note: changed from U2 to U8 for hotspot --> <primary_type symbol="VMTHREAD" datatype="U8" contenttype="VMTHREAD" ---- hotspot/src/share/vm/utilities/vmError.cpp 2013-09-06 11:22:17.000000000 -0700 -+++ hotspot/src/share/vm/utilities/vmError.cpp 2014-04-20 12:39:30.000000000 -0700 -@@ -698,6 +698,18 @@ - st->cr(); - } +--- ./hotspot/src/share/vm/trace/tracing.hpp 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/trace/tracing.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/utilities/globalDefinitions.hpp 2014-06-06 19:56:23.000000000 -0700 +@@ -373,6 +373,14 @@ + + #define align_size_up_(size, alignment) (((size) + ((alignment) - 1)) & ~((alignment) - 1)) -+#ifdef LINUX -+ STEP(193, "(printing large pages allocation errors)") ++inline bool is_size_aligned(size_t size, size_t alignment) { ++ return align_size_up_(size, alignment) == size; ++} + -+ 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 ++inline bool is_ptr_aligned(void* ptr, size_t alignment) { ++ return align_size_up_((intptr_t)ptr, (intptr_t)alignment) == (intptr_t)ptr; ++} + - STEP(195, "(printing code cache information)" ) + 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); + } - if (_verbose && Universe::is_fully_initialized()) { ---- hotspot/test/compiler/5091921/Test7005594.sh 2013-09-06 11:22:17.000000000 -0700 -+++ hotspot/test/compiler/5091921/Test7005594.sh 2014-04-20 12:39:32.000000000 -0700 ++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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/utilities/growableArray.hpp 2014-06-06 19:56:21.000000000 -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; +--- ./hotspot/src/share/vm/utilities/ticks.cpp 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/src/share/vm/utilities/ticks.cpp 2014-06-06 19:56:21.000000000 -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); ++} +--- ./hotspot/src/share/vm/utilities/ticks.hpp 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/src/share/vm/utilities/ticks.hpp 2014-06-06 19:56:21.000000000 -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 +--- ./hotspot/src/share/vm/utilities/ticks.inline.hpp 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/src/share/vm/utilities/ticks.inline.hpp 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/src/share/vm/utilities/vmError.cpp 2014-06-06 19:56:23.000000000 -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); + } +--- ./hotspot/test/compiler/5091921/Test7005594.sh 2013-09-06 11:22:17.000000000 -0700 ++++ ./hotspot/test/compiler/5091921/Test7005594.sh 2014-06-06 19:56:22.000000000 -0700 @@ -60,6 +60,9 @@ # Windows/MKS MEM=`"$ROOTDIR/mksnt/sysinf" memory -v | grep "Total Physical Memory: " | sed 's/Total Physical Memory: *//g'` @@ -4538,8 +21803,1454 @@ else echo "Unable to determine amount of physical memory on the machine" fi ---- hotspot/test/runtime/7110720/Test7110720.sh 2013-09-06 11:22:20.000000000 -0700 -+++ hotspot/test/runtime/7110720/Test7110720.sh 2014-04-20 12:39:32.000000000 -0700 +--- ./hotspot/test/compiler/8004051/Test8004051.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/compiler/8004051/Test8004051.java 2014-06-06 19:56:21.000000000 -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; ++ } ++} +--- ./hotspot/test/compiler/codegen/LoadWithMask.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/compiler/codegen/LoadWithMask.java 2014-06-06 19:56:21.000000000 -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(); ++ } ++ } ++} +--- ./hotspot/test/compiler/codegen/LoadWithMask2.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/compiler/codegen/LoadWithMask2.java 2014-06-06 19:56:21.000000000 -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"); ++ } ++} +--- ./hotspot/test/compiler/gcbarriers/G1CrashTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/compiler/gcbarriers/G1CrashTest.java 2014-06-06 19:56:21.000000000 -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; ++ } ++} +--- ./hotspot/test/compiler/print/PrintInlining.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/compiler/print/PrintInlining.java 2014-06-06 19:56:21.000000000 -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"); ++ } ++} +--- ./hotspot/test/compiler/reflection/ArrayNewInstanceOfVoid.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/compiler/reflection/ArrayNewInstanceOfVoid.java 2014-06-06 19:56:21.000000000 -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 ++ } ++ } ++} +--- ./hotspot/test/compiler/regalloc/C1ObjectSpillInLogicOp.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/compiler/regalloc/C1ObjectSpillInLogicOp.java 2014-06-06 19:56:21.000000000 -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); ++ } ++ } ++} +--- ./hotspot/test/gc/8000311/Test8000311.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/8000311/Test8000311.java 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:19.000000000 -0700 ++++ ./hotspot/test/gc/TestVerifyBeforeGCDuringStartup.java 1969-12-31 16:00:00.000000000 -0800 +@@ -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); +- } +-} +--- ./hotspot/test/gc/TestVerifyDuringStartup.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/TestVerifyDuringStartup.java 2014-06-06 19:56:21.000000000 -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); ++ } ++} +--- ./hotspot/test/gc/TestVerifySilently.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/TestVerifySilently.java 2014-06-06 19:56:21.000000000 -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); ++ } ++} +--- ./hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/arguments/TestDynMaxHeapFreeRatio.java 2014-06-06 19:56:21.000000000 -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(); ++ } ++ ++} +--- ./hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/arguments/TestDynMinHeapFreeRatio.java 2014-06-06 19:56:21.000000000 -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(); ++ } ++} +--- ./hotspot/test/gc/g1/TestHumongousCodeCacheRoots.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/g1/TestHumongousCodeCacheRoots.java 2014-06-06 19:56:21.000000000 -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); ++ } ++} ++ +--- ./hotspot/test/gc/g1/TestPrintRegionRememberedSetInfo.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/g1/TestPrintRegionRememberedSetInfo.java 2014-06-06 19:56:21.000000000 -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."); ++ } ++ } ++} ++ +--- ./hotspot/test/gc/g1/TestSummarizeRSetStats.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/g1/TestSummarizeRSetStats.java 2014-06-06 19:56:21.000000000 -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); ++ } ++} ++ +--- ./hotspot/test/gc/g1/TestSummarizeRSetStatsPerRegion.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/g1/TestSummarizeRSetStatsPerRegion.java 2014-06-06 19:56:21.000000000 -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); ++ } ++} +--- ./hotspot/test/gc/g1/TestSummarizeRSetStatsThreads.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/g1/TestSummarizeRSetStatsThreads.java 2014-06-06 19:56:21.000000000 -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); ++ } ++} +--- ./hotspot/test/gc/g1/TestSummarizeRSetStatsTools.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/gc/g1/TestSummarizeRSetStatsTools.java 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:19.000000000 -0700 ++++ ./hotspot/test/runtime/6929067/Test6929067.sh 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:19.000000000 -0700 ++++ ./hotspot/test/runtime/7107135/Test7107135.sh 2014-06-06 19:56:21.000000000 -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 + +--- ./hotspot/test/runtime/7110720/Test7110720.sh 2013-09-06 11:22:20.000000000 -0700 ++++ ./hotspot/test/runtime/7110720/Test7110720.sh 2014-06-06 19:56:22.000000000 -0700 @@ -28,7 +28,7 @@ # set platform-dependent variables OS=`uname -s` @@ -4549,8 +23260,8 @@ FS="/" RM=/bin/rm CP=/bin/cp ---- hotspot/test/runtime/7158800/Test7158800.sh 1969-12-31 16:00:00.000000000 -0800 -+++ hotspot/test/runtime/7158800/Test7158800.sh 2014-04-20 12:39:32.000000000 -0700 +--- ./hotspot/test/runtime/7158800/Test7158800.sh 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/runtime/7158800/Test7158800.sh 2014-06-06 19:56:22.000000000 -0700 @@ -0,0 +1,91 @@ +#!/bin/sh +# @@ -4643,8 +23354,889 @@ + echo "Test Passed" + exit 0 +fi ---- jaxp/.hgtags 2013-09-06 11:22:52.000000000 -0700 -+++ jaxp/.hgtags 2014-04-20 12:39:50.000000000 -0700 +--- ./hotspot/test/runtime/jsig/Test8017498.sh 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/runtime/jsig/Test8017498.sh 2014-06-06 19:56:21.000000000 -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 +--- ./hotspot/test/runtime/jsig/TestJNI.c 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/runtime/jsig/TestJNI.c 2014-06-06 19:56:21.000000000 -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 ++ +--- ./hotspot/test/runtime/jsig/TestJNI.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/runtime/jsig/TestJNI.java 2014-06-06 19:56:21.000000000 -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); ++ } ++} ++ +--- ./hotspot/test/runtime/memory/LargePages/TestLargePagesFlags.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/runtime/memory/LargePages/TestLargePagesFlags.java 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:20.000000000 -0700 ++++ ./hotspot/test/testlibrary/OutputAnalyzerTest.java 2014-06-06 19:56:21.000000000 -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); ++ } ++ } + } + } +--- ./hotspot/test/testlibrary/com/oracle/java/testlibrary/DynamicVMOptionChecker.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/testlibrary/com/oracle/java/testlibrary/DynamicVMOptionChecker.java 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:20.000000000 -0700 ++++ ./hotspot/test/testlibrary/com/oracle/java/testlibrary/OutputAnalyzer.java 2014-06-06 19:56:21.000000000 -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 +--- ./hotspot/test/testlibrary/com/oracle/java/testlibrary/TestDynamicVMOption.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./hotspot/test/testlibrary/com/oracle/java/testlibrary/TestDynamicVMOption.java 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:20.000000000 -0700 ++++ ./hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java 2014-06-06 19:56:21.000000000 -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 2013-09-06 11:22:52.000000000 -0700 ++++ ./jaxp/.hgtags 2014-06-06 19:56:13.000000000 -0700 @@ -123,6 +123,7 @@ bcd31fa1e3c6f51b4fdd427ef905188cdac57164 jdk7-b146 067fb18071e3872698f6218724958bd0cebf30a3 jdk7u1-b01 @@ -4676,10 +24268,11 @@ 5e87aee78c91efa65bd5aeb37bcc1c1c637a7f0c jdk7u25-b12 83b80c094befd08cbac4247d9b8f12c6a039f23f jdk7u25-b13 68cc0d2a49f09b5c611b2775f2e66de1022bdedc jdk7u25-b14 -@@ -343,3 +360,60 @@ +@@ -343,3 +360,84 @@ 66363323f14d85d4ab28e883a3323b9d72dea5fd jdk7u40-b42 c0bd71414ea513f54f23965936a837fca093ac91 jdk7u40-b43 91bc4534851265291bb3b16452a0968d6909979f jdk7u40-b60 ++d9b92749a0f4c8e6c6f4fe11210c2a02d70bae74 jdk7u60-b00 +c500d4ec41ff2117eabfa33e640b6df2f21deb3d jdk7u40-b61 +9e3f8ab9d17be6b1a4a097fcc5bc5412013d3e86 jdk7u40-b62 +1a7e2024963d3a8d6cde209de0967ac43418b82a jdk7u45-b01 @@ -4721,6 +24314,8 @@ +114654a331e2f97a048d7ed43d06d7512e20e2c1 jdk7u51-b13 +3161567adae93d12c64b79592bda3046f0c0a22d jdk7u51-b30 +e85ee81daec2ea2fa21bf804d03431b0664c6dff jdk7u51-b31 ++1a6c3258ad218bf286c47d65e4cd80eb6763f8df jdk7u51-b33 ++9cdc04d76eb19a871c739625acd801ed1b24bed9 jdk7u51-b34 +807946db29f42477e8d8390be01c7e27280bc85c jdk7u55-b00 +bb7779a8fc4d14719e907b8890a2665476cf45ae jdk7u55-b01 +8275dc4db7f852edb331ae48d663d08b9ab2b5c7 jdk7u55-b02 @@ -4737,8 +24332,29 @@ +708a1872f5bb8ba58ecc9fcbf4e12e6fa4783998 jdk7u55-b12 +14719f73596f5c90e3f46c0f4312f32e5b105edd jdk7u55-b13 +01f26830f88cf4f10897416fe1f4f372efcdecf5 jdk7u55-b30 ---- jaxp/src/com/sun/org/apache/xalan/internal/XalanConstants.java 2013-09-06 11:22:55.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/XalanConstants.java 2014-04-20 12:39:46.000000000 -0700 ++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 +--- ./jaxp/src/com/sun/org/apache/xalan/internal/XalanConstants.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/XalanConstants.java 2014-06-06 19:56:13.000000000 -0700 @@ -39,33 +39,138 @@ // // Constants @@ -4891,8 +24507,28 @@ //all access keyword public static final String ACCESS_EXTERNAL_ALL = "all"; ---- jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java 2013-09-06 11:22:55.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java 2014-04-20 12:39:46.000000000 -0700 +@@ -83,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/lib/ExsltStrings.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java 2014-01-18 12:16:08.000000000 -0800 @@ -52,6 +52,8 @@ */ public class ExsltStrings extends ExsltBase @@ -4975,8 +24611,8 @@ } - } ---- jaxp/src/com/sun/org/apache/xalan/internal/lib/Extensions.java 2013-09-06 11:22:55.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/lib/Extensions.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xalan/internal/lib/Extensions.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/lib/Extensions.java 2014-01-18 12:16:08.000000000 -0800 @@ -56,6 +56,7 @@ */ public class Extensions @@ -5086,8 +24722,694 @@ } } } ---- jaxp/src/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java 2013-09-06 11:22:55.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java 2014-06-06 19:56:13.000000000 -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/utils/FeatureManager.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/FeatureManager.java 2014-06-06 19:56:13.000000000 -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); ++ } ++ ++} +--- ./jaxp/src/com/sun/org/apache/xalan/internal/utils/FeaturePropertyBase.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/FeaturePropertyBase.java 2014-06-06 19:56:13.000000000 -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/ObjectFactory.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java 2014-04-19 01:27:01.000000000 -0700 @@ -54,8 +54,8 @@ // // Constants @@ -5142,8 +25464,8 @@ } else { try { providerClass = cl.loadClass(className); ---- jaxp/src/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java 2013-09-06 11:22:55.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java 2014-04-19 01:27:01.000000000 -0700 @@ -57,7 +57,7 @@ return securitySupport; } @@ -5153,48 +25475,34 @@ return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() { public Object run() { ClassLoader cl = null; ---- jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityManager.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityManager.java 2014-04-20 12:39:46.000000000 -0700 -@@ -0,0 +1,449 @@ +--- ./jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityManager.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityManager.java 2014-06-06 19:56:13.000000000 -0700 +@@ -0,0 +1,435 @@ +/* -+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. -+ * -+ * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. -+ * -+ * 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. ++ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. ++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * -+ * When distributing the software, include this License Header Notice in each -+ * file and include the License file at packager/legal/LICENSE.txt. ++ * 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. + * -+ * 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. ++ * 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). + * -+ * 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]" ++ * 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. + * -+ * 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; @@ -5605,57 +25913,195 @@ + return false; + } +} ---- jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityPropertyManager.java 2013-09-06 11:22:55.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityPropertyManager.java 2014-04-20 12:39:46.000000000 -0700 -@@ -94,6 +94,23 @@ - } +--- ./jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityPropertyManager.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/utils/XMLSecurityPropertyManager.java 2014-06-06 19:56:13.000000000 -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 { /** -+ * 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 -@@ -121,6 +138,22 @@ - states[index] = state; - } +- * 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,53 +75,6 @@ } -+ -+ /** -+ * 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 - * ---- jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Import.java 2013-09-06 11:22:55.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Import.java 2014-04-20 12:39:46.000000000 -0700 +- * 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 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 +@@ -165,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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java 2014-06-06 19:56:13.000000000 -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/Import.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Import.java 2013-12-01 11:13:41.000000000 -0800 @@ -86,7 +86,7 @@ if (input == null) { docToLoad = SystemIDResolver.getAbsoluteURI(docToLoad, currLoadedDoc); @@ -5665,8 +26111,8 @@ XalanConstants.ACCESS_EXTERNAL_ALL); if (accessError != null) { ---- jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Include.java 2013-09-06 11:22:55.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Include.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Include.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Include.java 2013-12-01 11:13:41.000000000 -0800 @@ -87,7 +87,7 @@ if (input == null) { docToLoad = SystemIDResolver.getAbsoluteURI(docToLoad, currLoadedDoc); @@ -5676,8 +26122,8 @@ XalanConstants.ACCESS_EXTERNAL_ALL); if (accessError != null) { ---- jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java 2013-09-06 11:22:55.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java 2013-09-06 11:22:55.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java 2013-12-01 11:13:41.000000000 -0800 @@ -28,6 +28,7 @@ import com.sun.org.apache.xalan.internal.utils.FactoryImpl; import com.sun.org.apache.xalan.internal.utils.ObjectFactory; @@ -5716,11 +26162,14 @@ XalanConstants.ACCESS_EXTERNAL_ALL); if (accessError != null) { ErrorMsg msg = new ErrorMsg(ErrorMsg.ACCESSING_XSLT_TARGET_ERR, ---- jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java 2013-09-06 11:22:56.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java 2014-04-20 12:39:46.000000000 -0700 -@@ -44,11 +44,11 @@ +--- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java 2014-06-06 19:56:13.000000000 -0700 +@@ -43,12 +43,14 @@ + 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; @@ -5731,15 +26180,37 @@ import org.xml.sax.InputSource; import org.xml.sax.XMLReader; -@@ -146,6 +146,7 @@ +@@ -146,12 +148,16 @@ */ private String _accessExternalDTD = XalanConstants.EXTERNAL_ACCESS_DEFAULT; + private XMLSecurityManager _xmlSecurityManager; ++ ++ private final FeatureManager _featureManager; /** * XSLTC compiler constructor -@@ -184,12 +185,14 @@ + */ +- public XSLTC(boolean useServicesMechanism) { ++ public XSLTC(boolean useServicesMechanism, FeatureManager featureManager) { + _parser = new Parser(this, useServicesMechanism); ++ _featureManager = featureManager; + } + + /** +@@ -181,15 +187,26 @@ + _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. */ @@ -5755,7 +26226,7 @@ } return null; } -@@ -197,12 +200,14 @@ +@@ -197,12 +214,14 @@ /** * Set allowed protocols for accessing external stylesheet. */ @@ -5771,8 +26242,874 @@ } } ---- jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ca.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_cs.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_es.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_fr.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_it.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ko.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_pt_BR.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sk.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sv.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_CN.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_TW.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:56.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ca.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_cs.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_de.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_es.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_fr.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_it.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ja.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ko.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_pt_BR.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sk.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sv.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_CN.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_TW.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java 2014-06-06 19:56:13.000000000 -0700 @@ -29,7 +29,7 @@ import javax.xml.transform.TransformerException; import javax.xml.transform.URIResolver; @@ -5782,6 +27119,15 @@ import com.sun.org.apache.xalan.internal.xsltc.compiler.CompilerException; import com.sun.org.apache.xalan.internal.xsltc.compiler.Parser; import com.sun.org.apache.xalan.internal.xsltc.compiler.SourceLoader; +@@ -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); + @@ -103,6 +103,8 @@ (String)tfactory.getAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET)); xsltc.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, @@ -5791,17 +27137,74 @@ if ("true".equals(tfactory.getAttribute(TransformerFactoryImpl.ENABLE_INLINING))) ---- jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java 2014-04-20 12:39:46.000000000 -0700 -@@ -77,6 +77,7 @@ - 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; +--- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java 2014-06-06 19:56:13.000000000 -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.SAXParserFactory; + import javax.xml.parsers.SAXParser; +-import javax.xml.parsers.ParserConfigurationException; ++import javax.xml.parsers.SAXParserFactory; + import javax.xml.transform.ErrorListener; + import javax.xml.transform.Source; +@@ -58,26 +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 org.xml.sax.InputSource; import org.xml.sax.XMLFilter; -@@ -227,17 +228,17 @@ + import org.xml.sax.XMLReader; +@@ -227,17 +225,19 @@ */ private boolean _useServicesMechanism; @@ -5818,10 +27221,26 @@ private XMLSecurityPropertyManager _xmlSecurityPropertyMgr; + private XMLSecurityManager _xmlSecurityManager; ++ ++ private final FeatureManager _featureManager; /** * javax.xml.transform.sax.TransformerFactory implementation. -@@ -264,6 +265,9 @@ +@@ -253,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(); +@@ -264,6 +267,9 @@ Property.ACCESS_EXTERNAL_DTD); _accessExternalStylesheet = _xmlSecurityPropertyMgr.getValue( Property.ACCESS_EXTERNAL_STYLESHEET); @@ -5831,7 +27250,7 @@ } /** -@@ -322,11 +326,21 @@ +@@ -322,11 +328,21 @@ return Boolean.TRUE; else return Boolean.FALSE; @@ -5856,7 +27275,7 @@ } // Throw an exception for all other attributes -@@ -429,10 +443,13 @@ +@@ -429,10 +445,13 @@ } } @@ -5874,7 +27293,7 @@ _accessExternalDTD = _xmlSecurityPropertyMgr.getValue( Property.ACCESS_EXTERNAL_DTD); _accessExternalStylesheet = _xmlSecurityPropertyMgr.getValue( -@@ -482,6 +499,7 @@ +@@ -482,6 +501,7 @@ throw new TransformerConfigurationException(err.toString()); } _isNotSecureProcessing = !value; @@ -5882,7 +27301,67 @@ // set external access restriction when FSP is explicitly set if (value && XalanConstants.IS_JDK8_OR_ABOVE) { -@@ -851,6 +869,7 @@ +@@ -495,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)) { +@@ -503,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()); +@@ -551,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; + } +@@ -561,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 +@@ -841,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); +@@ -851,6 +894,7 @@ if (!_isNotSecureProcessing) xsltc.setSecureProcessing(true); xsltc.setProperty(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, _accessExternalStylesheet); xsltc.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, _accessExternalDTD); @@ -5890,8 +27369,8 @@ xsltc.init(); // Set a document loader (for xsl:include/import) if defined ---- jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java 2013-12-01 11:13:41.000000000 -0800 @@ -25,6 +25,7 @@ import com.sun.org.apache.xalan.internal.XalanConstants; @@ -5928,8 +27407,8 @@ } /** * Return the state of the services mechanism feature. ---- jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java 2013-12-01 11:13:41.000000000 -0800 @@ -23,6 +23,7 @@ package com.sun.org.apache.xalan.internal.xsltc.trax; @@ -5983,8 +27462,8 @@ xsltc.setXMLReader(reader); }catch (SAXNotRecognizedException snre ) { throw new TransformerConfigurationException ---- jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java 2013-12-01 11:13:41.000000000 -0800 @@ -33,6 +33,7 @@ import com.sun.org.apache.xerces.internal.util.PropertyState; import com.sun.org.apache.xerces.internal.util.SymbolTable; @@ -6028,8 +27507,8 @@ setProperty(Constants.XML_SECURITY_PROPERTY_MANAGER, new XMLSecurityPropertyManager()); ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/Constants.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/Constants.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/Constants.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/Constants.java 2013-12-01 11:13:41.000000000 -0800 @@ -174,8 +174,6 @@ /** JAXP schemaSource language: when used internally may include DTD namespace (DOM) */ public static final String SCHEMA_LANGUAGE = "schemaLanguage"; @@ -6166,8 +27645,8 @@ /** * {@link org.w3c.dom.TypeInfo} associated with current element/attribute ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/PropertyManager.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/PropertyManager.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/PropertyManager.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/PropertyManager.java 2014-01-18 12:16:08.000000000 -0800 @@ -25,6 +25,7 @@ package com.sun.org.apache.xerces.internal.impl; @@ -6259,8 +27738,8 @@ } if(equivalentProperty != null){ ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.java 2013-12-01 11:13:41.000000000 -0800 @@ -108,6 +108,7 @@ * @author Elena Litani, IBM * @author Michael Glavassevich, IBM @@ -6279,8 +27758,8 @@ fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, "ElementAttributeLimit", new Object[]{rawname, new Integer(fElementAttributeLimit) }, ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java 2014-01-18 12:16:08.000000000 -0800 @@ -44,6 +44,9 @@ import com.sun.org.apache.xerces.internal.impl.XMLErrorReporter; import com.sun.org.apache.xerces.internal.impl.XMLEntityHandler; @@ -6423,8 +27902,8 @@ } public DTDGrammar getGrammar(){ ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java 2014-01-18 12:16:08.000000000 -0800 @@ -50,12 +50,14 @@ import com.sun.org.apache.xerces.internal.xni.Augmentations; import com.sun.org.apache.xerces.internal.impl.Constants; @@ -6692,8 +28171,8 @@ // // Protected methods ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java 2014-01-18 12:16:08.000000000 -0800 @@ -1090,6 +1090,8 @@ ((XMLDTDScannerImpl)fDTDScanner).reset(fPropertyManager); @@ -6703,8 +28182,8 @@ do { again = false; switch (fScannerState) { ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java 2014-01-18 12:16:08.000000000 -0800 @@ -18,19 +18,17 @@ * limitations under the License. */ @@ -6863,8 +28342,8 @@ } /** ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.java 2014-01-18 12:16:08.000000000 -0800 @@ -58,6 +58,7 @@ * @author Neeraj Bajaj, Sun Microsystems * @author Venugopal Rao K, Sun Microsystems @@ -6887,8 +28366,8 @@ XMLErrorReporter.SEVERITY_FATAL_ERROR ); } ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java 2013-09-06 11:22:57.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java 2013-09-06 11:22:57.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java 2013-12-01 11:13:41.000000000 -0800 @@ -32,6 +32,8 @@ import com.sun.org.apache.xerces.internal.util.XMLChar; import com.sun.org.apache.xerces.internal.util.XMLResourceIdentifierImpl; @@ -7014,8 +28493,8 @@ * Scans a processing instruction. * <p> * <pre> ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties 2013-09-06 11:22:58.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties 2013-09-06 11:22:58.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties 2013-12-01 11:13:41.000000000 -0800 @@ -44,6 +44,7 @@ # 2.9 Standalone Document Declaration @@ -7039,8 +28518,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= Element \"{0}\" has more than \"{1}\" attributes, \"{1}\" is the limit imposed by the application. ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties 2013-12-01 11:13:41.000000000 -0800 @@ -1,30 +1,27 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -7507,8 +28986,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= Element \"{0}\" hat mehr als \"{1}\" Attribute. \"{1}\" ist der durch die Anwendung vorgeschriebene Grenzwert. ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_es.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_es.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_es.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_es.properties 2013-12-01 11:13:41.000000000 -0800 @@ -1,30 +1,27 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -7976,8 +29455,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= El elemento \"{0}\" tiene m\u00E1s de \"{1}\" atributos, \"{1}\" es el l\u00EDmite impuesto por la aplicaci\u00F3n. ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_fr.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_fr.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_fr.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_fr.properties 2013-12-01 11:13:41.000000000 -0800 @@ -1,30 +1,27 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -8446,8 +29925,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= L''\u00E9l\u00E9ment \"{0}\" a plus de \"{1}\" attributs. \"{1}\" est la limite impos\u00E9e par l''application. ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_it.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_it.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_it.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_it.properties 2013-12-01 11:13:41.000000000 -0800 @@ -1,30 +1,27 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -8915,8 +30394,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= L''elemento \"{0}\" contiene pi\u00F9 di \"{1}\" attributi. \"{1}\" \u00E8 il limite imposto dall''applicazione. ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ja.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ja.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ja.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ja.properties 2014-01-18 12:16:08.000000000 -0800 @@ -1,30 +1,26 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -9384,8 +30863,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= \u8981\u7D20\"{0}\"\u306B\"{1}\"\u3092\u8D85\u3048\u308B\u5C5E\u6027\u304C\u5B58\u5728\u3057\u307E\u3059\u3002\"{1}\"\u306F\u3001\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306B\u3088\u308B\u5236\u9650\u3067\u3059\u3002 ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ko.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ko.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ko.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ko.properties 2013-12-01 11:13:41.000000000 -0800 @@ -1,30 +1,27 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -9853,8 +31332,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= \"{0}\" \uC694\uC18C\uC5D0 \"{1}\"\uAC1C\uB97C \uCD08\uACFC\uD558\uB294 \uC18D\uC131\uC774 \uC788\uC2B5\uB2C8\uB2E4. \"{1}\"\uC740(\uB294) \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8\uC5D0\uC11C \uC801\uC6A9\uD558\uB294 \uC81C\uD55C\uC785\uB2C8\uB2E4. ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_pt_BR.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_pt_BR.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_pt_BR.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_pt_BR.properties 2013-12-01 11:13:41.000000000 -0800 @@ -1,30 +1,27 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -10329,8 +31808,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= O elemento \"{0}\" tem mais de \"{1}\" atributos. \"{1}\" \u00E9 o limite imposto pela aplica\u00E7\u00E3o. ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_sv.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_sv.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_sv.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_sv.properties 2013-12-01 11:13:41.000000000 -0800 @@ -1,30 +1,27 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -10799,8 +32278,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= Elementet \"{0}\" har fler \u00E4n \"{1}\" attribut, \"{1}\" \u00E4r applikationens gr\u00E4nsv\u00E4rde. ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_CN.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_CN.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_CN.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_CN.properties 2013-12-01 11:13:41.000000000 -0800 @@ -1,30 +1,26 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -11274,8 +32753,8 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= \u5143\u7D20 \"{0}\" \u5177\u6709\u591A\u4E2A \"{1}\" \u5C5E\u6027, \"{1}\" \u662F\u5E94\u7528\u7A0B\u5E8F\u65BD\u52A0\u7684\u9650\u5236\u3002 ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_TW.properties 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_TW.properties 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_TW.properties 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_TW.properties 2013-12-01 11:13:41.000000000 -0800 @@ -1,30 +1,27 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -11765,8 +33244,19 @@ -# Application can set the limit of number of attributes of entity that should be expanded by the parser. -ElementAttributeLimit= \u5143\u7D20 \"{0}\" \u5177\u6709\u8D85\u904E \"{1}\" \u500B\u4EE5\u4E0A\u7684\u5C6C\u6027\uFF0C\"{1}\" \u70BA\u61C9\u7528\u7A0B\u5F0F\u6240\u898F\u5B9A\u7684\u9650\u5236\u3002 ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/CMNodeFactory.java 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/CMNodeFactory.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/XPath.java 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/XPath.java 2014-06-06 19:56:13.000000000 -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/impl/xs/models/CMNodeFactory.java 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/CMNodeFactory.java 2013-12-01 11:13:41.000000000 -0800 @@ -21,13 +21,13 @@ package com.sun.org.apache.xerces.internal.impl.xs.models; @@ -11829,8 +33319,8 @@ return; } if (suffixLength == Constants.ERROR_REPORTER_PROPERTY.length() && ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java 2013-12-01 11:13:41.000000000 -0800 @@ -40,6 +40,7 @@ import com.sun.org.apache.xerces.internal.util.SymbolTable; import com.sun.org.apache.xerces.internal.util.XMLChar; @@ -11850,8 +33340,8 @@ reportSchemaFatalError("maxOccurLimit", new Object[] {new Integer(maxOccurNodeLimit)}, element); // reset max values in case processing continues on error ---- jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java 2013-09-06 11:22:59.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java 2013-09-06 11:22:59.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java 2013-12-01 11:13:41.000000000 -0800 @@ -70,7 +70,6 @@ import com.sun.org.apache.xerces.internal.util.DefaultErrorHandler; import com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper; @@ -11905,8 +33395,45 @@ } //set entity resolver ---- jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java 2014-06-06 19:56:13.000000000 -0700 @@ -36,7 +36,7 @@ import com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator; import com.sun.org.apache.xerces.internal.jaxp.validation.XSGrammarPoolContainer; @@ -11940,6 +33467,15 @@ private XMLSecurityPropertyManager fSecurityPropertyMgr; DocumentBuilderImpl(DocumentBuilderFactoryImpl dbf, Hashtable dbfAttrs, Hashtable features) +@@ -141,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 { @@ -173,10 +172,10 @@ fSecurityPropertyMgr = new XMLSecurityPropertyManager(); domParser.setProperty(XML_SECURITY_PROPERTY_MANAGER, fSecurityPropertyMgr); @@ -12017,9 +33553,23 @@ } } ---- jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java 2014-04-20 12:39:46.000000000 -0700 -@@ -34,8 +34,8 @@ +--- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java 2014-06-06 19:56:13.000000000 -0700 +@@ -20,22 +20,13 @@ + + 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; import com.sun.org.apache.xerces.internal.jaxp.validation.XSGrammarPoolContainer; import com.sun.org.apache.xerces.internal.util.SAXMessageFormatter; @@ -12029,7 +33579,22 @@ import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager; import com.sun.org.apache.xerces.internal.xni.XMLDocumentHandler; import com.sun.org.apache.xerces.internal.xni.parser.XMLComponent; -@@ -112,6 +112,7 @@ +@@ -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; +@@ -112,6 +111,7 @@ /** Initial EntityResolver */ private final EntityResolver fInitEntityResolver; @@ -12037,7 +33602,7 @@ private final XMLSecurityPropertyManager fSecurityPropertyMgr; /** -@@ -130,10 +131,10 @@ +@@ -130,10 +130,10 @@ SAXParserImpl(SAXParserFactoryImpl spf, Hashtable features, boolean secureProcessing) throws SAXException { @@ -12050,7 +33615,7 @@ // JAXP "namespaceAware" == SAX Namespaces feature // Note: there is a compatibility problem here with default values: -@@ -154,9 +155,9 @@ +@@ -154,9 +154,9 @@ xmlReader.setProperty0(XML_SECURITY_PROPERTY_MANAGER, fSecurityPropertyMgr); @@ -12062,7 +33627,7 @@ /** * By default, secure processing is set, no external access is allowed. * However, we need to check if it is actively set on the factory since we -@@ -164,6 +165,7 @@ +@@ -164,6 +164,7 @@ * the default value */ if (features != null) { @@ -12070,7 +33635,7 @@ Object temp = features.get(XMLConstants.FEATURE_SECURE_PROCESSING); if (temp != null) { boolean value = ((Boolean) temp).booleanValue(); -@@ -172,7 +174,6 @@ +@@ -172,7 +173,6 @@ XMLSecurityPropertyManager.State.FSP, Constants.EXTERNAL_ACCESS_DEFAULT_FSP); fSecurityPropertyMgr.setValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA, XMLSecurityPropertyManager.State.FSP, Constants.EXTERNAL_ACCESS_DEFAULT_FSP); @@ -12078,7 +33643,16 @@ } } } -@@ -398,22 +399,34 @@ +@@ -185,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 { +@@ -398,22 +398,34 @@ private final HashMap fInitFeatures = new HashMap(); private final HashMap fInitProperties = new HashMap(); private final SAXParserImpl fSAXParser; @@ -12117,7 +33691,7 @@ if (fSecurityPropertyMgr == null) { fSecurityPropertyMgr = new XMLSecurityPropertyManager(); try { -@@ -421,7 +434,7 @@ +@@ -421,7 +433,7 @@ } catch (SAXException e) { throw new UnsupportedOperationException( SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), @@ -12126,7 +33700,7 @@ } } } -@@ -439,7 +452,8 @@ +@@ -439,7 +451,8 @@ } if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) { try { @@ -12136,7 +33710,7 @@ } catch (SAXNotRecognizedException exc) { // If the property is not supported -@@ -475,13 +489,7 @@ +@@ -475,13 +488,7 @@ throw new NullPointerException(); } if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) { @@ -12151,7 +33725,7 @@ } return super.getFeature(name); } -@@ -560,17 +568,21 @@ +@@ -560,17 +567,21 @@ if (fSAXParser != null && fSAXParser.fSchemaValidator != null) { setSchemaValidatorProperty(name, value); } @@ -12182,7 +33756,7 @@ } public synchronized Object getProperty(String name) -@@ -583,9 +595,18 @@ +@@ -583,9 +594,18 @@ // JAXP 1.2 support return fSAXParser.schemaLanguage; } @@ -12204,8 +33778,19 @@ } return super.getProperty(name); ---- jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java 2014-04-20 12:39:46.000000000 -0700 +@@ -664,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/jaxp/validation/StAXValidatorHelper.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java 2013-12-01 11:13:41.000000000 -0800 @@ -26,6 +26,7 @@ package com.sun.org.apache.xerces.internal.jaxp.validation; @@ -12234,8 +33819,8 @@ identityTransformer1 = tf.newTransformer(); identityTransformer2 = tf.newTransformerHandler(); } catch (TransformerConfigurationException e) { ---- jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java 2013-12-01 11:13:41.000000000 -0800 @@ -20,28 +20,27 @@ package com.sun.org.apache.xerces.internal.jaxp.validation; @@ -12309,8 +33894,8 @@ fConfiguration = new SoftReference(config); return config; } ---- jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java 2014-01-18 12:16:08.000000000 -0800 @@ -49,10 +49,10 @@ import com.sun.org.apache.xerces.internal.util.SAXMessageFormatter; import com.sun.org.apache.xerces.internal.util.Status; @@ -12337,8 +33922,8 @@ if (securityManager != null) { try { reader.setProperty(SECURITY_MANAGER, securityManager); ---- jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java 2013-12-01 11:13:41.000000000 -0800 @@ -41,10 +41,10 @@ import com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper; import com.sun.org.apache.xerces.internal.util.SAXInputSource; @@ -12465,8 +34050,8 @@ } } catch (XMLConfigurationException e) { ---- jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java 2014-01-18 12:16:08.000000000 -0800 @@ -39,9 +39,9 @@ import com.sun.org.apache.xerces.internal.util.NamespaceSupport; import com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings; @@ -12572,8 +34157,8 @@ } /** ---- jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java 2013-12-01 11:13:41.000000000 -0800 @@ -20,18 +20,15 @@ package com.sun.org.apache.xerces.internal.parsers; @@ -12653,8 +34238,8 @@ // // Default handling ---- jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParser.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParser.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParser.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParser.java 2013-12-01 11:13:41.000000000 -0800 @@ -29,6 +29,7 @@ import com.sun.org.apache.xerces.internal.util.SAXMessageFormatter; import com.sun.org.apache.xerces.internal.util.Status; @@ -12718,8 +34303,8 @@ try { fConfiguration.setProperty(propertyId, value); } ---- jaxp/src/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java 2013-12-01 11:13:41.000000000 -0800 @@ -38,7 +38,6 @@ import com.sun.org.apache.xerces.internal.util.PropertyState; import com.sun.org.apache.xerces.internal.util.Status; @@ -12755,8 +34340,8 @@ } // <init>(SymbolTable,XMLGrammarPool) // ---- jaxp/src/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java 2013-12-01 11:13:41.000000000 -0800 @@ -36,7 +36,6 @@ import com.sun.org.apache.xerces.internal.util.PropertyState; import com.sun.org.apache.xerces.internal.util.Status; @@ -12792,8 +34377,8 @@ } // <init>(SymbolTable,XMLGrammarPool) // ---- jaxp/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java 2013-12-01 11:13:41.000000000 -0800 @@ -22,6 +22,7 @@ import com.sun.org.apache.xerces.internal.impl.Constants; @@ -12864,8 +34449,8 @@ } } } // class SAXParser ---- jaxp/src/com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.java 2013-12-01 11:13:41.000000000 -0800 @@ -23,8 +23,8 @@ import com.sun.org.apache.xerces.internal.impl.Constants; import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarPool; @@ -12893,8 +34478,8 @@ } // <init>(SymbolTable,XMLGrammarPool) } // class SecurityConfiguration ---- jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java 2013-12-01 11:13:41.000000000 -0800 @@ -52,6 +52,7 @@ import com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings; import com.sun.org.apache.xerces.internal.util.PropertyState; @@ -13044,8 +34629,8 @@ // add message formatters if (fErrorReporter.getMessageFormatter(XMLMessageFormatter.XML_DOMAIN) == null) { XMLMessageFormatter xmft = new XMLMessageFormatter(); ---- jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLParser.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLParser.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLParser.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLParser.java 2014-01-18 12:16:08.000000000 -0800 @@ -23,6 +23,8 @@ import java.io.IOException; @@ -13085,8 +34670,8 @@ reset(); fConfiguration.parse(inputSource); ---- jaxp/src/com/sun/org/apache/xerces/internal/util/SecurityManager.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/util/SecurityManager.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/util/SecurityManager.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/util/SecurityManager.java 2014-06-06 19:56:13.000000000 -0700 @@ -61,8 +61,6 @@ package com.sun.org.apache.xerces.internal.util; @@ -13184,8 +34769,8 @@ - }); - } } // class SecurityManager ---- jaxp/src/com/sun/org/apache/xerces/internal/util/SymbolTable.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/util/SymbolTable.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/util/SymbolTable.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/util/SymbolTable.java 2013-12-01 11:13:41.000000000 -0800 @@ -173,7 +173,7 @@ for (int i = 0; i < length; i++) { code = code * 37 + symbol.charAt(i); @@ -13204,8 +34789,26 @@ } // hash(char[],int,int):int ---- jaxp/src/com/sun/org/apache/xerces/internal/utils/ObjectFactory.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/utils/ObjectFactory.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/util/URI.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/util/URI.java 2014-06-06 19:56:13.000000000 -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/ObjectFactory.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/utils/ObjectFactory.java 2014-04-19 01:27:01.000000000 -0700 @@ -48,7 +48,8 @@ // // Constants @@ -13249,8 +34852,19 @@ } else { try { providerClass = cl.loadClass(className); ---- jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java 2014-06-06 19:56:13.000000000 -0700 +@@ -211,7 +211,7 @@ + if (i > 0) { + return uri.substring(i+1, uri.length()); + } +- return ""; ++ return uri; + } + + /** +--- ./jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLLimitAnalyzer.java 2014-01-18 12:16:08.000000000 -0800 @@ -0,0 +1,237 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. @@ -13489,8 +35103,8 @@ + } + } +} ---- jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLSecurityManager.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLSecurityManager.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLSecurityManager.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLSecurityManager.java 2014-01-18 12:16:08.000000000 -0800 @@ -0,0 +1,540 @@ +/* + * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. @@ -14032,8 +35646,8 @@ + } + } +} ---- jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager.java 2014-04-20 12:39:46.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/utils/XMLSecurityPropertyManager.java 2014-01-18 12:16:08.000000000 -0800 @@ -91,6 +91,24 @@ readSystemProperties(); } @@ -14083,8 +35697,8 @@ /** * Return the value of the specified property * ---- jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java 2013-09-06 11:23:00.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java 2013-09-06 11:23:00.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java 2013-12-01 11:13:41.000000000 -0800 @@ -37,7 +37,6 @@ import com.sun.org.apache.xerces.internal.util.HTTPInputSource; import com.sun.org.apache.xerces.internal.util.IntStack; @@ -14130,8 +35744,8 @@ if (fChildConfig != null) { fChildConfig.setProperty(propertyId, value); } ---- jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.java 2013-09-06 11:23:01.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.java 2013-09-06 11:23:01.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.java 2014-01-18 12:16:08.000000000 -0800 @@ -20,6 +20,7 @@ package com.sun.org.apache.xerces.internal.xni.parser; @@ -14146,8 +35760,29 @@ + public void setLimitAnalyzer(XMLLimitAnalyzer limitAnalyzer); } // interface XMLDTDScanner ---- jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java 2013-09-06 11:23:02.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.java 2013-09-06 11:23:01.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.java 2014-06-06 19:56:13.000000000 -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/xml/internal/resolver/CatalogManager.java 2013-09-06 11:23:02.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java 2014-01-18 12:16:08.000000000 -0800 @@ -24,20 +24,17 @@ package com.sun.org.apache.xml.internal.resolver; @@ -14182,8 +35817,8 @@ } catch (ClassNotFoundException cnfe) { debug.message(1,"Catalog class named '" + catalogClassName ---- jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.java 2013-09-06 11:23:02.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.java 2013-09-06 11:23:02.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.java 2014-01-18 12:16:08.000000000 -0800 @@ -23,24 +23,21 @@ package com.sun.org.apache.xml.internal.resolver.readers; @@ -14226,8 +35861,8 @@ } catch (ClassNotFoundException cnfe) { catalog.getCatalogManager().debug.message(1, "Cannot load XML Catalog Parser class", domParserClass); throw new CatalogException(CatalogException.UNPARSEABLE); ---- jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java 2013-09-06 11:23:02.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java 2013-09-06 11:23:02.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java 2014-01-18 12:16:08.000000000 -0800 @@ -23,19 +23,21 @@ package com.sun.org.apache.xml.internal.resolver.readers; @@ -14297,8 +35932,8 @@ saxParser.setCatalog(catalog); saxParser.startDocument(); ---- jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java 2013-09-06 11:23:02.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java 2013-09-06 11:23:02.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java 2014-04-19 01:27:01.000000000 -0700 @@ -22,6 +22,11 @@ */ package com.sun.org.apache.xml.internal.serializer; @@ -14512,8 +36147,8 @@ } /** Table of user-specified char infos. */ ---- jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java 2013-09-06 11:23:02.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java 2013-09-06 11:23:02.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java 2014-04-19 01:27:01.000000000 -0700 @@ -60,7 +60,7 @@ */ private static final CharInfo m_htmlcharInfo = @@ -14523,8 +36158,8 @@ /** A digital search trie for fast, case insensitive lookup of ElemDesc objects. */ static final Trie m_elementFlags = new Trie(); ---- jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java 2013-09-06 11:23:02.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java 2014-04-20 12:39:47.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java 2013-09-06 11:23:02.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java 2014-04-19 01:27:01.000000000 -0700 @@ -58,7 +58,7 @@ */ private static CharInfo m_xmlcharInfo = @@ -14534,8 +36169,8 @@ /** * Default constructor. ---- jaxp/src/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java 2013-09-06 11:23:03.000000000 -0700 -+++ jaxp/src/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java 2014-04-20 12:39:48.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java 2013-09-06 11:23:03.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java 2013-12-01 11:13:41.000000000 -0800 @@ -25,12 +25,15 @@ import com.sun.org.apache.xalan.internal.XalanConstants; import com.sun.org.apache.xalan.internal.utils.FactoryImpl; @@ -14641,8 +36276,244 @@ } } } ---- jaxp/src/javax/xml/stream/FactoryFinder.java 2013-09-06 11:23:04.000000000 -0700 -+++ jaxp/src/javax/xml/stream/FactoryFinder.java 2014-04-20 12:39:48.000000000 -0700 +--- ./jaxp/src/com/sun/org/apache/xpath/internal/XPathContext.java 2013-09-06 11:23:03.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xpath/internal/XPathContext.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:23:03.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:23:03.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:23:04.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:23:04.000000000 -0700 ++++ ./jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java 2014-06-06 19:56:13.000000000 -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/stream/FactoryFinder.java 2013-09-06 11:23:04.000000000 -0700 ++++ ./jaxp/src/javax/xml/stream/FactoryFinder.java 2013-12-01 11:13:41.000000000 -0800 @@ -204,13 +204,15 @@ * a property name * @param fallbackClassName Implementation class name, if nothing else @@ -14699,8 +36570,8 @@ } // Try read $java.home/lib/stax.properties followed by ---- jaxp/src/javax/xml/stream/XMLEventFactory.java 2013-09-06 11:23:04.000000000 -0700 -+++ jaxp/src/javax/xml/stream/XMLEventFactory.java 2014-04-20 12:39:48.000000000 -0700 +--- ./jaxp/src/javax/xml/stream/XMLEventFactory.java 2013-09-06 11:23:04.000000000 -0700 ++++ ./jaxp/src/javax/xml/stream/XMLEventFactory.java 2013-12-01 11:13:41.000000000 -0800 @@ -60,9 +60,7 @@ public static XMLEventFactory newInstance() throws FactoryConfigurationError @@ -14743,8 +36614,8 @@ } catch (FactoryFinder.ConfigurationError e) { throw new FactoryConfigurationError(e.getException(), e.getMessage()); ---- jaxp/src/javax/xml/stream/XMLInputFactory.java 2013-09-06 11:23:04.000000000 -0700 -+++ jaxp/src/javax/xml/stream/XMLInputFactory.java 2014-04-20 12:39:48.000000000 -0700 +--- ./jaxp/src/javax/xml/stream/XMLInputFactory.java 2013-09-06 11:23:04.000000000 -0700 ++++ ./jaxp/src/javax/xml/stream/XMLInputFactory.java 2013-12-01 11:13:41.000000000 -0800 @@ -139,6 +139,7 @@ public static final String ALLOCATOR= "javax.xml.stream.allocator"; @@ -14795,8 +36666,8 @@ } catch (FactoryFinder.ConfigurationError e) { throw new FactoryConfigurationError(e.getException(), e.getMessage()); ---- jaxp/src/javax/xml/stream/XMLOutputFactory.java 2013-09-06 11:23:04.000000000 -0700 -+++ jaxp/src/javax/xml/stream/XMLOutputFactory.java 2014-04-20 12:39:48.000000000 -0700 +--- ./jaxp/src/javax/xml/stream/XMLOutputFactory.java 2013-09-06 11:23:04.000000000 -0700 ++++ ./jaxp/src/javax/xml/stream/XMLOutputFactory.java 2013-12-01 11:13:41.000000000 -0800 @@ -115,6 +115,7 @@ public static final String IS_REPAIRING_NAMESPACES= "javax.xml.stream.isRepairingNamespaces"; @@ -14845,8 +36716,100 @@ } catch (FactoryFinder.ConfigurationError e) { throw new FactoryConfigurationError(e.getException(), e.getMessage()); ---- jaxws/.hgtags 2013-09-06 11:23:51.000000000 -0700 -+++ jaxws/.hgtags 2014-04-20 12:39:43.000000000 -0700 +--- ./jaxp/src/javax/xml/xpath/XPathException.java 2013-09-06 11:23:05.000000000 -0700 ++++ ./jaxp/src/javax/xml/xpath/XPathException.java 2014-06-06 19:56:13.000000000 -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 2013-09-06 11:23:51.000000000 -0700 ++++ ./jaxws/.hgtags 2014-06-06 19:56:15.000000000 -0700 @@ -123,6 +123,7 @@ 05469dd4c3662c454f8a019e492543add60795cc jdk7-b146 c01bfd68d0528bc88348813c4d75d7f5c62bc4e2 jdk7u1-b01 @@ -14878,7 +36841,7 @@ 4c5d242efa0d6e0cdb688e41e722bff671dfbfec jdk7u25-b12 6b4a165221304d809f678a18f51c7a8cb042d60b jdk7u25-b13 03073e4e6d3f600102d31e862154f56730838b11 jdk7u25-b14 -@@ -343,3 +360,60 @@ +@@ -343,3 +360,83 @@ 89f6c9663d75d9e4b672aed16f885b84232e9c93 jdk7u40-b42 3ee85b3793de16855e20272336a3565af8477b6b jdk7u40-b43 cbeef786ce489096c39ec5effee4f8f9e770b4af jdk7u40-b60 @@ -14923,6 +36886,8 @@ +81a1b110f70c37d2c2f0de7c0ef3bd2d04aba475 jdk7u51-b13 +5dbeb9983f104be717da35c9b14923d71dd248d7 jdk7u51-b30 +eb79f394916efba85f4f6c7ef562966699f2c1e8 jdk7u51-b31 ++b2e40219fdcb579d9e10bf01bbd1f05ddcc936fb jdk7u51-b33 ++f782f513bb1c74640fe0f4711fec6a417845e9e9 jdk7u51-b34 +7c7c2ea4b6808d0abf7fd48d11440d75b0c08d3a jdk7u55-b00 +c5eb0c2a0f9715b510bc641506fb90df9bf05ab0 jdk7u55-b01 +a257072fc2aa482abd6ffa28e235dbe532af6d00 jdk7u55-b02 @@ -14939,8 +36904,29 @@ +3834eb921dfd8d29d917a0c57bb9fdd9aa58c209 jdk7u55-b12 +3b0da73591b1ea23c48aa7babc34ed776fc183f0 jdk7u55-b13 +5d726bf8fedc1f10d250e980653315919b7602f2 jdk7u55-b30 ---- jaxws/src/share/jaf_classes/javax/activation/CommandMap.java 2013-09-06 11:23:51.000000000 -0700 -+++ jaxws/src/share/jaf_classes/javax/activation/CommandMap.java 2014-04-20 12:39:39.000000000 -0700 ++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 +--- ./jaxws/src/share/jaf_classes/javax/activation/CommandMap.java 2013-09-06 11:23:51.000000000 -0700 ++++ ./jaxws/src/share/jaf_classes/javax/activation/CommandMap.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. @@ -15019,8 +37005,8 @@ defaultCommandMap = commandMap; } ---- jaxws/src/share/jaf_classes/javax/activation/DataHandler.java 2013-09-06 11:23:51.000000000 -0700 -+++ jaxws/src/share/jaf_classes/javax/activation/DataHandler.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaf_classes/javax/activation/DataHandler.java 2013-09-06 11:23:51.000000000 -0700 ++++ ./jaxws/src/share/jaf_classes/javax/activation/DataHandler.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. @@ -15042,8 +37028,8 @@ } /** ---- jaxws/src/share/jaf_classes/javax/activation/FileTypeMap.java 2013-09-06 11:23:51.000000000 -0700 -+++ jaxws/src/share/jaf_classes/javax/activation/FileTypeMap.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaf_classes/javax/activation/FileTypeMap.java 2013-09-06 11:23:51.000000000 -0700 ++++ ./jaxws/src/share/jaf_classes/javax/activation/FileTypeMap.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. @@ -15128,8 +37114,8 @@ + return def; } } ---- jaxws/src/share/jaf_classes/javax/activation/MailcapCommandMap.java 2013-09-06 11:23:51.000000000 -0700 -+++ jaxws/src/share/jaf_classes/javax/activation/MailcapCommandMap.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaf_classes/javax/activation/MailcapCommandMap.java 2013-09-06 11:23:51.000000000 -0700 ++++ ./jaxws/src/share/jaf_classes/javax/activation/MailcapCommandMap.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. @@ -15167,8 +37153,8 @@ DB = new MailcapFile[dbv.size()]; DB = (MailcapFile[])dbv.toArray(DB); ---- jaxws/src/share/jaf_classes/javax/activation/MimetypesFileTypeMap.java 2013-09-06 11:23:51.000000000 -0700 -+++ jaxws/src/share/jaf_classes/javax/activation/MimetypesFileTypeMap.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaf_classes/javax/activation/MimetypesFileTypeMap.java 2013-09-06 11:23:51.000000000 -0700 ++++ ./jaxws/src/share/jaf_classes/javax/activation/MimetypesFileTypeMap.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. @@ -15206,8 +37192,18 @@ DB = new MimeTypeFile[dbv.size()]; dbv.copyInto(DB); ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/model/nav/APTNavigator.java 2013-09-06 11:23:52.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/model/nav/APTNavigator.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/org/glassfish/external/statistics/impl/BoundedRangeStatisticImpl.java 2013-09-06 11:23:52.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/org/glassfish/external/statistics/impl/BoundedRangeStatisticImpl.java 2014-06-06 19:56:15.000000000 -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/jxc/model/nav/APTNavigator.java 2013-09-06 11:23:52.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/jxc/model/nav/APTNavigator.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -15237,8 +37233,172 @@ } public boolean isBridgeMethod(MethodDeclaration method) { ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/ContextClassloaderLocal.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/modeler/annotation/WebServiceVisitor.java 2013-09-06 11:23:53.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/processor/modeler/annotation/WebServiceVisitor.java 2014-06-06 19:56:15.000000000 -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; +- +- 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); +- } ++ 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); ++ } + } + + 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 2013-09-06 11:23:53.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wscompile/WsimportTool.java 2014-06-06 19:56:15.000000000 -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/tools/internal/ws/wsdl/parser/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -15326,8 +37486,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/ContextClassloaderLocal.properties 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -15356,8 +37516,8 @@ +# Error messages for ContextClassloaderLocal utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/Internalizer.java 2013-09-06 11:23:54.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/Internalizer.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/Internalizer.java 2013-09-06 11:23:54.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/Internalizer.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -15383,8 +37543,8 @@ private final WsimportOptions options; private final DOMForest forest; private final ErrorReceiver errorReceiver; ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/JAXWSBindingExtensionHandler.java 2013-09-06 11:23:54.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/JAXWSBindingExtensionHandler.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/JAXWSBindingExtensionHandler.java 2013-09-06 11:23:54.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/ws/wsdl/parser/JAXWSBindingExtensionHandler.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -15409,8 +37569,8 @@ public JAXWSBindingExtensionHandler(Map<String, AbstractExtensionHandler> extensionHandlerMap) { super(extensionHandlerMap); ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/EagerNType.java 2013-09-06 11:23:55.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/EagerNType.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/EagerNType.java 2013-09-06 11:23:55.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/EagerNType.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -15434,8 +37594,8 @@ + return Utils.REFLECTION_NAVIGATOR.getTypeName(t); } } ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/NavigatorImpl.java 2013-09-06 11:23:55.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/NavigatorImpl.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/NavigatorImpl.java 2013-09-06 11:23:55.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/NavigatorImpl.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -15481,8 +37641,8 @@ throw new UnsupportedOperationException(); } ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/Utils.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/Utils.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/Utils.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/model/nav/Utils.java 2014-01-18 12:16:09.000000000 -0800 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -15569,8 +37729,8 @@ + private Utils() { + } +} ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/ContextClassloaderLocal.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -15658,8 +37818,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/ContextClassloaderLocal.properties 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -15688,8 +37848,8 @@ +# Error messages for ContextClassloaderLocal utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/Internalizer.java 2013-09-06 11:23:56.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/Internalizer.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/Internalizer.java 2013-09-06 11:23:56.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/tools/internal/xjc/reader/internalizer/Internalizer.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -15714,8 +37874,8 @@ /** * Internalize all <jaxb:bindings> customizations in the given forest. ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/DatatypeConverterImpl.java 2013-09-06 11:23:57.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/DatatypeConverterImpl.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/DatatypeConverterImpl.java 2013-09-06 11:23:57.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/DatatypeConverterImpl.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -15784,8 +37944,8 @@ } private static final class CalendarFormatter { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -15835,8 +37995,8 @@ + return MessageFormat.format( rb.getString(name()), args ); + } +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages.properties 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/Messages.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -15865,8 +38025,8 @@ + +FAILED_TO_INITIALE_DATATYPE_FACTORY = \ + Failed to initialize JAXP 1.3 DatatypeFactory class. ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/JAXBRIContext.java 2013-09-06 11:23:57.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/JAXBRIContext.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/JAXBRIContext.java 2013-09-06 11:23:57.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/JAXBRIContext.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -15891,8 +38051,8 @@ } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/TypeReference.java 2013-09-06 11:23:57.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/TypeReference.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/TypeReference.java 2013-09-06 11:23:57.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/TypeReference.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -15923,8 +38083,8 @@ + return new TypeReference(tagName, Utils.REFLECTION_NAVIGATOR.getTypeArgument(base,0)); } } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/Utils.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/Utils.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/Utils.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/api/Utils.java 2014-01-18 12:16:09.000000000 -0800 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -16011,8 +38171,8 @@ + private Utils() { + } +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16028,8 +38188,8 @@ NO_IMAGE_WRITER, // 1 arg ILLEGAL_MIME_TYPE, // 2 args ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.properties 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.properties 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.properties 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Messages.properties 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ # -# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16047,8 +38207,30 @@ NO_IMAGE_WRITER = \ No javax.imageio.ImageWriter is available for the specified MIME type "{0}" ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/ModelBuilder.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/ModelBuilder.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/ModelBuilder.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/ModelBuilder.java 2014-06-06 19:56:15.000000000 -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) + )); + } + } @@ -235,7 +235,7 @@ String pkg = nav.getPackageName(ci.getClazz()); if(!registries.containsKey(pkg)) { @@ -16074,8 +38256,26 @@ /** * Checks the uniqueness of the type name. */ ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeAnyTypeImpl.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeAnyTypeImpl.java 2014-04-20 12:39:38.000000000 -0700 +@@ -302,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; +@@ -338,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/bind/v2/model/impl/RuntimeAnyTypeImpl.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeAnyTypeImpl.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16100,8 +38300,8 @@ } public <V> Transducer<V> getTransducer() { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16160,8 +38360,8 @@ private static void checkXmlGregorianCalendarFieldRef(QName type, XMLGregorianCalendar cal)throws javax.xml.bind.MarshalException{ StringBuilder buf = new StringBuilder(); ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeElementInfoImpl.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeElementInfoImpl.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeElementInfoImpl.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeElementInfoImpl.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16186,8 +38386,8 @@ } public RuntimeClassInfo getScope() { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeModelBuilder.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeModelBuilder.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeModelBuilder.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeModelBuilder.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16224,8 +38424,8 @@ @Override protected RuntimeTypeInfoSetImpl createTypeInfoSet() { return new RuntimeTypeInfoSetImpl(reader); ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeTypeInfoSetImpl.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeTypeInfoSetImpl.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeTypeInfoSetImpl.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/RuntimeTypeInfoSetImpl.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16263,8 +38463,8 @@ public RuntimeNonElement getTypeInfo( Type type ) { return (RuntimeNonElement)super.getTypeInfo(type); } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Utils.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Utils.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Utils.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/impl/Utils.java 2014-01-18 12:16:09.000000000 -0800 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -16351,8 +38551,8 @@ + private Utils() { + } +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/nav/Navigator.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/nav/Navigator.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/nav/Navigator.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/nav/Navigator.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16388,8 +38588,8 @@ /** * Returns true if this method is a bridge method as defined in JLS. ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -16472,8 +38672,8 @@ String name = method.getName(); Class[] params = method.getParameterTypes(); ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfoSet.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfoSet.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfoSet.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfoSet.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16496,8 +38696,8 @@ Iterable<? extends RuntimeElementInfo> getAllElements(); - ReflectionNavigator getNavigator(); } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16526,8 +38726,8 @@ if(type==JAXBElement.class) constructor = null; else { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16579,8 +38779,8 @@ } } return xsdgen; ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Utils.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Utils.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Utils.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/Utils.java 2014-01-18 12:16:09.000000000 -0800 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -16667,8 +38867,8 @@ + private Utils() { + } +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/output/XMLStreamWriterOutput.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/output/XMLStreamWriterOutput.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/output/XMLStreamWriterOutput.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/output/XMLStreamWriterOutput.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16734,8 +38934,8 @@ return c.getConstructor(STAXEX_WRITER_CLASS); } catch (Throwable e) { return null; ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayProperty.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayProperty.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayProperty.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/ArrayProperty.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16760,8 +38960,8 @@ assert lister!=null; acc = prop.getAccessor().optimize(context); assert acc!=null; ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/SingleMapNodeProperty.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16787,8 +38987,8 @@ mapImplClass = ClassFactory.inferImplClass(sig,knownImplClasses); // TODO: error check for mapImplClass==null // what is the error reporting path for this part of the code? ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/Utils.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/Utils.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/Utils.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/property/Utils.java 2014-01-18 12:16:09.000000000 -0800 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -16875,8 +39075,8 @@ + private Utils() { + } +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java 2013-09-06 11:23:58.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java 2013-09-06 11:23:58.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Accessor.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16901,8 +39101,8 @@ this, adapter.adapterType); } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Lister.java 2013-09-06 11:23:59.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Lister.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Lister.java 2013-09-06 11:23:59.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Lister.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16939,8 +39139,8 @@ else itemType = Object.class; l = new CollectionLister(getImplClass(rawType)); ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor.java 2013-09-06 11:23:59.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor.java 2013-09-06 11:23:59.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -16966,8 +39166,8 @@ } if(prop.id()==ID.IDREF) ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/reflect/Utils.java 2014-01-18 12:16:09.000000000 -0800 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -17054,8 +39254,8 @@ + private Utils() { + } +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector.java 2013-09-06 11:23:59.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector.java 2013-09-06 11:23:59.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/bind/v2/runtime/unmarshaller/StAXStreamConnector.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -17118,8 +39318,8 @@ - } - } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java 2013-09-06 11:24:01.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java 2013-09-06 11:24:01.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -17266,8 +39466,8 @@ + } +} \ No newline at end of file ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -17355,8 +39555,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal.properties 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -17385,8 +39585,8 @@ +# Error messages for StaticCache utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory.java 2013-09-06 11:24:01.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory.java 2013-09-06 11:24:01.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -17505,8 +39705,26 @@ } } } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/ContextClassloaderLocal.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/mimepull/MemoryData.java 2013-09-06 11:24:01.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/mimepull/MemoryData.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:01.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/mimepull/TempFiles.java 2014-06-06 19:56:15.000000000 -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/stream/buffer/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -17594,8 +39812,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/ContextClassloaderLocal.properties 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -17624,8 +39842,8 @@ +# Error messages for ContextClassloaderLocal utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/XMLStreamBuffer.java 2013-09-06 11:24:03.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/XMLStreamBuffer.java 2014-04-20 12:39:38.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/XMLStreamBuffer.java 2013-09-06 11:24:03.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/stream/buffer/XMLStreamBuffer.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. @@ -17656,8 +39874,8 @@ t.transform(new XMLStreamBufferSource(this), new DOMResult(n)); return n.getLastChild(); } catch (TransformerException e) { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/server/InstanceResolver.java 2013-09-06 11:24:04.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/server/InstanceResolver.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/server/InstanceResolver.java 2013-09-06 11:24:04.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/server/InstanceResolver.java 2013-12-01 11:13:43.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -17674,8 +39892,8 @@ } finally { postInvoke(p,t); } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/server/MethodUtil.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/server/MethodUtil.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/server/MethodUtil.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/server/MethodUtil.java 2013-12-01 11:13:43.000000000 -0800 @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -17771,8 +39989,8 @@ + } + +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -17860,8 +40078,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal.properties 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -17890,8 +40108,8 @@ +# Error messages for ContextClassloaderLocal utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory.java 2013-09-06 11:24:04.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory.java 2013-09-06 11:24:04.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamReaderFactory.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -17964,8 +40182,8 @@ } public static XMLStreamReader create(InputSource source, boolean rejectDTDs) { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory.java 2013-09-06 11:24:04.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory.java 2013-09-06 11:24:04.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/api/streaming/XMLStreamWriterFactory.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -18061,8 +40279,8 @@ } /** ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/binding/BindingImpl.java 2013-09-06 11:24:04.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/binding/BindingImpl.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/binding/BindingImpl.java 2013-09-06 11:24:04.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/binding/BindingImpl.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -18147,8 +40365,113 @@ + } + } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/sei/MethodUtil.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/sei/MethodUtil.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/WSServiceDelegate.java 2013-09-06 11:24:05.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/WSServiceDelegate.java 2014-06-06 19:56:15.000000000 -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/client/sei/MethodUtil.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/sei/MethodUtil.java 2013-12-01 11:13:43.000000000 -0800 @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -18244,8 +40567,8 @@ + } + +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/sei/SEIStub.java 2013-09-06 11:24:05.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/sei/SEIStub.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/sei/SEIStub.java 2013-09-06 11:24:05.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/client/sei/SEIStub.java 2013-12-01 11:13:43.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -18320,8 +40643,8 @@ public final Packet doProcess(Packet request, RequestContext rc, ResponseContextReceiver receiver) { return super.process(request, rc, receiver); } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/ContextClassloaderLocal.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -18409,8 +40732,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/ContextClassloaderLocal.properties 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -18439,8 +40762,8 @@ +# Error messages for ContextClassloaderLocal utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference.java 2013-09-06 11:24:05.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference.java 2013-09-06 11:24:05.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/developer/MemberSubmissionEndpointReference.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -18480,8 +40803,8 @@ //marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); marshaller.marshal(this, result); } catch (JAXBException e) { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/encoding/MimeCodec.java 2013-09-06 11:24:05.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/encoding/MimeCodec.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/encoding/MimeCodec.java 2013-09-06 11:24:05.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/encoding/MimeCodec.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -18533,8 +40856,8 @@ public static final String MULTIPART_RELATED_MIME_TYPE = "multipart/related"; private String boundary; ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/fault/SOAPFaultBuilder.java 2013-09-06 11:24:05.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/fault/SOAPFaultBuilder.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/fault/SOAPFaultBuilder.java 2013-09-06 11:24:05.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/fault/SOAPFaultBuilder.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -18600,8 +40923,8 @@ + return SOAPFaultBuilder.class.getName().contains("internal"); + } } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/RuntimeModeler.java 2013-09-06 11:24:06.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/RuntimeModeler.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/RuntimeModeler.java 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/RuntimeModeler.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -18661,8 +40984,8 @@ } i++; } ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/Utils.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/Utils.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/Utils.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/Utils.java 2014-01-18 12:16:09.000000000 -0800 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -18749,8 +41072,8 @@ + private Utils() { + } +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/WrapperBeanGenerator.java 2013-09-06 11:24:06.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/WrapperBeanGenerator.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/WrapperBeanGenerator.java 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/model/WrapperBeanGenerator.java 2014-01-18 12:16:09.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -18767,8 +41090,197 @@ private static final class RuntimeWrapperBeanGenerator extends AbstractWrapperBeanGenerator<java.lang.reflect.Type, Class, java.lang.reflect.Method, Field> { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/MethodUtil.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/MethodUtil.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/AssertionSet.java 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/AssertionSet.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/AssertionValidationProcessor.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/ComplexAssertion.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/EffectiveAlternativeSelector.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/EffectivePolicyModifier.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/NestedPolicy.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/Policy.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyAssertion.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyConstants.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyException.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyIntersector.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMap.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapExtender.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapKey.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapKeyHandler.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMapMutator.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyMerger.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicyScope.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/PolicySubject.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/SimpleAssertion.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:06.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/package-info.java 2014-06-06 19:56:15.000000000 -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/MethodUtil.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/MethodUtil.java 2013-12-01 11:13:43.000000000 -0800 @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -18862,8 +41374,17 @@ + } + +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/PolicyUtils.java 2013-09-06 11:24:07.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/PolicyUtils.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/PolicyLogger.java 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/PolicyLogger.java 2014-06-06 19:56:15.000000000 -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/PolicyUtils.java 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/PolicyUtils.java 2013-12-01 11:13:43.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -18896,8 +41417,170 @@ return resultClass.cast(result); } catch (IllegalArgumentException e) { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ContextClassloaderLocal.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/RuntimePolicyUtilsException.java 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/RuntimePolicyUtilsException.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/ServiceConfigurationError.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/ServiceFinder.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/privateutil/package-info.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/AssertionData.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/CompactModelGenerator.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/DefaultPolicyAssertionCreator.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/ModelNode.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/NormalizedModelGenerator.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelGenerator.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelMarshaller.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelTranslator.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyModelUnmarshaller.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicyReferenceData.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicySourceModel.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/PolicySourceModelContext.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/XmlPolicyModelMarshaller.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/XmlPolicyModelUnmarshaller.java 2014-06-06 19:56:15.000000000 -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/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -18985,8 +41668,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ContextClassloaderLocal.properties 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -19015,8 +41698,8 @@ +# Error messages for ContextClassloaderLocal utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ExternalAttachmentsUnmarshaller.java 2013-09-06 11:24:07.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ExternalAttachmentsUnmarshaller.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ExternalAttachmentsUnmarshaller.java 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/ExternalAttachmentsUnmarshaller.java 2014-06-06 19:56:15.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -19048,8 +41731,125 @@ ExternalAttachmentsUnmarshaller instance = new ExternalAttachmentsUnmarshaller(); final Map<URI, Policy> map = instance.unmarshal(reader, null); LOGGER.exiting(map); ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/server/AbstractInstanceResolver.java 2013-09-06 11:24:07.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/server/AbstractInstanceResolver.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/package-info.java 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/attach/package-info.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/package-info.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/wspolicy/NamespaceVersion.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/sourcemodel/wspolicy/XmlToken.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/AbstractQNameValidator.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/AssertionCreationException.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/PolicyAssertionCreator.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/PolicyAssertionValidator.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/PrefixMapper.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/spi/package-info.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/subject/PolicyMapKeyConverter.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/subject/WsdlBindingSubject.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/policy/subject/package-info.java 2014-06-06 19:56:15.000000000 -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/server/AbstractInstanceResolver.java 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/server/AbstractInstanceResolver.java 2013-12-01 11:13:43.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -19066,8 +41866,8 @@ } catch (IllegalAccessException e) { throw new ServerRtException("server.rt.err",e); } catch (InvocationTargetException e) { ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/server/MethodUtil.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/server/MethodUtil.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/server/MethodUtil.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/server/MethodUtil.java 2013-12-01 11:13:43.000000000 -0800 @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -19163,8 +41963,8 @@ + } + +} ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ContextClassloaderLocal.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -19252,8 +42052,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ContextClassloaderLocal.properties 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -19282,8 +42082,8 @@ +# Error messages for StaticCache utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ProviderImpl.java 2013-09-06 11:24:07.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ProviderImpl.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ProviderImpl.java 2013-09-06 11:24:07.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/spi/ProviderImpl.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -19314,8 +42114,8 @@ return (EndpointReference) unmarshaller.unmarshal(eprInfoset); } catch (JAXBException e) { throw new WebServiceException("Error creating Marshaller or marshalling.", e); ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -19403,8 +42203,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal.properties 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -19433,8 +42233,8 @@ +# Error messages for StaticCache utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/XmlUtil.java 2013-09-06 11:24:08.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/XmlUtil.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/XmlUtil.java 2013-09-06 11:24:08.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/ws/util/xml/XmlUtil.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -19490,8 +42290,8 @@ reader.setContentHandler(th); reader.setProperty(LEXICAL_HANDLER_PROPERTY, th); reader.parse(toInputSource(ssrc)); ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/ContextClassloaderLocal.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/ContextClassloaderLocal.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/ContextClassloaderLocal.java 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -19579,8 +42379,8 @@ + } +} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/ContextClassloaderLocal.properties 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/ContextClassloaderLocal.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/ContextClassloaderLocal.properties 2014-04-19 01:27:03.000000000 -0700 @@ -0,0 +1,27 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -19609,8 +42409,8 @@ +# Error messages for ContextClassloaderLocal utility class +FAILED_TO_CREATE_NEW_INSTANCE=Failed to create new instance of {0} + ---- jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/DomAnnotationParserFactory.java 2013-09-06 11:24:10.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/DomAnnotationParserFactory.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/DomAnnotationParserFactory.java 2013-09-06 11:24:10.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/com/sun/xml/internal/xsom/util/DomAnnotationParserFactory.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -19641,8 +42441,8 @@ } catch (TransformerConfigurationException e) { throw new Error(e); // impossible } ---- jaxws/src/share/jaxws_classes/javax/xml/bind/DatatypeConverterImpl.java 2013-09-06 11:24:10.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/javax/xml/bind/DatatypeConverterImpl.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/javax/xml/bind/DatatypeConverterImpl.java 2013-09-06 11:24:10.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/bind/DatatypeConverterImpl.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. @@ -19729,8 +42529,8 @@ } private static final class CalendarFormatter { ---- jaxws/src/share/jaxws_classes/javax/xml/bind/Messages.java 2013-09-06 11:24:10.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/javax/xml/bind/Messages.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/javax/xml/bind/Messages.java 2013-09-06 11:24:10.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/bind/Messages.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. @@ -19745,8 +42545,8 @@ + + static final String FAILED_TO_INITIALE_DATATYPE_FACTORY = "FAILED_TO_INITIALE_DATATYPE_FACTORY"; } ---- jaxws/src/share/jaxws_classes/javax/xml/bind/Messages.properties 2013-09-06 11:24:10.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/javax/xml/bind/Messages.properties 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/javax/xml/bind/Messages.properties 2013-09-06 11:24:10.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/bind/Messages.properties 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. @@ -19761,8 +42561,355 @@ + +FAILED_TO_INITIALE_DATATYPE_FACTORY = \ + Failed to initialize JAXP 1.3 DatatypeFactory class. ---- jaxws/src/share/jaxws_classes/javax/xml/ws/wsaddressing/W3CEndpointReference.java 2013-09-06 11:24:11.000000000 -0700 -+++ jaxws/src/share/jaxws_classes/javax/xml/ws/wsaddressing/W3CEndpointReference.java 2014-04-20 12:39:39.000000000 -0700 +--- ./jaxws/src/share/jaxws_classes/javax/xml/soap/AttachmentPart.java 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/AttachmentPart.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/Detail.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/DetailEntry.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/FactoryFinder.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/MessageFactory.java 2014-06-06 19:56:15.000000000 -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); ++ + } catch (Exception ex) { + throw new SOAPException( + "Unable to create message factory for SOAP: " +--- ./jaxws/src/share/jaxws_classes/javax/xml/soap/MimeHeader.java 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/MimeHeader.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/MimeHeaders.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/Name.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/Node.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SAAJResult.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPBody.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPBodyElement.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPConnection.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPConstants.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPElement.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPElementFactory.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPEnvelope.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPException.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPFactory.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPFault.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPFaultElement.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPHeader.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPHeaderElement.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPMessage.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/SOAPPart.java 2014-06-06 19:56:15.000000000 -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 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/soap/Text.java 2014-06-06 19:56:15.000000000 -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/ws/wsaddressing/W3CEndpointReference.java 2013-09-06 11:24:11.000000000 -0700 ++++ ./jaxws/src/share/jaxws_classes/javax/xml/ws/wsaddressing/W3CEndpointReference.java 2014-04-19 01:27:03.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. @@ -19779,8 +42926,8 @@ protected W3CEndpointReference() { } ---- jdk/.hgtags 2013-09-06 11:27:36.000000000 -0700 -+++ jdk/.hgtags 2014-04-20 12:39:29.000000000 -0700 +--- ./jdk/.hgtags 2013-09-06 11:27:36.000000000 -0700 ++++ ./jdk/.hgtags 2014-06-06 19:56:34.000000000 -0700 @@ -123,6 +123,7 @@ 539e576793a8e64aaf160e0d6ab0b9723cd0bef0 jdk7-b146 69e973991866c948cf1808b06884ef2d28b64fcb jdk7u1-b01 @@ -19789,7 +42936,7 @@ 2baf612764d215e6f3a5b48533f74c6924ac98d7 jdk7u1-b02 a4781b6d9cfb6901452579adee17c9a17c1b584c jdk7u1-b03 b223ed9a5fdf8ce3af42adfa8815975811d70eae jdk7u1-b04 -@@ -342,3 +343,61 @@ +@@ -342,3 +343,84 @@ b479996d5c924128c3490165b592bf66a3034932 jdk7u40-b42 fb25cdef17e9610db5cb89fc35c0c4abef5ad781 jdk7u40-b43 ed444a09a5fd32237deaef6e43804e20ba4f6352 jdk7u40-b60 @@ -19835,6 +42982,8 @@ +d19a89fdfb9b959b8638441d9d396685d6c7ab7b jdk7u51-b13 +ef58b2b9a9a1e1a42b0139b57816a160c4681371 jdk7u51-b30 +5bca0d0969b13b1d9b8caba3cce8293a98d68318 jdk7u51-b31 ++e9143dc3dc2a8f4b896e74f70d6c503d73c40533 jdk7u51-b33 ++c1eaf405fb8d7beddd75c6f81671970f6baa70d8 jdk7u51-b34 +f5eee4f1d5b4a1e19febc9c26c863ae853ed6d2e jdk7u55-b00 +5010db5b9b5ab07a9409a5c557d3f43ab32dc428 jdk7u55-b01 +2ca3e1fa4455ad564228ad6e654498167af2f20d jdk7u55-b02 @@ -19851,8 +43000,56 @@ +07be5d5508733ed37c11fcd21a13ae3c8288313b jdk7u55-b12 +92fd166252c2701092a510002f4cf9285a20473d jdk7u55-b13 +4a5651c84b1e6cf26dc9b19f00747e5004efba68 jdk7u55-b30 ---- jdk/make/bridge/Jabswitch/Makefile 2013-09-06 11:27:36.000000000 -0700 -+++ jdk/make/bridge/Jabswitch/Makefile 2014-04-20 12:39:22.000000000 -0700 ++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 +--- ./jdk/make/bridge/AccessBridgeJava/Makefile 2013-09-06 11:27:36.000000000 -0700 ++++ ./jdk/make/bridge/AccessBridgeJava/Makefile 2014-06-06 19:56:29.000000000 -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/bridge/Jabswitch/Makefile 2013-09-06 11:27:36.000000000 -0700 ++++ ./jdk/make/bridge/Jabswitch/Makefile 2013-12-01 11:14:27.000000000 -0800 @@ -53,7 +53,7 @@ buildexe : $(CD) $(TEMPDIR) @@ -19862,8 +43059,35 @@ $(MT) /nologo /verbose /manifest $(JAB_MANIFEST_INP) /outputresource:$(JAB_EXE) copyfilejab : ---- jdk/make/com/sun/jmx/Makefile 2013-09-06 11:27:36.000000000 -0700 -+++ jdk/make/com/sun/jmx/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/com/oracle/Makefile 2013-09-06 11:27:36.000000000 -0700 ++++ ./jdk/make/com/oracle/Makefile 2014-06-06 19:56:29.000000000 -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/com/sun/jmx/Makefile 2013-09-06 11:27:36.000000000 -0700 ++++ ./jdk/make/com/sun/jmx/Makefile 2013-12-01 11:14:27.000000000 -0800 @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. @@ -19894,8 +43118,8 @@ $(subst /,.,$(<:$(CLASSDESTDIR)/%.class=%)) @$(java-vm-cleanup) ---- jdk/make/com/sun/nio/Makefile 2013-09-06 11:27:36.000000000 -0700 -+++ jdk/make/com/sun/nio/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/com/sun/nio/Makefile 2013-09-06 11:27:36.000000000 -0700 ++++ ./jdk/make/com/sun/nio/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -31,11 +31,18 @@ include $(BUILDDIR)/common/Defs.gmk @@ -19916,8 +43140,8 @@ all build clean clobber:: $(SUBDIRS-loop) ---- jdk/make/com/sun/nio/sctp/Makefile 2013-09-06 11:27:36.000000000 -0700 -+++ jdk/make/com/sun/nio/sctp/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/com/sun/nio/sctp/Makefile 2013-09-06 11:27:36.000000000 -0700 ++++ ./jdk/make/com/sun/nio/sctp/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -59,15 +59,11 @@ -I$(PLATFORM_SRC)/native/java/net \ -I$(CLASSHDRDIR)/../../../../java/java.nio/nio/CClassHeaders @@ -19936,8 +43160,8 @@ else # windows include $(BUILDDIR)/common/Classes.gmk ---- jdk/make/com/sun/security/auth/module/Makefile 2013-09-06 11:27:36.000000000 -0700 -+++ jdk/make/com/sun/security/auth/module/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/com/sun/security/auth/module/Makefile 2013-09-06 11:27:36.000000000 -0700 ++++ ./jdk/make/com/sun/security/auth/module/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -67,7 +67,7 @@ include FILES_c_solaris.gmk endif # solaris @@ -19947,8 +43171,8 @@ LIBRARY = jaas_unix include FILES_export_unix.gmk include FILES_c_unix.gmk ---- jdk/make/com/sun/tools/attach/Exportedfiles.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/com/sun/tools/attach/Exportedfiles.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/com/sun/tools/attach/Exportedfiles.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/com/sun/tools/attach/Exportedfiles.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -43,7 +43,7 @@ sun/tools/attach/LinuxVirtualMachine.java endif @@ -19958,8 +43182,8 @@ FILES_export = \ sun/tools/attach/BsdVirtualMachine.java endif ---- jdk/make/com/sun/tools/attach/FILES_c.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/com/sun/tools/attach/FILES_c.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/com/sun/tools/attach/FILES_c.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/com/sun/tools/attach/FILES_c.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -39,7 +39,7 @@ LinuxVirtualMachine.c endif @@ -19969,8 +43193,8 @@ FILES_c = \ BsdVirtualMachine.c endif ---- jdk/make/com/sun/tools/attach/FILES_java.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/com/sun/tools/attach/FILES_java.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/com/sun/tools/attach/FILES_java.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/com/sun/tools/attach/FILES_java.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -43,7 +43,7 @@ sun/tools/attach/LinuxAttachProvider.java endif @@ -19980,8 +43204,8 @@ FILES_java += \ sun/tools/attach/BsdAttachProvider.java endif ---- jdk/make/com/sun/tools/attach/Makefile 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/com/sun/tools/attach/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/com/sun/tools/attach/Makefile 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/com/sun/tools/attach/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -38,7 +38,7 @@ ifeq ($(PLATFORM), linux) FILES_m = mapfile-linux @@ -20000,8 +43224,8 @@ vpath %.c $(call NativeSrcDirList,,native/sun/tools/attach) else vpath %.c $(PLATFORM_SRC)/native/sun/tools/attach ---- jdk/make/com/sun/tools/attach/mapfile-bsd 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/com/sun/tools/attach/mapfile-bsd 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/com/sun/tools/attach/mapfile-bsd 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/com/sun/tools/attach/mapfile-bsd 2014-06-06 19:56:34.000000000 -0700 @@ -30,6 +30,7 @@ Java_sun_tools_attach_BsdVirtualMachine_checkPermissions; Java_sun_tools_attach_BsdVirtualMachine_close; @@ -20010,8 +43234,8 @@ Java_sun_tools_attach_BsdVirtualMachine_open; Java_sun_tools_attach_BsdVirtualMachine_sendQuitTo; Java_sun_tools_attach_BsdVirtualMachine_socket; ---- jdk/make/common/Defs-bsd.gmk 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/make/common/Defs-bsd.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Defs-bsd.gmk 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/make/common/Defs-bsd.gmk 2014-06-06 19:56:39.000000000 -0700 @@ -0,0 +1,482 @@ +# +# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. @@ -20495,8 +43719,8 @@ + OTHER_CXXFLAGS += -I$(OPENWIN_HOME)/include + OTHER_CPPFLAGS += -I$(OPENWIN_HOME)/include +endif ---- jdk/make/common/Defs-embedded.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/Defs-embedded.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Defs-embedded.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Defs-embedded.gmk 2014-04-19 01:27:12.000000000 -0700 @@ -71,7 +71,9 @@ # and it must be linked after fdlibm - this places it at the end after libc # -z muldefs avoids linker errors for duplicate symbols. @@ -20508,8 +43732,8 @@ endif endif ---- jdk/make/common/Defs-linux.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/Defs-linux.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Defs-linux.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Defs-linux.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -426,6 +426,7 @@ override LIBDL = -ldl override MOOT_PRIORITIES = true @@ -20518,8 +43742,31 @@ ifeq ($(ARCH), amd64) override OPENWIN_LIB = $(OPENWIN_HOME)/lib64 else ---- jdk/make/common/Defs-solaris.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/Defs-solaris.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Defs-macosx.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Defs-macosx.gmk 2014-06-06 19:56:29.000000000 -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/Defs-solaris.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Defs-solaris.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -753,6 +753,9 @@ # Network Services library LIBNSL = -lnsl @@ -20530,8 +43777,8 @@ # service configuration facility library LIBSCF = -lscf ---- jdk/make/common/Defs.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/Defs.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Defs.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Defs.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -179,15 +179,15 @@ ifdef ALT_FREETYPE_LIB_PATH @@ -20582,8 +43829,8 @@ VPATH0.java = $(subst $(ONESPACE),:,$(GENSRCDIR) $(call JavaSrcDirList,,classes)) else VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/classes ---- jdk/make/common/Library.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/Library.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Library.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Library.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -299,8 +299,12 @@ ifeq ($(PLATFORM), solaris) $(STRIP) -x $@ @@ -20599,8 +43846,8 @@ endif # implied else here is no stripping at all endif ---- jdk/make/common/Mapfile-vers.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/Mapfile-vers.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Mapfile-vers.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Mapfile-vers.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -76,7 +76,7 @@ endif # PLATFORM @@ -20610,8 +43857,8 @@ ifeq ($(VARIANT), OPT) # OPT build MUST have a mapfile? ---- jdk/make/common/Program.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/Program.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Program.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Program.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -95,23 +95,31 @@ endif # SYSTEM_ZLIB endif # PLATFORM @@ -20701,8 +43948,28 @@ OTHER_CPPFLAGS += -DPROGNAME='"$(PROGRAM)"' VERSION_DEFINES += -DFULL_VERSION='"$(FULL_VERSION)"' ---- jdk/make/common/Release.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/Release.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Release-macosx.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Release-macosx.gmk 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Release.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -180,6 +180,12 @@ JA_DIRNAME=ja_JP.UTF-8 endif # linux @@ -20716,7 +43983,52 @@ define copy-man-pages $(MKDIR) -p $1/man/man1 for manbase in $(MANBASEDIRS:%=%/$(MAN1SUBDIR)) ; do \ -@@ -852,10 +858,6 @@ +@@ -402,25 +408,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 +619,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 +658,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) +@@ -852,10 +842,6 @@ $(BOOT_JAVA_CMD) -jar $(BUILDMETAINDEX_JARFILE) \ -o meta-index *.jar @$(CD) $(JRE_IMAGE_DIR)/lib/ext && $(java-vm-cleanup) @@ -20727,7 +44039,7 @@ ifeq ($(PLATFORM), windows) @# Remove certain *.lib files $(CD) $(JRE_IMAGE_DIR)/lib && \ -@@ -982,6 +984,11 @@ +@@ -982,6 +968,11 @@ endif $(RM) -rf $(JDK_IMAGE_DIR)/jre/man $(CHMOD) a+rx `$(FIND) $(JDK_IMAGE_DIR) -type d` @@ -20739,7 +44051,7 @@ initial-image-jdk64-bindemos: for dir in bin demo ; do \ -@@ -1025,12 +1032,18 @@ +@@ -1025,12 +1016,18 @@ FILES_launcher = $(wildcard $(SHARE_SRC)/bin/*) \ $(wildcard $(PLATFORM_SRC)/bin/java_md*) @@ -20759,7 +44071,7 @@ @# @# Copy in the jars in lib that only belong in the JDK @# -@@ -1112,7 +1125,7 @@ +@@ -1112,7 +1109,7 @@ @# So for Linux, make use of the -T option (like Solaris' -I option) of @# obtaining the list of files from a file. MKS tar has no such option. @@ -20768,7 +44080,7 @@ for d in $(SOURCE_DIRS); do \ $(RM) $(ABS_TEMPDIR)/src-files.list; \ ($(CD) $$d && \ -@@ -1125,7 +1138,7 @@ +@@ -1125,7 +1122,7 @@ done ; \ ) ; \ if [ -f $(ABS_TEMPDIR)/src-files.list ] ; then \ @@ -20777,8 +44089,8 @@ | ($(CD) $(JDK_IMAGE_DIR)/src && $(TAR) xf -); \ fi; \ done ---- jdk/make/common/Rules.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/Rules.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/Rules.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/Rules.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -51,7 +51,7 @@ # # All source tree areas for java/properties files (a few may be closed) @@ -20797,8 +44109,8 @@ # TODO(cpc): need to document why this is necessary... $(CLASSDESTDIR)/%.class: $(JDK_TOPDIR)/src/macosx/classes/%.java @$(add-java-file) ---- jdk/make/common/shared/Compiler-gcc.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/shared/Compiler-gcc.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/shared/Compiler-gcc.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/shared/Compiler-gcc.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -72,6 +72,21 @@ endif @@ -20821,8 +44133,8 @@ ifeq ($(PLATFORM), solaris) # Settings specific to Solaris ---- jdk/make/common/shared/Defs-bsd.gmk 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/make/common/shared/Defs-bsd.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/shared/Defs-bsd.gmk 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/make/common/shared/Defs-bsd.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -0,0 +1,267 @@ +# +# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. @@ -21091,8 +44403,8 @@ +endef +endif + ---- jdk/make/common/shared/Defs-utils.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/shared/Defs-utils.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/shared/Defs-utils.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/shared/Defs-utils.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -74,6 +74,13 @@ UTILS_DEVTOOL_PATH=$(DEVTOOLS_PATH) endif @@ -21143,8 +44455,8 @@ + UNZIP = $(UTILS_DEVTOOL_PATH)unzip + endif +endif ---- jdk/make/common/shared/Defs-versions.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/shared/Defs-versions.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/shared/Defs-versions.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/shared/Defs-versions.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -44,6 +44,11 @@ override CC_VERSION = gcc endif @@ -21171,8 +44483,8 @@ # Mac specific ifeq ($(PLATFORM), macosx) REQUIRED_OS_NAME = Darwin ---- jdk/make/common/shared/Defs.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/shared/Defs.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/shared/Defs.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/shared/Defs.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -181,7 +181,7 @@ # platform and shared sources/headers. This is mainly useful for the # Mac OS X build, which pulls its platform sources from the solaris and/or @@ -21208,8 +44520,8 @@ FULL_VERSION = $(RELEASE)-$(USER_RELEASE_SUFFIX)-$(BUILD_NUMBER) endif ---- jdk/make/common/shared/Platform.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/common/shared/Platform.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/common/shared/Platform.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/common/shared/Platform.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -298,6 +298,85 @@ # How much RAM does this machine have: endif @@ -21296,8 +44608,8 @@ # Windows with and without CYGWIN will be slightly different ifeq ($(SYSTEM_UNAME), Windows_NT) PLATFORM = windows ---- jdk/make/java/Makefile 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/Makefile 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -53,14 +53,10 @@ endif endif # PLATFORM @@ -21314,8 +44626,8 @@ include $(BUILDDIR)/common/Subdirs.gmk all build clean clobber:: ---- jdk/make/java/instrument/Makefile 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/instrument/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/instrument/Makefile 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/instrument/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -104,12 +104,24 @@ # equivalent of strcasecmp is stricmp on Windows CPPFLAGS_COMMON += -Dstrcasecmp=stricmp @@ -21346,8 +44658,8 @@ ifeq ($(SYSTEM_ZLIB), true) OTHER_LDLIBS += -lz endif ---- jdk/make/java/java/Exportedfiles.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/java/Exportedfiles.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/java/Exportedfiles.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/java/Exportedfiles.gmk 2014-04-19 01:27:12.000000000 -0700 @@ -50,6 +50,7 @@ java/lang/SecurityManager.java \ java/lang/Shutdown.java \ @@ -21356,8 +44668,18 @@ java/lang/ref/Finalizer.java \ java/lang/reflect/AccessibleObject.java \ java/lang/reflect/Field.java \ ---- jdk/make/java/java/Makefile 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/java/Makefile 2014-04-28 17:39:02.000000000 -0700 +--- ./jdk/make/java/java/FILES_c.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/java/FILES_c.gmk 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/java/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -84,6 +84,7 @@ java/util/prefs/FileSystemPreferencesFactory.java \ @@ -21366,7 +44688,15 @@ UnixFileSystem_md.c \ canonicalize_md.c \ TimeZone.c \ -@@ -175,9 +176,11 @@ +@@ -101,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 + + # +@@ -175,9 +177,11 @@ # ifneq ($(PLATFORM), windows) ifneq ($(PLATFORM), macosx) @@ -21378,7 +44708,15 @@ ifeq ($(HAVE_ALTZONE),true) OTHER_CPPFLAGS += -DHAVE_ALTZONE -@@ -451,3 +454,39 @@ +@@ -221,6 +225,7 @@ + ifeq ($(PLATFORM), macosx) + OTHER_LDLIBS += \ + -framework CoreFoundation \ ++ -framework Foundation \ + -framework Security \ + -framework SystemConfiguration + endif +@@ -451,3 +456,39 @@ clean:: $(RM) $(GENSRCDIR)/sun/util/CoreResourceBundleControl.java @@ -21418,8 +44756,8 @@ + $(RM) $(HELPER_EXE_FILES_o) $(HELPER_EXE) + +endif #BUILDHELPER ---- jdk/make/java/java/genlocales.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/java/genlocales.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/java/genlocales.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/java/genlocales.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -93,18 +93,66 @@ else @@ -21491,8 +44829,24 @@ genlocales : $(LocaleDataMetaInfo_Dest) ---- jdk/make/java/java/mapfile-vers 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/java/mapfile-vers 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/java/mapfile-vers 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/java/mapfile-vers 2014-06-06 19:56:29.000000000 -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; @@ -215,7 +215,7 @@ Java_java_lang_Throwable_fillInStackTrace; Java_java_lang_Throwable_getStackTraceDepth; @@ -21502,8 +44856,38 @@ Java_java_lang_UNIXProcess_waitForProcessExit; Java_java_lang_UNIXProcess_forkAndExec; Java_java_lang_UNIXProcess_destroyProcess; ---- jdk/make/java/jli/Makefile 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/jli/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/java/reorder-i586 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/java/reorder-i586 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/java/reorder-sparc 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/java/reorder-sparcv9 2014-06-06 19:56:29.000000000 -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/java/jli/Makefile 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/jli/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -119,9 +119,9 @@ LIBARCH_DEFINES += -DLIBARCH64NAME='"$(LIBARCH64)"' endif # PLATFORM @@ -21525,8 +44909,8 @@ ifeq ($(USE_PTHREADS),true) LDLIBS += -lpthread endif # USE_PTHREADS ---- jdk/make/java/management/mapfile-vers 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/management/mapfile-vers 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/management/mapfile-vers 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/management/mapfile-vers 2013-12-01 11:14:27.000000000 -0800 @@ -53,7 +53,7 @@ Java_sun_management_GcInfoBuilder_fillGcAttributeInfo; Java_sun_management_GcInfoBuilder_getLastGcInfo0; @@ -21536,8 +44920,8 @@ Java_sun_management_HotspotThread_getInternalThreadCount; Java_sun_management_HotspotThread_getInternalThreadTimes0; Java_sun_management_MemoryImpl_getMemoryManagers0; ---- jdk/make/java/net/FILES_c.gmk 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/net/FILES_c.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/net/FILES_c.gmk 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/net/FILES_c.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -24,20 +24,21 @@ # @@ -21585,8 +44969,8 @@ ifeq ($(PLATFORM), windows) FILES_c += TwoStacksPlainSocketImpl.c FILES_c += DualStackPlainSocketImpl.c ---- jdk/make/java/net/Makefile 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/net/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/net/Makefile 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/net/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -83,7 +83,8 @@ # Find platform specific native code # @@ -21606,8 +44990,8 @@ ifdef DONT_ENABLE_IPV6 OTHER_CFLAGS += -DDONT_ENABLE_IPV6 endif ---- jdk/make/java/net/mapfile-vers 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/net/mapfile-vers 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/net/mapfile-vers 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/net/mapfile-vers 2014-01-18 12:16:22.000000000 -0800 @@ -26,84 +26,86 @@ # Define public interface. @@ -21772,8 +45156,8 @@ + local: + *; }; ---- jdk/make/java/nio/Makefile 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/nio/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/nio/Makefile 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/nio/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -263,13 +263,89 @@ sun/nio/fs/UnixConstants.java endif # PLATFORM = linux @@ -21914,8 +45298,8 @@ FILES_m = mapfile-bsd endif include $(BUILDDIR)/common/Mapfile-vers.gmk ---- jdk/make/java/nio/mapfile-bsd 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/nio/mapfile-bsd 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/nio/mapfile-bsd 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/nio/mapfile-bsd 2014-06-06 19:56:34.000000000 -0700 @@ -70,6 +70,7 @@ Java_sun_nio_ch_IOUtil_drain; Java_sun_nio_ch_IOUtil_fdVal; @@ -21936,8 +45320,8 @@ Java_sun_nio_ch_KQueuePort_socketpair; Java_sun_nio_ch_KQueuePort_interrupt; Java_sun_nio_ch_KQueuePort_drain1; ---- jdk/make/java/npt/Makefile 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/npt/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/npt/Makefile 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/npt/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -74,6 +74,14 @@ OTHER_LDLIBS += -liconv endif @@ -21953,8 +45337,8 @@ # # Add to ambient vpath so we pick up the library files # ---- jdk/make/java/redist/fonts/Makefile 2013-09-06 11:27:37.000000000 -0700 -+++ jdk/make/java/redist/fonts/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/java/redist/fonts/Makefile 2013-09-06 11:27:37.000000000 -0700 ++++ ./jdk/make/java/redist/fonts/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -42,7 +42,7 @@ $(LIBDIR)/fonts/LucidaSansRegular.ttf \ $(LIBDIR)/fonts/LucidaSansDemiBold.ttf \ @@ -21982,8 +45366,8 @@ all build : $(INTERNAL_IMPORT_LIST) ---- jdk/make/javax/sound/Makefile 2013-09-06 11:27:38.000000000 -0700 -+++ jdk/make/javax/sound/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/javax/sound/Makefile 2013-09-06 11:27:38.000000000 -0700 ++++ ./jdk/make/javax/sound/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -111,6 +111,21 @@ #MXSPP_ADD = $(PLATFORM)-$(ARCH)/ endif # PLATFORM linux @@ -22006,8 +45390,8 @@ ifeq ($(PLATFORM), macosx) CPPFLAGS += -DUSE_PORTS=TRUE \ -DUSE_DAUDIO=TRUE \ ---- jdk/make/javax/sound/SoundDefs.gmk 2013-09-06 11:27:38.000000000 -0700 -+++ jdk/make/javax/sound/SoundDefs.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/javax/sound/SoundDefs.gmk 2013-09-06 11:27:38.000000000 -0700 ++++ ./jdk/make/javax/sound/SoundDefs.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -40,6 +40,10 @@ CPPFLAGS += -DX_PLATFORM=X_LINUX endif # PLATFORM linux @@ -22019,8 +45403,8 @@ ifeq ($(PLATFORM), macosx) CPPFLAGS += -DX_PLATFORM=X_MACOSX endif # PLATFORM macosx ---- jdk/make/javax/sound/jsoundalsa/Makefile 2013-09-06 11:27:38.000000000 -0700 -+++ jdk/make/javax/sound/jsoundalsa/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/javax/sound/jsoundalsa/Makefile 2013-09-06 11:27:38.000000000 -0700 ++++ ./jdk/make/javax/sound/jsoundalsa/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -51,6 +51,7 @@ $(PORTFILES_c) @@ -22071,8 +45455,8 @@ # # Add to the ambient VPATH. ---- jdk/make/jpda/transport/socket/Makefile 2013-09-06 11:27:38.000000000 -0700 -+++ jdk/make/jpda/transport/socket/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/jpda/transport/socket/Makefile 2013-09-06 11:27:38.000000000 -0700 ++++ ./jdk/make/jpda/transport/socket/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -38,6 +38,11 @@ include $(BUILDDIR)/common/Defs.gmk @@ -22085,8 +45469,8 @@ ifeq ($(PLATFORM), linux) OTHER_LDLIBS += $(LIBNSL) $(LIBSOCKET) -lpthread endif ---- jdk/make/sun/awt/FILES_c_macosx.gmk 2013-09-06 11:27:39.000000000 -0700 -+++ jdk/make/sun/awt/FILES_c_macosx.gmk 1969-12-31 16:00:00.000000000 -0800 +--- ./jdk/make/sun/awt/FILES_c_macosx.gmk 2013-09-06 11:27:39.000000000 -0700 ++++ ./jdk/make/sun/awt/FILES_c_macosx.gmk 1969-12-31 16:00:00.000000000 -0800 @@ -1,28 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. @@ -22116,8 +45500,8 @@ -FILES_AWT_objc = \ - $(TARGDIR)MacOSXResourceBundle.m - ---- jdk/make/sun/awt/FILES_export_macosx.gmk 2013-09-06 11:27:39.000000000 -0700 -+++ jdk/make/sun/awt/FILES_export_macosx.gmk 1969-12-31 16:00:00.000000000 -0800 +--- ./jdk/make/sun/awt/FILES_export_macosx.gmk 2013-09-06 11:27:39.000000000 -0700 ++++ ./jdk/make/sun/awt/FILES_export_macosx.gmk 1969-12-31 16:00:00.000000000 -0800 @@ -1,29 +0,0 @@ -# -# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. @@ -22148,8 +45532,8 @@ - -FILES_export += \ - com/apple/resources/MacOSXResourceBundle.java ---- jdk/make/sun/awt/Makefile 2013-09-06 11:27:39.000000000 -0700 -+++ jdk/make/sun/awt/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/awt/Makefile 2013-09-06 11:27:39.000000000 -0700 ++++ ./jdk/make/sun/awt/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -127,7 +127,12 @@ OTHER_LDLIBS = $(JVMLIB) $(LIBM) $(LIBDL) endif @@ -22182,7 +45566,18 @@ FILES_objc = $(FILES_AWT_objc) OTHER_LDLIBS = -lmlib_image $(JVMLIB) $(LIBM) \ -@@ -502,6 +507,17 @@ +@@ -193,6 +198,10 @@ + sun/awt/windows/awtLocalization.properties + endif + ++ifeq ($(PLATFORM), macosx) ++ NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES += \ ++ sun/awt/resources/awtosx.properties ++endif + # + # Rules + # +@@ -502,6 +511,17 @@ # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SOLARIS endif # PLATFORM @@ -22200,7 +45595,7 @@ ifeq ($(PLATFORM), macosx) # vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv MAC OS X -@@ -607,6 +623,9 @@ +@@ -607,6 +627,9 @@ -I$(OPENWIN_HOME)/include/X11/extensions \ -I$(PLATFORM_SRC)/native/$(PKGDIR)/font endif @@ -22210,7 +45605,7 @@ CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/debug \ -I$(SHARE_SRC)/native/$(PKGDIR)/../font \ -I$(PLATFORM_SRC)/native/$(PKGDIR)/../font \ -@@ -628,7 +647,13 @@ +@@ -628,7 +651,13 @@ -I$(PLATFORM_SRC)/native/$(PKGDIR) \ $(EVENT_MODEL) @@ -22225,8 +45620,8 @@ LDFLAGS += -L$(OPENWIN_LIB) endif ---- jdk/make/sun/awt/mawt.gmk 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/awt/mawt.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/awt/mawt.gmk 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/awt/mawt.gmk 2014-06-06 19:56:34.000000000 -0700 @@ -169,7 +169,7 @@ OTHER_LDLIBS = -lXt -lXext $(LIBXTST) $(LIBXMU) -lX11 -lXi endif @@ -22283,8 +45678,8 @@ ifeq ($(PLATFORM), macosx)) CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions \ -I$(OPENWIN_HOME)/include ---- jdk/make/sun/font/Makefile 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/font/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/font/Makefile 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/font/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -36,7 +36,11 @@ CPLUSPLUSLIBRARY=true @@ -22316,16 +45711,16 @@ OTHER_INCLUDES += -I$(X11_PATH)/include OTHER_LDLIBS += -lawt $(LIBM) $(LIBCXX) ifeq ($(OS_VENDOR),Apple) ---- jdk/make/sun/javazic/tzdata/VERSION 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/VERSION 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/VERSION 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/VERSION 2014-06-06 19:56:30.000000000 -0700 @@ -21,4 +21,4 @@ # or visit www.oracle.com if you need additional information or have any # questions. # -tzdata2013d -+tzdata2013i ---- jdk/make/sun/javazic/tzdata/africa 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/africa 2014-04-20 12:39:22.000000000 -0700 ++tzdata2014b +--- ./jdk/make/sun/javazic/tzdata/africa 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/africa 2014-06-06 19:56:30.000000000 -0700 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -22405,7 +45800,7 @@ # From Steffen Thorsen (2008-08-27): # Morocco will change the clocks back on the midnight between August 31 # and September 1. They originally planned to observe DST to near the end -@@ -881,13 +881,23 @@ +@@ -881,13 +881,26 @@ # transitions would be 2013-07-07 and 2013-08-10; see: # http://www.maroc.ma/en/news/morocco-suspends-daylight-saving-time-july-7-aug10 @@ -22420,7 +45815,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 2021 were determined by running +# transition dates for 2014 through 2038 were determined by running @@ -22432,7 +45830,7 @@ # (let ((a # (calendar-gregorian-from-absolute # (calendar-islamic-to-absolute (list 9 1 islamic-year)))) -@@ -902,13 +912,18 @@ +@@ -902,13 +915,18 @@ # (car (cdr (cdr b))) (calendar-month-name (car b) t) (car (cdr b))))) # (setq islamic-year (+ 1 islamic-year)))) # @@ -22458,7 +45856,7 @@ # RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S -@@ -935,12 +950,14 @@ +@@ -935,12 +953,14 @@ Rule Morocco 2010 only - Aug 8 0:00 0 - Rule Morocco 2011 only - Apr 3 0:00 1:00 S Rule Morocco 2011 only - Jul 31 0 0 - @@ -22475,7 +45873,7 @@ Rule Morocco 2014 only - Jun 29 3:00 0 - Rule Morocco 2014 only - Jul 29 2:00 1:00 S Rule Morocco 2015 only - Jun 18 3:00 0 - -@@ -953,20 +970,42 @@ +@@ -953,20 +973,42 @@ Rule Morocco 2018 only - Jun 15 2:00 1:00 S Rule Morocco 2019 only - May 6 3:00 0 - Rule Morocco 2019 only - Jun 5 2:00 1:00 S @@ -22520,7 +45918,7 @@ # Mozambique # Zone NAME GMTOFF RULES FORMAT [UNTIL] -@@ -1123,9 +1162,7 @@ +@@ -1123,9 +1165,7 @@ 3:00 - EAT # South Sudan @@ -22531,8 +45929,8 @@ # Swaziland # Zone NAME GMTOFF RULES FORMAT [UNTIL] ---- jdk/make/sun/javazic/tzdata/antarctica 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/antarctica 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/antarctica 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/antarctica 2014-06-06 19:56:30.000000000 -0700 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -22572,20 +45970,64 @@ # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule ArgAQ 1964 1966 - Mar 1 0:00 0 - Rule ArgAQ 1964 1966 - Oct 15 0:00 1:00 S -@@ -251,9 +251,10 @@ +@@ -251,25 +251,43 @@ # Scott Island (never inhabited) # # year-round base -# Scott, Ross Island, since 1957-01, is like Antarctica/McMurdo. +-# +-# 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 +# Scott Base, Ross Island, since 1957-01. +# See Pacific/Auckland. + + # Norway - territories + # Bouvet (never inhabited) # --# These rules for New Zealand are stolen from the `australasia' file. -+# 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 -@@ -291,11 +292,11 @@ + # 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 +@@ -291,11 +309,11 @@ # From Lee Hotz (2001-03-08): # I queried the folks at Columbia who spent the summer at Vostok and this is # what they had to say about time there: @@ -22599,7 +46041,7 @@ # # From Paul Eggert (2001-05-04): # This seems to be hopelessly confusing, so I asked Lee Hotz about it -@@ -360,16 +361,8 @@ +@@ -360,16 +378,8 @@ -4:00 ChileAQ CL%sT # # @@ -22618,14 +46060,14 @@ # # From Chris Carrier (1996-06-27): # Siple, the first commander of the South Pole station, -@@ -391,4 +384,4 @@ +@@ -391,4 +401,4 @@ # we have to go around and set them back 5 minutes or so. # Maybe if we let them run fast all of the time, we'd get to leave here sooner!! # -Link Antarctica/McMurdo Antarctica/South_Pole +# See 'australasia' for Antarctica/McMurdo. ---- jdk/make/sun/javazic/tzdata/asia 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/asia 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/asia 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/asia 2014-06-06 19:56:30.000000000 -0700 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -22756,7 +46198,23 @@ # Iran -@@ -1386,10 +1403,22 @@ +@@ -1096,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, +@@ -1386,10 +1408,22 @@ # switch back to standard time this winter, so the will stay on DST # until about the same time next year (at least). # http://www.petra.gov.jo/Public_News/Nws_NewsDetails.aspx?NewsID=88950 @@ -22783,7 +46241,7 @@ # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Jordan 1973 only - Jun 6 0:00 1:00 S -@@ -1415,12 +1444,14 @@ +@@ -1415,12 +1449,14 @@ Rule Jordan 1999 only - Jul 1 0:00s 1:00 S Rule Jordan 1999 2002 - Sep lastFri 0:00s 0 - Rule Jordan 2000 2001 - Mar lastThu 0:00s 1:00 S @@ -22800,7 +46258,7 @@ # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Amman 2:23:44 - LMT 1931 2:00 Jordan EE%sT -@@ -2303,9 +2334,18 @@ +@@ -2303,9 +2339,18 @@ # http://www.samanews.com/index.php?act=Show&id=154120 # http://safa.ps/details/news/99844/%D8%B1%D8%A7%D9%85-%D8%A7%D9%84%D9%84%D9%87-%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-29-%D8%A7%D9%84%D8%AC%D8%A7%D8%B1%D9%8A.html @@ -22821,7 +46279,7 @@ # the predictions in today's editions of the following URLs, # which are for Gaza and Hebron respectively: # http://www.timeanddate.com/worldclock/timezone.html?n=702 -@@ -2336,7 +2376,8 @@ +@@ -2336,7 +2381,8 @@ Rule Palestine 2011 only - Aug 30 0:00 1:00 S Rule Palestine 2011 only - Sep 30 0:00 0 - Rule Palestine 2012 max - Mar lastThu 24:00 1:00 S @@ -22831,8 +46289,8 @@ # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Gaza 2:17:52 - LMT 1900 Oct ---- jdk/make/sun/javazic/tzdata/australasia 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/australasia 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/australasia 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/australasia 2014-06-06 19:56:30.000000000 -0700 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -22860,7 +46318,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. -@@ -375,16 +375,25 @@ +@@ -375,18 +375,30 @@ # today confirmed that Fiji will start daylight savings at 2 am on Sunday 21st # October 2012 and end at 3 am on Sunday 20th January 2013. # http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=6702&catid=71&Itemid=155 @@ -22869,16 +46327,18 @@ -# For now, guess a pattern of the penultimate Sundays in October and January. + +# 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 @@ -22888,9 +46348,13 @@ -Rule Fiji 2010 max - Oct Sun>=18 2:00 1:00 S +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 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] -@@ -510,6 +519,7 @@ + Zone Pacific/Fiji 11:55:44 - LMT 1915 Oct 26 # Suva + 12:00 Fiji FJ%sT # Fiji Time +@@ -510,6 +522,7 @@ Zone Pacific/Chatham 12:13:48 - LMT 1957 Jan 1 12:45 Chatham CHA%sT @@ -22898,7 +46362,7 @@ # Auckland Is # uninhabited; Maori and Moriori, colonial settlers, pastoralists, sealers, -@@ -759,7 +769,7 @@ +@@ -759,7 +772,7 @@ # 1886-1891; Baker was similar but exact dates are not known. # Inhabited by civilians 1935-1942; U.S. military bases 1943-1944; # uninhabited thereafter. @@ -22907,28 +46371,43 @@ # see page 206 of Elgen M. Long and Marie K. Long, # Amelia Earhart: the Mystery Solved, Simon & Schuster (2000). # So most likely Howland and Baker observed Hawaii Time from 1935 -@@ -772,8 +782,17 @@ +@@ -772,8 +785,32 @@ # no information; was probably like Pacific/Kiritimati # Johnston -# Zone NAME GMTOFF RULES FORMAT [UNTIL] -Zone Pacific/Johnston -10:00 - HST +# -+# 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. # Kingman # uninhabited ---- jdk/make/sun/javazic/tzdata/backward 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/backward 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/backward 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/backward 2014-01-18 12:16:25.000000000 -0800 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -22990,8 +46469,8 @@ Link Europe/Warsaw Poland Link Europe/Lisbon Portugal Link Asia/Taipei ROC ---- jdk/make/sun/javazic/tzdata/etcetera 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/etcetera 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/etcetera 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/etcetera 2014-01-18 12:16:25.000000000 -0800 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -23031,8 +46510,8 @@ # # In the draft 5 of POSIX 1003.1-200x, the angle bracket notation allows for # TZ='<GMT-4>+4'; if you want time zone abbreviations conforming to ---- jdk/make/sun/javazic/tzdata/europe 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/europe 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/europe 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/europe 2014-06-06 19:56:30.000000000 -0700 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -23367,7 +46846,118 @@ 1:00 Swiss CE%sT 1981 1:00 EU CE%sT -@@ -2907,7 +2954,7 @@ +@@ -2721,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 +@@ -2797,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. + +@@ -2818,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 +@@ -2841,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 +-# +-# <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> + ++# 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 ++# ++# 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. +@@ -2863,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. +@@ -2907,7 +2974,7 @@ # From Paul Eggert (2006-03-22): # The _Economist_ (1994-05-28, p 45) reports that central Crimea switched # from Kiev to Moscow time sometime after the January 1994 elections. @@ -23376,18 +46966,24 @@ # sometime between the 1994 DST switches. Shanks & Pottenger simply say # 1994-09-25 03:00, but that can't be right. For now, guess it # changed in May. -@@ -2921,6 +2968,9 @@ +@@ -2919,7 +2986,14 @@ + # 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 - +- 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. -+ + ############################################################################### - # One source shows that Bulgaria, Cyprus, Finland, and Greece observe DST from ---- jdk/make/sun/javazic/tzdata/factory 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/factory 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/factory 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/factory 2014-01-18 12:16:25.000000000 -0800 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -23415,8 +47011,8 @@ # 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. ---- jdk/make/sun/javazic/tzdata/iso3166.tab 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/iso3166.tab 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/iso3166.tab 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/iso3166.tab 2014-01-18 12:16:25.000000000 -0800 @@ -1,30 +1,30 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -23481,8 +47077,8 @@ BR Brazil BS Bahamas BT Bhutan ---- jdk/make/sun/javazic/tzdata/leapseconds 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/leapseconds 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/leapseconds 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/leapseconds 2014-06-06 19:56:30.000000000 -0700 @@ -1,37 +1,43 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -23510,11 +47106,11 @@ # 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. --# + # -# <pre> -# This file is in the public domain, so clarified as of -# 2009-05-17 by Arthur David Olson. - +- # Allowance for leapseconds added to each timezone file. +# This file is in the public domain. @@ -23601,8 +47197,8 @@ -# Head -# Earth Orientation Center of IERS -# Observatoire de Paris, France ---- jdk/make/sun/javazic/tzdata/northamerica 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/northamerica 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/northamerica 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/northamerica 2014-06-06 19:56:30.000000000 -0700 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -23673,7 +47269,21 @@ # Sunday of November'. # (b) Effective Date- Subsection (a) shall take effect 1 year after the # date of enactment of this Act or March 1, 2007, whichever is later. -@@ -623,6 +623,8 @@ +@@ -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 +@@ -623,6 +624,8 @@ -10:30 - HST 1947 Jun 8 2:00 #Schmitt&Cox+2 -10:00 - HST @@ -23682,7 +47292,7 @@ # Now we turn to US areas that have diverged from the consensus since 1970. # Arizona mostly uses MST. -@@ -659,8 +661,9 @@ +@@ -659,8 +662,9 @@ # Navajo Nation participates in the Daylight Saving Time policy, due to its # large size and location in three states." (The "only" means that other # tribal nations don't use DST.) @@ -23694,7 +47304,7 @@ # Southern Idaho (Ada, Adams, Bannock, Bear Lake, Bingham, Blaine, # Boise, Bonneville, Butte, Camas, Canyon, Caribou, Cassia, Clark, -@@ -700,13 +703,13 @@ +@@ -700,13 +704,13 @@ # and Switzerland counties have their own time zone histories as noted below. # # Shanks partitioned Indiana into 345 regions, each with its own time history, @@ -23711,7 +47321,7 @@ # From Paul Eggert (2005-08-16): # http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006. -@@ -970,8 +973,8 @@ +@@ -970,8 +974,8 @@ # This story is too entertaining to be false, so go with Howse over Shanks. # # From Paul Eggert (2001-03-06): @@ -23722,7 +47332,7 @@ # info, so omit this for now. # # Most of Michigan observed DST from 1973 on, but was a bit late in 1975. -@@ -1011,7 +1014,7 @@ +@@ -1011,7 +1015,7 @@ # occupied 1857/1900 by the Navassa Phosphate Co # US lighthouse 1917/1996-09 # currently uninhabited @@ -23731,7 +47341,7 @@ # _Los Angeles Times_ (1998-11-10), A1, A10; it cites # Jimmy Skaggs, _The Great Guano Rush_ (1994). -@@ -1045,7 +1048,7 @@ +@@ -1045,7 +1049,7 @@ # Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94 # <http://www.jstor.org/stable/1774359>. # @@ -23740,7 +47350,7 @@ # Canada -@@ -1246,7 +1249,7 @@ +@@ -1246,7 +1250,7 @@ # most of east Labrador @@ -23749,7 +47359,7 @@ # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Goose_Bay -4:01:40 - LMT 1884 # Happy Valley-Goose Bay -3:30:52 - NST 1918 -@@ -1363,25 +1366,27 @@ +@@ -1363,25 +1367,27 @@ # Quebec @@ -23789,7 +47399,7 @@ # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Mont 1917 only - Mar 25 2:00 1:00 D -@@ -1425,7 +1430,6 @@ +@@ -1425,7 +1431,6 @@ -5:00 Mont E%sT 1974 -5:00 Canada E%sT @@ -23797,7 +47407,7 @@ # Ontario # From Paul Eggert (2006-07-09): -@@ -1644,7 +1648,7 @@ +@@ -1644,7 +1649,7 @@ -6:00 - CST 1910 -5:00 - EST 1942 -5:00 Canada E%sT 1970 @@ -23806,7 +47416,7 @@ -5:00 - EST 1974 -5:00 Canada E%sT Zone America/Nipigon -5:53:04 - LMT 1895 -@@ -2231,7 +2235,7 @@ +@@ -2231,7 +2236,7 @@ # From Paul Eggert (1996-06-12): # For an English translation of the decree, see # <a href="http://mexico-travel.com/extra/timezone_eng.html"> @@ -23815,7 +47425,7 @@ # </a> # From Rives McDow (1998-10-08): -@@ -2568,9 +2572,7 @@ +@@ -2568,9 +2573,7 @@ ############################################################################### # Anguilla @@ -23826,7 +47436,7 @@ # Antigua and Barbuda # Zone NAME GMTOFF RULES FORMAT [UNTIL] -@@ -2639,13 +2641,13 @@ +@@ -2639,13 +2642,13 @@ # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton -4:00 - AST 1974 Apr 28 2:00 @@ -23842,7 +47452,7 @@ -5:00 - EST # Costa Rica -@@ -2660,7 +2662,7 @@ +@@ -2660,7 +2663,7 @@ # go with Shanks & Pottenger. Rule CR 1991 only - Jul 1 0:00 0 S Rule CR 1992 only - Mar 15 0:00 0 S @@ -23851,7 +47461,7 @@ # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Costa_Rica -5:36:13 - LMT 1890 # San Jose -5:36:13 - SJMT 1921 Jan 15 # San Jose Mean Time -@@ -2686,6 +2688,11 @@ +@@ -2686,6 +2689,11 @@ # to DST--and one more hour on 1999-04-04--when the announcers will have # returned to Baltimore, which switches on that date.) @@ -23863,7 +47473,7 @@ # From Evert van der Veer via Steffen Thorsen (2004-10-28): # Cuba is not going back to standard time this year. # From Paul Eggert (2006-03-22): -@@ -2875,7 +2882,8 @@ +@@ -2875,7 +2883,8 @@ Rule Cuba 1997 only - Oct 12 0:00s 0 S Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S @@ -23873,7 +47483,7 @@ Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D -@@ -2892,9 +2900,7 @@ +@@ -2892,9 +2901,7 @@ -5:00 Cuba C%sT # Dominica @@ -23884,7 +47494,7 @@ # Dominican Republic -@@ -2943,18 +2949,10 @@ +@@ -2943,18 +2950,10 @@ -6:00 Salv C%sT # Grenada @@ -23904,7 +47514,7 @@ # Guatemala # -@@ -3097,17 +3095,12 @@ +@@ -3097,17 +3096,12 @@ # Great Swan I ceded by US to Honduras in 1972 # Jamaica @@ -23927,7 +47537,7 @@ -5:00 - EST 1974 Apr 28 2:00 -5:00 US E%sT 1984 -5:00 - EST -@@ -3121,12 +3114,7 @@ +@@ -3121,12 +3115,7 @@ -4:00 - AST # Montserrat @@ -23941,7 +47551,7 @@ # Nicaragua # -@@ -3200,7 +3188,7 @@ +@@ -3200,7 +3189,7 @@ -5:00 - EST # Puerto Rico @@ -23950,7 +47560,7 @@ # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Puerto_Rico -4:24:25 - LMT 1899 Mar 28 12:00 # San Juan -4:00 - AST 1942 May 3 -@@ -3208,18 +3196,11 @@ +@@ -3208,18 +3197,11 @@ -4:00 - AST # St Kitts-Nevis @@ -23971,7 +47581,7 @@ # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre -4:00 - AST 1980 May -@@ -3227,10 +3208,7 @@ +@@ -3227,10 +3209,7 @@ -3:00 Canada PM%sT # St Vincent and the Grenadines @@ -23983,7 +47593,7 @@ # Turks and Caicos # -@@ -3260,15 +3238,9 @@ +@@ -3260,15 +3239,9 @@ Rule TC 2007 max - Nov Sun>=1 2:00 0 S # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone America/Grand_Turk -4:44:32 - LMT 1890 @@ -24001,8 +47611,8 @@ -Zone America/St_Thomas -4:19:44 - LMT 1911 Jul # Charlotte Amalie - -4:00 - AST +# See 'southamerica'. ---- jdk/make/sun/javazic/tzdata/pacificnew 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/pacificnew 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/pacificnew 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/pacificnew 2014-01-18 12:16:25.000000000 -0800 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -24030,8 +47640,8 @@ # 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. ---- jdk/make/sun/javazic/tzdata/solar87 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/solar87 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/solar87 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/solar87 2014-01-18 12:16:26.000000000 -0800 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -24059,8 +47669,8 @@ # 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. ---- jdk/make/sun/javazic/tzdata/solar88 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/solar88 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/solar88 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/solar88 2014-01-18 12:16:26.000000000 -0800 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -24088,8 +47698,8 @@ # 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. ---- jdk/make/sun/javazic/tzdata/solar89 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/solar89 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/solar89 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/solar89 2014-01-18 12:16:26.000000000 -0800 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -24117,8 +47727,8 @@ # 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. ---- jdk/make/sun/javazic/tzdata/southamerica 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/southamerica 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/southamerica 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/southamerica 2014-06-06 19:56:30.000000000 -0700 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -24245,7 +47855,21 @@ # Chile -@@ -1373,12 +1400,12 @@ +@@ -1271,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. + +@@ -1373,12 +1407,12 @@ -4:00 - AST # From Arthur David Olson (2011-06-15): @@ -24261,7 +47885,7 @@ # Ecuador # -@@ -1519,10 +1546,16 @@ +@@ -1519,10 +1553,16 @@ -4:00 - GYT # Paraguay @@ -24278,27 +47902,38 @@ # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Para 1975 1988 - Oct 1 0:00 1:00 S Rule Para 1975 1978 - Mar 1 0:00 0 - -@@ -1656,6 +1689,19 @@ +@@ -1598,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] +@@ -1656,6 +1699,20 @@ 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): # Uruguay wins the prize for the strangest peacetime manipulation of the rules. -@@ -1673,7 +1719,7 @@ +@@ -1673,7 +1730,7 @@ # Whitman gives 1937 Oct 3; go with Shanks & Pottenger. Rule Uruguay 1937 1940 - Oct lastSun 0:00 0:30 HS # Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13, @@ -24307,8 +47942,8 @@ Rule Uruguay 1941 only - Aug 1 0:00 0:30 HS Rule Uruguay 1942 only - Jan 1 0:00 0 - Rule Uruguay 1942 only - Dec 14 0:00 1:00 S ---- jdk/make/sun/javazic/tzdata/systemv 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/systemv 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/systemv 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/systemv 2014-01-18 12:16:26.000000000 -0800 @@ -1,22 +1,22 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -24336,8 +47971,8 @@ # 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. ---- jdk/make/sun/javazic/tzdata/zone.tab 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/javazic/tzdata/zone.tab 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/javazic/tzdata/zone.tab 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/javazic/tzdata/zone.tab 2014-06-06 19:56:30.000000000 -0700 @@ -1,53 +1,55 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -24419,7 +48054,15 @@ AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay -@@ -144,8 +145,7 @@ +@@ -73,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) +@@ -144,8 +146,7 @@ CA +4606-06447 America/Moncton Atlantic Time - New Brunswick CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore @@ -24429,7 +48072,7 @@ CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973 CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations -@@ -256,7 +256,7 @@ +@@ -256,7 +257,7 @@ IS +6409-02151 Atlantic/Reykjavik IT +4154+01229 Europe/Rome JE +4912-00207 Europe/Jersey @@ -24438,7 +48081,23 @@ JO +3157+03556 Asia/Amman JP +353916+1394441 Asia/Tokyo KE -0117+03649 Africa/Nairobi -@@ -445,8 +445,7 @@ +@@ -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 +@@ -445,8 +446,7 @@ US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County US +394421-1045903 America/Denver Mountain Time US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon @@ -24448,8 +48107,8 @@ US +340308-1181434 America/Los_Angeles Pacific Time US +611305-1495401 America/Anchorage Alaska Time US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle ---- jdk/make/sun/jawt/Makefile 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/jawt/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/jawt/Makefile 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/jawt/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -99,8 +99,7 @@ # # Other extra flags needed for compiling. @@ -24477,8 +48136,8 @@ ifndef BUILD_HEADLESS_ONLY OTHER_LDLIBS = -L$(LIBDIR)/$(LIBARCH) -lawt -L$(LIBDIR)/$(LIBARCH)/xawt -lmawt else ---- jdk/make/sun/net/FILES_java.gmk 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/net/FILES_java.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/net/FILES_java.gmk 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/net/FILES_java.gmk 2014-01-18 12:16:26.000000000 -0800 @@ -24,122 +24,123 @@ # @@ -24717,8 +48376,8 @@ else FILES_java += sun/net/sdp/SdpProvider.java endif ---- jdk/make/sun/nio/cs/FILES_java.gmk 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/nio/cs/FILES_java.gmk 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/nio/cs/FILES_java.gmk 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/nio/cs/FILES_java.gmk 2013-12-01 11:14:29.000000000 -0800 @@ -329,6 +329,7 @@ sun/nio/cs/ext/IBM280.java \ sun/nio/cs/ext/IBM284.java \ @@ -24727,8 +48386,43 @@ sun/nio/cs/ext/IBM297.java \ sun/nio/cs/ext/IBM420.java \ sun/nio/cs/ext/IBM424.java \ ---- jdk/make/sun/rmi/rmi/Makefile 2013-09-06 11:27:40.000000000 -0700 -+++ jdk/make/sun/rmi/rmi/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/sun/nio/cs/Makefile 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/nio/cs/Makefile 2014-06-06 19:56:30.000000000 -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/make/sun/rmi/rmi/Makefile 2013-09-06 11:27:40.000000000 -0700 ++++ ./jdk/make/sun/rmi/rmi/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -71,6 +71,9 @@ BUILD_TARGETS += bin endif @@ -24739,9 +48433,22 @@ build: $(BUILD_TARGETS) ---- jdk/make/sun/splashscreen/Makefile 2013-09-06 11:27:41.000000000 -0700 -+++ jdk/make/sun/splashscreen/Makefile 2014-04-20 12:39:22.000000000 -0700 -@@ -83,15 +83,16 @@ +--- ./jdk/make/sun/splashscreen/Makefile 2013-09-06 11:27:41.000000000 -0700 ++++ ./jdk/make/sun/splashscreen/Makefile 2014-06-06 19:56:34.000000000 -0700 +@@ -61,6 +61,12 @@ + + CFLAGS += -DSPLASHSCREEN + ++CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/splashscreen ++CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/image/jpeg ++ifneq ($(SYSTEM_ZLIB),true) ++ CPPFLAGS += -I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION) ++endif ++ + ifeq ($(PLATFORM), macosx) + CFLAGS += -DWITH_MACOSX + +@@ -83,15 +89,16 @@ -framework JavaNativeFoundation else ifneq ($(PLATFORM), windows) CFLAGS += -DWITH_X11 @@ -24766,8 +48473,21 @@ else # PLATFORM CFLAGS += -DWITH_WIN32 OTHER_LDLIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib /DELAYLOAD:user32.dll ---- jdk/make/sun/xawt/Makefile 2013-09-06 11:27:41.000000000 -0700 -+++ jdk/make/sun/xawt/Makefile 2014-04-20 12:39:22.000000000 -0700 +@@ -121,11 +128,7 @@ + CPPFLAGS += $(call NativeSrcDirList,-I,native/$(PKGDIR)/splashscreen) + CPPFLAGS += $(call NativeSrcDirList,-I,/native/sun/osxapp) + endif +-CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/splashscreen +-CPPFLAGS += -I$(SHARE_SRC)/native/$(PKGDIR)/image/jpeg +-ifneq ($(SYSTEM_ZLIB),true) +- CPPFLAGS += -I$(SHARE_SRC)/native/java/util/zip/zlib-$(ZLIB_VERSION) +-else ++ifeq ($(SYSTEM_ZLIB),true) + OTHER_CFLAGS += $(ZLIB_CFLAGS) + OTHER_LDLIBS += $(ZLIB_LIBS) + endif +--- ./jdk/make/sun/xawt/Makefile 2013-09-06 11:27:41.000000000 -0700 ++++ ./jdk/make/sun/xawt/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -52,6 +52,9 @@ AUTO_JAVA_PRUNE = WrapperGenerator.java @@ -24820,8 +48540,8 @@ ifeq ($(PLATFORM), macosx) CPPFLAGS += -DX11_PATH=\"$(X11_PATH)\" -DPACKAGE_PATH=\"$(PACKAGE_PATH)\" endif ---- jdk/make/tools/CharsetMapping/IBM290.c2b 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/make/tools/CharsetMapping/IBM290.c2b 2014-04-20 12:39:23.000000000 -0700 +--- ./jdk/make/tools/CharsetMapping/IBM290.c2b 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/make/tools/CharsetMapping/IBM290.c2b 2013-12-01 11:14:30.000000000 -0800 @@ -0,0 +1,100 @@ +# +# Diff of @@ -24923,8 +48643,8 @@ +0xF7 U+FF17 +0xF8 U+FF18 +0xF9 U+FF19 ---- jdk/make/tools/CharsetMapping/IBM290.map 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/make/tools/CharsetMapping/IBM290.map 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/tools/CharsetMapping/IBM290.map 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/make/tools/CharsetMapping/IBM290.map 2013-12-01 11:14:30.000000000 -0800 @@ -0,0 +1,232 @@ +# +# b2c mapping for IBM290, generated from @@ -25158,8 +48878,8 @@ +0xF8 U+0038 +0xF9 U+0039 +0xFF U+009F ---- jdk/make/tools/CharsetMapping/extsbcs 2013-09-06 11:27:42.000000000 -0700 -+++ jdk/make/tools/CharsetMapping/extsbcs 2014-04-20 12:39:23.000000000 -0700 +--- ./jdk/make/tools/CharsetMapping/extsbcs 2013-09-06 11:27:42.000000000 -0700 ++++ ./jdk/make/tools/CharsetMapping/extsbcs 2013-12-01 11:14:30.000000000 -0800 @@ -28,6 +28,7 @@ IBM280 IBM280 Cp280 false sun.nio.cs.ext IBM284 IBM284 Cp284 false sun.nio.cs.ext @@ -25168,8 +48888,8 @@ IBM297 IBM297 Cp297 false sun.nio.cs.ext IBM420 IBM420 Cp420 false sun.nio.cs.ext IBM424 IBM424 Cp424 false sun.nio.cs.ext ---- jdk/make/tools/freetypecheck/Makefile 2013-09-06 11:27:43.000000000 -0700 -+++ jdk/make/tools/freetypecheck/Makefile 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/make/tools/freetypecheck/Makefile 2013-09-06 11:27:43.000000000 -0700 ++++ ./jdk/make/tools/freetypecheck/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -52,8 +52,15 @@ else ifeq ($(PLATFORM), macosx) @@ -25188,8 +48908,8 @@ endif endif endif ---- jdk/make/tools/sharing/classlist.bsd 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/make/tools/sharing/classlist.bsd 2014-04-20 12:39:23.000000000 -0700 +--- ./jdk/make/tools/sharing/classlist.bsd 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/make/tools/sharing/classlist.bsd 2014-06-06 19:56:34.000000000 -0700 @@ -0,0 +1,2327 @@ +java/lang/Object +java/lang/String @@ -27518,8 +51238,53 @@ +sun/applet/AppletPanel$6 +javax/swing/BufferStrategyPaintManager$1 +# f3ac8b467e7f8c49 ---- jdk/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java 2013-09-06 11:27:48.000000000 -0700 -+++ jdk/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java 2013-09-06 11:27:48.000000000 -0700 ++++ ./jdk/src/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java 2014-06-06 19:56:32.000000000 -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) { +--- ./jdk/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java 2013-09-06 11:27:48.000000000 -0700 ++++ ./jdk/src/macosx/classes/com/apple/laf/AquaLookAndFeel.java 2013-12-01 11:14:34.000000000 -0800 @@ -37,8 +37,6 @@ import sun.swing.*; import apple.laf.*; @@ -27538,8 +51303,8 @@ final Enumeration<String> propertyKeys = aquaProperties.getKeys(); while (propertyKeys.hasMoreElements()) { ---- jdk/src/macosx/classes/com/apple/laf/AquaUtils.java 2013-09-06 11:27:48.000000000 -0700 -+++ jdk/src/macosx/classes/com/apple/laf/AquaUtils.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/com/apple/laf/AquaUtils.java 2013-09-06 11:27:48.000000000 -0700 ++++ ./jdk/src/macosx/classes/com/apple/laf/AquaUtils.java 2013-12-01 11:14:34.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -27987,8 +51752,8 @@ if (!(g instanceof Graphics2D)) { return; } ---- jdk/src/macosx/classes/com/apple/laf/ScreenMenu.java 2013-09-06 11:27:48.000000000 -0700 -+++ jdk/src/macosx/classes/com/apple/laf/ScreenMenu.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/com/apple/laf/ScreenMenu.java 2013-09-06 11:27:48.000000000 -0700 ++++ ./jdk/src/macosx/classes/com/apple/laf/ScreenMenu.java 2013-12-01 11:14:34.000000000 -0800 @@ -37,26 +37,31 @@ import sun.lwawt.LWToolkit; import sun.lwawt.macosx.*; @@ -28282,8 +52047,8 @@ if (!m.isVisible()) return; MenuItem sm = fItems.get(m); ---- jdk/src/macosx/classes/com/apple/laf/resources/aqua_ko.properties 2013-09-06 11:27:48.000000000 -0700 -+++ jdk/src/macosx/classes/com/apple/laf/resources/aqua_ko.properties 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/com/apple/laf/resources/aqua_ko.properties 2013-09-06 11:27:48.000000000 -0700 ++++ ./jdk/src/macosx/classes/com/apple/laf/resources/aqua_ko.properties 2014-01-18 12:16:22.000000000 -0800 @@ -46,7 +46,7 @@ FileChooser.openButton.textAndMnemonic=\uC5F4\uAE30 FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5 @@ -28293,8 +52058,8 @@ FileChooser.helpButton.textAndMnemonic=\uB3C4\uC6C0\uB9D0 FileChooser.directoryOpenButton.textAndMnemonic=\uC5F4\uAE30 ---- jdk/src/macosx/classes/com/apple/resources/MacOSXResourceBundle.java 2013-09-06 11:27:48.000000000 -0700 -+++ jdk/src/macosx/classes/com/apple/resources/MacOSXResourceBundle.java 1969-12-31 16:00:00.000000000 -0800 +--- ./jdk/src/macosx/classes/com/apple/resources/MacOSXResourceBundle.java 2013-09-06 11:27:48.000000000 -0700 ++++ ./jdk/src/macosx/classes/com/apple/resources/MacOSXResourceBundle.java 1969-12-31 16:00:00.000000000 -0800 @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -28406,8 +52171,82 @@ - private static native String getPathToBundleFile(String filename); -} - ---- jdk/src/macosx/classes/sun/font/CFontManager.java 2013-09-06 11:27:48.000000000 -0700 -+++ jdk/src/macosx/classes/sun/font/CFontManager.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/sun/awt/resources/awtosx.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/macosx/classes/sun/awt/resources/awtosx.properties 2014-06-06 19:56:32.000000000 -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/font/CFontManager.java 2013-09-06 11:27:48.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/font/CFontManager.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -28465,8 +52304,8 @@ } } } ---- jdk/src/macosx/classes/sun/font/CStrike.java 2013-09-06 11:27:48.000000000 -0700 -+++ jdk/src/macosx/classes/sun/font/CStrike.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/sun/font/CStrike.java 2013-09-06 11:27:48.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/font/CStrike.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -28660,8 +52499,8 @@ this.shift = shift; this.cache = new float[1 << shift][]; this.secondLayerLength = size >> shift; ---- jdk/src/macosx/classes/sun/lwawt/LWToolkit.java 2013-09-06 11:27:49.000000000 -0700 -+++ jdk/src/macosx/classes/sun/lwawt/LWToolkit.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/sun/lwawt/LWToolkit.java 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/lwawt/LWToolkit.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. @@ -28717,8 +52556,8 @@ toolkitThread.setDaemon(true); toolkitThread.setPriority(Thread.NORM_PRIORITY + 1); toolkitThread.start(); ---- jdk/src/macosx/classes/sun/lwawt/macosx/CClipboard.java 2013-09-06 11:27:49.000000000 -0700 -+++ jdk/src/macosx/classes/sun/lwawt/macosx/CClipboard.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CClipboard.java 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CClipboard.java 2014-04-19 01:27:12.000000000 -0700 @@ -53,7 +53,7 @@ } @@ -28728,8 +52567,122 @@ // Don't use delayed Clipboard rendering for the Transferable's data. // If we did that, we would call Transferable.getTransferData on // the Toolkit thread, which is a security hole. ---- jdk/src/macosx/classes/sun/lwawt/macosx/CInputMethod.java 2013-09-06 11:27:49.000000000 -0700 -+++ jdk/src/macosx/classes/sun/lwawt/macosx/CInputMethod.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CDropTargetContextPeer.java 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CDropTargetContextPeer.java 2014-06-06 19:56:32.000000000 -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,19 +109,54 @@ + 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(); +- 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)) { ++ 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); ++ Point locationOnScreen = eventSource.getLocationOnScreen(); ++ Rectangle screenBounds = new Rectangle(locationOnScreen.x, ++ locationOnScreen.y, ++ eventSource.getWidth(), ++ eventSource.getHeight()); ++ return screenBounds.contains(screenPoint); ++ } ++ + @Override + protected int postDropTargetEvent(Component component, int x, int y, int dropAction, + int actions, long[] formats, long nativeCtxt, int eventID, +--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CInputMethod.java 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CInputMethod.java 2014-04-19 01:27:12.000000000 -0700 @@ -620,8 +620,7 @@ retString[0] = new String(selectedText); }} @@ -28780,8 +52733,19 @@ // This bit of gymnastics ensures that the returned location is within the composed text. // If it falls outside that region, the input method will commit the text, which is inconsistent with native ---- jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java 2013-09-06 11:27:49.000000000 -0700 -+++ jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CMenuComponent.java 2014-06-06 19:56:32.000000000 -0700 +@@ -43,7 +43,7 @@ + return target; + } + +- long getModel() { ++ public long getModel() { + return modelPtr; + } + +--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java 2014-04-19 01:27:12.000000000 -0700 @@ -918,7 +918,7 @@ //Posting an empty to flush the EventQueue without blocking the main thread } @@ -28791,8 +52755,8 @@ e.printStackTrace(); } } ---- jdk/src/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java 2013-09-06 11:27:49.000000000 -0700 -+++ jdk/src/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java 2014-04-19 01:27:12.000000000 -0700 @@ -97,6 +97,6 @@ setVisible(true); } @@ -28801,9 +52765,48 @@ + } catch (InvocationTargetException ex) {} } } ---- jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java 2013-09-06 11:27:49.000000000 -0700 -+++ jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java 2014-04-20 12:39:22.000000000 -0700 -@@ -414,8 +414,15 @@ +--- ./jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java 2014-06-06 19:56:32.000000000 -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(); + } +@@ -414,8 +429,15 @@ } // Intended to be called from the LWCToolkit.m only. @@ -28820,7 +52823,7 @@ } @Override -@@ -518,22 +525,21 @@ +@@ -518,22 +540,21 @@ // Any selector invoked using ThreadUtilities performOnMainThread will be processed in doAWTRunLoop // The InvocationEvent will call LWCToolkit.stopAWTRunLoop() when finished, which will stop our manual runloop // Does not dispatch native events while in the loop @@ -28855,8 +52858,17 @@ if (component != null) { AppContext appContext = SunToolkit.targetToAppContext(component); ---- jdk/src/macosx/native/com/apple/resources/MacOSXResourceBundle.m 2013-09-06 11:27:49.000000000 -0700 -+++ jdk/src/macosx/native/com/apple/resources/MacOSXResourceBundle.m 1969-12-31 16:00:00.000000000 -0800 +--- ./jdk/src/macosx/lib/flavormap.properties 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/lib/flavormap.properties 2014-06-06 19:56:32.000000000 -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/com/apple/resources/MacOSXResourceBundle.m 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/native/com/apple/resources/MacOSXResourceBundle.m 1969-12-31 16:00:00.000000000 -0800 @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -28968,8 +52980,202 @@ - - return returnVal; -} ---- jdk/src/macosx/native/sun/awt/LWCToolkit.m 2013-09-06 11:27:51.000000000 -0700 -+++ jdk/src/macosx/native/sun/awt/LWCToolkit.m 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/native/java/util/SCDynamicStoreConfig.m 2013-09-06 11:27:49.000000000 -0700 ++++ ./jdk/src/macosx/native/java/util/SCDynamicStoreConfig.m 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:27:50.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/awt/AWTEvent.m 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/awt/AWTWindow.m 2014-06-06 19:56:32.000000000 -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; ++ } ++ ++ if (menuBar == nil) { ++ menuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; ++ isDisabled = NO; + } +- [CMenuBar activate:menuBar modallyDisabled:!awtWindow.isEnabled]; ++ ++ [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 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/awt/CDropTarget.m 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/awt/CMenuItem.m 2014-06-06 19:56:32.000000000 -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/macosx/native/sun/awt/LWCToolkit.m 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/awt/LWCToolkit.m 2014-04-19 01:27:12.000000000 -0700 @@ -193,8 +193,8 @@ JNIEnv *env = [ThreadUtilities getJNIEnv]; @@ -28981,8 +53187,8 @@ }); gNumberOfButtons = sun_lwawt_macosx_LWCToolkit_BUTTONS; ---- jdk/src/macosx/native/sun/awt/awt.m 2013-09-06 11:27:51.000000000 -0700 -+++ jdk/src/macosx/native/sun/awt/awt.m 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/native/sun/awt/awt.m 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/awt/awt.m 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -29007,8 +53213,8 @@ BOOL headless = isHeadless(env); // We need to let Foundation know that this is a multithreaded application, if it isn't already. ---- jdk/src/macosx/native/sun/awt/splashscreen/splashscreen_sys.m 2013-09-06 11:27:51.000000000 -0700 -+++ jdk/src/macosx/native/sun/awt/splashscreen/splashscreen_sys.m 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/native/sun/awt/splashscreen/splashscreen_sys.m 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/awt/splashscreen/splashscreen_sys.m 2014-01-18 12:16:22.000000000 -0800 @@ -290,8 +290,8 @@ SplashUnlock(splash); rc = poll(pfd, 1, timeout); @@ -29020,8 +53226,8 @@ SplashNextFrame(splash); SplashRedrawWindow(splash); } ---- jdk/src/macosx/native/sun/font/AWTStrike.h 2013-09-06 11:27:51.000000000 -0700 -+++ jdk/src/macosx/native/sun/font/AWTStrike.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/native/sun/font/AWTStrike.h 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/font/AWTStrike.h 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -29044,8 +53250,8 @@ CGAffineTransform fAltTx; // alternate strike tx used for Sun2D CGAffineTransform fFontTx; } ---- jdk/src/macosx/native/sun/font/AWTStrike.m 2013-09-06 11:27:51.000000000 -0700 -+++ jdk/src/macosx/native/sun/font/AWTStrike.m 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/native/sun/font/AWTStrike.m 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/font/AWTStrike.m 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -29082,8 +53288,8 @@ JNF_COCOA_EXIT(env); return advance.width; ---- jdk/src/macosx/native/sun/font/CGGlyphImages.m 2013-09-06 11:27:51.000000000 -0700 -+++ jdk/src/macosx/native/sun/font/CGGlyphImages.m 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/native/sun/font/CGGlyphImages.m 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/font/CGGlyphImages.m 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -29143,8 +53349,8 @@ if (maxWidth < glyphInfo->width) maxWidth = glyphInfo->width; if (maxHeight < glyphInfo->height) maxHeight = glyphInfo->height; ---- jdk/src/macosx/native/sun/osxapp/ThreadUtilities.h 2013-09-06 11:27:51.000000000 -0700 -+++ jdk/src/macosx/native/sun/osxapp/ThreadUtilities.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/native/sun/osxapp/ThreadUtilities.h 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/osxapp/ThreadUtilities.h 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -29161,8 +53367,8 @@ //Wrappers for the corresponding JNFRunLoop methods with a check for main thread + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block; ---- jdk/src/macosx/native/sun/osxapp/ThreadUtilities.m 2013-09-06 11:27:51.000000000 -0700 -+++ jdk/src/macosx/native/sun/osxapp/ThreadUtilities.m 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/macosx/native/sun/osxapp/ThreadUtilities.m 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/macosx/native/sun/osxapp/ThreadUtilities.m 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. @@ -29217,8 +53423,94 @@ + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block { if ([NSThread isMainThread] && wait == YES) { block(); ---- jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_de.properties 2013-09-06 11:27:52.000000000 -0700 -+++ jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_de.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/back/SDE.c 2013-09-06 11:27:51.000000000 -0700 ++++ ./jdk/src/share/back/SDE.c 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/back/export/sys.h 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/back/transport.c 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_de.properties 2014-06-06 19:56:33.000000000 -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 @@ -102,7 +102,7 @@ # # accessible actions @@ -29228,8 +53520,8 @@ # new relations, roles and states for J2SE 1.5.0 ---- jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_es.properties 2013-09-06 11:27:52.000000000 -0700 -+++ jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_es.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_es.properties 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_es.properties 2014-01-18 12:16:22.000000000 -0800 @@ -102,7 +102,7 @@ # # accessible actions @@ -29239,8 +53531,8 @@ # new relations, roles and states for J2SE 1.5.0 ---- jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_fr.properties 2013-09-06 11:27:52.000000000 -0700 -+++ jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_fr.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_fr.properties 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_fr.properties 2014-01-18 12:16:22.000000000 -0800 @@ -102,7 +102,7 @@ # # accessible actions @@ -29250,8 +53542,8 @@ # new relations, roles and states for J2SE 1.5.0 ---- jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_it.properties 2013-09-06 11:27:52.000000000 -0700 -+++ jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_it.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_it.properties 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_it.properties 2014-01-18 12:16:22.000000000 -0800 @@ -102,7 +102,7 @@ # # accessible actions @@ -29261,8 +53553,8 @@ # new relations, roles and states for J2SE 1.5.0 ---- jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties 2013-09-06 11:27:52.000000000 -0700 -+++ jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_pt_BR.properties 2014-01-18 12:16:22.000000000 -0800 @@ -102,7 +102,7 @@ # # accessible actions @@ -29272,8 +53564,8 @@ # new relations, roles and states for J2SE 1.5.0 ---- jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_sv.properties 2013-09-06 11:27:52.000000000 -0700 -+++ jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_sv.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_sv.properties 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/accessibility/internal/resources/accessibility_sv.properties 2014-01-18 12:16:22.000000000 -0800 @@ -102,7 +102,7 @@ # # accessible actions @@ -29283,8 +53575,38 @@ # new relations, roles and states for J2SE 1.5.0 ---- jdk/src/share/classes/com/sun/beans/decoder/DocumentHandler.java 2013-09-06 11:27:52.000000000 -0700 -+++ jdk/src/share/classes/com/sun/beans/decoder/DocumentHandler.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/beans/decoder/ArrayElementHandler.java 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/beans/decoder/ArrayElementHandler.java 2014-06-06 19:56:33.000000000 -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/decoder/DocumentHandler.java 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/beans/decoder/DocumentHandler.java 2014-01-18 12:16:22.000000000 -0800 @@ -29,6 +29,7 @@ import java.beans.ExceptionListener; @@ -29308,8 +53630,806 @@ * Prepares this handler to read objects from XML document. */ @Override ---- jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java 2013-09-06 11:27:53.000000000 -0700 -+++ jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/beans/finder/ConstructorFinder.java 2014-06-06 19:56:33.000000000 -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; +- } +- constructor = new ConstructorFinder(args).find(type.getConstructors()); +- CACHE.put(signature, constructor); +- return constructor; ++ try { ++ return CACHE.get(signature); ++ } ++ catch (SignatureException exception) { ++ throw exception.toNoSuchMethodException("Constructor is not found"); ++ } + } + + /** +--- ./jdk/src/share/classes/com/sun/beans/finder/MethodFinder.java 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/beans/finder/MethodFinder.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:27:52.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/beans/finder/Signature.java 2014-06-06 19:56:29.000000000 -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. + * +--- ./jdk/src/share/classes/com/sun/beans/finder/SignatureException.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/com/sun/beans/finder/SignatureException.java 2014-06-06 19:56:29.000000000 -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; ++ } ++} +--- ./jdk/src/share/classes/com/sun/beans/util/Cache.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/com/sun/beans/util/Cache.java 2014-06-06 19:56:29.000000000 -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/crypto/provider/DHKeyAgreement.java 2013-09-06 11:27:53.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java 2014-01-18 12:16:22.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. @@ -29329,8 +54449,8 @@ } else { throw new NoSuchAlgorithmException("Unsupported secret key " + "algorithm: "+ algorithm); ---- jdk/src/share/classes/com/sun/crypto/provider/DHPrivateKey.java 2013-09-06 11:27:53.000000000 -0700 -+++ jdk/src/share/classes/com/sun/crypto/provider/DHPrivateKey.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/crypto/provider/DHPrivateKey.java 2013-09-06 11:27:53.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/crypto/provider/DHPrivateKey.java 2013-12-01 11:14:37.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -29361,8 +54481,8 @@ private void parseKeyBits() throws InvalidKeyException { try { DerInputStream in = new DerInputStream(this.key); ---- jdk/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java 2013-09-06 11:27:53.000000000 -0700 -+++ jdk/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java 2013-09-06 11:27:53.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/crypto/provider/TlsRsaPremasterSecretGenerator.java 2014-01-18 12:16:22.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. @@ -29394,8 +54514,8 @@ return new SecretKeySpec(b, "TlsRsaPremasterSecret"); } ---- jdk/src/share/classes/com/sun/demo/jvmti/hprof/Tracker.java 2013-09-06 11:27:53.000000000 -0700 -+++ jdk/src/share/classes/com/sun/demo/jvmti/hprof/Tracker.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/demo/jvmti/hprof/Tracker.java 2013-09-06 11:27:53.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/demo/jvmti/hprof/Tracker.java 2013-12-01 11:14:37.000000000 -0800 @@ -53,7 +53,10 @@ public static void ObjectInit(Object obj) @@ -29450,8 +54570,8 @@ nativeReturnSite(Thread.currentThread(), cnum, mnum); } } ---- jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java 2013-09-06 11:27:53.000000000 -0700 -+++ jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java 2013-09-06 11:27:53.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageReader.java 2013-12-01 11:14:37.000000000 -0800 @@ -1160,6 +1160,11 @@ target = imRas; } @@ -29464,8 +54584,8 @@ /* * If the process is sequential, and we have restart markers, ---- jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java 2013-09-06 11:27:53.000000000 -0700 -+++ jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java 2013-09-06 11:27:53.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGImageWriter.java 2013-12-01 11:14:37.000000000 -0800 @@ -490,8 +490,8 @@ // handle <= 8-bit samples. We now check the band sizes and throw // an exception for images, such as USHORT_GRAY, with > 8 bits @@ -29477,8 +54597,32 @@ } // 4450894 part 2: We expand IndexColorModel images to full 24- // or 32-bit in grabPixels() for each scanline. For indexed ---- jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk_de.properties 2013-09-06 11:27:54.000000000 -0700 -+++ jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk_de.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java 2013-09-06 11:27:53.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/imageio/plugins/jpeg/JPEGMetadata.java 2014-06-06 19:56:29.000000000 -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/gtk/resources/gtk_de.properties 2013-09-06 11:27:54.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/java/swing/plaf/gtk/resources/gtk_de.properties 2014-01-18 12:16:22.000000000 -0800 @@ -41,7 +41,7 @@ FileChooser.openDialogTitle.textAndMnemonic=\u00D6ffnen FileChooser.pathLabel.textAndMnemonic=Aus&wahl: @@ -29488,8 +54632,8 @@ FileChooser.filesLabel.textAndMnemonic=&Dateien FileChooser.cancelButtonToolTip.textAndMnemonic=Dialogfeld f\u00FCr Dateiauswahl schlie\u00DFen. ---- jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties 2013-09-06 11:27:54.000000000 -0700 -+++ jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties 2013-09-06 11:27:54.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/java/swing/plaf/motif/resources/motif_ko.properties 2014-01-18 12:16:22.000000000 -0800 @@ -24,7 +24,7 @@ FileChooser.openButton.textAndMnemonic=\uD655\uC778 FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5 @@ -29506,8 +54650,397 @@ -FileChooser.updateButtonToolTip.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D\uC744 \uAC31\uC2E0\uD569\uB2C8\uB2E4. +FileChooser.updateButtonToolTip.textAndMnemonic=\uB514\uB809\uD1A0\uB9AC \uBAA9\uB85D\uC744 \uC5C5\uB370\uC774\uD2B8\uD569\uB2C8\uB2E4. FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \uB3C4\uC6C0\uB9D0\uC785\uB2C8\uB2E4. ---- jdk/src/share/classes/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java 2013-09-06 11:27:56.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_fr.properties 2013-09-06 11:27:55.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/java/swing/plaf/windows/resources/windows_fr.properties 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:27:55.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/java/util/jar/pack/Code.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:27:55.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java 2014-06-06 19:56:29.000000000 -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; +--- ./jdk/src/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/com/sun/java/util/jar/pack/DriverResource_ja.java 2014-06-06 19:56:29.000000000 -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; ++ } ++ ++ ++} +--- ./jdk/src/share/classes/com/sun/java/util/jar/pack/DriverResource_zh_CN.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/com/sun/java/util/jar/pack/DriverResource_zh_CN.java 2014-06-06 19:56:29.000000000 -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/jmx/remote/protocol/iiop/IIOPProxyImpl.java 2013-09-06 11:27:56.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jmx/remote/protocol/iiop/IIOPProxyImpl.java 2013-12-01 11:14:38.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. @@ -29578,8 +55111,8 @@ + } } } ---- jdk/src/share/classes/com/sun/jmx/remote/security/SubjectDelegator.java 2013-09-06 11:27:56.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jmx/remote/security/SubjectDelegator.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jmx/remote/security/SubjectDelegator.java 2013-09-06 11:27:56.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jmx/remote/security/SubjectDelegator.java 2014-04-19 01:27:12.000000000 -0700 @@ -35,6 +35,8 @@ import javax.management.remote.SubjectDelegationPermission; @@ -29627,8 +55160,8 @@ AccessController.checkPermission(sdp); } return null; ---- jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibEntry.java 2013-09-06 11:27:57.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibEntry.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibEntry.java 2013-09-06 11:27:57.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibEntry.java 2014-01-18 12:16:22.000000000 -0800 @@ -27,17 +27,9 @@ // java imports @@ -29657,8 +55190,8 @@ } /** ---- jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibGroup.java 2013-09-06 11:27:57.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibGroup.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibGroup.java 2013-09-06 11:27:57.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibGroup.java 2014-01-18 12:16:22.000000000 -0800 @@ -116,7 +116,7 @@ public void validateVarId(long arc, Object userData) throws SnmpStatusException { @@ -29724,8 +55257,8 @@ } catch (SnmpStatusException e) { // We didn't find anything at the given arc, so we're going ---- jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibNode.java 2013-09-06 11:27:57.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibNode.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibNode.java 2013-09-06 11:27:57.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibNode.java 2014-01-18 12:16:22.000000000 -0800 @@ -155,7 +155,7 @@ long[] oid, int depth, SnmpRequestTree handlers) @@ -29782,8 +55315,8 @@ - static final protected SnmpStatusException noSuchNameException = - new SnmpStatusException(SnmpDefinitions.snmpRspNoSuchName); } ---- jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibOid.java 2013-09-06 11:27:57.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibOid.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibOid.java 2013-09-06 11:27:57.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibOid.java 2014-01-18 12:16:22.000000000 -0800 @@ -157,11 +157,11 @@ if (depth > length) { @@ -29842,8 +55375,8 @@ return child; } ---- jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibTable.java 2013-09-06 11:27:57.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibTable.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibTable.java 2013-09-06 11:27:57.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jmx/snmp/agent/SnmpMibTable.java 2014-01-18 12:16:22.000000000 -0800 @@ -279,7 +279,7 @@ SnmpVarBind var = null; for (Enumeration e= r.getElements(); e.hasMoreElements();) { @@ -29973,8 +55506,8 @@ } ---- jdk/src/share/classes/com/sun/jmx/snmp/daemon/SnmpRequestHandler.java 2013-09-06 11:27:58.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jmx/snmp/daemon/SnmpRequestHandler.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jmx/snmp/daemon/SnmpRequestHandler.java 2013-09-06 11:27:58.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jmx/snmp/daemon/SnmpRequestHandler.java 2014-01-18 12:16:22.000000000 -0800 @@ -1146,7 +1146,4 @@ static final private String InterruptSysCallMsg = @@ -29983,8 +55516,8 @@ - static final private SnmpStatusException noSuchNameException = - new SnmpStatusException(SnmpDefinitions.snmpRspNoSuchName) ; } ---- jdk/src/share/classes/com/sun/jndi/dns/DnsClient.java 2013-09-06 11:27:58.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jndi/dns/DnsClient.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jndi/dns/DnsClient.java 2013-09-06 11:27:58.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jndi/dns/DnsClient.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. @@ -30192,8 +55725,8 @@ resps.put(hdr.xid, pkt); } } ---- jdk/src/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java 2013-09-06 11:27:58.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java 2013-09-06 11:27:58.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. @@ -30248,8 +55781,8 @@ } if (obj == null) { // DirContext object ---- jdk/src/share/classes/com/sun/jndi/ldap/LdapSearchEnumeration.java 2013-09-06 11:27:58.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jndi/ldap/LdapSearchEnumeration.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jndi/ldap/LdapSearchEnumeration.java 2013-09-06 11:27:58.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jndi/ldap/LdapSearchEnumeration.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. @@ -30305,8 +55838,8 @@ } if (obj == null) { obj = new LdapCtx(homeCtx, dn); ---- jdk/src/share/classes/com/sun/jndi/ldap/VersionHelper12.java 2013-09-06 11:27:58.000000000 -0700 -+++ jdk/src/share/classes/com/sun/jndi/ldap/VersionHelper12.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/jndi/ldap/VersionHelper12.java 2013-09-06 11:27:58.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/jndi/ldap/VersionHelper12.java 2013-12-01 11:14:38.000000000 -0800 @@ -25,11 +25,12 @@ package com.sun.jndi.ldap; @@ -30343,8 +55876,8 @@ ); } } ---- jdk/src/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java 2013-09-06 11:27:59.000000000 -0700 -+++ jdk/src/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java 2013-09-06 11:27:59.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/management/HotSpotDiagnosticMXBean.java 2013-12-01 11:14:38.000000000 -0800 @@ -66,6 +66,11 @@ * cannot be created, opened, or written to. * @throws UnsupportedOperationException if this operation is not supported. @@ -30357,8 +55890,8 @@ */ public void dumpHeap(String outputFile, boolean live) throws java.io.IOException; ---- jdk/src/share/classes/com/sun/media/sound/JDK13Services.java 2013-09-06 11:27:59.000000000 -0700 -+++ jdk/src/share/classes/com/sun/media/sound/JDK13Services.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/media/sound/JDK13Services.java 2013-09-06 11:27:59.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/media/sound/JDK13Services.java 2014-04-19 01:27:12.000000000 -0700 @@ -25,27 +25,33 @@ package com.sun.media.sound; @@ -30533,8 +56066,8 @@ - public List providers; - } } ---- jdk/src/share/classes/com/sun/media/sound/JSSecurityManager.java 2013-09-06 11:27:59.000000000 -0700 -+++ jdk/src/share/classes/com/sun/media/sound/JSSecurityManager.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/media/sound/JSSecurityManager.java 2013-09-06 11:27:59.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/media/sound/JSSecurityManager.java 2014-04-19 01:27:12.000000000 -0700 @@ -187,7 +187,7 @@ return thread; } @@ -30544,8 +56077,8 @@ List p = new ArrayList(); // Service.providers(Class) just creates "lazy" iterator instance, // so it doesn't require do be called from privileged section ---- jdk/src/share/classes/com/sun/naming/internal/FactoryEnumeration.java 2013-09-06 11:28:00.000000000 -0700 -+++ jdk/src/share/classes/com/sun/naming/internal/FactoryEnumeration.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/naming/internal/FactoryEnumeration.java 2013-09-06 11:28:00.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/naming/internal/FactoryEnumeration.java 2014-01-18 12:16:22.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. @@ -30592,8 +56125,8 @@ } // Instantiate Class to get factory answer = ((Class) answer).newInstance(); ---- jdk/src/share/classes/com/sun/naming/internal/ResourceManager.java 2013-09-06 11:28:00.000000000 -0700 -+++ jdk/src/share/classes/com/sun/naming/internal/ResourceManager.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/naming/internal/ResourceManager.java 2013-09-06 11:28:00.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/naming/internal/ResourceManager.java 2014-04-19 01:27:12.000000000 -0700 @@ -69,6 +69,14 @@ private static final String JRELIB_PROPERTY_FILE_NAME = "jndi.properties"; @@ -30623,8 +56156,8 @@ // Merge the above with the values read from all application // resource files. Colon-separated lists are concatenated. mergeTables(env, getApplicationResources()); ---- jdk/src/share/classes/com/sun/naming/internal/VersionHelper12.java 2013-09-06 11:28:00.000000000 -0700 -+++ jdk/src/share/classes/com/sun/naming/internal/VersionHelper12.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/naming/internal/VersionHelper12.java 2013-09-06 11:28:00.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/naming/internal/VersionHelper12.java 2014-01-18 12:16:23.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved. @@ -30740,8 +56273,8 @@ /** * Given an enumeration of URLs, an instance of this class represents * an enumeration of their InputStreams. Each operation on the URL ---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11.java 2013-09-06 11:28:00.000000000 -0700 -+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11.java 2013-09-06 11:28:00.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11.java 2014-01-18 12:16:23.000000000 -0800 @@ -358,7 +358,8 @@ } else if (!isVisible(xmlns)) { // There is a defn but the xmlns is not selected by the xpath. @@ -30752,8 +56285,8 @@ } // output the xmlns def if needed. if (n != null) { ---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java 2013-09-06 11:28:00.000000000 -0700 -+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java 2013-09-06 11:28:00.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java 2014-01-18 12:16:23.000000000 -0800 @@ -302,7 +302,8 @@ } else if ( !isVisible(xmlns)) { //There is a definition but the xmlns is not selected by the xpath. @@ -30764,8 +56297,8 @@ } //output the xmlns def if needed. if (n!=null) { ---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java 2013-09-06 11:28:00.000000000 -0700 -+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java 2013-09-06 11:28:00.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java 2014-01-18 12:16:23.000000000 -0800 @@ -300,7 +300,7 @@ if ((xmlns!=null) && (!isVisible(xmlns))) { //There is a definition but the xmlns is not selected by the xpath. @@ -30775,8 +56308,8 @@ } if (E.getNamespaceURI() != null) { ---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java 2013-09-06 11:28:00.000000000 -0700 -+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java 2013-09-06 11:28:00.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java 2014-01-18 12:16:23.000000000 -0800 @@ -34,7 +34,6 @@ import java.util.Map; import java.util.Set; @@ -31042,8 +56575,8 @@ + } + } ---- jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java 2013-09-06 11:28:02.000000000 -0700 -+++ jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java 2013-12-01 11:14:38.000000000 -0800 @@ -44,6 +44,9 @@ } @@ -31087,8 +56620,8 @@ } byte newBuf[] = new byte[newSize]; System.arraycopy(buf, 0, newBuf, 0, pos); ---- jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java 2013-09-06 11:28:02.000000000 -0700 -+++ jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. @@ -31138,8 +56671,41 @@ } // get the attributes from the struct Object attribs[] = s.getAttributes(map); ---- jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties 2013-09-06 11:28:02.000000000 -0700 -+++ jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_de.properties 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ja.properties 2014-06-06 19:56:29.000000000 -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_ko.properties 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_ko.properties 2014-01-18 12:16:23.000000000 -0800 @@ -44,7 +44,7 @@ cachedrowsetimpl.dtypemismt = \uB370\uC774\uD130 \uC720\uD615\uC774 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. cachedrowsetimpl.datefail = {1} \uC5F4\uC758 \uAC12({0})\uC5D0\uC11C getDate\uB97C \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uBCC0\uD658\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. @@ -31167,8 +56733,43 @@ xmlrch.chars = \uBB38\uC790: xmlrch.badvalue = \uC798\uBABB\uB41C \uAC12: \uB110\uC77C \uC218 \uC5C6\uB294 \uC18D\uC131\uC785\uB2C8\uB2E4. xmlrch.badvalue1 = \uC798\uBABB\uB41C \uAC12: \uB110\uC77C \uC218 \uC5C6\uB294 \uBA54\uD0C0 \uB370\uC774\uD130\uC785\uB2C8\uB2E4. ---- jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java 2013-09-06 11:28:02.000000000 -0700 -+++ jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_sv.properties 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/rowset/RowSetResourceBundle_sv.properties 2014-06-06 19:56:29.000000000 -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/rowset/internal/CachedRowSetWriter.java 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. @@ -31201,8 +56802,8 @@ } // get the attributes from the struct Object attribs[] = s.getAttributes(map); ---- jdk/src/share/classes/com/sun/rowset/internal/XmlReaderContentHandler.java 2013-09-06 11:28:02.000000000 -0700 -+++ jdk/src/share/classes/com/sun/rowset/internal/XmlReaderContentHandler.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/rowset/internal/XmlReaderContentHandler.java 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/rowset/internal/XmlReaderContentHandler.java 2014-01-18 12:16:23.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. @@ -31219,8 +56820,8 @@ }catch(ClassNotFoundException ex) { throw new SAXException(MessageFormat.format(resBundle.handleGetObject("xmlrch.errmap").toString(), ex.getMessage())); ---- jdk/src/share/classes/com/sun/script/util/InterfaceImplementor.java 2013-09-06 11:28:02.000000000 -0700 -+++ jdk/src/share/classes/com/sun/script/util/InterfaceImplementor.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/script/util/InterfaceImplementor.java 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/script/util/InterfaceImplementor.java 2013-12-01 11:14:27.000000000 -0800 @@ -28,6 +28,7 @@ import javax.script.*; import java.lang.reflect.*; @@ -31270,8 +56871,62 @@ + return loader; + } } ---- jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties 2013-09-06 11:28:03.000000000 -0700 -+++ jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java 2013-09-06 11:28:02.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:03.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/security/sasl/util/AbstractSaslImpl.java 2014-06-06 19:56:29.000000000 -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/basic/resources/basic_ko.properties 2013-09-06 11:28:03.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/swing/internal/plaf/basic/resources/basic_ko.properties 2014-01-18 12:16:23.000000000 -0800 @@ -46,7 +46,7 @@ FileChooser.openButton.textAndMnemonic=\uC5F4\uAE30(&O) FileChooser.saveDialogTitle.textAndMnemonic=\uC800\uC7A5 @@ -31290,8 +56945,21 @@ FileChooser.helpButtonToolTip.textAndMnemonic=FileChooser \uB3C4\uC6C0\uB9D0 FileChooser.directoryOpenButtonToolTip.textAndMnemonic=\uC120\uD0DD\uB41C \uB514\uB809\uD1A0\uB9AC \uC5F4\uAE30 ---- jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_sv.properties 2013-09-06 11:28:03.000000000 -0700 -+++ jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_sv.properties 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_fr.properties 2013-09-06 11:28:03.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_fr.properties 2014-06-06 19:56:29.000000000 -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/metal/resources/metal_sv.properties 2013-09-06 11:28:03.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/swing/internal/plaf/metal/resources/metal_sv.properties 2014-01-18 12:16:23.000000000 -0800 @@ -20,8 +20,8 @@ FileChooser.lookInLabel.textAndMnemonic=Leta &i: @@ -31303,8 +56971,21 @@ FileChooser.filesOfTypeLabel.textAndMnemonic=Mapp&namn: FileChooser.upFolderToolTip.textAndMnemonic=Upp en niv\u00E5 FileChooser.upFolderAccessibleName=Upp ---- jdk/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java 2013-09-06 11:28:04.000000000 -0700 -+++ jdk/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_fr.properties 2013-09-06 11:28:03.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/swing/internal/plaf/synth/resources/synth_fr.properties 2014-06-06 19:56:29.000000000 -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/hat/internal/server/AllClassesQuery.java 2013-09-06 11:28:04.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/tools/hat/internal/server/AllClassesQuery.java 2013-12-01 11:14:27.000000000 -0800 @@ -84,7 +84,7 @@ lastPackage = pkg; printClass(clazz); @@ -31314,8 +56995,8 @@ } out.println("<br>"); } ---- jdk/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java 2013-09-06 11:28:04.000000000 -0700 -+++ jdk/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java 2013-09-06 11:28:04.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/tools/hat/internal/server/ClassQuery.java 2013-12-01 11:14:27.000000000 -0800 @@ -112,12 +112,12 @@ out.println("<h2>Instances</h2>"); @@ -31354,8 +57035,8 @@ out.print("\">"); out.println("References summary by type</a>"); ---- jdk/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java 2013-09-06 11:28:04.000000000 -0700 -+++ jdk/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java 2013-09-06 11:28:04.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/tools/hat/internal/server/HttpReader.java 2013-12-01 11:14:27.000000000 -0800 @@ -41,21 +41,17 @@ @@ -31397,8 +57078,8 @@ out.println("</body></html>"); } ---- jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java 2013-09-06 11:28:04.000000000 -0700 -+++ jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java 2013-09-06 11:28:04.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/tools/hat/internal/server/InstancesCountQuery.java 2013-12-01 11:14:27.000000000 -0800 @@ -102,7 +102,7 @@ int count = clazz.getInstancesCount(false); print("" + count); @@ -31417,8 +57098,8 @@ out.print("\">"); print("" + newInst + " new"); out.print("</a>) "); ---- jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java 2013-09-06 11:28:04.000000000 -0700 -+++ jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java 2013-09-06 11:28:04.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLHelp.java 2013-12-01 11:14:27.000000000 -0800 @@ -54,10 +54,7 @@ out.print((char)ch); } @@ -31431,8 +57112,8 @@ } } } ---- jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java 2013-09-06 11:28:04.000000000 -0700 -+++ jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java 2013-09-06 11:28:04.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/tools/hat/internal/server/OQLQuery.java 2013-12-01 11:14:27.000000000 -0800 @@ -32,10 +32,7 @@ package com.sun.tools.hat.internal.server; @@ -31477,8 +57158,8 @@ } } ---- jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java 2013-09-06 11:28:04.000000000 -0700 -+++ jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java 2013-09-06 11:28:04.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/tools/hat/internal/server/QueryHandler.java 2013-12-01 11:14:27.000000000 -0800 @@ -36,6 +36,7 @@ import com.sun.tools.hat.internal.model.*; @@ -31529,8 +57210,8 @@ + out.println(Misc.encodeHtml(str)); + } } ---- jdk/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java 2013-09-06 11:28:04.000000000 -0700 -+++ jdk/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java 2013-09-06 11:28:04.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/tools/hat/internal/server/RefsByTypeQuery.java 2013-12-01 11:14:27.000000000 -0800 @@ -89,7 +89,7 @@ out.println("<p align='center'>"); printClass(clazz); @@ -31552,8 +57233,71 @@ out.println("</a>"); out.println("</td><td>"); out.println(map.get(clazz)); ---- jdk/src/share/classes/java/awt/EventQueue.java 2013-09-06 11:28:05.000000000 -0700 -+++ jdk/src/share/classes/java/awt/EventQueue.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/com/sun/tools/jdi/resources/jdi_ja.properties 2013-09-06 11:28:05.000000000 -0700 ++++ ./jdk/src/share/classes/com/sun/tools/jdi/resources/jdi_ja.properties 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:05.000000000 -0700 ++++ ./jdk/src/share/classes/java/awt/AWTException.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:05.000000000 -0700 ++++ ./jdk/src/share/classes/java/awt/Component.java 2014-06-06 19:56:29.000000000 -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/EventQueue.java 2013-09-06 11:28:05.000000000 -0700 ++++ ./jdk/src/share/classes/java/awt/EventQueue.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. @@ -31585,8 +57329,76 @@ if (prev == null) { queues[i].head = entry.next; } else { ---- jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java 2013-09-06 11:28:06.000000000 -0700 -+++ jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/awt/Toolkit.java 2013-09-06 11:28:06.000000000 -0700 ++++ ./jdk/src/share/classes/java/awt/Toolkit.java 2014-06-06 19:56:29.000000000 -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/awt/datatransfer/DataFlavor.java 2013-09-06 11:28:06.000000000 -0700 ++++ ./jdk/src/share/classes/java/awt/datatransfer/DataFlavor.java 2013-12-01 11:14:27.000000000 -0800 @@ -25,12 +25,14 @@ package java.awt.datatransfer; @@ -31655,8 +57467,8 @@ } /* ---- jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java 2013-09-06 11:28:06.000000000 -0700 -+++ jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java 2013-09-06 11:28:06.000000000 -0700 ++++ ./jdk/src/share/classes/java/awt/datatransfer/SystemFlavorMap.java 2014-04-19 01:27:12.000000000 -0700 @@ -45,8 +45,8 @@ import java.util.List; import java.util.Map; @@ -31758,8 +57570,8 @@ if (flavormapURL != null) { try { parseAndStoreReader(flavormapURL); ---- jdk/src/share/classes/java/awt/event/InvocationEvent.java 2013-09-06 11:28:07.000000000 -0700 -+++ jdk/src/share/classes/java/awt/event/InvocationEvent.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/awt/event/InvocationEvent.java 2013-09-06 11:28:07.000000000 -0700 ++++ ./jdk/src/share/classes/java/awt/event/InvocationEvent.java 2014-04-19 01:27:13.000000000 -0700 @@ -25,6 +25,8 @@ package java.awt.event; @@ -31916,8 +57728,8 @@ * Returns a parameter string identifying this event. * This method is useful for event-logging and for debugging. * ---- jdk/src/share/classes/java/beans/Beans.java 2013-09-06 11:28:08.000000000 -0700 -+++ jdk/src/share/classes/java/beans/Beans.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/beans/Beans.java 2013-09-06 11:28:08.000000000 -0700 ++++ ./jdk/src/share/classes/java/beans/Beans.java 2013-12-01 11:14:27.000000000 -0800 @@ -42,6 +42,8 @@ import java.io.ObjectStreamClass; import java.io.StreamCorruptedException; @@ -31938,8 +57750,8 @@ /* * Try to instantiate the class. */ ---- jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java 2013-09-06 11:28:08.000000000 -0700 -+++ jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java 2013-09-06 11:28:08.000000000 -0700 ++++ ./jdk/src/share/classes/java/beans/DefaultPersistenceDelegate.java 2013-12-01 11:14:27.000000000 -0800 @@ -220,6 +220,9 @@ // Write out the properties of this instance. private void initBean(Class type, Object oldInstance, Object newInstance, Encoder out) { @@ -31950,8 +57762,8 @@ int mod = field.getModifiers(); if (Modifier.isFinal(mod) || Modifier.isStatic(mod) || Modifier.isTransient(mod)) { continue; ---- jdk/src/share/classes/java/beans/MetaData.java 2013-09-06 11:28:08.000000000 -0700 -+++ jdk/src/share/classes/java/beans/MetaData.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/beans/MetaData.java 2013-09-06 11:28:08.000000000 -0700 ++++ ./jdk/src/share/classes/java/beans/MetaData.java 2013-12-01 11:14:27.000000000 -0800 @@ -42,6 +42,7 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; @@ -31992,8 +57804,8 @@ } } } ---- jdk/src/share/classes/java/beans/ThreadGroupContext.java 2013-09-06 11:28:08.000000000 -0700 -+++ jdk/src/share/classes/java/beans/ThreadGroupContext.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/beans/ThreadGroupContext.java 2013-09-06 11:28:08.000000000 -0700 ++++ ./jdk/src/share/classes/java/beans/ThreadGroupContext.java 2014-01-18 12:16:24.000000000 -0800 @@ -41,24 +41,20 @@ */ final class ThreadGroupContext { @@ -32026,8 +57838,8 @@ } private volatile boolean isDesignTime; ---- jdk/src/share/classes/java/beans/WeakIdentityMap.java 2013-09-06 11:28:08.000000000 -0700 -+++ jdk/src/share/classes/java/beans/WeakIdentityMap.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/beans/WeakIdentityMap.java 2013-09-06 11:28:08.000000000 -0700 ++++ ./jdk/src/share/classes/java/beans/WeakIdentityMap.java 2014-01-18 12:16:24.000000000 -0800 @@ -33,18 +33,22 @@ * and reference-equality in place of object-equality to compare them. * An entry will automatically be removed when its key is no longer @@ -32205,8 +58017,8 @@ Entry(Object key, int hash, T value, ReferenceQueue<Object> queue, Entry<T> next) { super(key, queue); ---- jdk/src/share/classes/java/io/File.java 2013-09-06 11:28:09.000000000 -0700 -+++ jdk/src/share/classes/java/io/File.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/io/File.java 2013-09-06 11:28:09.000000000 -0700 ++++ ./jdk/src/share/classes/java/io/File.java 2013-12-01 11:14:28.000000000 -0800 @@ -1885,10 +1885,18 @@ } else { n = Math.abs(n); @@ -32228,8 +58040,8 @@ return f; } } ---- jdk/src/share/classes/java/io/ObjectInputStream.java 2013-09-06 11:28:09.000000000 -0700 -+++ jdk/src/share/classes/java/io/ObjectInputStream.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/io/ObjectInputStream.java 2013-09-06 11:28:09.000000000 -0700 ++++ ./jdk/src/share/classes/java/io/ObjectInputStream.java 2013-12-01 11:14:28.000000000 -0800 @@ -490,11 +490,12 @@ public void defaultReadObject() throws IOException, ClassNotFoundException @@ -32270,8 +58082,8 @@ Class cl = desc.forClass(); if (cl != null && obj != null && !cl.isInstance(obj)) { throw new ClassCastException(); ---- jdk/src/share/classes/java/io/ObjectOutputStream.java 2013-09-06 11:28:09.000000000 -0700 -+++ jdk/src/share/classes/java/io/ObjectOutputStream.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/io/ObjectOutputStream.java 2013-09-06 11:28:09.000000000 -0700 ++++ ./jdk/src/share/classes/java/io/ObjectOutputStream.java 2013-12-01 11:14:28.000000000 -0800 @@ -430,11 +430,12 @@ * <code>OutputStream</code> */ @@ -32317,8 +58129,28 @@ desc.checkDefaultSerialize(); int primDataSize = desc.getPrimDataSize(); ---- jdk/src/share/classes/java/lang/Class.java 2013-09-06 11:28:09.000000000 -0700 -+++ jdk/src/share/classes/java/lang/Class.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/lang/AbstractStringBuilder.java 2013-09-06 11:28:09.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/AbstractStringBuilder.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:09.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/Class.java 2014-06-06 19:56:29.000000000 -0700 @@ -1096,7 +1096,17 @@ * @return the declaring class for this class * @since JDK1.1 @@ -32338,8 +58170,67 @@ /** ---- jdk/src/share/classes/java/lang/ClassLoader.java 2013-09-06 11:28:09.000000000 -0700 -+++ jdk/src/share/classes/java/lang/ClassLoader.java 2014-04-20 12:39:18.000000000 -0700 +@@ -2197,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; ++ ++ 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; + +- Class<?>[] paramTypes = new Class<?>[] {Class.class, int.class}; +- return smgr.getClass().getMethod0("checkMemberAccess", paramTypes). +- getDeclaringClass() != SecurityManager.class; ++ 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/ClassLoader.java 2013-09-06 11:28:09.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/ClassLoader.java 2013-12-01 11:14:28.000000000 -0800 @@ -58,6 +58,7 @@ import sun.misc.VM; import sun.reflect.CallerSensitive; @@ -32362,8 +58253,30 @@ final String name = cls.getName(); final int i = name.lastIndexOf('.'); if (i != -1) { ---- jdk/src/share/classes/java/lang/SecurityManager.java 2013-09-06 11:28:10.000000000 -0700 -+++ jdk/src/share/classes/java/lang/SecurityManager.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java 2013-09-06 11:28:09.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java 2014-06-06 19:56:29.000000000 -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/SecurityManager.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/SecurityManager.java 2014-01-18 12:16:24.000000000 -0800 @@ -1131,12 +1131,8 @@ * @see #checkPermission(java.security.Permission) checkPermission */ @@ -32379,8 +58292,34 @@ } /** ---- jdk/src/share/classes/java/lang/System.java 2013-09-06 11:28:10.000000000 -0700 -+++ jdk/src/share/classes/java/lang/System.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/lang/String.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/String.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/System.java 2014-06-06 19:56:29.000000000 -0700 @@ -25,6 +25,7 @@ package java.lang; @@ -32389,18 +58328,21 @@ import java.util.Properties; import java.util.PropertyPermission; import java.util.StringTokenizer; -@@ -1202,6 +1203,9 @@ +@@ -1202,6 +1203,12 @@ public int getStringHash32(String string) { return string.hash32(); } + 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/Thread.java 2013-09-06 11:28:10.000000000 -0700 -+++ jdk/src/share/classes/java/lang/Thread.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/lang/Thread.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/Thread.java 2014-04-19 01:27:13.000000000 -0700 @@ -341,6 +341,15 @@ } @@ -32466,8 +58408,8 @@ * Allocates a new {@code Thread} object. This constructor has the same * effect as {@linkplain #Thread(ThreadGroup,Runnable,String) Thread} * {@code (group, target, gname)} ,where {@code gname} is a newly generated ---- jdk/src/share/classes/java/lang/invoke/BoundMethodHandle.java 2013-09-06 11:28:10.000000000 -0700 -+++ jdk/src/share/classes/java/lang/invoke/BoundMethodHandle.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/lang/invoke/BoundMethodHandle.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/invoke/BoundMethodHandle.java 2014-04-19 01:27:13.000000000 -0700 @@ -140,7 +140,7 @@ * Return the {@link SpeciesData} instance representing this BMH species. All subclasses must provide a * static field containing this value, and they must accordingly implement this method. @@ -32691,8 +58633,20 @@ mv.visitCode(); mv.visitLdcInsn(types); mv.visitLdcInsn(Type.getObjectType(className)); ---- jdk/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java 2013-09-06 11:28:10.000000000 -0700 -+++ jdk/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/invoke/DirectMethodHandle.java 2014-06-06 19:56:29.000000000 -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/InvokerBytecodeGenerator.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java 2014-04-19 01:27:13.000000000 -0700 @@ -289,8 +289,9 @@ * Set up class file generation. */ @@ -32704,8 +58658,20 @@ cw.visitSource(sourceFile, null); String invokerDesc = invokerType.toMethodDescriptorString(); ---- jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java 2013-09-06 11:28:10.000000000 -0700 -+++ jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java 2014-06-06 19:56:29.000000000 -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/invoke/MethodHandleNatives.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/invoke/MethodHandleNatives.java 2013-12-01 11:14:28.000000000 -0800 @@ -456,6 +456,7 @@ case "getDeclaredField": case "getDeclaredMethod": @@ -32722,8 +58688,8 @@ case "getProxyClass": case "newProxyInstance": return defc == java.lang.reflect.Proxy.class; ---- jdk/src/share/classes/java/lang/invoke/MethodHandles.java 2013-09-06 11:28:10.000000000 -0700 -+++ jdk/src/share/classes/java/lang/invoke/MethodHandles.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/lang/invoke/MethodHandles.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/invoke/MethodHandles.java 2014-04-19 01:27:13.000000000 -0700 @@ -426,7 +426,7 @@ Lookup(Class<?> lookupClass) { @@ -32790,9 +58756,600 @@ MethodType newType = MethodType.methodType(oldType.returnType(), ptypes); return target.dropArguments(newType, pos, dropped); } ---- jdk/src/share/classes/java/lang/reflect/Proxy.java 2013-09-06 11:28:11.000000000 -0700 -+++ jdk/src/share/classes/java/lang/reflect/Proxy.java 2014-04-20 12:39:18.000000000 -0700 -@@ -788,6 +788,7 @@ +--- ./jdk/src/share/classes/java/lang/ref/Finalizer.java 2013-09-06 11:28:10.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/ref/Finalizer.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:11.000000000 -0700 ++++ ./jdk/src/share/classes/java/lang/reflect/Proxy.java 2014-06-06 19:56:29.000000000 -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) { +- } +- if (interfaceClass != interfaces[i]) { +- throw new IllegalArgumentException( +- interfaces[i] + " is not visible from class loader"); +- } ++ /* ++ * a key used for proxy class with 1 implemented interface ++ */ ++ private static final class Key1 extends WeakReference<Class<?>> { ++ private final int hash; + +- /* +- * Verify that the Class object actually represents an +- * interface. +- */ +- if (!interfaceClass.isInterface()) { +- throw new IllegalArgumentException( +- interfaceClass.getName() + " is not an interface"); +- } ++ 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(); ++ } ++ } + +- /* +- * Verify that this interface is not a duplicate. +- */ +- if (interfaceSet.contains(interfaceClass)) { +- throw new IllegalArgumentException( +- "repeated interface: " + interfaceClass.getName()); ++ /* ++ * 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]); + } +- interfaceSet.add(interfaceClass); ++ } + +- interfaceNames[i] = interfaceName; ++ @Override ++ public int hashCode() { ++ return hash; + } + +- /* +- * 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); ++ @Override ++ public boolean equals(Object obj) { ++ return this == obj || ++ obj != null && ++ obj.getClass() == KeyX.class && ++ equals(refs, ((KeyX) obj).refs); ++ } + +- /* +- * 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); ++ private static boolean equals(WeakReference<Class<?>>[] refs1, ++ WeakReference<Class<?>>[] refs2) { ++ if (refs1.length != refs2.length) { ++ return false; + } +- /* +- * 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. +- */ ++ for (int i = 0; i < refs1.length; i++) { ++ Class<?> intf = refs1[i].get(); ++ if (intf == null || intf != refs2[i].get()) { ++ return false; ++ } ++ } ++ return true; + } ++ } + +- /* +- * 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(); ++ /** ++ * 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 (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; ++ if (interfaceClass != intf) { ++ throw new IllegalArgumentException( ++ intf + " is not visible from class loader"); + } +- } while (true); +- } ++ /* ++ * 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()); ++ } ++ } + +- 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; +- 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); ++ /* ++ * Choose a name for the proxy class to generate. ++ */ ++ long num = nextUniqueNumber.getAndIncrement(); ++ String proxyName = proxyPkg + proxyClassNamePrefix + num; + +- } 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. ++ * Generate the specified proxy class. + */ +- synchronized (cache) { +- if (proxyClass != null) { +- cache.put(key, new WeakReference<Class<?>>(proxyClass)); +- } else { +- cache.remove(key); +- } +- cache.notifyAll(); ++ byte[] proxyClassFile = ProxyGenerator.generateProxyClass( ++ proxyName, interfaces); ++ try { ++ return 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()); + } + } +- 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); + } + + /** +@@ -788,6 +798,7 @@ * @throws IllegalArgumentException if the argument is not a * proxy instance */ @@ -32800,7 +59357,7 @@ public static InvocationHandler getInvocationHandler(Object proxy) throws IllegalArgumentException { -@@ -798,8 +799,19 @@ +@@ -798,8 +809,19 @@ throw new IllegalArgumentException("not a proxy instance"); } @@ -32822,8 +59379,467 @@ } private static native Class defineClass0(ClassLoader loader, String name, ---- jdk/src/share/classes/java/net/Inet6Address.java 2013-09-06 11:28:11.000000000 -0700 -+++ jdk/src/share/classes/java/net/Inet6Address.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/java/lang/reflect/WeakCache.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/java/lang/reflect/WeakCache.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:11.000000000 -0700 ++++ ./jdk/src/share/classes/java/net/IDN.java 2014-06-06 19:56:29.000000000 -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 +- // +- 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 refers to characters in the ASCII range, but which are not ++ // letters, digits or the hypen. ++ // ++ // 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/net/Inet6Address.java 2013-09-06 11:28:11.000000000 -0700 ++++ ./jdk/src/share/classes/java/net/Inet6Address.java 2013-12-01 11:14:29.000000000 -0800 @@ -26,6 +26,8 @@ package java.net; @@ -33539,8 +60555,8 @@ - s.defaultWriteObject(); - } } ---- jdk/src/share/classes/java/net/InetAddress.java 2013-09-06 11:28:11.000000000 -0700 -+++ jdk/src/share/classes/java/net/InetAddress.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/java/net/InetAddress.java 2013-09-06 11:28:11.000000000 -0700 ++++ ./jdk/src/share/classes/java/net/InetAddress.java 2013-12-01 11:14:29.000000000 -0800 @@ -213,6 +213,13 @@ this.family = family; } @@ -33563,8 +60579,8 @@ } } ---- jdk/src/share/classes/java/net/Socket.java 2013-09-06 11:28:11.000000000 -0700 -+++ jdk/src/share/classes/java/net/Socket.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/java/net/Socket.java 2013-09-06 11:28:11.000000000 -0700 ++++ ./jdk/src/share/classes/java/net/Socket.java 2014-01-18 12:16:24.000000000 -0800 @@ -624,6 +624,10 @@ InetAddress addr = epoint.getAddress(); int port = epoint.getPort(); @@ -33576,8 +60592,8 @@ getImpl().bind (addr, port); bound = true; } ---- jdk/src/share/classes/java/net/SocketPermission.java 2013-09-06 11:28:11.000000000 -0700 -+++ jdk/src/share/classes/java/net/SocketPermission.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/java/net/SocketPermission.java 2013-09-06 11:28:11.000000000 -0700 ++++ ./jdk/src/share/classes/java/net/SocketPermission.java 2014-01-18 12:16:24.000000000 -0800 @@ -34,6 +34,9 @@ import java.net.InetAddress; import java.security.Permission; @@ -33736,8 +60752,228 @@ /* public String toString() { ---- jdk/src/share/classes/java/util/ServiceLoader.java 2013-09-06 11:28:15.000000000 -0700 -+++ jdk/src/share/classes/java/util/ServiceLoader.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/nio/charset/Charset.java 2013-09-06 11:28:12.000000000 -0700 ++++ ./jdk/src/share/classes/java/nio/charset/Charset.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:12.000000000 -0700 ++++ ./jdk/src/share/classes/java/nio/file/Files.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:15.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/ComparableTimSort.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:15.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/HashMap.java 2014-06-06 19:56:29.000000000 -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/ServiceLoader.java 2013-09-06 11:28:15.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/ServiceLoader.java 2014-04-19 01:27:13.000000000 -0700 @@ -375,7 +375,7 @@ return p; } catch (Throwable x) { @@ -33747,8 +60983,19 @@ x); } throw new Error(); // This cannot happen ---- jdk/src/share/classes/java/util/TimeZone.java 2013-09-06 11:28:15.000000000 -0700 -+++ jdk/src/share/classes/java/util/TimeZone.java 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/classes/java/util/TimSort.java 2013-09-06 11:28:15.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/TimSort.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:15.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/TimeZone.java 2014-06-06 19:56:34.000000000 -0700 @@ -165,6 +165,11 @@ // Proclaim serialization compatibility with JDK 1.1 static final long serialVersionUID = 3581463369166924961L; @@ -33756,7 +61003,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 @@ -33779,7 +61026,7 @@ * * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't * been loaded. If so, it implies that AWTSecurityManager is not our -@@ -726,18 +735,20 @@ +@@ -726,14 +735,15 @@ * This works around a build time issue. */ private static TimeZone getDefaultInAppContext() { @@ -33791,28 +61038,19 @@ - if (!javaAWTAccess.isDisposed()) { - TimeZone tz = (TimeZone) - javaAWTAccess.get(TimeZone.class); -- if (tz == null && javaAWTAccess.isMainAppContext()) { -- return mainAppContextDefault; -- } else { -- return tz; + 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; -+ } - } - } - } -@@ -745,9 +756,9 @@ ++ TimeZone tz = (TimeZone) javaAWTAccess.get(TimeZone.class); + if (tz == null && javaAWTAccess.isMainAppContext()) { + return mainAppContextDefault; + } else { +@@ -745,9 +755,9 @@ } /** @@ -33825,7 +61063,7 @@ * AppContext otherwise. * * Note that javaAWTAccess may be null if sun.awt.AppContext class hasn't -@@ -756,15 +767,17 @@ +@@ -756,12 +766,12 @@ * This works around a build time issue. */ private static void setDefaultInAppContext(TimeZone tz) { @@ -33835,24 +61073,16 @@ - mainAppContextDefault = tz; - } else { - if (!javaAWTAccess.isDisposed()) { -- javaAWTAccess.put(TimeZone.class, tz); -- if (javaAWTAccess.isMainAppContext()) { -- mainAppContextDefault = null; + 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; -+ } - } - } - } -@@ -907,15 +920,13 @@ ++ } else if (!javaAWTAccess.isDisposed()) { + javaAWTAccess.put(TimeZone.class, tz); + if (javaAWTAccess.isMainAppContext()) { + mainAppContextDefault = null; +@@ -907,15 +917,13 @@ } int gmtOffset = (hours * 60 + num) * 60 * 1000; @@ -33869,9 +61099,70 @@ } return zi; } ---- jdk/src/share/classes/java/util/jar/JarVerifier.java 2013-09-06 11:28:16.000000000 -0700 -+++ jdk/src/share/classes/java/util/jar/JarVerifier.java 2014-04-20 12:39:18.000000000 -0700 -@@ -169,7 +169,9 @@ +--- ./jdk/src/share/classes/java/util/jar/JarFile.java 2013-09-06 11:28:16.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/jar/JarFile.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:28:16.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/jar/JarVerifier.java 2014-06-06 19:56:29.000000000 -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. + } + } + +@@ -169,7 +179,9 @@ name = name.substring(1); // only set the jev object for entries that have a signature @@ -33882,7 +61173,7 @@ mev.setEntry(name, je); return; } -@@ -675,6 +677,8 @@ +@@ -675,6 +687,8 @@ } else { matchUnsigned = true; } @@ -33891,7 +61182,7 @@ } } -@@ -777,23 +781,7 @@ +@@ -777,23 +791,7 @@ // true if file is part of the signature mechanism itself static boolean isSigningRelated(String name) { @@ -33916,9 +61207,163 @@ } private Enumeration<String> unsignedEntryNames(JarFile jar) { ---- jdk/src/share/classes/java/util/logging/LogManager.java 2013-09-06 11:28:16.000000000 -0700 -+++ jdk/src/share/classes/java/util/logging/LogManager.java 2014-04-20 12:39:18.000000000 -0700 -@@ -257,6 +257,11 @@ +--- ./jdk/src/share/classes/java/util/logging/Level.java 2013-09-06 11:28:16.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/logging/Level.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:16.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/logging/LogManager.java 2014-06-06 19:56:30.000000000 -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; +@@ -257,6 +265,11 @@ * retrieved by calling Logmanager.getLogManager. */ protected LogManager() { @@ -33930,7 +61375,7 @@ // Add a shutdown hook to close the global handlers. try { Runtime.getRuntime().addShutdownHook(new Cleaner()); -@@ -266,6 +271,19 @@ +@@ -266,6 +279,19 @@ } } @@ -33950,7 +61395,7 @@ /** * Return the global LogManager object. */ -@@ -345,6 +363,9 @@ +@@ -345,6 +371,9 @@ changes.removePropertyChangeListener(l); } @@ -33960,7 +61405,7 @@ // Returns the LoggerContext for the user code (i.e. application or AppContext). // Loggers are isolated from each AppContext. private LoggerContext getUserContext() { -@@ -353,33 +374,28 @@ +@@ -353,33 +382,28 @@ SecurityManager sm = System.getSecurityManager(); JavaAWTAccess javaAwtAccess = SharedSecrets.getJavaAWTAccess(); if (sm != null && javaAwtAccess != null) { @@ -34009,7 +61454,7 @@ return context != null ? context : userContext; } -@@ -406,7 +422,7 @@ +@@ -406,7 +430,7 @@ Logger result = getLogger(name); if (result == null) { // only allocate the new logger once @@ -34018,7 +61463,7 @@ do { if (addLogger(newLogger)) { // We successfully added the new Logger that we -@@ -453,12 +469,12 @@ +@@ -453,12 +477,12 @@ } while (logger == null); // LogManager will set the sysLogger's handlers via LogManager.addLogger method. @@ -34033,7 +61478,40 @@ sysLogger.addHandler(hdl); } return null; -@@ -742,7 +758,7 @@ +@@ -524,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; + } +@@ -611,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; +@@ -657,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() { +@@ -742,7 +766,7 @@ Logger result = findLogger(name); if (result == null) { // only allocate the new system logger once @@ -34042,7 +61520,78 @@ do { if (addLocalLogger(newLogger)) { // We successfully added the new Logger that we -@@ -1407,31 +1423,35 @@ +@@ -838,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); +@@ -847,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 +- +- node.loggerRef = null; // clear LogNode's weak ref to us +- node = null; // clear our ref to LogNode ++ // 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; ++ } ++ ++ 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) { +@@ -907,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 +@@ -1407,31 +1463,35 @@ // We use a subclass of Logger for the root logger, so // that we only instantiate the global handlers when they // are first needed. @@ -34082,9 +61631,14 @@ } } ---- jdk/src/share/classes/java/util/logging/Logger.java 2013-09-06 11:28:16.000000000 -0700 -+++ jdk/src/share/classes/java/util/logging/Logger.java 2014-04-20 12:39:18.000000000 -0700 -@@ -178,7 +178,7 @@ +--- ./jdk/src/share/classes/java/util/logging/Logger.java 2013-09-06 11:28:16.000000000 -0700 ++++ ./jdk/src/share/classes/java/util/logging/Logger.java 2014-06-06 19:56:30.000000000 -0700 +@@ -174,11 +174,11 @@ + 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<>(); @@ -34181,7 +61735,17 @@ return handlers.toArray(emptyHandlers); } -@@ -1669,11 +1685,13 @@ +@@ -1557,6 +1573,9 @@ + if (parent == null) { + throw new NullPointerException(); + } ++ if (manager == null) { ++ manager = LogManager.getLogManager(); ++ } + manager.checkPermission(); + doSetParent(parent); + } +@@ -1669,11 +1688,13 @@ private String getEffectiveResourceBundleName() { Logger target = this; while (target != null) { @@ -34197,8 +61761,8 @@ } return null; } ---- jdk/src/share/classes/javax/management/BadAttributeValueExpException.java 2013-09-06 11:28:18.000000000 -0700 -+++ jdk/src/share/classes/javax/management/BadAttributeValueExpException.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/management/BadAttributeValueExpException.java 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/BadAttributeValueExpException.java 2013-12-01 11:14:30.000000000 -0800 @@ -25,6 +25,9 @@ package javax.management; @@ -34244,9 +61808,143 @@ + } + } } ---- jdk/src/share/classes/javax/management/MBeanNotificationInfo.java 2013-09-06 11:28:18.000000000 -0700 -+++ jdk/src/share/classes/javax/management/MBeanNotificationInfo.java 2014-04-20 12:39:19.000000000 -0700 -@@ -25,6 +25,9 @@ +--- ./jdk/src/share/classes/javax/management/MBeanAttributeInfo.java 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/MBeanAttributeInfo.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/MBeanConstructorInfo.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/MBeanFeatureInfo.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/MBeanInfo.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/MBeanNotificationInfo.java 2014-06-06 19:56:30.000000000 -0700 +@@ -25,7 +25,11 @@ package javax.management; @@ -34254,9 +61952,11 @@ +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; import java.util.Arrays; ++import java.util.Objects; /** -@@ -67,7 +70,7 @@ + * <p>The <CODE>MBeanNotificationInfo</CODE> class is used to describe the +@@ -67,7 +71,7 @@ /** * @serial The different types of the notification. */ @@ -34265,7 +61965,7 @@ /** @see MBeanInfo#arrayGettersSafe */ private final transient boolean arrayGettersSafe; -@@ -114,9 +117,8 @@ +@@ -114,9 +118,8 @@ notifType, though it doesn't explicitly allow it either. */ @@ -34277,7 +61977,20 @@ this.arrayGettersSafe = MBeanInfo.arrayGettersSafe(this.getClass(), MBeanNotificationInfo.class); -@@ -203,4 +205,11 @@ +@@ -191,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())); + } + +@@ -203,4 +206,11 @@ hash ^= types[i].hashCode(); return hash; } @@ -34289,8 +62002,74 @@ + types = (t != null && t.length != 0) ? t.clone() : NO_TYPES; + } } ---- jdk/src/share/classes/javax/management/MBeanTrustPermission.java 2013-09-06 11:28:18.000000000 -0700 -+++ jdk/src/share/classes/javax/management/MBeanTrustPermission.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/management/MBeanOperationInfo.java 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/MBeanOperationInfo.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/MBeanParameterInfo.java 2014-06-06 19:56:30.000000000 -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/MBeanTrustPermission.java 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/MBeanTrustPermission.java 2013-12-01 11:14:30.000000000 -0800 @@ -26,6 +26,9 @@ package javax.management; @@ -34339,8 +62118,8 @@ + } } } ---- jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java 2013-09-06 11:28:18.000000000 -0700 -+++ jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java 2013-09-06 11:28:18.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/modelmbean/RequiredModelMBean.java 2013-12-01 11:14:30.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. @@ -34372,8 +62151,91 @@ -} \ No newline at end of file +} ---- jdk/src/share/classes/javax/management/remote/JMXPrincipal.java 2013-09-06 11:28:19.000000000 -0700 -+++ jdk/src/share/classes/javax/management/remote/JMXPrincipal.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/management/openmbean/OpenMBeanInfoSupport.java 2013-09-06 11:28:19.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/openmbean/OpenMBeanInfoSupport.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:19.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/relation/RelationNotification.java 2014-06-06 19:56:30.000000000 -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/JMXPrincipal.java 2013-09-06 11:28:19.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/remote/JMXPrincipal.java 2013-12-01 11:14:30.000000000 -0800 @@ -26,6 +26,9 @@ package javax.management.remote; @@ -34416,8 +62278,8 @@ + throw new NullPointerException("illegal null input"); + } } ---- jdk/src/share/classes/javax/management/remote/JMXServiceURL.java 2013-09-06 11:28:19.000000000 -0700 -+++ jdk/src/share/classes/javax/management/remote/JMXServiceURL.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/management/remote/JMXServiceURL.java 2013-09-06 11:28:19.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/remote/JMXServiceURL.java 2013-12-01 11:14:30.000000000 -0800 @@ -29,6 +29,9 @@ import com.sun.jmx.remote.util.ClassLogger; @@ -34577,8 +62439,8 @@ /** * Cached result of {@link #toString()}. ---- jdk/src/share/classes/javax/management/remote/NotificationResult.java 2013-09-06 11:28:19.000000000 -0700 -+++ jdk/src/share/classes/javax/management/remote/NotificationResult.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/management/remote/NotificationResult.java 2013-09-06 11:28:19.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/remote/NotificationResult.java 2013-12-01 11:14:30.000000000 -0800 @@ -25,6 +25,9 @@ package javax.management.remote; @@ -34652,8 +62514,8 @@ + notifications have been lost. */ + } } ---- jdk/src/share/classes/javax/management/remote/TargetedNotification.java 2013-09-06 11:28:19.000000000 -0700 -+++ jdk/src/share/classes/javax/management/remote/TargetedNotification.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/management/remote/TargetedNotification.java 2013-09-06 11:28:19.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/remote/TargetedNotification.java 2013-12-01 11:14:30.000000000 -0800 @@ -26,6 +26,9 @@ package javax.management.remote; @@ -34717,8 +62579,8 @@ + } + } } ---- jdk/src/share/classes/javax/management/remote/rmi/RMIConnector.java 2013-09-06 11:28:19.000000000 -0700 -+++ jdk/src/share/classes/javax/management/remote/rmi/RMIConnector.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/management/remote/rmi/RMIConnector.java 2013-09-06 11:28:19.000000000 -0700 ++++ ./jdk/src/share/classes/javax/management/remote/rmi/RMIConnector.java 2014-06-06 19:56:30.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. @@ -34764,7 +62626,58 @@ public synchronized void connect(Map<String,?> environment) throws IOException { final boolean tracing = logger.traceOn(); -@@ -2359,13 +2370,21 @@ +@@ -394,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 +@@ -1820,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; + +@@ -2000,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 +@@ -2359,13 +2382,21 @@ } } @@ -34789,8 +62702,18 @@ private static RMIConnection getConnection(RMIServer server, Object credentials, boolean checkStub) ---- jdk/src/share/classes/javax/print/SimpleDoc.java 2013-09-06 11:28:20.000000000 -0700 -+++ jdk/src/share/classes/javax/print/SimpleDoc.java 2014-04-20 12:39:19.000000000 -0700 +@@ -2540,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/print/SimpleDoc.java 2013-09-06 11:28:20.000000000 -0700 ++++ ./jdk/src/share/classes/javax/print/SimpleDoc.java 2014-01-18 12:16:24.000000000 -0800 @@ -91,7 +91,10 @@ Class repClass = null; @@ -34803,8 +62726,8 @@ } catch (Throwable e) { throw new IllegalArgumentException("unknown representation class"); } ---- jdk/src/share/classes/javax/script/ScriptEngineManager.java 2013-09-06 11:28:21.000000000 -0700 -+++ jdk/src/share/classes/javax/script/ScriptEngineManager.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/script/ScriptEngineManager.java 2013-09-06 11:28:21.000000000 -0700 ++++ ./jdk/src/share/classes/javax/script/ScriptEngineManager.java 2014-04-19 01:27:13.000000000 -0700 @@ -85,15 +85,18 @@ nameAssociations = new HashMap<String, ScriptEngineFactory>(); extensionAssociations = new HashMap<String, ScriptEngineFactory>(); @@ -34859,8 +62782,8 @@ } /** ---- jdk/src/share/classes/javax/security/auth/Policy.java 2013-09-06 11:28:21.000000000 -0700 -+++ jdk/src/share/classes/javax/security/auth/Policy.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/security/auth/Policy.java 2013-09-06 11:28:21.000000000 -0700 ++++ ./jdk/src/share/classes/javax/security/auth/Policy.java 2014-01-18 12:16:24.000000000 -0800 @@ -26,6 +26,10 @@ package javax.security.auth; @@ -34950,8 +62873,8 @@ } catch (Exception e) { throw new SecurityException (sun.security.util.ResourcesMgr.getString ---- jdk/src/share/classes/javax/security/auth/Subject.java 2013-09-06 11:28:21.000000000 -0700 -+++ jdk/src/share/classes/javax/security/auth/Subject.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/security/auth/Subject.java 2013-09-06 11:28:21.000000000 -0700 ++++ ./jdk/src/share/classes/javax/security/auth/Subject.java 2014-04-19 01:27:13.000000000 -0700 @@ -941,10 +941,30 @@ /** * Reads this object from a stream (i.e., deserializes it) @@ -35000,8 +62923,8 @@ } } ---- jdk/src/share/classes/javax/security/auth/kerberos/KeyTab.java 2013-09-06 11:28:21.000000000 -0700 -+++ jdk/src/share/classes/javax/security/auth/kerberos/KeyTab.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/security/auth/kerberos/KeyTab.java 2013-09-06 11:28:21.000000000 -0700 ++++ ./jdk/src/share/classes/javax/security/auth/kerberos/KeyTab.java 2013-12-01 11:14:30.000000000 -0800 @@ -26,6 +26,7 @@ package javax.security.auth.kerberos; @@ -35031,8 +62954,8 @@ } /** ---- jdk/src/share/classes/javax/security/auth/login/Configuration.java 2013-09-06 11:28:21.000000000 -0700 -+++ jdk/src/share/classes/javax/security/auth/login/Configuration.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/security/auth/login/Configuration.java 2013-09-06 11:28:21.000000000 -0700 ++++ ./jdk/src/share/classes/javax/security/auth/login/Configuration.java 2014-01-18 12:16:24.000000000 -0800 @@ -27,9 +27,6 @@ import javax.security.auth.AuthPermission; @@ -35109,8 +63032,8 @@ } catch (PrivilegedActionException e) { Exception ee = e.getException(); if (ee instanceof InstantiationException) { ---- jdk/src/share/classes/javax/security/auth/login/LoginContext.java 2013-09-06 11:28:21.000000000 -0700 -+++ jdk/src/share/classes/javax/security/auth/login/LoginContext.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/security/auth/login/LoginContext.java 2013-09-06 11:28:21.000000000 -0700 ++++ ./jdk/src/share/classes/javax/security/auth/login/LoginContext.java 2014-01-18 12:16:24.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. @@ -35353,8 +63276,8 @@ boolean status = ((Boolean)methods[mIndex].invoke (moduleStack[i].module, args)).booleanValue(); ---- jdk/src/share/classes/javax/sql/rowset/RowSetProvider.java 2013-09-06 11:28:22.000000000 -0700 -+++ jdk/src/share/classes/javax/sql/rowset/RowSetProvider.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/sql/rowset/RowSetProvider.java 2013-09-06 11:28:22.000000000 -0700 ++++ ./jdk/src/share/classes/javax/sql/rowset/RowSetProvider.java 2014-04-19 01:27:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. @@ -35415,8 +63338,8 @@ se.printStackTrace(); } } ---- jdk/src/share/classes/javax/sql/rowset/serial/SQLInputImpl.java 2013-09-06 11:28:22.000000000 -0700 -+++ jdk/src/share/classes/javax/sql/rowset/serial/SQLInputImpl.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/sql/rowset/serial/SQLInputImpl.java 2013-09-06 11:28:22.000000000 -0700 ++++ ./jdk/src/share/classes/javax/sql/rowset/serial/SQLInputImpl.java 2014-04-19 01:27:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. @@ -35449,8 +63372,8 @@ } // get the attributes from the struct Object attribs[] = s.getAttributes(map); ---- jdk/src/share/classes/javax/sql/rowset/spi/SyncFactory.java 2013-09-06 11:28:22.000000000 -0700 -+++ jdk/src/share/classes/javax/sql/rowset/spi/SyncFactory.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/sql/rowset/spi/SyncFactory.java 2013-09-06 11:28:22.000000000 -0700 ++++ ./jdk/src/share/classes/javax/sql/rowset/spi/SyncFactory.java 2014-04-19 01:27:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. @@ -35583,8 +63506,8 @@ * there. **/ c = Class.forName(providerID, true, cl); ---- jdk/src/share/classes/javax/swing/JTable.java 2013-09-06 11:28:23.000000000 -0700 -+++ jdk/src/share/classes/javax/swing/JTable.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/swing/JTable.java 2013-09-06 11:28:23.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/JTable.java 2013-12-01 11:14:31.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -35632,8 +63555,8 @@ constructor = type.getConstructor(argTypes); } catch (Exception e) { ---- jdk/src/share/classes/javax/swing/SwingUtilities.java 2013-09-06 11:28:23.000000000 -0700 -+++ jdk/src/share/classes/javax/swing/SwingUtilities.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/swing/SwingUtilities.java 2013-09-06 11:28:23.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/SwingUtilities.java 2014-01-18 12:16:24.000000000 -0800 @@ -24,6 +24,7 @@ */ package javax.swing; @@ -35660,8 +63583,8 @@ return Class.forName(className, true, Thread.currentThread(). getContextClassLoader()); } ---- jdk/src/share/classes/javax/swing/UIDefaults.java 2013-09-06 11:28:24.000000000 -0700 -+++ jdk/src/share/classes/javax/swing/UIDefaults.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/swing/UIDefaults.java 2013-09-06 11:28:24.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/UIDefaults.java 2013-12-01 11:14:31.000000000 -0800 @@ -53,6 +53,7 @@ import sun.reflect.misc.MethodUtil; @@ -35702,8 +63625,8 @@ /* * Coerce the array of class types provided into one which * looks the way the Reflection APIs expect. This is done ---- jdk/src/share/classes/javax/swing/event/EventListenerList.java 2013-09-06 11:28:24.000000000 -0700 -+++ jdk/src/share/classes/javax/swing/event/EventListenerList.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/swing/event/EventListenerList.java 2013-09-06 11:28:24.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/event/EventListenerList.java 2014-01-18 12:16:24.000000000 -0800 @@ -27,6 +27,7 @@ import java.io.*; import java.util.*; @@ -35723,8 +63646,38 @@ } } ---- jdk/src/share/classes/javax/swing/text/DefaultFormatter.java 2013-09-06 11:28:27.000000000 -0700 -+++ jdk/src/share/classes/javax/swing/text/DefaultFormatter.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java 2013-09-06 11:28:25.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java 2014-06-06 19:56:30.000000000 -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/DefaultFormatter.java 2013-09-06 11:28:27.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/text/DefaultFormatter.java 2013-12-01 11:14:31.000000000 -0800 @@ -24,7 +24,8 @@ */ package javax.swing.text; @@ -35754,8 +63707,58 @@ return cons.newInstance(new Object[] { string }); } catch (Throwable ex) { throw new ParseException("Error creating instance", 0); ---- jdk/src/share/classes/javax/swing/text/NumberFormatter.java 2013-09-06 11:28:27.000000000 -0700 -+++ jdk/src/share/classes/javax/swing/text/NumberFormatter.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/swing/text/FlowView.java 2013-09-06 11:28:27.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/text/FlowView.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:27.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/text/GlyphView.java 2014-06-06 19:56:30.000000000 -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/NumberFormatter.java 2013-09-06 11:28:27.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/text/NumberFormatter.java 2013-12-01 11:14:31.000000000 -0800 @@ -27,6 +27,8 @@ import java.lang.reflect.*; import java.text.*; @@ -35779,8 +63782,115 @@ return cons.newInstance(new Object[]{string}); } } catch (Throwable ex) { } ---- jdk/src/share/classes/javax/swing/text/html/ObjectView.java 2013-09-06 11:28:27.000000000 -0700 -+++ jdk/src/share/classes/javax/swing/text/html/ObjectView.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/javax/swing/text/View.java 2013-09-06 11:28:27.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/text/View.java 2014-06-06 19:56:30.000000000 -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/javax/swing/text/html/ObjectView.java 2013-09-06 11:28:27.000000000 -0700 ++++ ./jdk/src/share/classes/javax/swing/text/html/ObjectView.java 2013-12-01 11:14:31.000000000 -0800 @@ -31,6 +31,9 @@ import java.beans.*; import java.lang.reflect.*; @@ -35837,8 +63947,70 @@ } catch (Exception ex) { System.err.println("Invocation failed"); // invocation code ---- jdk/src/share/classes/sun/awt/AWTAccessor.java 2013-09-06 11:28:29.000000000 -0700 -+++ jdk/src/share/classes/sun/awt/AWTAccessor.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_ja.java 2013-09-06 11:28:29.000000000 -0700 ++++ ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_ja.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:29.000000000 -0700 ++++ ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_pt_BR.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:29.000000000 -0700 ++++ ./jdk/src/share/classes/sun/applet/resources/MsgAppletViewer_sv.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:29.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/AWTAccessor.java 2014-06-06 19:56:30.000000000 -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 @@ import java.awt.KeyboardFocusManager; import java.awt.DefaultKeyboardFocusManager; @@ -35847,10 +64019,37 @@ import java.awt.event.KeyEvent; import java.awt.geom.Point2D; -@@ -690,6 +691,25 @@ +@@ -39,6 +40,7 @@ + import java.security.AccessControlContext; + + import java.io.File; ++import java.util.ResourceBundle; + import java.util.Vector; + + /** +@@ -236,6 +238,11 @@ + */ + AccessControlContext getAccessControlContext(Component comp); + ++ /** ++ * Revalidates the component synchronously. ++ */ ++ void revalidateSynchronously(Component comp); ++ } /* +@@ -690,6 +697,32 @@ + } + + /* ++ *An accessor for the toolkit class ++ */ ++ public interface ToolkitAccessor { ++ void setPlatformResources(ResourceBundle bundle); ++ } ++ ++ /* + * An accessor object for the InvocationEvent class + */ + public interface InvocationEventAccessor { @@ -35873,20 +64072,39 @@ * Accessor instances are initialized in the static initializers of * corresponding AWT classes by using setters defined below. */ -@@ -716,6 +736,7 @@ +@@ -716,6 +749,8 @@ private static TrayIconAccessor trayIconAccessor; 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. -@@ -1110,4 +1131,18 @@ +@@ -1110,4 +1145,36 @@ // (so not a single instance of the event has been created). return sequencedEventAccessor; } + + /* ++ * 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) { @@ -35900,8 +64118,8 @@ + return invocationEventAccessor; + } } ---- jdk/src/share/classes/sun/awt/AWTAutoShutdown.java 2013-09-06 11:28:29.000000000 -0700 -+++ jdk/src/share/classes/sun/awt/AWTAutoShutdown.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/awt/AWTAutoShutdown.java 2013-09-06 11:28:29.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/AWTAutoShutdown.java 2014-04-19 01:27:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. @@ -35953,8 +64171,8 @@ thread.setDaemon(false); blockerThread = thread; thread.start(); ---- jdk/src/share/classes/sun/awt/AppContext.java 2013-09-06 11:28:29.000000000 -0700 -+++ jdk/src/share/classes/sun/awt/AppContext.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/awt/AppContext.java 2013-09-06 11:28:29.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/AppContext.java 2014-04-19 01:27:13.000000000 -0700 @@ -837,21 +837,68 @@ public boolean isMainAppContext() { return (numAppContexts.get() == 1 && mainAppContext != null); @@ -36037,8 +64255,8 @@ }); } } ---- jdk/src/share/classes/sun/awt/FontConfiguration.java 2013-09-06 11:28:30.000000000 -0700 -+++ jdk/src/share/classes/sun/awt/FontConfiguration.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/awt/FontConfiguration.java 2013-09-06 11:28:30.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/FontConfiguration.java 2014-06-06 19:56:34.000000000 -0700 @@ -1146,7 +1146,7 @@ */ HashMap<String, Boolean> existsMap; @@ -36048,8 +64266,8 @@ return false; } else if (existsMap == null) { existsMap = new HashMap<String, Boolean>(); ---- jdk/src/share/classes/sun/awt/OSInfo.java 2013-09-06 11:28:30.000000000 -0700 -+++ jdk/src/share/classes/sun/awt/OSInfo.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/awt/OSInfo.java 2013-09-06 11:28:30.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/OSInfo.java 2014-06-06 19:56:34.000000000 -0700 @@ -39,6 +39,7 @@ WINDOWS, LINUX, @@ -36069,8 +64287,8 @@ if (osName.contains("OS X")) { return MACOSX; } ---- jdk/src/share/classes/sun/awt/SunToolkit.java 2013-09-06 11:28:30.000000000 -0700 -+++ jdk/src/share/classes/sun/awt/SunToolkit.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/awt/SunToolkit.java 2013-09-06 11:28:30.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/SunToolkit.java 2014-04-19 01:27:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -36086,8 +64304,8 @@ import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; ---- jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java 2013-09-06 11:28:30.000000000 -0700 -+++ jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java 2013-09-06 11:28:30.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/datatransfer/ClipboardTransferable.java 2014-06-06 19:56:30.000000000 -0700 @@ -87,7 +87,7 @@ HashMap cached_data = new HashMap(formats.length, 1.0f); @@ -36097,8 +64315,109 @@ for (Iterator iter = flavorsForFormats.keySet().iterator(); iter.hasNext(); ) { ---- jdk/src/share/classes/sun/awt/datatransfer/SunClipboard.java 2013-09-06 11:28:30.000000000 -0700 -+++ jdk/src/share/classes/sun/awt/datatransfer/SunClipboard.java 2014-04-20 12:39:19.000000000 -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 2013-09-06 11:28:30.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/datatransfer/DataTransferer.java 2014-06-06 19:56:30.000000000 -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/datatransfer/SunClipboard.java 2013-09-06 11:28:30.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/datatransfer/SunClipboard.java 2014-04-19 01:27:13.000000000 -0700 @@ -64,9 +64,6 @@ public abstract class SunClipboard extends Clipboard implements PropertyChangeListener { @@ -36144,8 +64463,32 @@ + return (FlavorTable) SystemFlavorMap.getDefaultFlavorMap(); + } } ---- jdk/src/share/classes/sun/font/CreatedFontTracker.java 2013-09-06 11:28:31.000000000 -0700 -+++ jdk/src/share/classes/sun/font/CreatedFontTracker.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/awt/resources/awt_pt_BR.properties 2013-09-06 11:28:30.000000000 -0700 ++++ ./jdk/src/share/classes/sun/awt/resources/awt_pt_BR.properties 2014-06-06 19:56:30.000000000 -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/font/CreatedFontTracker.java 2013-09-06 11:28:31.000000000 -0700 ++++ ./jdk/src/share/classes/sun/font/CreatedFontTracker.java 2014-04-19 01:27:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. @@ -36217,8 +64560,8 @@ } } ---- jdk/src/share/classes/sun/font/FileFont.java 2013-09-06 11:28:31.000000000 -0700 -+++ jdk/src/share/classes/sun/font/FileFont.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/font/FileFont.java 2013-09-06 11:28:31.000000000 -0700 ++++ ./jdk/src/share/classes/sun/font/FileFont.java 2013-12-01 11:14:33.000000000 -0800 @@ -170,7 +170,9 @@ } } @@ -36230,8 +64573,8 @@ scaler = FontScaler.getNullScaler(); } ---- jdk/src/share/classes/sun/font/FontUtilities.java 2013-09-06 11:28:31.000000000 -0700 -+++ jdk/src/share/classes/sun/font/FontUtilities.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/font/FontUtilities.java 2013-09-06 11:28:31.000000000 -0700 ++++ ./jdk/src/share/classes/sun/font/FontUtilities.java 2014-06-06 19:56:34.000000000 -0700 @@ -48,6 +48,8 @@ public static boolean isLinux; @@ -36253,8 +64596,8 @@ isMacOSX = osName.contains("OS X"); // TODO: MacOSX String t2kStr = System.getProperty("sun.java2d.font.scaler"); ---- jdk/src/share/classes/sun/font/GlyphLayout.java 2013-09-06 11:28:31.000000000 -0700 -+++ jdk/src/share/classes/sun/font/GlyphLayout.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/font/GlyphLayout.java 2013-09-06 11:28:31.000000000 -0700 ++++ ./jdk/src/share/classes/sun/font/GlyphLayout.java 2013-12-01 11:14:33.000000000 -0800 @@ -468,9 +468,10 @@ _gvdata.grow(); } @@ -36269,8 +64612,8 @@ } } ---- jdk/src/share/classes/sun/font/StandardGlyphVector.java 2013-09-06 11:28:31.000000000 -0700 -+++ jdk/src/share/classes/sun/font/StandardGlyphVector.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/font/StandardGlyphVector.java 2013-09-06 11:28:31.000000000 -0700 ++++ ./jdk/src/share/classes/sun/font/StandardGlyphVector.java 2013-12-01 11:14:33.000000000 -0800 @@ -1740,8 +1740,9 @@ tx, sgv.font.getStyle(), @@ -36283,8 +64626,8 @@ return new GlyphStrike(sgv, strike, dx, dy); } ---- jdk/src/share/classes/sun/font/SunFontManager.java 2013-09-06 11:28:31.000000000 -0700 -+++ jdk/src/share/classes/sun/font/SunFontManager.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/font/SunFontManager.java 2013-09-06 11:28:31.000000000 -0700 ++++ ./jdk/src/share/classes/sun/font/SunFontManager.java 2014-06-06 19:56:34.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. @@ -36348,8 +64691,8 @@ } } } ---- jdk/src/share/classes/sun/font/TrueTypeFont.java 2013-09-06 11:28:31.000000000 -0700 -+++ jdk/src/share/classes/sun/font/TrueTypeFont.java 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/font/TrueTypeFont.java 2013-09-06 11:28:31.000000000 -0700 ++++ ./jdk/src/share/classes/sun/font/TrueTypeFont.java 2013-12-01 11:14:33.000000000 -0800 @@ -1037,6 +1037,9 @@ if (head_Table != null && head_Table.capacity() >= 18) { ShortBuffer sb = head_Table.asShortBuffer(); @@ -36360,8 +64703,8 @@ } ByteBuffer os2_Table = getTableBuffer(os_2Tag); ---- jdk/src/share/classes/sun/java2d/Disposer.java 2013-09-06 11:28:34.000000000 -0700 -+++ jdk/src/share/classes/sun/java2d/Disposer.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/java2d/Disposer.java 2013-09-06 11:28:34.000000000 -0700 ++++ ./jdk/src/share/classes/sun/java2d/Disposer.java 2014-04-19 01:27:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. @@ -36450,8 +64793,8 @@ } finally { pollingQueue = false; } ---- jdk/src/share/classes/sun/java2d/opengl/OGLRenderQueue.java 2013-09-06 11:28:34.000000000 -0700 -+++ jdk/src/share/classes/sun/java2d/opengl/OGLRenderQueue.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/java2d/opengl/OGLRenderQueue.java 2013-09-06 11:28:34.000000000 -0700 ++++ ./jdk/src/share/classes/sun/java2d/opengl/OGLRenderQueue.java 2014-04-19 01:27:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. @@ -36482,8 +64825,19 @@ } }); } ---- jdk/src/share/classes/sun/launcher/resources/launcher_fr.properties 2013-09-06 11:28:35.000000000 -0700 -+++ jdk/src/share/classes/sun/launcher/resources/launcher_fr.properties 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/launcher/resources/launcher_de.properties 2013-09-06 11:28:35.000000000 -0700 ++++ ./jdk/src/share/classes/sun/launcher/resources/launcher_de.properties 2014-06-06 19:56:30.000000000 -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_fr.properties 2013-09-06 11:28:35.000000000 -0700 ++++ ./jdk/src/share/classes/sun/launcher/resources/launcher_fr.properties 2014-01-18 12:16:25.000000000 -0800 @@ -34,7 +34,7 @@ java.launcher.ergo.message2 =\ car vous ex\u00E9cutez une machine de classe de serveur.\n @@ -36493,8 +64847,8 @@ # Translators please note do not translate the options themselves java.launcher.X.usage=\ -Xmixed ex\u00E9cution en mode mixte (valeur par d\u00E9faut)\n -Xint ex\u00E9cution en mode interpr\u00E9t\u00E9 uniquement\n -Xbootclasspath:<directories and zip/jar files separated by {0}>\n d\u00E9finition du chemin de recherche pour les ressources et classes bootstrap\n -Xbootclasspath/a:<directories and zip/jar files separated by {0}>\n ajout \u00E0 la fin du chemin de classe bootstrap\n -Xbootclasspath/p:<directories and zip/jar files separated by {0}>\n ajout au d\u00E9but du chemin de classe bootstrap\n -Xdiag affichage de messages de diagnostic suppl\u00E9mentaires\n -Xnoclassgc d\u00E9sactivation de l''op\u00E9ration de ramasse-miette (garbage collection) de la classe\n -Xincgc activation de l''op\u00E9ration de ramasse-miette (garbage collection) incr\u00E9mentielle\n -Xloggc:<file> journalisation du statut de l''op\u00E9ration de ramasse-miette (garbage collection) dans un fichier avec horodatages\n -Xbatch d\u00E9sactivation de la compilation en arri\u00E8re-plan\n -Xms<size> d\u00E9finition de la taille initiale des portions de m\u00E9moire Java\n -Xmx<size> d\u00E9finition de la taille maximale des portions de m\u00E9moire Java\n -Xss<size> d\u00E9finition de la taille de pile de thread Java\n -Xprof sortie des donn\u00E9es de profilage de l''unit\u00E9 centrale\n -Xfuture activation des contr\u00F4les les plus stricts en vue d''anticiper la future valeur par d\u00E9faut\n -Xrs r\u00E9duction de l''utilisation des signaux OS par Java/la machine virtuelle (voir documentation)\n -Xcheck:jni ex\u00E9cution de contr\u00F4les suppl\u00E9mentaires pour les fonctions JNI\n -Xshare:off aucune tentative d''utilisation des donn\u00E9es de classe partag\u00E9es\n -Xshare:auto utilisation des donn\u00E9es de classe partag\u00E9es si possible (valeur par d\u00E9faut)\n -Xshare:on utilisation des donn\u00E9es de classe partag\u00E9es obligatoire ou \u00E9chec de l''op\u00E9ration\n -XshowSettings affichage de tous les param\u00E8tres et poursuite de l''op\u00E9ration\n -XshowSettings:all\n affichage de tous les param\u00E8tres et poursuite de l''op\u00E9ration\n -XshowSettings:vm affichage de tous les param\u00E8tres de machine virtuelle et poursuite de l''op\u00E9ration\n -XshowSettings:properties\n affichage de tous les param\u00E8tres de propri\u00E9t\u00E9 et poursuite de l''op\u00E9ration\n -XshowSettings:locale\n affichage de tous les param\u00E8tres d''environnement local et poursuite de l''op\u00E9ration\n\nLes options -X ne sont pas des options standard et peuvent faire l''objet de modifications sans pr\u00E9avis.\n ---- jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties 2013-09-06 11:28:35.000000000 -0700 -+++ jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties 2013-09-06 11:28:35.000000000 -0700 ++++ ./jdk/src/share/classes/sun/launcher/resources/launcher_ja.properties 2014-01-18 12:16:25.000000000 -0800 @@ -34,11 +34,11 @@ java.launcher.ergo.message2 =\ \u3053\u308C\u306F\u30B5\u30FC\u30D0\u30FC\u30AF\u30E9\u30B9\u306E\u30DE\u30B7\u30F3\u3067\u5B9F\u884C\u3057\u3066\u3044\u308B\u305F\u3081\u3067\u3059\u3002\n @@ -36510,8 +64864,8 @@ # Translators please note do not translate the options themselves java.launcher.X.macosx.usage=\n\u6B21\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306FMac OS X\u56FA\u6709\u3067\u3059\u3002\n -XstartOnFirstThread\n main()\u30E1\u30BD\u30C3\u30C9\u3092\u6700\u521D(AppKit)\u306E\u30B9\u30EC\u30C3\u30C9\u3067\u5B9F\u884C\u3059\u308B\n -Xdock:name=<application name>"\n Dock\u306B\u8868\u793A\u3055\u308C\u308B\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u540D\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n -Xdock:icon=<path to icon file>\n Dock\u306B\u8868\u793A\u3055\u308C\u308B\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30A2\u30A4\u30B3\u30F3\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n\n ---- jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties 2013-09-06 11:28:35.000000000 -0700 -+++ jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties 2014-04-20 12:39:19.000000000 -0700 +--- ./jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties 2013-09-06 11:28:35.000000000 -0700 ++++ ./jdk/src/share/classes/sun/launcher/resources/launcher_ko.properties 2014-01-18 12:16:25.000000000 -0800 @@ -34,10 +34,11 @@ java.launcher.ergo.message2 =\ \uC11C\uBC84\uAE09 \uC2DC\uC2A4\uD15C\uC5D0\uC11C \uC2E4\uD589 \uC911\uC774\uAE30 \uB54C\uBB38\uC785\uB2C8\uB2E4.\n @@ -36526,9 +64880,14 @@ # Translators please note do not translate the options themselves java.launcher.X.macosx.usage=\n\uB2E4\uC74C\uC740 Mac OS X\uC5D0 \uD2B9\uC815\uB41C \uC635\uC158\uC785\uB2C8\uB2E4.\n -XstartOnFirstThread\n \uCCAB\uBC88\uC9F8 (AppKit) \uC2A4\uB808\uB4DC\uC5D0 main() \uBA54\uC18C\uB4DC\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n -Xdock:name=<application name>"\n \uACE0\uC815\uC73C\uB85C \uD45C\uC2DC\uB41C \uAE30\uBCF8 \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8 \uC774\uB984\uC744 \uBB34\uD6A8\uD654\uD569\uB2C8\uB2E4.\n -Xdock:icon=<path to icon file>\n \uACE0\uC815\uC73C\uB85C \uD45C\uC2DC\uB41C \uAE30\uBCF8 \uC544\uC774\uCF58\uC744 \uBB34\uD6A8\uD654\uD569\uB2C8\uB2E4.\n\n ---- jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties 2013-09-06 11:28:35.000000000 -0700 -+++ jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties 2014-04-20 12:39:19.000000000 -0700 -@@ -34,7 +34,7 @@ +--- ./jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties 2013-09-06 11:28:35.000000000 -0700 ++++ ./jdk/src/share/classes/sun/launcher/resources/launcher_pt_BR.properties 2014-06-06 19:56:30.000000000 -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 @@ -36536,9 +64895,17 @@ +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 ---- jdk/src/share/classes/sun/management/HotSpotDiagnostic.java 2013-09-06 11:28:35.000000000 -0700 -+++ jdk/src/share/classes/sun/management/HotSpotDiagnostic.java 2014-04-20 12:39:21.000000000 -0700 +-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/HotSpotDiagnostic.java 2013-09-06 11:28:35.000000000 -0700 ++++ ./jdk/src/share/classes/sun/management/HotSpotDiagnostic.java 2013-12-01 11:14:34.000000000 -0800 @@ -40,7 +40,17 @@ public HotSpotDiagnostic() { } @@ -36558,8 +64925,48 @@ public List<VMOption> getDiagnosticOptions() { List<Flag> allFlags = Flag.getAllFlags(); ---- jdk/src/share/classes/sun/misc/InnocuousThread.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/share/classes/sun/misc/InnocuousThread.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/management/resources/agent_ja.properties 2013-09-06 11:28:36.000000000 -0700 ++++ ./jdk/src/share/classes/sun/management/resources/agent_ja.properties 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:37.000000000 -0700 ++++ ./jdk/src/share/classes/sun/misc/FloatingDecimal.java 2014-06-06 19:56:30.000000000 -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/InnocuousThread.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/sun/misc/InnocuousThread.java 2014-04-19 01:27:13.000000000 -0700 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -36682,8 +65089,8 @@ + } + } +} ---- jdk/src/share/classes/sun/misc/JavaAWTAccess.java 2013-09-06 11:28:37.000000000 -0700 -+++ jdk/src/share/classes/sun/misc/JavaAWTAccess.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/misc/JavaAWTAccess.java 2013-09-06 11:28:37.000000000 -0700 ++++ ./jdk/src/share/classes/sun/misc/JavaAWTAccess.java 2014-04-19 01:27:13.000000000 -0700 @@ -26,14 +26,16 @@ package sun.misc; @@ -36707,8 +65114,8 @@ public Object get(Object key); public void put(Object key, Object value); public void remove(Object key); ---- jdk/src/share/classes/sun/misc/JavaLangAccess.java 2013-09-06 11:28:37.000000000 -0700 -+++ jdk/src/share/classes/sun/misc/JavaLangAccess.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/misc/JavaLangAccess.java 2013-09-06 11:28:37.000000000 -0700 ++++ ./jdk/src/share/classes/sun/misc/JavaLangAccess.java 2014-06-06 19:56:30.000000000 -0700 @@ -25,6 +25,7 @@ package sun.misc; @@ -36717,7 +65124,7 @@ import sun.reflect.ConstantPool; import sun.reflect.annotation.AnnotationType; import sun.nio.ch.Interruptible; -@@ -88,4 +89,10 @@ +@@ -88,4 +89,15 @@ * Returns the murmur hash value for the specified String. */ int getStringHash32(String string); @@ -36727,9 +65134,14 @@ + * 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/Service.java 2013-09-06 11:28:37.000000000 -0700 -+++ jdk/src/share/classes/sun/misc/Service.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/misc/Service.java 2013-09-06 11:28:37.000000000 -0700 ++++ ./jdk/src/share/classes/sun/misc/Service.java 2014-04-19 01:27:14.000000000 -0700 @@ -299,7 +299,7 @@ return service.cast(c.newInstance()); } catch (Throwable x) { @@ -36739,8 +65151,8 @@ x); } return null; /* This cannot happen */ ---- jdk/src/share/classes/sun/misc/SharedSecrets.java 2013-09-06 11:28:37.000000000 -0700 -+++ jdk/src/share/classes/sun/misc/SharedSecrets.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/misc/SharedSecrets.java 2013-09-06 11:28:37.000000000 -0700 ++++ ./jdk/src/share/classes/sun/misc/SharedSecrets.java 2014-04-19 01:27:14.000000000 -0700 @@ -197,9 +197,6 @@ public static JavaAWTAccess getJavaAWTAccess() { // this may return null in which case calling code needs to @@ -36751,8 +65163,8 @@ return javaAWTAccess; } } ---- jdk/src/share/classes/sun/misc/ThreadGroupUtils.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/share/classes/sun/misc/ThreadGroupUtils.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/misc/ThreadGroupUtils.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/sun/misc/ThreadGroupUtils.java 2014-04-19 01:27:14.000000000 -0700 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -36809,8 +65221,47 @@ + return currentTG; + } +} ---- jdk/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java 2013-09-06 11:28:38.000000000 -0700 -+++ jdk/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/misc/VM.java 2013-09-06 11:28:37.000000000 -0700 ++++ ./jdk/src/share/classes/sun/misc/VM.java 2014-06-06 19:56:30.000000000 -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/ch/AsynchronousSocketChannelImpl.java 2013-09-06 11:28:38.000000000 -0700 ++++ ./jdk/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java 2014-01-18 12:16:25.000000000 -0800 @@ -428,6 +428,10 @@ throw new AlreadyBoundException(); InetSocketAddress isa = (local == null) ? @@ -36822,8 +65273,8 @@ NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(fd, isa.getAddress(), isa.getPort()); localAddress = Net.localAddress(fd); ---- jdk/src/share/classes/sun/nio/ch/Invoker.java 2013-09-06 11:28:39.000000000 -0700 -+++ jdk/src/share/classes/sun/nio/ch/Invoker.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/nio/ch/Invoker.java 2013-09-06 11:28:39.000000000 -0700 ++++ ./jdk/src/share/classes/sun/nio/ch/Invoker.java 2014-04-19 01:27:14.000000000 -0700 @@ -130,6 +130,18 @@ // clear interrupt @@ -36843,8 +65294,8 @@ } /** ---- jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java 2013-09-06 11:28:39.000000000 -0700 -+++ jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java 2013-09-06 11:28:39.000000000 -0700 ++++ ./jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java 2014-01-18 12:16:25.000000000 -0800 @@ -599,6 +599,10 @@ throw new AlreadyBoundException(); InetSocketAddress isa = (local == null) ? @@ -36856,8 +65307,8 @@ NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(fd, isa.getAddress(), isa.getPort()); localAddress = Net.localAddress(fd); ---- jdk/src/share/classes/sun/nio/ch/ThreadPool.java 2013-09-06 11:28:39.000000000 -0700 -+++ jdk/src/share/classes/sun/nio/ch/ThreadPool.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/nio/ch/ThreadPool.java 2013-09-06 11:28:39.000000000 -0700 ++++ ./jdk/src/share/classes/sun/nio/ch/ThreadPool.java 2014-04-19 01:27:14.000000000 -0700 @@ -27,6 +27,7 @@ import java.util.concurrent.*; @@ -36921,8 +65372,8 @@ // create thread pool ExecutorService executor = new ThreadPoolExecutor(0, Integer.MAX_VALUE, ---- jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java 2013-09-06 11:28:39.000000000 -0700 -+++ jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java 2013-09-06 11:28:39.000000000 -0700 ++++ ./jdk/src/share/classes/sun/nio/cs/ext/ExtendedCharsets.java 2013-12-01 11:14:35.000000000 -0800 @@ -1031,6 +1031,24 @@ "ebcdic-s-871+euro" }); @@ -36948,8 +65399,8 @@ // Macintosh MacOS/Apple char encodingd ---- jdk/src/share/classes/sun/nio/cs/ext/IBM300.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/share/classes/sun/nio/cs/ext/IBM300.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/nio/cs/ext/IBM300.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/sun/nio/cs/ext/IBM300.java 2013-12-01 11:14:35.000000000 -0800 @@ -0,0 +1,1875 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -38826,8 +67277,78 @@ + } + } +} ---- jdk/src/share/classes/sun/print/PSPrinterJob.java 2013-09-06 11:28:40.000000000 -0700 -+++ jdk/src/share/classes/sun/print/PSPrinterJob.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/nio/cs/ext/META-INF/services/java.nio.charset.spi.CharsetProvider 2013-09-06 11:28:40.000000000 -0700 ++++ ./jdk/src/share/classes/sun/nio/cs/ext/META-INF/services/java.nio.charset.spi.CharsetProvider 1969-12-31 16:00:00.000000000 -0800 +@@ -1,2 +0,0 @@ +-# NIO charset SPI extended charset provider +-sun.nio.cs.ext.ExtendedCharsets +--- ./jdk/src/share/classes/sun/print/DocumentPropertiesUI.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/sun/print/DocumentPropertiesUI.java 2014-06-06 19:56:30.000000000 -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); ++ ++} +--- ./jdk/src/share/classes/sun/print/PSPrinterJob.java 2013-09-06 11:28:40.000000000 -0700 ++++ ./jdk/src/share/classes/sun/print/PSPrinterJob.java 2014-06-06 19:56:34.000000000 -0700 @@ -1568,7 +1568,7 @@ } @@ -38837,8 +67358,146 @@ execCmd = new String[ncomps]; execCmd[n++] = "/usr/bin/lpr"; if ((pFlags & PRINTER) != 0) { ---- jdk/src/share/classes/sun/print/resources/serviceui_es.properties 2013-09-06 11:28:40.000000000 -0700 -+++ jdk/src/share/classes/sun/print/resources/serviceui_es.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/print/PrinterJobWrapper.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/share/classes/sun/print/PrinterJobWrapper.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:40.000000000 -0700 ++++ ./jdk/src/share/classes/sun/print/RasterPrinterJob.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:28:40.000000000 -0700 ++++ ./jdk/src/share/classes/sun/print/ServiceDialog.java 2014-06-06 19:56:30.000000000 -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/print/resources/serviceui_es.properties 2013-09-06 11:28:40.000000000 -0700 ++++ ./jdk/src/share/classes/sun/print/resources/serviceui_es.properties 2014-01-18 12:16:25.000000000 -0800 @@ -36,29 +36,29 @@ label.pstype=Tipo: label.rangeto=A @@ -38875,8 +67534,8 @@ radiobutton.tumble=Cam&bio de Cara # The vkMnemonics correspond with the constants defined in KeyEvent, eg # 65 = KeyEvent.VK_A ---- jdk/src/share/classes/sun/print/resources/serviceui_fr.properties 2013-09-06 11:28:40.000000000 -0700 -+++ jdk/src/share/classes/sun/print/resources/serviceui_fr.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/print/resources/serviceui_fr.properties 2013-09-06 11:28:40.000000000 -0700 ++++ ./jdk/src/share/classes/sun/print/resources/serviceui_fr.properties 2014-01-18 12:16:25.000000000 -0800 @@ -29,7 +29,7 @@ dialog.writeerror=Impossible d'\u00E9crire dans le fichier : # @@ -38924,8 +67583,8 @@ # error.pagerange=Plage de pages non valide. Sp\u00E9cifiez les valeurs de nouveau (ex. : 1-3,5,7-10) error.destination=Nom de fichier non valide ; recommencez ---- jdk/src/share/classes/sun/print/resources/serviceui_it.properties 2013-09-06 11:28:40.000000000 -0700 -+++ jdk/src/share/classes/sun/print/resources/serviceui_it.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/print/resources/serviceui_it.properties 2013-09-06 11:28:40.000000000 -0700 ++++ ./jdk/src/share/classes/sun/print/resources/serviceui_it.properties 2014-01-18 12:16:26.000000000 -0800 @@ -47,8 +47,8 @@ label.rightmargin=&destro # @@ -38946,8 +67605,8 @@ tab.general=&Generale tab.pagesetup=Impo&sta pagina # ---- jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties 2013-09-06 11:28:40.000000000 -0700 -+++ jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties 2013-09-06 11:28:40.000000000 -0700 ++++ ./jdk/src/share/classes/sun/print/resources/serviceui_pt_BR.properties 2014-01-18 12:16:26.000000000 -0800 @@ -31,7 +31,7 @@ label.info=Informa\u00E7\u00F5es: label.jobname=Nome do &Job: @@ -38995,8 +67654,8 @@ # error.pagerange=Faixa de p\u00E1ginas inv\u00E1lida; insira novamente os valores (por exemplo, 1-3,5,7-10) error.destination=Nome de arquivo inv\u00E1lido; tente novamente ---- jdk/src/share/classes/sun/print/resources/serviceui_sv.properties 2013-09-06 11:28:40.000000000 -0700 -+++ jdk/src/share/classes/sun/print/resources/serviceui_sv.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/print/resources/serviceui_sv.properties 2013-09-06 11:28:40.000000000 -0700 ++++ ./jdk/src/share/classes/sun/print/resources/serviceui_sv.properties 2014-01-18 12:16:26.000000000 -0800 @@ -17,7 +17,7 @@ button.properties=&Egenskaper... # @@ -39043,8 +67702,8 @@ # error.pagerange=Ogiltigt sidintervall. Skriv in v\u00E4rdena igen (t ex 1-3,5,7-10) error.destination=Ogiltigt filnamn. F\u00F6rs\u00F6k igen. ---- jdk/src/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java 2013-09-06 11:28:41.000000000 -0700 -+++ jdk/src/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java 2013-09-06 11:28:41.000000000 -0700 ++++ ./jdk/src/share/classes/sun/reflect/generics/reflectiveObjects/TypeVariableImpl.java 2014-01-18 12:16:26.000000000 -0800 @@ -25,13 +25,17 @@ package sun.reflect.generics.reflectiveObjects; @@ -39101,8 +67760,8 @@ TypeVariable that = (TypeVariable) o; GenericDeclaration thatDecl = that.getGenericDeclaration(); ---- jdk/src/share/classes/sun/reflect/misc/ReflectUtil.java 2013-09-06 11:28:41.000000000 -0700 -+++ jdk/src/share/classes/sun/reflect/misc/ReflectUtil.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/reflect/misc/ReflectUtil.java 2013-09-06 11:28:41.000000000 -0700 ++++ ./jdk/src/share/classes/sun/reflect/misc/ReflectUtil.java 2014-01-18 12:16:26.000000000 -0800 @@ -26,9 +26,13 @@ package sun.reflect.misc; @@ -39208,8 +67867,8 @@ + return false; + } } ---- jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java 2013-09-06 11:28:41.000000000 -0700 -+++ jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java 2013-09-06 11:28:41.000000000 -0700 ++++ ./jdk/src/share/classes/sun/rmi/registry/RegistryImpl.java 2014-01-18 12:16:26.000000000 -0800 @@ -352,7 +352,7 @@ public RegistryImpl run() throws RemoteException { return new RegistryImpl(regPort); @@ -39236,8 +67895,8 @@ perms.add(new RuntimePermission("accessClassInPackage.sun.jvmstat.*")); perms.add(new RuntimePermission("accessClassInPackage.sun.jvm.hotspot.*")); ---- jdk/src/share/classes/sun/rmi/server/resources/rmid_ko.properties 2013-09-06 11:28:42.000000000 -0700 -+++ jdk/src/share/classes/sun/rmi/server/resources/rmid_ko.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/rmi/server/resources/rmid_ko.properties 2013-09-06 11:28:42.000000000 -0700 ++++ ./jdk/src/share/classes/sun/rmi/server/resources/rmid_ko.properties 2014-01-18 12:16:26.000000000 -0800 @@ -87,7 +87,7 @@ rmid.restart.service.warning=\nrmid: (\uACBD\uACE0) \uC11C\uBE44\uC2A4 \uC7AC\uC2DC\uC791\uC73C\uB85C \uC778\uD574 \uBC1C\uC0DD\uD55C \uC624\uB958: @@ -39247,8 +67906,8 @@ # "rmid" should not be translated rmid.log.snapshot.warning=\nrmid: (\uC2EC\uAC01) \uB85C\uADF8 \uC2A4\uB0C5\uC0F7\uC73C\uB85C \uC778\uD574 \uBC1C\uC0DD\uD55C \uC624\uB958: ---- jdk/src/share/classes/sun/security/ec/ECPrivateKeyImpl.java 2013-09-06 11:28:42.000000000 -0700 -+++ jdk/src/share/classes/sun/security/ec/ECPrivateKeyImpl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/ec/ECPrivateKeyImpl.java 2013-09-06 11:28:42.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/ec/ECPrivateKeyImpl.java 2013-12-01 11:14:35.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. @@ -39269,8 +67928,8 @@ - } - } ---- jdk/src/share/classes/sun/security/internal/spec/TlsRsaPremasterSecretParameterSpec.java 2013-09-06 11:28:42.000000000 -0700 -+++ jdk/src/share/classes/sun/security/internal/spec/TlsRsaPremasterSecretParameterSpec.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/internal/spec/TlsRsaPremasterSecretParameterSpec.java 2013-09-06 11:28:42.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/internal/spec/TlsRsaPremasterSecretParameterSpec.java 2014-01-18 12:16:26.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. @@ -39351,8 +68010,8 @@ + return encodedSecret == null ? null : encodedSecret.clone(); + } } ---- jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java 2013-09-06 11:28:42.000000000 -0700 -+++ jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java 2013-09-06 11:28:42.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/jgss/GSSCredentialImpl.java 2013-12-01 11:14:35.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. @@ -39369,8 +68028,21 @@ buffer.append(']'); } catch (GSSException e) { // skip to next element ---- jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java 2013-09-06 11:28:43.000000000 -0700 -+++ jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java 2013-09-06 11:28:43.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/jgss/spnego/SpNegoContext.java 2014-06-06 19:56:30.000000000 -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/jgss/wrapper/SunNativeProvider.java 2013-09-06 11:28:43.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java 2014-06-06 19:56:34.000000000 -0700 @@ -83,7 +83,8 @@ String osname = System.getProperty("os.name"); if (osname.startsWith("SunOS")) { @@ -39381,8 +68053,53 @@ gssLibs = new String[]{ "libgssapi.so", "libgssapi_krb5.so", ---- jdk/src/share/classes/sun/security/krb5/KdcComm.java 2013-09-06 11:28:43.000000000 -0700 -+++ jdk/src/share/classes/sun/security/krb5/KdcComm.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/krb5/Credentials.java 2013-09-06 11:28:43.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/krb5/Credentials.java 2014-06-06 19:56:30.000000000 -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/KdcComm.java 2013-09-06 11:28:43.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/krb5/KdcComm.java 2013-12-01 11:14:36.000000000 -0800 @@ -239,11 +239,15 @@ savedException = e; } @@ -39403,8 +68120,505 @@ } } return ibuf; ---- jdk/src/share/classes/sun/security/krb5/internal/NetClient.java 2013-09-06 11:28:43.000000000 -0700 -+++ jdk/src/share/classes/sun/security/krb5/internal/NetClient.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/krb5/Realm.java 2013-09-06 11:28:43.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/krb5/Realm.java 2014-06-06 19:56:30.000000000 -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). +- * +- * 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 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 ++ * ++ * 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<>(); +- +- /* +- * 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); +- } ++ LinkedList<String> path = new LinkedList<>(); + +- 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; +- } +- +- 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; +- } +- +- // 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]); ++ changed = true; ++ path.addFirst(more[i]); + } ++ if (!changed) break; ++ head = path.getFirst(); + } +- +- 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; +- +- // Parse the components and determine common part, if any. ++ private static String[] parseHierarchy(String cRealm, String sRealm) { + +- String[] cComponents = null; +- String[] sComponents = null; ++ String[] cComponents = cRealm.split("\\."); ++ String[] sComponents = sRealm.split("\\."); + +- StringTokenizer strTok = +- new StringTokenizer(cRealm, +- PrincipalName.REALM_COMPONENT_SEPARATOR_STR); ++ int cPos = cComponents.length; ++ int sPos = sComponents.length; + +- // Parse cRealm +- +- int cCount = strTok.countTokens(); +- cComponents = new String[cCount]; +- +- for (cCount = 0; strTok.hasMoreTokens(); cCount++) { +- cComponents[cCount] = strTok.nextToken(); +- } +- +- 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++]); +- } +- } +- +- // 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(); +- } +- +- 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++]); +- } ++ boolean hasCommon = false; ++ for (sPos--, cPos--; sPos >=0 && cPos >= 0 && ++ sComponents[sPos].equals(cComponents[cPos]); ++ sPos--, cPos--) { ++ hasCommon = true; + } + +- // Determine common components, if any. ++ // For those with common components: ++ // length pos ++ // SITES1.SALES.EXAMPLE.COM 4 1 ++ // EVERYWHERE.EXAMPLE.COM 3 0 + +- int commonComponents = 0; ++ // For those without common components: ++ // length pos ++ // DEVEL.EXAMPLE.COM 3 2 ++ // PROD.EXAMPLE.ORG 3 2 + +- //while (sCount > 0 && cCount > 0 && +- // sComponents[--sCount].equals(cComponents[--cCount])) ++ LinkedList<String> path = new LinkedList<>(); + +- for (sCount--, cCount--; sCount >=0 && cCount >= 0 && +- sComponents[sCount].equals(cComponents[cCount]); +- sCount--, cCount--) { +- commonComponents++; ++ // Un-common ones for client side ++ for (int i=0; i<=cPos; i++) { ++ path.addLast(subStringFrom(cComponents, i)); + } + +- 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++; ++ // Common one ++ if (hasCommon) { ++ path.addLast(subStringFrom(cComponents, cPos+1)); + } + +- 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); ++ // Un-common ones for server side ++ for (int i=sPos; i>=0; i--) { ++ path.addLast(subStringFrom(sComponents, i)); + } + +- retList = new String[links]; +- +- retList[0] = new String(cRealm); ++ // 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(); + +- 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++; +- } +- +- return realm.substring(i); +- } +- +- 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++; ++ /** ++ * 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 sb.toString(); + } +- + } +--- ./jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java 2013-09-06 11:28:43.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/krb5/internal/CredentialsUtil.java 2014-06-06 19:56:30.000000000 -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/krb5/internal/NetClient.java 2013-09-06 11:28:43.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/krb5/internal/NetClient.java 2013-12-01 11:14:36.000000000 -0800 @@ -31,6 +31,8 @@ package sun.security.krb5.internal; @@ -39435,8 +68649,8 @@ } } ---- jdk/src/share/classes/sun/security/pkcs/PKCS8Key.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/pkcs/PKCS8Key.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/pkcs/PKCS8Key.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/pkcs/PKCS8Key.java 2013-12-01 11:14:36.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2004, Oracle and/or its affiliates. All rights reserved. @@ -39462,8 +68676,8 @@ /** * Initialize an PKCS8Key object from an input stream. The data * on that input stream must be encoded using DER, obeying the ---- jdk/src/share/classes/sun/security/pkcs11/P11Key.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/pkcs11/P11Key.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/pkcs11/P11Key.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/pkcs11/P11Key.java 2013-12-01 11:14:36.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. @@ -39552,8 +68766,8 @@ } private static final class P11ECPublicKey extends P11Key ---- jdk/src/share/classes/sun/security/pkcs11/P11KeyAgreement.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/pkcs11/P11KeyAgreement.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/pkcs11/P11KeyAgreement.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/pkcs11/P11KeyAgreement.java 2014-01-18 12:16:26.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. @@ -39570,8 +68784,8 @@ if (keyBytes != newBytes) { key = new SecretKeySpec(newBytes, algorithm); } ---- jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/pkcs11/P11RSACipher.java 2014-01-18 12:16:26.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. @@ -39611,8 +68825,8 @@ // XXX implement unwrap using C_Unwrap() for all keys implInit(Cipher.DECRYPT_MODE, p11Key); if (wrappedKey.length > maxInputSize) { ---- jdk/src/share/classes/sun/security/pkcs11/P11Signature.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/pkcs11/P11Signature.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/pkcs11/P11Signature.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/pkcs11/P11Signature.java 2014-01-18 12:16:27.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. @@ -39639,8 +68853,8 @@ int k = Math.max(br.length, bs.length); // r and s each occupy half the array byte[] res = new byte[k << 1]; ---- jdk/src/share/classes/sun/security/pkcs11/P11TlsRsaPremasterSecretGenerator.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/pkcs11/P11TlsRsaPremasterSecretGenerator.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/pkcs11/P11TlsRsaPremasterSecretGenerator.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/pkcs11/P11TlsRsaPremasterSecretGenerator.java 2014-01-18 12:16:27.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. @@ -39698,8 +68912,8 @@ } } ---- jdk/src/share/classes/sun/security/pkcs11/P11Util.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/pkcs11/P11Util.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/pkcs11/P11Util.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/pkcs11/P11Util.java 2014-01-18 12:16:27.000000000 -0800 @@ -131,20 +131,6 @@ return b; } @@ -39721,8 +68935,8 @@ public static byte[] getMagnitude(BigInteger bi) { byte[] b = bi.toByteArray(); if ((b.length > 1) && (b[0] == 0)) { ---- jdk/src/share/classes/sun/security/provider/ByteArrayAccess.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/provider/ByteArrayAccess.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/provider/ByteArrayAccess.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/provider/ByteArrayAccess.java 2014-01-18 12:16:27.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved. @@ -39868,8 +69082,8 @@ } - } ---- jdk/src/share/classes/sun/security/provider/DSAPrivateKey.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/provider/DSAPrivateKey.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/provider/DSAPrivateKey.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/provider/DSAPrivateKey.java 2013-12-01 11:14:36.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2002, Oracle and/or its affiliates. All rights reserved. @@ -39889,8 +69103,8 @@ protected void parseKeyBits() throws InvalidKeyException { try { DerInputStream in = new DerInputStream(key); ---- jdk/src/share/classes/sun/security/provider/SeedGenerator.java 2013-09-06 11:28:44.000000000 -0700 -+++ jdk/src/share/classes/sun/security/provider/SeedGenerator.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/provider/SeedGenerator.java 2013-09-06 11:28:44.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/provider/SeedGenerator.java 2014-04-19 01:27:14.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. @@ -39941,8 +69155,8 @@ /** * Helper function to convert a long into a byte array (least significant * byte first). ---- jdk/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/provider/certpath/AlgorithmChecker.java 2014-04-19 01:27:14.000000000 -0700 @@ -75,7 +75,7 @@ private PublicKey prevPubKey; @@ -39952,8 +69166,8 @@ private final static DisabledAlgorithmConstraints certPathDefaultConstraints = new DisabledAlgorithmConstraints( ---- jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java 2014-04-19 01:27:14.000000000 -0700 @@ -50,6 +50,7 @@ import sun.security.util.Cache; import sun.security.util.Debug; @@ -39995,8 +69209,8 @@ try { ctx = new InitialDirContext(env); /* ---- jdk/src/share/classes/sun/security/rsa/RSAPadding.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/rsa/RSAPadding.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/rsa/RSAPadding.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/rsa/RSAPadding.java 2014-04-19 01:27:14.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. @@ -40269,8 +69483,8 @@ } - } ---- jdk/src/share/classes/sun/security/rsa/RSAPrivateCrtKeyImpl.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/rsa/RSAPrivateCrtKeyImpl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/rsa/RSAPrivateCrtKeyImpl.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/rsa/RSAPrivateCrtKeyImpl.java 2013-12-01 11:14:36.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. @@ -40308,8 +69522,8 @@ - } - } ---- jdk/src/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java 2013-12-01 11:14:36.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. @@ -40329,8 +69543,8 @@ - } - } ---- jdk/src/share/classes/sun/security/ssl/Handshaker.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/ssl/Handshaker.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/ssl/Handshaker.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/ssl/Handshaker.java 2014-01-18 12:16:27.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. @@ -40440,8 +69654,8 @@ } /* ---- jdk/src/share/classes/sun/security/ssl/RSAClientKeyExchange.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/ssl/RSAClientKeyExchange.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/ssl/RSAClientKeyExchange.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/ssl/RSAClientKeyExchange.java 2014-01-18 12:16:27.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. @@ -40663,8 +69877,28 @@ } } ---- jdk/src/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/ssl/SSLSocketImpl.java 2014-06-06 19:56:30.000000000 -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/ssl/SignatureAndHashAlgorithm.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/ssl/SignatureAndHashAlgorithm.java 2014-04-19 01:27:14.000000000 -0700 @@ -68,7 +68,7 @@ // performance optimization @@ -40674,8 +69908,8 @@ // supported pairs of signature and hash algorithm private final static Map<Integer, SignatureAndHashAlgorithm> supportedMap; ---- jdk/src/share/classes/sun/security/tools/JarSigner.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/tools/JarSigner.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/tools/JarSigner.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/tools/JarSigner.java 2014-04-19 01:27:14.000000000 -0700 @@ -88,9 +88,6 @@ private static final String META_INF = "META-INF/"; @@ -40900,8 +70134,8 @@ } // display the certificate(s). The first one is end-entity cert and // its KeyUsage should be checked. ---- jdk/src/share/classes/sun/security/tools/JarSignerResources.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/tools/JarSignerResources.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/tools/JarSignerResources.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/tools/JarSignerResources.java 2014-01-18 12:16:27.000000000 -0800 @@ -110,9 +110,9 @@ {"Please.specify.alias.name", "Please specify alias name"}, {"Only.one.alias.can.be.specified", "Only one alias can be specified"}, @@ -40944,8 +70178,8 @@ }; /** ---- jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/tools/JarSignerResources_ja.java 2014-01-18 12:16:27.000000000 -0800 @@ -79,7 +79,7 @@ {".verbose.suboptions.verbose.output.when.signing.verifying.", "[-verbose[:suboptions]] \u7F72\u540D/\u691C\u8A3C\u6642\u306E\u8A73\u7D30\u51FA\u529B\u3002"}, @@ -40986,17 +70220,29 @@ }; /** ---- jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java 2013-09-06 11:28:45.000000000 -0700 -+++ jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java 2014-04-20 12:39:21.000000000 -0700 -@@ -53,7 +53,7 @@ +--- ./jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java 2013-09-06 11:28:45.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/tools/JarSignerResources_zh_CN.java 2014-06-06 19:56:30.000000000 -0700 +@@ -53,9 +53,9 @@ {"If.keystore.is.not.password.protected.then.storepass.and.keypass.must.not.be.specified", "\u5982\u679C\u5BC6\u94A5\u5E93\u672A\u53D7\u53E3\u4EE4\u4FDD\u62A4, \u5219\u4E0D\u80FD\u6307\u5B9A -storepass \u548C -keypass"}, {"Usage.jarsigner.options.jar.file.alias", - "\u7528\u6CD5: jarsigner [\u9009\u9879] jar \u6587\u4EF6\u522B\u540D"}, + "\u7528\u6CD5: jarsigner [\u9009\u9879] jar-file \u522B\u540D"}, {".jarsigner.verify.options.jar.file.alias.", - " 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", @@ -132,8 +132,11 @@ {".Signature.related.entries.","(\u4E0E\u7B7E\u540D\u76F8\u5173\u7684\u6761\u76EE)"}, {".Unsigned.entries.", "(\u672A\u7B7E\u540D\u6761\u76EE)"}, @@ -41029,8 +70275,8 @@ }; /** ---- jdk/src/share/classes/sun/security/util/KeyUtil.java 2013-09-06 11:28:46.000000000 -0700 -+++ jdk/src/share/classes/sun/security/util/KeyUtil.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/util/KeyUtil.java 2013-09-06 11:28:46.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/util/KeyUtil.java 2014-01-18 12:16:27.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. @@ -41063,8 +70309,8 @@ + } ---- jdk/src/share/classes/sun/security/util/Resources_de.java 2013-09-06 11:28:46.000000000 -0700 -+++ jdk/src/share/classes/sun/security/util/Resources_de.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/util/Resources_de.java 2013-09-06 11:28:46.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/util/Resources_de.java 2014-01-18 12:16:27.000000000 -0800 @@ -444,7 +444,7 @@ {"Retain", "Beibehalten"}, @@ -41074,8 +70320,8 @@ {"Add.Public.Key.Alias", "Public Key-Alias hinzuf\u00FCgen"}, {"Remove.Public.Key.Alias", "Public Key-Alias entfernen"}, ---- jdk/src/share/classes/sun/security/util/Resources_fr.java 2013-09-06 11:28:46.000000000 -0700 -+++ jdk/src/share/classes/sun/security/util/Resources_fr.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/util/Resources_fr.java 2013-09-06 11:28:46.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/util/Resources_fr.java 2014-01-18 12:16:27.000000000 -0800 @@ -557,12 +557,12 @@ {"invalid.null.Class.provided", "classe NULL fournie non valide"}, {"Subject.", "Objet :\n"}, @@ -41093,8 +70339,8 @@ {"Subject.is.read.only", "Sujet en lecture seule"}, {"attempting.to.add.an.object.which.is.not.an.instance.of.java.security.Principal.to.a.Subject.s.Principal.Set", "tentative d'ajout d'un objet qui n'est pas une instance de java.security.Principal dans un ensemble de principaux du sujet"}, ---- jdk/src/share/classes/sun/security/util/Resources_zh_CN.java 2013-09-06 11:28:46.000000000 -0700 -+++ jdk/src/share/classes/sun/security/util/Resources_zh_CN.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/util/Resources_zh_CN.java 2013-09-06 11:28:46.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/util/Resources_zh_CN.java 2014-01-18 12:16:27.000000000 -0800 @@ -310,7 +310,7 @@ "\u60A8\u7684\u5BC6\u94A5\u5E93\u5305\u542B {0,number,integer} \u4E2A\u6761\u76EE"}, {"Your.keystore.contains.keyStore.size.entries", @@ -41104,8 +70350,8 @@ {"Empty.input", "\u7A7A\u8F93\u5165"}, {"Not.X.509.certificate", "\u975E X.509 \u8BC1\u4E66"}, {"alias.has.no.public.key", "{0}\u6CA1\u6709\u516C\u5171\u5BC6\u94A5"}, ---- jdk/src/share/classes/sun/security/util/Resources_zh_TW.java 2013-09-06 11:28:46.000000000 -0700 -+++ jdk/src/share/classes/sun/security/util/Resources_zh_TW.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/util/Resources_zh_TW.java 2013-09-06 11:28:46.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/util/Resources_zh_TW.java 2014-01-18 12:16:27.000000000 -0800 @@ -388,7 +388,7 @@ {"Certificate.chain.in.reply.does.not.verify.", "\u56DE\u8986\u6642\u7684\u6191\u8B49\u93C8\u672A\u9A57\u8B49: "}, @@ -41115,8 +70361,8 @@ {".is.not.trusted.", "... \u662F\u4E0D\u88AB\u4FE1\u4EFB\u7684\u3002"}, {"Install.reply.anyway.no.", "\u9084\u662F\u8981\u5B89\u88DD\u56DE\u8986\uFF1F [\u5426]: "}, {"NO", "\u5426"}, ---- jdk/src/share/classes/sun/security/util/SecurityConstants.java 2013-09-06 11:28:46.000000000 -0700 -+++ jdk/src/share/classes/sun/security/util/SecurityConstants.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/util/SecurityConstants.java 2013-09-06 11:28:46.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/util/SecurityConstants.java 2014-01-18 12:16:27.000000000 -0800 @@ -257,5 +257,5 @@ // java.lang.SecurityManager @@ -41124,8 +70370,8 @@ - new SocketPermission("localhost:1024-", SOCKET_LISTEN_ACTION); + new SocketPermission("localhost:0", SOCKET_LISTEN_ACTION); } ---- jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java 2013-09-06 11:28:46.000000000 -0700 -+++ jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java 2013-09-06 11:28:46.000000000 -0700 ++++ ./jdk/src/share/classes/sun/security/util/SignatureFileVerifier.java 2014-04-19 01:27:14.000000000 -0700 @@ -153,6 +153,52 @@ return false; } @@ -41179,8 +70425,8 @@ /** get digest from cache */ private MessageDigest getDigest(String algorithm) ---- jdk/src/share/classes/sun/swing/SwingLazyValue.java 2013-09-06 11:28:47.000000000 -0700 -+++ jdk/src/share/classes/sun/swing/SwingLazyValue.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/swing/SwingLazyValue.java 2013-09-06 11:28:47.000000000 -0700 ++++ ./jdk/src/share/classes/sun/swing/SwingLazyValue.java 2013-12-01 11:14:36.000000000 -0800 @@ -30,6 +30,7 @@ import java.security.AccessController; import java.security.PrivilegedAction; @@ -41198,9 +70444,171 @@ Class<?> c = Class.forName(className, true, null); if (methodName != null) { Class[] types = getClassArray(args); ---- jdk/src/share/classes/sun/swing/SwingUtilities2.java 2013-09-06 11:28:47.000000000 -0700 -+++ jdk/src/share/classes/sun/swing/SwingUtilities2.java 2014-04-20 12:39:21.000000000 -0700 -@@ -1301,6 +1301,19 @@ +--- ./jdk/src/share/classes/sun/swing/SwingUtilities2.java 2013-09-06 11:28:47.000000000 -0700 ++++ ./jdk/src/share/classes/sun/swing/SwingUtilities2.java 2014-06-06 19:56:31.000000000 -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,21 +504,24 @@ + * 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()); +- +- layout = layout.getJustifiedLayout(screenWidth); +- /* Use alternate print color if specified */ +- Color col = g2d.getColor(); +- if (col instanceof PrintColorUIResource) { +- g2d.setColor(((PrintColorUIResource)col).getPrintColor()); +- } ++ 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.draw(g2d, x, y); ++ layout.draw(g2d, x, y); + +- g2d.setColor(col); ++ g2d.setColor(col); ++ } + + return; + } +@@ -777,24 +781,26 @@ + 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); + +- layout.draw(g2d,x,y); ++ /* Use alternate print color if specified */ ++ Color col = g2d.getColor(); ++ if (col instanceof PrintColorUIResource) { ++ g2d.setColor(((PrintColorUIResource)col).getPrintColor()); ++ } + +- 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. +@@ -1301,6 +1349,19 @@ } /** @@ -41220,16 +70628,16 @@ * Returns true if EventQueue.getCurrentEvent() has the permissions to * access the system clipboard and if it is allowed gesture (if * checkGesture true) ---- jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/attach/META-INF/services/com.sun.tools.attach.spi.AttachProvider 2014-06-06 19:56:34.000000000 -0700 @@ -30,4 +30,5 @@ #[solaris]sun.tools.attach.SolarisAttachProvider #[windows]sun.tools.attach.WindowsAttachProvider #[linux]sun.tools.attach.LinuxAttachProvider +#[bsd]sun.tools.attach.BsdAttachProvider #[macosx]sun.tools.attach.BsdAttachProvider ---- jdk/src/share/classes/sun/tools/jar/Main.java 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/Main.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/Main.java 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/Main.java 2014-06-06 19:56:34.000000000 -0700 @@ -51,6 +51,7 @@ String zname = ""; String[] files; @@ -41300,8 +70708,8 @@ if (!d.exists() && !d.mkdirs() || !d.isDirectory()) { throw new IOException(formatMsg( "error.create.dir", d.getPath())); ---- jdk/src/share/classes/sun/tools/jar/resources/jar.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar.properties 2014-06-06 19:56:34.000000000 -0700 @@ -44,6 +44,8 @@ {0} : could not create directory error.incorrect.length=\ @@ -41311,8 +70719,8 @@ out.added.manifest=\ added manifest out.update.manifest=\ ---- jdk/src/share/classes/sun/tools/jar/resources/jar_de.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_de.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar_de.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_de.properties 2014-01-18 12:16:28.000000000 -0800 @@ -41,7 +41,7 @@ out.stored=(0 % gespeichert) out.create=\ erstellt: {0} @@ -41322,8 +70730,8 @@ out.size=(ein = {0}) (aus = {1}) usage=Verwendung: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] Dateien...\nOptionen:\n -c Neues Archiv erstellen\n -t Inhaltsverzeichnis f\u00FCr Archiv auflisten\n -x Genannte (oder alle) Dateien aus Archiv extrahieren\n -u Vorhandenes Archiv aktualisieren\n -v Verbose-Ausgabe f\u00FCr Standardausgabe generieren\n -f Namen der Archivdatei angeben\n -m Manifest-Informationen von angegebener Manifest-Datei einschlie\u00DFen\n -e Anwendungs-Einstiegspunkt f\u00FCr die \n in einer ausf\u00FChrbaren JAR-Datei geb\u00FCndelte Standalone-Anwendung angeben\n -0 Nur speichern (keine ZIP-Komprimierung)\n -M Keine Manifest-Datei f\u00FCr die Eintr\u00E4ge erstellen\n -i Indexinformationen f\u00FCr angegebenen JAR-Dateien erstellen\n -C zum angegebenen Verzeichnis wechseln und folgende Datei einschlie\u00DFen\nFalls eine Datei ein Verzeichnis ist, wird dieses rekursiv verarbeitet.\nDer Name der Manifest-Datei, der Name der Archivdatei und der Name des Einstiegspunkts werden\nin derselben Reihenfolge wie die Kennzeichen "m", "f" und "e" angegeben.\n\nBeispiel 1: Archivieren Sie zwei Klassendateien in ein Archiv mit Namen "classes.jar": \n jar cvf classes.jar Foo.class Bar.class \nBeispiel 2: Verwenden Sie die vorhandenen Manifest-Datei "mymanifest", und archivieren Sie\n alle Dateien im Verzeichnis foo/ in "classes.jar": \n jar cvfm classes.jar mymanifest -C foo/ .\n ---- jdk/src/share/classes/sun/tools/jar/resources/jar_es.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_es.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar_es.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_es.properties 2014-01-18 12:16:28.000000000 -0800 @@ -41,7 +41,7 @@ out.stored=(almacenado 0%) out.create=\ creado: {0} @@ -41334,8 +70742,8 @@ -usage=Sintaxis: jar {ctxui}[vfm0Me] [archive-jar] [archive-manifiesto] [punto-entrada] [-C dir] archivos...\nOpciones:\n -c crear nuevo archivo\n -t crear la tabla de contenido del archivo\n -x extraer el archive mencionado (o todos) del archivo\n -u actualizar archive existente\n -v generar salida detallada de los datos de salida est\u00E1ndar\n -f especificar nombre de archive de almacenamiento\n -m incluir informaci\u00F3n de manifiesto del archive de manifiesto especificado\n -e especificar punto de entrada de la aplicaci\u00F3n para la aplicaci\u00F3n aut\u00F3noma \n que se incluye dentro de un archive jar ejecutable\n -0 s\u00F3lo almacenar; no utilizar compresi\u00F3n ZIP\n -M no crear un archive de manifiesto para las entradas\n -i generar informaci\u00F3n de \u00EDndice para los archives jar especificados\n -C cambiar al directorio especificado e incluir el archivo siguiente\nSi alg\u00FAn archivo es un directorio, se procesar\u00E1 de forma recurrente.\nEl nombre del archivo de manifiesto, el nombre del archivo de almacenamiento y el nombre del punto de entrada se\nespecifican en el mismo orden que los indicadores 'm', 'f' y 'e'.\n\nEjemplo 1: para archivar archivos de dos clases en un archivo llamado classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEjemplo 2: utilice un archivo de manifiesto existente 'mymanifest' y archive todos los\n archivos del directorio foo/ en 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n +usage=Sintaxis: jar {ctxui}[vfm0Me] [archive-jar] [archive-manifiesto] [punto-entrada] [-C dir] archivos...\nOpciones:\n -c crear nuevo archivo\n -t crear la tabla de contenido del archivo\n -x extraer el archive mencionado (o todos) del archivo\n -u actualizar archive existente\n -v generar salida detallada de los datos de salida est\u00E1ndar\n -f especificar nombre de archive de almacenamiento\n -m incluir informaci\u00F3n de manifiesto del archive de manifiesto especificado\n -e especificar punto de entrada de la aplicaci\u00F3n para la aplicaci\u00F3n aut\u00F3noma \n que se incluye dentro de un archive jar ejecutable\n -0 s\u00F3lo almacenar; no utilizar compresi\u00F3n ZIP\n -M no crear un archive de manifiesto para las entradas\n -i generar informaci\u00F3n de \u00EDndice para los archives jar especificados\n -C cambiar al directorio especificado e incluir el archivo siguiente\nSi alg\u00FAn archivo es un directorio, se procesar\u00E1 de forma recurrente.\nEl nombre del archivo de manifiesto, el nombre del archivo de almacenamiento y el nombre del punto de entrada se\nespecifican en el mismo orden que los indicadores 'm', 'f' y 'e'.\n\nEjemplo 1: para archivar archivos de dos clases en un archivo llamado classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEjemplo 2: utilice un archivo de manifiesto existente 'mymanifest' y archive todos los\n archivos del directorio foo/ en 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n ---- jdk/src/share/classes/sun/tools/jar/resources/jar_fr.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_fr.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar_fr.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_fr.properties 2014-01-18 12:16:28.000000000 -0800 @@ -41,7 +41,7 @@ out.stored=(stockage : 0 %) out.create=\ cr\u00E9\u00E9 : {0} @@ -41345,8 +70753,8 @@ out.size=(entr\u00E9e = {0}) (sortie = {1}) usage=Syntaxe : jar {ctxui}[vfm0Me] [fichier-jar] [fichier-manifeste] [point-entr\u00E9e] [-C r\u00E9p] fichiers...\nOptions :\n -c cr\u00E9e une archive\n -t affiche la table des mati\u00E8res de l'archive\n -x extrait les fichiers nomm\u00E9s (ou tous les fichiers) de l'archive\n -u met \u00E0 jour l'archive existante\n -v g\u00E9n\u00E8re une version d\u00E9taill\u00E9e d'une sortie standard\n -f sp\u00E9cifie le nom du fichier archive\n -m inclut les informations de manifeste \u00E0 partir du fichier de manifeste sp\u00E9cifi\u00E9\n -e sp\u00E9cifie le point d'entr\u00E9e d'une application en mode autonome \n int\u00E9gr\u00E9e \u00E0 un fichier JAR ex\u00E9cutable\n -0 stockage uniquement, pas de compression ZIP\n -M ne cr\u00E9e pas de fichier manifeste pour les entr\u00E9es\n -i g\u00E9n\u00E8re les informations d'index des fichiers JAR sp\u00E9cifi\u00E9s\n -C passe au r\u00E9pertoire sp\u00E9cifi\u00E9 et inclut le fichier suivant\nSi l'un des fichiers est un r\u00E9pertoire, celui-ci est trait\u00E9 r\u00E9cursivement.\nLes noms du fichier manifeste, du fichier archive et du point d'entr\u00E9e sont\nsp\u00E9cifi\u00E9s dans le m\u00EAme ordre que celui des indicateurs m, f et e.\n\nExemple 1 : pour archiver deux fichiers de classe dans une archive intitul\u00E9e classes.jar : \n jar cvf classes.jar Foo.class Bar.class \nExemple 2 : pour utiliser un fichier manifeste existant 'monmanifeste', puis archiver tous les\n fichiers du r\u00E9pertoire foo/ dans 'classes.jar' : \n jar cvfm classes.jar monmanifeste -C foo/ .\n ---- jdk/src/share/classes/sun/tools/jar/resources/jar_it.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_it.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar_it.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_it.properties 2014-01-18 12:16:28.000000000 -0800 @@ -41,7 +41,7 @@ out.stored=(memorizzato 0%) out.create=\ creato: {0} @@ -41357,8 +70765,8 @@ -usage=Uso: jar {ctxui}[vfm0Me] [file-jar] [file-manifest] [punto di ingresso] [-C dir] file ...\nOpzioni:\n -c crea un nuovo archivio\n -t visualizza l'indice dell'archivio\n -x estrae i file con nome (o tutti i file) dall'archivio\n -u aggiorna l'archivio esistente\n -v genera output commentato dall'output standard\n -f specifica il nome file dell'archivio\n -m include informazioni manifest dal file manifest specificato\n -e specifica il punto di ingresso per l'applicazione stand-alone \n inclusa nel file jar eseguibile\n -0 solo memorizzazione; senza compressione ZIP\n -M consente di non creare un file manifest per le voci\n -i genera informazioni sull'indice per i file jar specificati\n -C imposta la directory specificata e include il file seguente\nSe un file \u00E8 una directory, verr\u00E0 elaborato in modo ricorsivo.\nIl nome del file manifest, del file di archivio e del punto di ingresso devono\nessere specificati nello stesso ordine dei flag 'm', 'f' ed 'e'.\n\nEsempio 1: archiviazione di due file di classe in un archivio con il nome classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEsempio 2: utilizzo del file manifest esistente 'mymanifest' e archiviazione di tutti i\n file della directory foo/ in 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/.\n +usage=Uso: jar {ctxui}[vfm0Me] [file-jar] [file-manifest] [punto di ingresso] [-C dir] file ...\nOpzioni:\n -c crea un nuovo archivio\n -t visualizza l'indice dell'archivio\n -x estrae i file con nome (o tutti i file) dall'archivio\n -u aggiorna l'archivio esistente\n -v genera output commentato dall'output standard\n -f specifica il nome file dell'archivio\n -m include informazioni manifest dal file manifest specificato\n -e specifica il punto di ingresso per l'applicazione stand-alone \n inclusa nel file jar eseguibile\n -0 solo memorizzazione; senza compressione ZIP\n -M consente di non creare un file manifest per le voci\n -i genera informazioni sull'indice per i file jar specificati\n -C imposta la directory specificata e include il file seguente\nSe un file \u00E8 una directory, verr\u00E0 elaborato in modo ricorsivo.\nIl nome del file manifest, del file di archivio e del punto di ingresso devono\nessere specificati nello stesso ordine dei flag 'm', 'f' ed 'e'.\n\nEsempio 1: archiviazione di due file di classe in un archivio con il nome classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nEsempio 2: utilizzo del file manifest esistente 'mymanifest' e archiviazione di tutti i\n file della directory foo/ in 'classes.jar': \n jar cvfm classes.jar mymanifest -C foo/ .\n ---- jdk/src/share/classes/sun/tools/jar/resources/jar_ja.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_ja.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar_ja.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_ja.properties 2014-01-18 12:16:28.000000000 -0800 @@ -41,7 +41,7 @@ out.stored=(0%\u683C\u7D0D\u3055\u308C\u307E\u3057\u305F) out.create=\ {0}\u304C\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F @@ -41369,8 +70777,8 @@ -usage=\u4F7F\u7528\u65B9\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u30AA\u30D7\u30B7\u30E7\u30F3:\n -c \u30A2\u30FC\u30AB\u30A4\u30D6\u3092\u65B0\u898F\u4F5C\u6210\u3059\u308B\n -t \u30A2\u30FC\u30AB\u30A4\u30D6\u306E\u5185\u5BB9\u3092\u4E00\u89A7\u8868\u793A\u3059\u308B\n -x \u6307\u5B9A\u306E(\u307E\u305F\u306F\u3059\u3079\u3066\u306E)\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u304B\u3089\u62BD\u51FA\u3059\u308B\n -u \u65E2\u5B58\u30A2\u30FC\u30AB\u30A4\u30D6\u3092\u66F4\u65B0\u3059\u308B\n -v \u6A19\u6E96\u51FA\u529B\u306B\u8A73\u7D30\u306A\u51FA\u529B\u3092\u751F\u6210\u3059\u308B\n -f \u30A2\u30FC\u30AB\u30A4\u30D6\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u6307\u5B9A\u3059\u308B\n -m \u6307\u5B9A\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u60C5\u5831\u3092\u53D6\u308A\u8FBC\u3080\n -e \u5B9F\u884C\u53EF\u80FDjar\u30D5\u30A1\u30A4\u30EB\u306B\u30D0\u30F3\u30C9\u30EB\u3055\u308C\u305F\u30B9\u30BF\u30F3\u30C9\u30A2\u30ED\u30F3\u30FB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\n \u30A8\u30F3\u30C8\u30EA\u30FB\u30DD\u30A4\u30F3\u30C8\u3092\u6307\u5B9A\u3059\u308B\n -0 \u683C\u7D0D\u306E\u307F\u3002ZIP\u5727\u7E2E\u3092\u4F7F\u7528\u3057\u306A\u3044\n -M \u30A8\u30F3\u30C8\u30EA\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u4F5C\u6210\u3057\u306A\u3044\n -i \u6307\u5B9A\u306Ejar\u30D5\u30A1\u30A4\u30EB\u306E\u7D22\u5F15\u60C5\u5831\u3092\u751F\u6210\u3059\u308B\n -C \u6307\u5B9A\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306B\u5909\u66F4\u3057\u3001\u4EE5\u4E0B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u53D6\u308A\u8FBC\u3080\n\u30D5\u30A1\u30A4\u30EB\u304C\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u5834\u5408\u306F\u518D\u5E30\u7684\u306B\u51E6\u7406\u3055\u308C\u307E\u3059\u3002\n\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u3001\u30A2\u30FC\u30AB\u30A4\u30D6\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u304A\u3088\u3073\u30A8\u30F3\u30C8\u30EA\u30FB\u30DD\u30A4\u30F3\u30C8\u540D\u306F\u3001\n\u30D5\u30E9\u30B0'm'\u3001'f'\u3001'e'\u306E\u6307\u5B9A\u3068\u540C\u3058\u9806\u756A\u3067\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n\n\u4F8B1: 2\u3064\u306E\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30FC\u30AB\u30A4\u30D6classes.jar\u306B\u4FDD\u5B58\u3059\u308B:\n jar cvf classes.jar Foo.class Bar.class\n\u4F8B2: \u65E2\u5B58\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB'mymanifest'\u3092\u4F7F\u7528\u3057\u3001foo/\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\n \u5168\u30D5\u30A1\u30A4\u30EB\u3092'classes.jar'\u306B\u30A2\u30FC\u30AB\u30A4\u30D6\u3059\u308B:\n jar cvfm classes.jar mymanifest -C foo/ \n +usage=\u4F7F\u7528\u65B9\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u30AA\u30D7\u30B7\u30E7\u30F3:\n -c \u30A2\u30FC\u30AB\u30A4\u30D6\u3092\u65B0\u898F\u4F5C\u6210\u3059\u308B\n -t \u30A2\u30FC\u30AB\u30A4\u30D6\u306E\u5185\u5BB9\u3092\u4E00\u89A7\u8868\u793A\u3059\u308B\n -x \u6307\u5B9A\u306E(\u307E\u305F\u306F\u3059\u3079\u3066\u306E)\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u304B\u3089\u62BD\u51FA\u3059\u308B\n -u \u65E2\u5B58\u30A2\u30FC\u30AB\u30A4\u30D6\u3092\u66F4\u65B0\u3059\u308B\n -v \u6A19\u6E96\u51FA\u529B\u306B\u8A73\u7D30\u306A\u51FA\u529B\u3092\u751F\u6210\u3059\u308B\n -f \u30A2\u30FC\u30AB\u30A4\u30D6\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u6307\u5B9A\u3059\u308B\n -m \u6307\u5B9A\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u60C5\u5831\u3092\u53D6\u308A\u8FBC\u3080\n -e \u5B9F\u884C\u53EF\u80FDjar\u30D5\u30A1\u30A4\u30EB\u306B\u30D0\u30F3\u30C9\u30EB\u3055\u308C\u305F\u30B9\u30BF\u30F3\u30C9\u30A2\u30ED\u30F3\u30FB\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\n \u30A8\u30F3\u30C8\u30EA\u30FB\u30DD\u30A4\u30F3\u30C8\u3092\u6307\u5B9A\u3059\u308B\n -0 \u683C\u7D0D\u306E\u307F\u3002ZIP\u5727\u7E2E\u3092\u4F7F\u7528\u3057\u306A\u3044\n -M \u30A8\u30F3\u30C8\u30EA\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u4F5C\u6210\u3057\u306A\u3044\n -i \u6307\u5B9A\u306Ejar\u30D5\u30A1\u30A4\u30EB\u306E\u7D22\u5F15\u60C5\u5831\u3092\u751F\u6210\u3059\u308B\n -C \u6307\u5B9A\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306B\u5909\u66F4\u3057\u3001\u4EE5\u4E0B\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u53D6\u308A\u8FBC\u3080\n\u30D5\u30A1\u30A4\u30EB\u304C\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u5834\u5408\u306F\u518D\u5E30\u7684\u306B\u51E6\u7406\u3055\u308C\u307E\u3059\u3002\n\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u3001\u30A2\u30FC\u30AB\u30A4\u30D6\u30FB\u30D5\u30A1\u30A4\u30EB\u540D\u304A\u3088\u3073\u30A8\u30F3\u30C8\u30EA\u30FB\u30DD\u30A4\u30F3\u30C8\u540D\u306F\u3001\n\u30D5\u30E9\u30B0'm'\u3001'f'\u3001'e'\u306E\u6307\u5B9A\u3068\u540C\u3058\u9806\u756A\u3067\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\n\n\u4F8B1: 2\u3064\u306E\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30FC\u30AB\u30A4\u30D6classes.jar\u306B\u4FDD\u5B58\u3059\u308B:\n jar cvf classes.jar Foo.class Bar.class\n\u4F8B2: \u65E2\u5B58\u306E\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB'mymanifest'\u3092\u4F7F\u7528\u3057\u3001foo/\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\n \u5168\u30D5\u30A1\u30A4\u30EB\u3092'classes.jar'\u306B\u30A2\u30FC\u30AB\u30A4\u30D6\u3059\u308B:\n jar cvfm classes.jar mymanifest -C foo/ .\n ---- jdk/src/share/classes/sun/tools/jar/resources/jar_ko.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_ko.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar_ko.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_ko.properties 2014-01-18 12:16:28.000000000 -0800 @@ -34,14 +34,14 @@ error.create.dir={0}: \uB514\uB809\uD1A0\uB9AC\uB97C \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. error.incorrect.length=\uCC98\uB9AC \uC911 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 \uAE38\uC774\uAC00 \uBC1C\uACAC\uB428: {0} @@ -41389,8 +70797,8 @@ -usage=\uC0AC\uC6A9\uBC95: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\uC635\uC158:\n -c \uC0C8 \uC544\uCE74\uC774\uBE0C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -t \uC544\uCE74\uC774\uBE0C\uC5D0 \uB300\uD55C \uBAA9\uCC28\uB97C \uB098\uC5F4\uD569\uB2C8\uB2E4.\n -x \uBA85\uBA85\uB41C(\uB610\uB294 \uBAA8\uB4E0) \uD30C\uC77C\uC744 \uC544\uCE74\uC774\uBE0C\uC5D0\uC11C \uCD94\uCD9C\uD569\uB2C8\uB2E4.\n -u \uAE30\uC874 \uC544\uCE74\uC774\uBE0C\uB97C \uAC31\uC2E0\uD569\uB2C8\uB2E4.\n -v \uD45C\uC900 \uCD9C\uB825\uC5D0 \uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -f \uC544\uCE74\uC774\uBE0C \uD30C\uC77C \uC774\uB984\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n -m \uC9C0\uC815\uB41C Manifest \uD30C\uC77C\uC758 Manifest \uC815\uBCF4\uB97C \uD3EC\uD568\uD569\uB2C8\uB2E4.\n -e jar \uC2E4\uD589 \uD30C\uC77C\uC5D0 \uBC88\uB4E4\uB85C \uC81C\uACF5\uB41C \uB3C5\uB9BD\uD615 \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8\uC758 \n \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8 \uC2DC\uC791 \uC9C0\uC810\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n -0 \uC800\uC7A5 \uC804\uC6A9: ZIP \uC555\uCD95\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -M \uD56D\uBAA9\uC5D0 \uB300\uD574 Manifest \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -i \uC9C0\uC815\uB41C jar \uD30C\uC77C\uC5D0 \uB300\uD55C \uC778\uB371\uC2A4 \uC815\uBCF4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -C \uC9C0\uC815\uB41C \uB514\uB809\uD1A0\uB9AC\uB85C \uBCC0\uACBD\uD558\uACE0 \uB2E4\uC74C \uD30C\uC77C\uC744 \uD3EC\uD568\uD569\uB2C8\uB2E4.\n\uD2B9\uC815 \uD30C\uC77C\uC774 \uB514\uB809\uD1A0\uB9AC\uC77C \uACBD\uC6B0 \uC21C\uD658\uC801\uC73C\uB85C \uCC98\uB9AC\uB429\uB2C8\uB2E4.\nManifest \uD30C\uC77C \uC774\uB984, \uC544\uCE74\uC774\uBE0C \uD30C\uC77C \uC774\uB984 \uBC0F \uC2DC\uC791 \uC9C0\uC810 \uC774\uB984\uC740\n'm', 'f' \uBC0F 'e' \uD50C\uB798\uADF8\uC640 \uB3D9\uC77C\uD55C \uC21C\uC11C\uB85C \uC9C0\uC815\uB429\uB2C8\uB2E4.\n\n\uC608 1: classes.jar\uB77C\uB294 \uC544\uCE74\uC774\uBE0C\uC5D0 \uB450 \uD074\uB798\uC2A4 \uD30C\uC77C\uC744 \uC544\uCE74\uC774\uBE0C\uD558\uB294 \uBC29\uBC95: \n jar cvf classes.jar Foo.class Bar.class \n\uC608 2: \uAE30\uC874 Manifest \uD30C\uC77C 'mymanifest'\uB97C \uC0AC\uC6A9\uD558\uC5EC\n foo/ \uB514\uB809\uD1A0\uB9AC\uC758 \uBAA8\uB4E0 \uD30C\uC77C\uC744 'classes.jar'\uB85C \uC544\uCE74\uC774\uBE0C\uD558\uB294 \uBC29\uBC95: \n jar cvfm classes.jar mymanifest -C foo/ .\n +usage=\uC0AC\uC6A9\uBC95: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\uC635\uC158:\n -c \uC0C8 \uC544\uCE74\uC774\uBE0C\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -t \uC544\uCE74\uC774\uBE0C\uC5D0 \uB300\uD55C \uBAA9\uCC28\uB97C \uB098\uC5F4\uD569\uB2C8\uB2E4.\n -x \uBA85\uBA85\uB41C(\uB610\uB294 \uBAA8\uB4E0) \uD30C\uC77C\uC744 \uC544\uCE74\uC774\uBE0C\uC5D0\uC11C \uCD94\uCD9C\uD569\uB2C8\uB2E4.\n -u \uAE30\uC874 \uC544\uCE74\uC774\uBE0C\uB97C \uC5C5\uB370\uC774\uD2B8\uD569\uB2C8\uB2E4.\n -v \uD45C\uC900 \uCD9C\uB825\uC5D0 \uC0C1\uC138 \uC815\uBCF4 \uCD9C\uB825\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -f \uC544\uCE74\uC774\uBE0C \uD30C\uC77C \uC774\uB984\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n -m \uC9C0\uC815\uB41C Manifest \uD30C\uC77C\uC758 Manifest \uC815\uBCF4\uB97C \uD3EC\uD568\uD569\uB2C8\uB2E4.\n -e jar \uC2E4\uD589 \uD30C\uC77C\uC5D0 \uBC88\uB4E4\uB85C \uC81C\uACF5\uB41C \uB3C5\uB9BD\uD615 \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8\uC758 \n \uC751\uC6A9 \uD504\uB85C\uADF8\uB7A8 \uC2DC\uC791 \uC9C0\uC810\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4.\n -0 \uC800\uC7A5 \uC804\uC6A9: ZIP \uC555\uCD95\uC744 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -M \uD56D\uBAA9\uC5D0 \uB300\uD574 Manifest \uD30C\uC77C\uC744 \uC0DD\uC131\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n -i \uC9C0\uC815\uB41C jar \uD30C\uC77C\uC5D0 \uB300\uD55C \uC778\uB371\uC2A4 \uC815\uBCF4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n -C \uC9C0\uC815\uB41C \uB514\uB809\uD1A0\uB9AC\uB85C \uBCC0\uACBD\uD558\uACE0 \uB2E4\uC74C \uD30C\uC77C\uC744 \uD3EC\uD568\uD569\uB2C8\uB2E4.\n\uD2B9\uC815 \uD30C\uC77C\uC774 \uB514\uB809\uD1A0\uB9AC\uC77C \uACBD\uC6B0 \uC21C\uD658\uC801\uC73C\uB85C \uCC98\uB9AC\uB429\uB2C8\uB2E4.\nManifest \uD30C\uC77C \uC774\uB984, \uC544\uCE74\uC774\uBE0C \uD30C\uC77C \uC774\uB984 \uBC0F \uC2DC\uC791 \uC9C0\uC810 \uC774\uB984\uC740\n'm', 'f' \uBC0F 'e' \uD50C\uB798\uADF8\uC640 \uB3D9\uC77C\uD55C \uC21C\uC11C\uB85C \uC9C0\uC815\uB429\uB2C8\uB2E4.\n\n\uC608 1: classes.jar\uB77C\uB294 \uC544\uCE74\uC774\uBE0C\uC5D0 \uB450 \uD074\uB798\uC2A4 \uD30C\uC77C\uC744 \uC544\uCE74\uC774\uBE0C\uD558\uB294 \uBC29\uBC95: \n jar cvf classes.jar Foo.class Bar.class \n\uC608 2: \uAE30\uC874 Manifest \uD30C\uC77C 'mymanifest'\uB97C \uC0AC\uC6A9\uD558\uC5EC\n foo/ \uB514\uB809\uD1A0\uB9AC\uC758 \uBAA8\uB4E0 \uD30C\uC77C\uC744 'classes.jar'\uB85C \uC544\uCE74\uC774\uBE0C\uD558\uB294 \uBC29\uBC95: \n jar cvfm classes.jar mymanifest -C foo/ .\n ---- jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties 2014-06-06 19:56:31.000000000 -0700 @@ -37,11 +37,11 @@ out.update.manifest=manifesto atualizado out.ignore.entry=ignorando entrada {0} @@ -41405,25 +70813,26 @@ +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 ---- jdk/src/share/classes/sun/tools/jar/resources/jar_sv.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_sv.properties 2014-04-20 12:39:21.000000000 -0700 +-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/jar/resources/jar_sv.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_sv.properties 2014-01-18 12:16:28.000000000 -0800 @@ -44,4 +44,4 @@ out.inflated=\ uppackat: {0} out.size=(in = {0}) (ut = {1}) -usage=Syntax: jar {ctxui}[vfm0Me] [jar fil] [manifestfil] [startpunkt] [-C-katalog] ...\nAlternativ:\n -c skapa nytt arkiv\n -t lista inneh\u00E5llsf\u00F6rteckning f\u00F6r arkiv\n -x extrahera namngivna (eller alla) filer fr\u00E5n arkiv\n -u uppdatera befintligt arkiv\n -v generera utf\u00F6rliga utdata vid standardutmatning\n -f ange arkivfilens namn\n -m inkludera manifestinformation fr\u00E5n angivet manifest\n -e ange programstartpunkt f\u00F6r frist\u00E5ende applikation \n som medf\u00F6ljer i en jar-programfil\n -0 endast lagra (ingen zip-komprimering)\n -M skapa inte n\u00E5gon manifestfil f\u00F6r posterna\n -i generera indexinformation f\u00F6r de angivna jar-filerna\n -C \u00E4ndra till den angivna katalogen och inkludera f\u00F6ljande fil\nOm en fil \u00E4r en katalog bearbetas den rekursivt.\nNamnen p\u00E5 manifestfilen, arkivfilen och startpunkten anges i samma\nordning som m-, f- och e-flaggorna.\n\nExempel 1: S\u00E5 h\u00E4r arkiverar du tv\u00E5 klassfiler i ett arkiv med namnet classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nExempel 2: Anv\u00E4nd en befintlig manifestfil (mymanifest) och arkivera alla\n filer fr\u00E5n katalogen foo/ i classes.jar: \n jar cvfm classes.jar mymanifest -C foo/ .\n +usage=Syntax: jar {ctxui}[vfm0Me] [jar-fil] [manifestfil] [startpunkt] [-C katalog] filer...\nAlternativ:\n -c skapa nytt arkiv\n -t lista inneh\u00E5llsf\u00F6rteckning f\u00F6r arkiv\n -x extrahera namngivna (eller alla) filer fr\u00E5n arkiv\n -u uppdatera befintligt arkiv\n -v generera utf\u00F6rliga utdata vid standardutmatning\n -f ange arkivfilens namn\n -m inkludera manifestinformation fr\u00E5n angivet manifest\n -e ange programstartpunkt f\u00F6r frist\u00E5ende applikation \n som medf\u00F6ljer i en jar-programfil\n -0 endast lagra (ingen zip-komprimering)\n -M skapa inte n\u00E5gon manifestfil f\u00F6r posterna\n -i generera indexinformation f\u00F6r de angivna jar-filerna\n -C \u00E4ndra till den angivna katalogen och inkludera f\u00F6ljande fil\nOm en fil \u00E4r en katalog bearbetas den rekursivt.\nNamnen p\u00E5 manifestfilen, arkivfilen och startpunkten anges i samma\nordning som m-, f- och e-flaggorna.\n\nExempel 1: S\u00E5 h\u00E4r arkiverar du tv\u00E5 klassfiler i ett arkiv med namnet classes.jar: \n jar cvf classes.jar Foo.class Bar.class \nExempel 2: Anv\u00E4nd en befintlig manifestfil (mymanifest) och arkivera alla\n filer fr\u00E5n katalogen foo/ i classes.jar: \n jar cvfm classes.jar mymanifest -C foo/ .\n ---- jdk/src/share/classes/sun/tools/jar/resources/jar_zh_CN.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_zh_CN.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar_zh_CN.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_zh_CN.properties 2014-01-18 12:16:28.000000000 -0800 @@ -44,4 +44,4 @@ out.inflated=\ \u5DF2\u89E3\u538B: {0} out.size=(\u8F93\u5165 = {0}) (\u8F93\u51FA = {1}) -usage=\u7528\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u9009\u9879\u5305\u62EC: \n -c \u521B\u5EFA\u65B0\u7684\u5F52\u6863\u6587\u4EF6\n -t \u5217\u51FA\u5F52\u6863\u76EE\u5F55\n -x \u4ECE\u6863\u6848\u4E2D\u63D0\u53D6\u6307\u5B9A\u7684 (\u6216\u6240\u6709) \u6587\u4EF6\n -u \u66F4\u65B0\u73B0\u6709\u7684\u5F52\u6863\u6587\u4EF6\n -v \u5728\u6807\u51C6\u8F93\u51FA\u4E2D\u751F\u6210\u8BE6\u7EC6\u8F93\u51FA\n -f \u6307\u5B9A\u5F52\u6863\u6587\u4EF6\u540D\n -m \u5305\u542B\u6307\u5B9A\u6E05\u5355\u6587\u4EF6\u4E2D\u7684\u6E05\u5355\u4FE1\u606F\n -e \u4E3A\u6346\u7ED1\u5230\u53EF\u6267\u884C jar \u6587\u4EF6\u7684\u72EC\u7ACB\u5E94\u7528\u7A0B\u5E8F\n \u6307\u5B9A\u5E94\u7528\u7A0B\u5E8F\u5165\u53E3\u70B9\n -0 \u4EC5\u5B58\u50A8; \u4E0D\u4F7F\u7528\u60C5\u51B5\u4EFB\u4F55 ZIP \u538B\u7F29\n -M \u4E0D\u521B\u5EFA\u6761\u76EE\u7684\u6E05\u5355\u6587\u4EF6\n -i \u4E3A\u6307\u5B9A\u7684 jar \u6587\u4EF6\u751F\u6210\u7D22\u5F15\u4FE1\u606F\n -C \u66F4\u6539\u4E3A\u6307\u5B9A\u7684\u76EE\u5F55\u5E76\u5305\u542B\u5176\u4E2D\u7684\u6587\u4EF6\n\u5982\u679C\u6709\u4EFB\u4F55\u76EE\u5F55\u6587\u4EF6, \u5219\u5BF9\u5176\u8FDB\u884C\u9012\u5F52\u5904\u7406\u3002\n\u6E05\u5355\u6587\u4EF6\u540D, \u5F52\u6863\u6587\u4EF6\u540D\u548C\u5165\u53E3\u70B9\u540D\u79F0\u7684\u6307\u5B9A\u987A\u5E8F\n\u4E0E 'm', 'f' \u548C 'e' \u6807\u8BB0\u7684\u6307\u5B9A\u987A\u5E8F\u76F8\u540C\u3002\n\n\u793A\u4F8B 1: \u5C06\u4E24\u4E2A\u7C7B\u6587\u4EF6\u5F52\u6863\u5230\u4E00\u4E2A\u540D\u4E3A classes.jar \u7684\u5F52\u6863\u6587\u4EF6\u4E2D: \n jar cvf classes.jar Foo.class Bar.class \n\u793A\u4F8B 2: \u4F7F\u7528\u73B0\u6709\u7684\u6E05\u5355\u6587\u4EF6 'mymanifest' \u5E76\n \u5C06 foo/ \u76EE\u5F55\u4E2D\u7684\u6240\u6709\u6587\u4EF6\u5F52\u6863\u5230 'classes.jar' \u4E2D: \n jar cvfm classes.jar mymanifest -C foo/\u3002\n +usage=\u7528\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u9009\u9879\u5305\u62EC: \n -c \u521B\u5EFA\u65B0\u7684\u5F52\u6863\u6587\u4EF6\n -t \u5217\u51FA\u5F52\u6863\u76EE\u5F55\n -x \u4ECE\u6863\u6848\u4E2D\u63D0\u53D6\u6307\u5B9A\u7684 (\u6216\u6240\u6709) \u6587\u4EF6\n -u \u66F4\u65B0\u73B0\u6709\u7684\u5F52\u6863\u6587\u4EF6\n -v \u5728\u6807\u51C6\u8F93\u51FA\u4E2D\u751F\u6210\u8BE6\u7EC6\u8F93\u51FA\n -f \u6307\u5B9A\u5F52\u6863\u6587\u4EF6\u540D\n -m \u5305\u542B\u6307\u5B9A\u6E05\u5355\u6587\u4EF6\u4E2D\u7684\u6E05\u5355\u4FE1\u606F\n -e \u4E3A\u6346\u7ED1\u5230\u53EF\u6267\u884C jar \u6587\u4EF6\u7684\u72EC\u7ACB\u5E94\u7528\u7A0B\u5E8F\n \u6307\u5B9A\u5E94\u7528\u7A0B\u5E8F\u5165\u53E3\u70B9\n -0 \u4EC5\u5B58\u50A8; \u4E0D\u4F7F\u7528\u60C5\u51B5\u4EFB\u4F55 ZIP \u538B\u7F29\n -M \u4E0D\u521B\u5EFA\u6761\u76EE\u7684\u6E05\u5355\u6587\u4EF6\n -i \u4E3A\u6307\u5B9A\u7684 jar \u6587\u4EF6\u751F\u6210\u7D22\u5F15\u4FE1\u606F\n -C \u66F4\u6539\u4E3A\u6307\u5B9A\u7684\u76EE\u5F55\u5E76\u5305\u542B\u5176\u4E2D\u7684\u6587\u4EF6\n\u5982\u679C\u6709\u4EFB\u4F55\u76EE\u5F55\u6587\u4EF6, \u5219\u5BF9\u5176\u8FDB\u884C\u9012\u5F52\u5904\u7406\u3002\n\u6E05\u5355\u6587\u4EF6\u540D, \u5F52\u6863\u6587\u4EF6\u540D\u548C\u5165\u53E3\u70B9\u540D\u79F0\u7684\u6307\u5B9A\u987A\u5E8F\n\u4E0E 'm', 'f' \u548C 'e' \u6807\u8BB0\u7684\u6307\u5B9A\u987A\u5E8F\u76F8\u540C\u3002\n\n\u793A\u4F8B 1: \u5C06\u4E24\u4E2A\u7C7B\u6587\u4EF6\u5F52\u6863\u5230\u4E00\u4E2A\u540D\u4E3A classes.jar \u7684\u5F52\u6863\u6587\u4EF6\u4E2D: \n jar cvf classes.jar Foo.class Bar.class \n\u793A\u4F8B 2: \u4F7F\u7528\u73B0\u6709\u7684\u6E05\u5355\u6587\u4EF6 'mymanifest' \u5E76\n \u5C06 foo/ \u76EE\u5F55\u4E2D\u7684\u6240\u6709\u6587\u4EF6\u5F52\u6863\u5230 'classes.jar' \u4E2D: \n jar cvfm classes.jar mymanifest -C foo/ .\n ---- jdk/src/share/classes/sun/tools/jar/resources/jar_zh_TW.properties 2013-09-06 11:28:49.000000000 -0700 -+++ jdk/src/share/classes/sun/tools/jar/resources/jar_zh_TW.properties 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jar/resources/jar_zh_TW.properties 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jar/resources/jar_zh_TW.properties 2014-01-18 12:16:28.000000000 -0800 @@ -41,7 +41,7 @@ out.stored=(\u5132\u5B58 0%) out.create=\ \u5EFA\u7ACB: {0} @@ -41433,8 +70842,280 @@ out.size=\ (\u8B80={0})(\u5BEB={1}) usage=\u7528\u6CD5: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] \u6A94\u6848 ...\n\u9078\u9805:\n -c \u5EFA\u7ACB\u65B0\u7684\u6B78\u6A94\n -t \u5217\u51FA\u6B78\u6A94\u7684\u76EE\u9304\n -x \u5F9E\u6B78\u6A94\u4E2D\u64F7\u53D6\u5DF2\u547D\u540D\u7684 (\u6216\u6240\u6709) \u6A94\u6848\n -u \u66F4\u65B0\u73FE\u6709\u6B78\u6A94\n -v \u5728\u6A19\u6E96\u8F38\u51FA\u4E2D\u7522\u751F\u8A73\u7D30\u8F38\u51FA\n -f \u6307\u5B9A\u6B78\u6A94\u6A94\u6848\u540D\u7A31\n -m \u5305\u542B\u6307\u5B9A\u8CC7\u8A0A\u6E05\u55AE\u4E2D\u7684\u8CC7\u8A0A\u6E05\u55AE\u8CC7\u8A0A\n -e \u70BA\u7368\u7ACB\u61C9\u7528\u7A0B\u5F0F\u6307\u5B9A\u61C9\u7528\u7A0B\u5F0F\u9032\u5165\u9EDE\n \u5DF2\u96A8\u9644\u65BC\u53EF\u57F7\u884C jar \u6A94\u6848\u4E2D\n -0 \u50C5\u5132\u5B58; \u4E0D\u4F7F\u7528 ZIP \u58D3\u7E2E\u65B9\u5F0F\n -M \u4E0D\u70BA\u9805\u76EE\u5EFA\u7ACB\u8CC7\u8A0A\u6E05\u55AE\u6A94\u6848\n -i \u70BA\u6307\u5B9A\u7684 jar \u6A94\u6848\u7522\u751F\u7D22\u5F15\u8CC7\u8A0A\n -C \u8B8A\u66F4\u81F3\u6307\u5B9A\u76EE\u9304\u4E26\u5305\u542B\u5F8C\u9762\u6240\u5217\u7684\u6A94\u6848\n\u5982\u679C\u6709\u4EFB\u4F55\u6A94\u6848\u662F\u76EE\u9304\uFF0C\u5247\u6703\u5C0D\u5176\u9032\u884C\u905E\u8FF4\u8655\u7406\u3002\n\u6E05\u55AE\u6A94\u6848\u540D\u7A31\u3001\u6B78\u6A94\u6A94\u6848\u540D\u7A31\u548C\u9032\u5165\u9EDE\u540D\u7A31\n\u7684\u6307\u5B9A\u9806\u5E8F\u8207\u6307\u5B9A 'm' \u65D7\u6A19\u3001'f' \u65D7\u6A19\u548C 'e' \u65D7\u6A19\u7684\u9806\u5E8F\u76F8\u540C\u3002\n\n\u7BC4\u4F8B 1: \u5C07\u5169\u500B\u985E\u5225\u6A94\u6848\u6B78\u6A94\u81F3\u540D\u70BA classes.jar \u7684\u6B78\u6A94\u4E2D: \n jar cvf classes.jar Foo.class Bar.class\n\u7BC4\u4F8B 2: \u4F7F\u7528\u73FE\u6709\u8CC7\u8A0A\u6E05\u55AE\u6A94\u6848 'mymanifest' \u4E26\u5C07\n foo/ \u76EE\u9304\u4E2D\u7684\u6240\u6709\u6A94\u6848\u6B78\u6A94\u81F3 'classes.jar' \u4E2D: \n jar cvfm classes.jar mymanifest -C foo/ .\n ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/tools/jconsole/Messages.java 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jconsole/Messages.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jconsole/SummaryTab.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:28:49.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jconsole/ThreadTab.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:28:50.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jconsole/VMPanel.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:28:50.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jconsole/resources/messages.properties 2014-06-06 19:56:31.000000000 -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>: <hostname>:<port> OR service:jmx:<protocol>:<sap> ++REMOTE_TF_USAGE=<b>Usage</b>: &<hostname&>:&<port&> OR service:jmx:&<protocol&>:&<sap&> + 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 2013-09-06 11:28:50.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_ja.properties 2014-06-06 19:56:31.000000000 -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>: <hostname>:<port>\u307E\u305F\u306Fservice:jmx:<protocol>:<sap> ++REMOTE_TF_USAGE=<b>\u4F7F\u7528\u65B9\u6CD5</b>: &<hostname&>:&<port&> OR service:jmx:&<protocol&>:&<sap&> + 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 2013-09-06 11:28:50.000000000 -0700 ++++ ./jdk/src/share/classes/sun/tools/jconsole/resources/messages_zh_CN.properties 2014-06-06 19:56:31.000000000 -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>: <hostname>:<port> \u6216 service:jmx:<protocol>:<sap> ++REMOTE_TF_USAGE=<b>\u7528\u6CD5</b>: &<hostname&>:&<port&> \u6216 service:jmx:&<protocol&>:&<sap&> + 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 2013-09-06 11:28:51.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/logging/resources/logging.properties 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:28:52.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/logging/resources/logging_zh_TW.properties 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. @@ -41505,7 +71186,16 @@ {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "Irkutsk Summer Time", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -41514,7 +71204,7 @@ "East Indonesia Summer Time", "EIST"}}, {"Asia/Kabul", new String[] {"Afghanistan Time", "AFT", "Afghanistan Summer Time", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -41524,7 +71214,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"Krasnoyarsk Time", "KRAT", "Krasnoyarsk Summer Time", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -41534,7 +71224,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -41543,7 +71233,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -41552,8 +71251,8 @@ {"MET", new String[] {"Middle Europe Time", "MET", "Middle Europe Summer Time", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_de.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -41733,7 +71432,16 @@ {"Antarctica/Mawson", new String[] {"Mawson Zeit", "MAWT", "Mawson Sommerzeit", "MAWST"}}, {"Antarctica/McMurdo", NZST}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "Irkutsk Sommerzeit", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -41742,7 +71450,7 @@ "Ostindonesische Sommerzeit", "EIST"}}, {"Asia/Kabul", new String[] {"Afghanistanische Zeit", "AFT", "Afghanistanische Sommerzeit", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -41752,7 +71460,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"Krasnojarsker Zeit", "KRAT", "Krasnojarsker Sommerzeit", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -41762,7 +71470,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -41771,7 +71479,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -41780,8 +71497,8 @@ {"MET", new String[] {"Zentraleurop\u00e4ische Zeit", "MET", "Zentraleurop\u00e4ische Sommerzeit", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_es.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -41918,7 +71635,16 @@ {"America/Rosario", AGT}, {"America/Santa_Isabel", PST}, {"America/Santarem", BRT}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "Hora de verano de Irkutsk", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -41927,7 +71653,7 @@ "Hora de verano de Indonesia Oriental", "EIST"}}, {"Asia/Kabul", new String[] {"Hora de Afganist\u00e1n", "AFT", "Hora de verano de Afganist\u00e1n", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -41937,7 +71663,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"Hora de Krasnoyarsk", "KRAT", "Hora de verano de Krasnoyarsk", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -41947,7 +71673,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -616,8 +618,8 @@ +@@ -616,8 +620,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, @@ -41958,7 +71684,7 @@ {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -41967,7 +71693,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -41976,8 +71711,8 @@ {"MET", new String[] {"Hora de Europa Central", "MET", "Hora de verano de Europa Central", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_fr.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -42150,7 +71885,16 @@ {"Antarctica/Mawson", new String[] {"Heure de Mawson", "MAWT", "Heure d'\u00e9t\u00e9 de Mawson", "MAWST"}}, {"Antarctica/McMurdo", NZST}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "Heure d'\u00e9t\u00e9 d'Irkutsk", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -42159,7 +71903,7 @@ "Heure d'\u00e9t\u00e9 d'Indon\u00e9sie orientale", "EIST"}}, {"Asia/Kabul", new String[] {"Heure d'Afghanistan", "AFT", "Heure d'\u00e9t\u00e9 d'Afghanistan", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -42169,7 +71913,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"Heure de Krasno\u00efarsk", "KRAT", "Heure d'\u00e9t\u00e9 de Krasno\u00efarsk", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -42179,7 +71923,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -617,7 +619,7 @@ +@@ -617,7 +621,7 @@ {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, {"Australia/Eucla", new String[] {"Heure standard de l'Australie occidentale (centre)", "CWST", @@ -42188,7 +71932,7 @@ {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -42197,7 +71941,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -42206,8 +71959,8 @@ {"MET", new String[] {"Heure de l'Europe centrale", "MET", "Heure d'\u00e9t\u00e9 de l'Europe centrale", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_it.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -42384,7 +72137,16 @@ {"Antarctica/Mawson", new String[] {"Ora di Mawson", "MAWT", "Ora estiva di Mawson", "MAWST"}}, {"Antarctica/McMurdo", NZST}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "Ora estiva di Irkutsk", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -42393,7 +72155,7 @@ "Ora estiva dell'Indonesia orientale", "EIST"}}, {"Asia/Kabul", new String[] {"Ora dell'Afghanistan", "AFT", "Ora estiva dell'Afghanistan", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -42403,7 +72165,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"Ora di Krasnojarsk", "KRAT", "Ora estiva di Krasnojarsk", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -42413,7 +72175,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -616,8 +618,8 @@ +@@ -616,8 +620,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, @@ -42424,7 +72186,7 @@ {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -42433,7 +72195,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -42442,8 +72213,8 @@ {"MET", new String[] {"Ora dell'Europa centrale", "MET", "Ora estiva dell'Europa centrale", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ja.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -42630,7 +72401,16 @@ {"Antarctica/Mawson", new String[] {"\u30e2\u30fc\u30bd\u30f3\u6642\u9593", "MAWT", "\u30e2\u30fc\u30bd\u30f3\u590f\u6642\u9593", "MAWST"}}, {"Antarctica/McMurdo", NZST}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "\u30a4\u30eb\u30af\u30fc\u30c4\u30af\u590f\u6642\u9593", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -42639,7 +72419,7 @@ "\u6771\u30a4\u30f3\u30c9\u30cd\u30b7\u30a2\u590f\u6642\u9593", "EIST" }}, {"Asia/Kabul", new String[] {"\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3\u6642\u9593", "AFT", "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3\u590f\u6642\u9593", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -42649,7 +72429,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u6642\u9593", "KRAT", "\u30af\u30e9\u30b9\u30ce\u30e4\u30eb\u30b9\u30af\u590f\u6642\u9593", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -42659,7 +72439,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -616,8 +618,8 @@ +@@ -616,8 +620,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, @@ -42670,7 +72450,7 @@ {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -42679,7 +72459,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -42688,8 +72477,8 @@ {"MET", new String[] {"\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u6642\u9593", "MET", "\u4e2d\u90e8\u30e8\u30fc\u30ed\u30c3\u30d1\u590f\u6642\u9593", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_ko.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -42876,7 +72665,16 @@ {"Antarctica/Mawson", new String[] {"\ubaa8\uc2a8 \uc2dc\uac04", "MAWT", "\ubaa8\uc2a8 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MAWST"}}, {"Antarctica/McMurdo", NZST}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "\uc774\ub974\ucfe0\uce20\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -42885,7 +72683,7 @@ "\ub3d9\ubd80 \uc778\ub3c4\ub124\uc2dc\uc544 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "EIST"}}, {"Asia/Kabul", new String[] {"\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4 \uc2dc\uac04", "AFT", "\uc544\ud504\uac00\ub2c8\uc2a4\ud0c4 \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -42895,7 +72693,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc2dc\uac04", "KRAT", "\ud06c\ub77c\uc2a4\ub178\uc57c\ub974\uc2a4\ud06c \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -42905,7 +72703,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -616,8 +618,8 @@ +@@ -616,8 +620,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, @@ -42916,7 +72714,7 @@ {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -42925,7 +72723,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -42934,8 +72741,8 @@ {"MET", new String[] {"\uc911\ubd80 \uc720\ub7fd \uc2dc\uac04", "MET", "\uc911\ubd80 \uc720\ub7fd \uc77c\uad11\uc808\uc57d\uc2dc\uac04", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_pt_BR.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -43123,7 +72930,16 @@ {"Antarctica/Mawson", new String[] {"Fuso hor\u00e1rio de Mawson", "MAWT", "Fuso hor\u00e1rio de ver\u00e3o de Mawson", "MAWST"}}, {"Antarctica/McMurdo", NZST}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "Fuso hor\u00e1rio de ver\u00e3o de Irkutsk", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -43132,7 +72948,7 @@ "Fuso hor\u00e1rio de ver\u00e3o da Indon\u00e9sia Oriental", "EIST"}}, {"Asia/Kabul", new String[] {"Fuso hor\u00e1rio do Afeganist\u00e3o", "AFT", "Fuso hor\u00e1rio de ver\u00e3o do Afeganist\u00e3o", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -43142,7 +72958,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"Fuso hor\u00e1rio de Krasnoyarsk", "KRAT", "Fuso hor\u00e1rio de ver\u00e3o de Krasnoyarsk", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -43152,7 +72968,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -616,8 +618,8 @@ +@@ -616,8 +620,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, @@ -43163,7 +72979,7 @@ {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -43172,7 +72988,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -43181,8 +73006,8 @@ {"MET", new String[] {"Fuso hor\u00e1rio da Europa M\u00e9dia", "MET", "Fuso hor\u00e1rio de ver\u00e3o da Europa M\u00e9dia", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_sv.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -43367,7 +73192,16 @@ {"Antarctica/Mawson", new String[] {"Mawson, normaltid", "MAWT", "Mawson, sommartid", "MAWST"}}, {"Antarctica/McMurdo", NZST}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "Irkutsk, sommartid", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -43376,7 +73210,7 @@ "\u00d6stindonesisk sommartid", "EIST"}}, {"Asia/Kabul", new String[] {"Afghanistan, normaltid", "AFT", "Afghanistan, sommartid", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -43386,7 +73220,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"Krasnojarsk, normaltid", "KRAT", "Krasnojarsk, sommartid", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -43396,7 +73230,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -616,8 +618,8 @@ +@@ -616,8 +620,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, @@ -43407,7 +73241,7 @@ {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -43416,7 +73250,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -43425,8 +73268,8 @@ {"MET", new String[] {"Mellaneuropeisk tid", "MET", "Mellaneuropeisk sommartid", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_CN.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -43613,7 +73456,16 @@ {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u65f6\u95f4", "MAWT", "\u83ab\u68ee\u590f\u4ee4\u65f6", "MAWST"}}, {"Antarctica/McMurdo", NZST}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "\u4f0a\u5c14\u5e93\u6b21\u514b\u590f\u4ee4\u65f6", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -43622,7 +73474,7 @@ "\u4e1c\u5370\u5ea6\u5c3c\u897f\u4e9a\u590f\u4ee4\u65f6", "EIST"}}, {"Asia/Kabul", new String[] {"\u963f\u5bcc\u6c57\u65f6\u95f4", "AFT", "\u963f\u5bcc\u6c57\u590f\u4ee4\u65f6", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -43632,7 +73484,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u65f6\u95f4", "KRAT", "\u514b\u62c9\u65af\u8bfa\u4e9a\u5c14\u65af\u514b\u590f\u4ee4\u65f6", "KRAST"}}, -@@ -586,7 +587,8 @@ +@@ -586,7 +589,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -43642,7 +73494,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -616,8 +618,8 @@ +@@ -616,8 +620,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, @@ -43653,7 +73505,7 @@ {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, -@@ -635,7 +637,7 @@ +@@ -635,7 +639,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -43662,7 +73514,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -753,7 +755,7 @@ +@@ -705,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}, +@@ -753,7 +757,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -43671,8 +73532,8 @@ {"MET", new String[] {"\u4e2d\u6b27\u65f6\u95f4", "MET", "\u4e2d\u6b27\u590f\u4ee4\u65f6", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java 2013-09-06 11:28:53.000000000 -0700 -+++ jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java 2014-04-20 12:39:21.000000000 -0700 +--- ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java 2013-09-06 11:28:53.000000000 -0700 ++++ ./jdk/src/share/classes/sun/util/resources/TimeZoneNames_zh_TW.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. @@ -43859,7 +73720,16 @@ {"Antarctica/Mawson", new String[] {"\u83ab\u68ee\u6642\u9593", "MAWT", "\u83ab\u68ee\u590f\u4ee4\u6642\u9593", "MAWST"}}, {"Antarctica/McMurdo", NZST}, -@@ -527,7 +527,7 @@ +@@ -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}, +@@ -527,7 +529,7 @@ "Irkutsk \u590f\u4ee4\u6642\u9593", "IRKST"}}, {"Asia/Istanbul", EET}, {"Asia/Jakarta", WIT}, @@ -43868,7 +73738,7 @@ "\u6771\u5370\u5ea6\u5c3c\u897f\u4e9e\u590f\u65e5\u6642\u9593", "EIST"}}, {"Asia/Kabul", new String[] {"\u963f\u5bcc\u6c57\u6642\u9593", "AFT", "\u963f\u5bcc\u6c57\u590f\u4ee4\u6642\u9593", "AFST"}}, -@@ -537,7 +537,8 @@ +@@ -537,7 +539,8 @@ {"Asia/Kashgar", CTT}, {"Asia/Kathmandu", NPT}, {"Asia/Katmandu", NPT}, @@ -43878,7 +73748,7 @@ {"Asia/Kolkata", IST}, {"Asia/Krasnoyarsk", new String[] {"\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u6642\u9593", "KRAT", "\u514b\u62c9\u65af\u8afe\u4e9e\u723e\u65af\u514b\u590f\u4ee4\u6642\u9593", "KRAST"}}, -@@ -587,7 +588,8 @@ +@@ -587,7 +590,8 @@ {"Asia/Ulaanbaatar", ULAT}, {"Asia/Ulan_Bator", ULAT}, {"Asia/Urumqi", CTT}, @@ -43888,7 +73758,7 @@ {"Asia/Vientiane", ICT}, {"Asia/Vladivostok", VLAT}, {"Asia/Yakutsk", YAKT}, -@@ -617,8 +619,8 @@ +@@ -617,8 +621,8 @@ {"Australia/Canberra", EST_NSW}, {"Australia/Currie", EST_NSW}, {"Australia/Darwin", DARWIN}, @@ -43899,7 +73769,7 @@ {"Australia/Hobart", TASMANIA}, {"Australia/LHI", LORD_HOWE}, {"Australia/Lindeman", BRISBANE}, -@@ -636,7 +638,7 @@ +@@ -636,7 +640,7 @@ {"Australia/Yancowinna", BROKEN_HILL}, {"BET", BRT}, {"BST", BDT}, @@ -43908,7 +73778,16 @@ {"Brazil/DeNoronha", NORONHA}, {"Brazil/East", BRT}, {"Brazil/West", AMT}, -@@ -754,7 +756,7 @@ +@@ -706,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}, +@@ -754,7 +758,7 @@ {"Jamaica", EST}, {"Japan", JST}, {"Kwajalein", MHT}, @@ -43917,8 +73796,8 @@ {"MET", new String[] {"\u4e2d\u6b50\u6642\u9593", "MET", "\u4e2d\u6b50\u590f\u4ee4\u6642\u9593", "MEST"}}, {"Mexico/BajaNorte", PST}, ---- jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt 2013-09-06 11:28:55.000000000 -0700 -+++ jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt 2013-09-06 11:28:55.000000000 -0700 ++++ ./jdk/src/share/demo/jvmti/compiledMethodLoad/sample.makefile.txt 2014-06-06 19:56:34.000000000 -0700 @@ -38,6 +38,7 @@ # gnumake JDK=<java_home> OSNAME=solaris [OPT=true] [LIBARCH=sparcv9] # gnumake JDK=<java_home> OSNAME=linux [OPT=true] @@ -43957,8 +73836,8 @@ # Common -I options CFLAGS += -I. CFLAGS += -I../agent_util ---- jdk/src/share/demo/jvmti/hprof/hprof_class.c 2013-09-06 11:28:55.000000000 -0700 -+++ jdk/src/share/demo/jvmti/hprof/hprof_class.c 2014-04-20 12:39:17.000000000 -0700 +--- ./jdk/src/share/demo/jvmti/hprof/hprof_class.c 2013-09-06 11:28:55.000000000 -0700 ++++ ./jdk/src/share/demo/jvmti/hprof/hprof_class.c 2013-12-01 11:14:27.000000000 -0800 @@ -527,7 +527,12 @@ jmethodID method; @@ -43987,8 +73866,8 @@ sig = (char *)string_get(info->method[mnum].sig_index); HPROF_ASSERT(sig!=NULL); clazz = class_get_class(env, index); ---- jdk/src/share/demo/jvmti/hprof/hprof_event.c 2013-09-06 11:28:55.000000000 -0700 -+++ jdk/src/share/demo/jvmti/hprof/hprof_event.c 2014-04-20 12:39:17.000000000 -0700 +--- ./jdk/src/share/demo/jvmti/hprof/hprof_event.c 2013-09-06 11:28:55.000000000 -0700 ++++ ./jdk/src/share/demo/jvmti/hprof/hprof_event.c 2013-12-01 11:14:27.000000000 -0800 @@ -195,7 +195,12 @@ HPROF_ASSERT(env!=NULL); @@ -44044,8 +73923,67 @@ (*pstatus) = 0; } } ---- jdk/src/share/lib/security/java.policy 2013-09-06 11:28:57.000000000 -0700 -+++ jdk/src/share/lib/security/java.policy 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/demo/jvmti/hprof/hprof_init.c 2013-09-06 11:28:55.000000000 -0700 ++++ ./jdk/src/share/demo/jvmti/hprof/hprof_init.c 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:28:55.000000000 -0700 ++++ ./jdk/src/share/demo/jvmti/hprof/hprof_md.h 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:28:57.000000000 -0700 ++++ ./jdk/src/share/demo/scripting/jconsole-plugin/src/com/sun/demo/scripting/jconsole/ScriptShellPanel.java 2014-06-06 19:56:31.000000000 -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/lib/security/java.policy 2013-09-06 11:28:57.000000000 -0700 ++++ ./jdk/src/share/lib/security/java.policy 2014-01-18 12:16:29.000000000 -0800 @@ -2,48 +2,51 @@ // Standard extensions get all permissions by default @@ -44133,8 +74071,8 @@ + permission java.util.PropertyPermission "java.vm.name", "read"; }; ---- jdk/src/share/lib/security/java.security-linux 2013-09-06 11:28:57.000000000 -0700 -+++ jdk/src/share/lib/security/java.security-linux 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/lib/security/java.security-linux 2013-09-06 11:28:57.000000000 -0700 ++++ ./jdk/src/share/lib/security/java.security-linux 2014-06-06 19:56:31.000000000 -0700 @@ -128,7 +128,10 @@ com.sun.imageio.,\ com.sun.istack.internal.,\ @@ -44162,8 +74100,8 @@ # Example: # jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048 - ---- jdk/src/share/lib/security/java.security-macosx 2013-09-06 11:28:57.000000000 -0700 -+++ jdk/src/share/lib/security/java.security-macosx 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/lib/security/java.security-macosx 2013-09-06 11:28:57.000000000 -0700 ++++ ./jdk/src/share/lib/security/java.security-macosx 2014-06-06 19:56:31.000000000 -0700 @@ -129,7 +129,10 @@ com.sun.imageio.,\ com.sun.istack.internal.,\ @@ -44191,8 +74129,8 @@ # Example: # jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048 - ---- jdk/src/share/lib/security/java.security-solaris 2013-09-06 11:28:57.000000000 -0700 -+++ jdk/src/share/lib/security/java.security-solaris 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/lib/security/java.security-solaris 2013-09-06 11:28:57.000000000 -0700 ++++ ./jdk/src/share/lib/security/java.security-solaris 2014-06-06 19:56:31.000000000 -0700 @@ -130,7 +130,10 @@ com.sun.imageio.,\ com.sun.istack.internal.,\ @@ -44220,8 +74158,8 @@ # Example: # jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048 -i ---- jdk/src/share/lib/security/java.security-windows 2013-09-06 11:28:57.000000000 -0700 -+++ jdk/src/share/lib/security/java.security-windows 2014-04-20 12:39:18.000000000 -0700 +--- ./jdk/src/share/lib/security/java.security-windows 2013-09-06 11:28:57.000000000 -0700 ++++ ./jdk/src/share/lib/security/java.security-windows 2014-06-06 19:56:31.000000000 -0700 @@ -129,7 +129,10 @@ com.sun.imageio.,\ com.sun.istack.internal.,\ @@ -44249,8 +74187,8 @@ # Example: # jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize < 2048 - ---- jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp 2013-09-06 11:28:57.000000000 -0700 -+++ jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp 2013-09-06 11:28:57.000000000 -0700 ++++ ./jdk/src/share/native/com/sun/java/util/jar/pack/unpack.cpp 2014-04-19 01:27:15.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. @@ -44299,8 +74237,8 @@ // Last resort // (Do not use stdout, since it might be jarout->jarfp.) errstrm = stderr; ---- jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp 2013-09-06 11:28:57.000000000 -0700 -+++ jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp 2013-09-06 11:28:57.000000000 -0700 ++++ ./jdk/src/share/native/com/sun/java/util/jar/pack/zip.cpp 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. @@ -44308,6 +74246,15 @@ * 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,7 @@ + + #endif // End of ZLIB + +-#ifdef sparc ++#ifdef _BIG_ENDIAN + #define SWAP_BYTES(a) \ + ((((a) << 8) & 0xff00) | 0x00ff) & (((a) >> 8) | 0xff00) + #else @@ -340,6 +340,10 @@ struct tm sbuf; (void)memset((void*)&sbuf,0, sizeof(sbuf)); @@ -44328,8 +74275,8 @@ zs.avail_out = (int)deflated.size(); zs.next_in = (uchar*)head.ptr; ---- jdk/src/share/native/com/sun/media/sound/SoundDefs.h 2013-09-06 11:28:58.000000000 -0700 -+++ jdk/src/share/native/com/sun/media/sound/SoundDefs.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/com/sun/media/sound/SoundDefs.h 2013-09-06 11:28:58.000000000 -0700 ++++ ./jdk/src/share/native/com/sun/media/sound/SoundDefs.h 2014-06-06 19:56:34.000000000 -0700 @@ -64,7 +64,7 @@ @@ -44339,8 +74286,23 @@ #include <sys/types.h> #endif ---- jdk/src/share/native/java/lang/Class.c 2013-09-06 11:28:58.000000000 -0700 -+++ jdk/src/share/native/java/lang/Class.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/common/check_code.c 2013-09-06 11:28:58.000000000 -0700 ++++ ./jdk/src/share/native/common/check_code.c 2014-06-06 19:56:34.000000000 -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 2013-09-06 11:28:58.000000000 -0700 ++++ ./jdk/src/share/native/java/lang/Class.c 2014-06-06 19:56:31.000000000 -0700 @@ -70,7 +70,7 @@ {"getProtectionDomain0", "()" PD, (void *)&JVM_GetProtectionDomain}, {"setProtectionDomain0", "(" PD ")V", (void *)&JVM_SetProtectionDomain}, @@ -44350,8 +74312,25 @@ {"getGenericSignature", "()" STR, (void *)&JVM_GetClassSignature}, {"getRawAnnotations", "()" BA, (void *)&JVM_GetClassAnnotations}, {"getConstantPool", "()" CPL, (void *)&JVM_GetClassConstantPool}, ---- jdk/src/share/native/java/lang/fdlibm/include/fdlibm.h 2013-09-06 11:28:58.000000000 -0700 -+++ jdk/src/share/native/java/lang/fdlibm/include/fdlibm.h 2014-04-20 12:39:16.000000000 -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/fdlibm/include/fdlibm.h 2013-09-06 11:28:58.000000000 -0700 ++++ ./jdk/src/share/native/java/lang/fdlibm/include/fdlibm.h 2014-06-06 19:56:34.000000000 -0700 @@ -24,6 +24,9 @@ * questions. */ @@ -44375,8 +74354,53 @@ #ifdef __NEWVALID /* special setup for Sun test regime */ #if defined(i386) || defined(i486) || \ defined(intel) || defined(x86) || defined(arm) || \ ---- jdk/src/share/native/java/net/Inet6Address.c 2013-09-06 11:28:58.000000000 -0700 -+++ jdk/src/share/native/java/net/Inet6Address.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/java/lang/ref/Finalizer.c 2013-09-06 11:28:58.000000000 -0700 ++++ ./jdk/src/share/native/java/lang/ref/Finalizer.c 1969-12-31 16:00:00.000000000 -0800 +@@ -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/java/net/Inet6Address.c 2013-09-06 11:28:58.000000000 -0700 ++++ ./jdk/src/share/native/java/net/Inet6Address.c 2013-12-01 11:14:28.000000000 -0800 @@ -33,6 +33,8 @@ */ @@ -44418,8 +74442,8 @@ CHECK_NULL(ia6_scopeifnamesetID); ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "<init>", "()V"); CHECK_NULL(ia6_ctrID); ---- jdk/src/share/native/java/net/net_util.c 2013-09-06 11:28:58.000000000 -0700 -+++ jdk/src/share/native/java/net/net_util.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/java/net/net_util.c 2013-09-06 11:28:58.000000000 -0700 ++++ ./jdk/src/share/native/java/net/net_util.c 2013-12-01 11:14:28.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. @@ -44581,8 +74605,8 @@ if (NET_IsEqual(caddrNew, caddrCur) && cmpScopeID(scope, him)) { return JNI_TRUE; } else { ---- jdk/src/share/native/java/net/net_util.h 2013-09-06 11:28:58.000000000 -0700 -+++ jdk/src/share/native/java/net/net_util.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/java/net/net_util.h 2013-09-06 11:28:58.000000000 -0700 ++++ ./jdk/src/share/native/java/net/net_util.h 2013-12-01 11:14:28.000000000 -0800 @@ -58,6 +58,22 @@ extern jfieldID iac_hostNameID; extern jfieldID ia_preferIPv6AddressID; @@ -44614,8 +74638,8 @@ extern jfieldID ia6_ipaddressID; extern jfieldID ia6_scopeidID; extern jfieldID ia6_cachedscopeidID; ---- jdk/src/share/native/sun/awt/giflib/dgif_lib.c 2013-09-06 11:28:59.000000000 -0700 -+++ jdk/src/share/native/sun/awt/giflib/dgif_lib.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/giflib/dgif_lib.c 2013-09-06 11:28:59.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/giflib/dgif_lib.c 2014-04-19 01:27:15.000000000 -0700 @@ -435,9 +435,7 @@ Private->PixelCount = (long)GifFile->Image.Width * (long)GifFile->Image.Height; @@ -44627,8 +74651,8 @@ } /****************************************************************************** ---- jdk/src/share/native/sun/awt/image/awt_parseImage.c 2013-09-06 11:28:59.000000000 -0700 -+++ jdk/src/share/native/sun/awt/image/awt_parseImage.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/image/awt_parseImage.c 2013-09-06 11:28:59.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/image/awt_parseImage.c 2013-12-01 11:14:29.000000000 -0800 @@ -808,363 +808,204 @@ return 1; } @@ -45119,8 +75143,8 @@ + + return 1; } ---- jdk/src/share/native/sun/awt/image/awt_parseImage.h 2013-09-06 11:28:59.000000000 -0700 -+++ jdk/src/share/native/sun/awt/image/awt_parseImage.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/image/awt_parseImage.h 2013-09-06 11:28:59.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/image/awt_parseImage.h 2013-12-01 11:14:29.000000000 -0800 @@ -188,13 +188,8 @@ void awt_freeParsedImage(BufImageS_t *imageP, int freeImageP); @@ -45138,8 +75162,8 @@ +int awt_setPixels(JNIEnv *env, RasterS_t *rasterP, void *bufferP); #endif /* AWT_PARSE_IMAGE_H */ ---- jdk/src/share/native/sun/awt/image/gif/gifdecoder.c 2013-09-06 11:28:59.000000000 -0700 -+++ jdk/src/share/native/sun/awt/image/gif/gifdecoder.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/image/gif/gifdecoder.c 2013-09-06 11:28:59.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/image/gif/gifdecoder.c 2014-04-19 01:27:15.000000000 -0700 @@ -249,6 +249,7 @@ /* fill the block */ len = (*env)->CallIntMethod(env, this, readID, @@ -45148,8 +75172,8 @@ if ((*env)->ExceptionOccurred(env)) { return 0; } ---- jdk/src/share/native/sun/awt/image/jpeg/imageioJPEG.c 2013-09-06 11:28:59.000000000 -0700 -+++ jdk/src/share/native/sun/awt/image/jpeg/imageioJPEG.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/image/jpeg/imageioJPEG.c 2013-09-06 11:28:59.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/image/jpeg/imageioJPEG.c 2014-04-19 01:27:15.000000000 -0700 @@ -930,14 +930,18 @@ * Now fill a complete buffer, or as much of one as the stream * will give us if we are near the end. @@ -45245,8 +75269,8 @@ if (bandSize[i] != JPEG_BAND_SIZE) { if (scale == NULL) { scale = (UINT8**) calloc(numBands, sizeof(UINT8*)); ---- jdk/src/share/native/sun/awt/image/jpeg/jdmarker.c 2013-09-06 11:28:59.000000000 -0700 -+++ jdk/src/share/native/sun/awt/image/jpeg/jdmarker.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/image/jpeg/jdmarker.c 2013-09-06 11:28:59.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/image/jpeg/jdmarker.c 2014-04-19 01:27:15.000000000 -0700 @@ -349,6 +349,12 @@ TRACEMS3(cinfo, 1, JTRC_SOS_COMPONENT, cc, @@ -45260,8 +75284,8 @@ } /* Collect the additional scan parameters Ss, Se, Ah/Al. */ ---- jdk/src/share/native/sun/awt/image/jpeg/jpegdecoder.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/image/jpeg/jpegdecoder.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/image/jpeg/jpegdecoder.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/image/jpeg/jpegdecoder.c 2014-04-19 01:27:15.000000000 -0700 @@ -289,6 +289,7 @@ buflen = (*env)->GetArrayLength(env, src->hInputBuffer); ret = (*env)->CallIntMethod(env, src->hInputStream, InputStream_readID, @@ -45286,8 +75310,8 @@ if ((*env)->ExceptionOccurred(env)) { cinfo->err->error_exit((struct jpeg_common_struct *) cinfo); } ---- jdk/src/share/native/sun/awt/libpng/pngrtran.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/libpng/pngrtran.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/libpng/pngrtran.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/libpng/pngrtran.c 2014-04-19 01:27:15.000000000 -0700 @@ -1862,6 +1862,9 @@ info_ptr->bit_depth = 8; @@ -45298,8 +75322,8 @@ } else { ---- jdk/src/share/native/sun/awt/libpng/pngset.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/libpng/pngset.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/libpng/pngset.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/libpng/pngset.c 2014-04-19 01:27:15.000000000 -0700 @@ -512,6 +512,17 @@ } } @@ -45318,8 +75342,8 @@ /* It may not actually be necessary to set png_ptr->palette here; * we do it for backward compatibility with the way the png_handle_tRNS * function used to do the allocation. ---- jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/awt_ImagingLib.c 2014-04-19 01:27:15.000000000 -0700 @@ -228,6 +228,49 @@ } } @@ -45747,8 +75771,8 @@ } } else { ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageConv2x2_f.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv2x2_f.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv2x2_f.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv2x2_f.c 2014-06-06 19:56:34.000000000 -0700 @@ -86,7 +86,7 @@ #endif /* MLIB_USE_FTOI_CLAMPING */ @@ -45788,8 +75812,8 @@ #endif /* _NO_LONGLONG */ ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16ext.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16ext.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16ext.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16ext.c 2014-06-06 19:56:34.000000000 -0700 @@ -126,7 +126,7 @@ #define D2I(x) CLAMP_S32((x) SAT_OFF) @@ -45829,8 +75853,8 @@ #endif /* _NO_LONGLONG */ /***************************************************************/ ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16nw.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16nw.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16nw.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_16nw.c 2014-06-06 19:56:34.000000000 -0700 @@ -94,7 +94,7 @@ #define D2I(x) CLAMP_S32((x) SAT_OFF) @@ -45870,8 +75894,8 @@ #endif /* _NO_LONGLONG */ /***************************************************************/ ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8ext.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8ext.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8ext.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8ext.c 2014-06-06 19:56:34.000000000 -0700 @@ -126,7 +126,7 @@ #define D2I(x) CLAMP_S32((x) SAT_OFF) @@ -45911,8 +75935,8 @@ #endif /* _NO_LONGLONG */ /***************************************************************/ ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8nw.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8nw.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8nw.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_8nw.c 2014-06-06 19:56:34.000000000 -0700 @@ -95,7 +95,7 @@ #define D2I(x) CLAMP_S32((x) SAT_OFF) @@ -45952,8 +75976,8 @@ #endif /* _NO_LONGLONG */ /***************************************************************/ ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16ext.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16ext.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16ext.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16ext.c 2014-06-06 19:56:34.000000000 -0700 @@ -126,7 +126,7 @@ #define D2I(x) CLAMP_S32((x) SAT_OFF) @@ -45993,8 +76017,8 @@ #endif /* _NO_LONGLONG */ /***************************************************************/ ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16nw.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16nw.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16nw.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageConv_u16nw.c 2014-06-06 19:56:34.000000000 -0700 @@ -94,7 +94,7 @@ #define D2I(x) CLAMP_S32((x) SAT_OFF) @@ -46034,8 +76058,8 @@ #endif /* _NO_LONGLONG */ /***************************************************************/ ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageCopy_Bit.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageCopy_Bit.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageCopy_Bit.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageCopy_Bit.c 2014-06-06 19:56:34.000000000 -0700 @@ -95,7 +95,7 @@ dst = dp[0]; if (ld_offset + size < 32) { @@ -46255,8 +76279,8 @@ } #else /* _LONGLONG */ ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_64.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_64.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_64.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_64.c 2014-06-06 19:56:34.000000000 -0700 @@ -168,7 +168,7 @@ } @@ -46537,8 +76561,8 @@ dp[12] = t0; dp[13] = t1; dp[14] = t2; ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_Bit.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_Bit.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_Bit.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageLookUp_Bit.c 2014-06-06 19:56:34.000000000 -0700 @@ -88,7 +88,7 @@ } d64_2_f32; @@ -46690,8 +76714,8 @@ ((mlib_u32*)lh)[0] = l; ((mlib_u32*)lh)[1] = l; ((mlib_u32*)lh)[2] = l; ((mlib_u32*)lh)[3] = h; ---- jdk/src/share/native/sun/awt/medialib/mlib_ImageUtils.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_ImageUtils.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_ImageUtils.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_ImageUtils.c 2014-06-06 19:56:34.000000000 -0700 @@ -30,7 +30,7 @@ typedef union { mlib_d64 db; @@ -46701,8 +76725,8 @@ mlib_s32 int1, int0; #else mlib_s32 int0, int1; ---- jdk/src/share/native/sun/awt/medialib/mlib_c_ImageCopy.c 2013-09-06 11:29:00.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_c_ImageCopy.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_c_ImageCopy.c 2013-09-06 11:29:00.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_c_ImageCopy.c 2014-06-06 19:56:34.000000000 -0700 @@ -275,11 +275,11 @@ for (i = 0; j <= (b_size - 4); j += 4, i++) { src0 = src1; @@ -46801,8 +76825,8 @@ s0 = s1; dp += SIZE; sp += SIZE; ---- jdk/src/share/native/sun/awt/medialib/mlib_c_ImageLookUp_f.c 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_c_ImageLookUp_f.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_c_ImageLookUp_f.c 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_c_ImageLookUp_f.c 2014-06-06 19:56:34.000000000 -0700 @@ -120,7 +120,7 @@ } \ } @@ -48035,8 +78059,8 @@ dp[12] = t0; dp[13] = t1; dp[14] = t2; ---- jdk/src/share/native/sun/awt/medialib/mlib_image.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_image.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_image.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_image.h 2014-06-06 19:56:34.000000000 -0700 @@ -27,9 +27,21 @@ #ifndef MLIB_IMAGE_H #define MLIB_IMAGE_H @@ -48060,8 +78084,8 @@ #include <mlib_types.h> #include <mlib_status.h> #include <mlib_sys.h> ---- jdk/src/share/native/sun/awt/medialib/mlib_sys.c 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_sys.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_sys.c 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_sys.c 2014-06-06 19:56:34.000000000 -0700 @@ -26,7 +26,7 @@ #include <stdlib.h> @@ -48083,8 +78107,8 @@ return valloc(size); #else return (void *) memalign(8, size); ---- jdk/src/share/native/sun/awt/medialib/mlib_types.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/awt/medialib/mlib_types.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/medialib/mlib_types.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/medialib/mlib_types.h 2014-06-06 19:56:34.000000000 -0700 @@ -59,7 +59,7 @@ #if defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__GNUC__) @@ -48094,8 +78118,8 @@ #include <stddef.h> /* for ptrdiff_t */ #include <stdint.h> /* for uintptr_t */ #elif defined(__linux__) ---- jdk/src/share/native/sun/awt/splashscreen/splashscreen_impl.c 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/awt/splashscreen/splashscreen_impl.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/awt/splashscreen/splashscreen_impl.c 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/awt/splashscreen/splashscreen_impl.c 2014-01-18 12:16:22.000000000 -0800 @@ -111,8 +111,9 @@ int SplashIsStillLooping(Splash * splash) @@ -48166,8 +78190,8 @@ i0 = i; while (i < pSrcRect->numSamples && getRGBA(pSrc, pSrcRect->format) >= ALPHA_THRESHOLD) { ---- jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -55,7 +55,7 @@ (const AlternateSetTable *) ((char *) this + alternateSetTableOffset)); TTGlyphID alternate = SWAPW(alternateSetTable->alternateArray[0]); @@ -48177,8 +78201,8 @@ glyphIterator->setCurrGlyphID(SWAPW(alternateSetTable->alternateArray[0])); } ---- jdk/src/share/native/sun/font/layout/AnchorTables.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/AnchorTables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/AnchorTables.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/AnchorTables.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -37,55 +37,54 @@ U_NAMESPACE_BEGIN @@ -48281,8 +78305,8 @@ pixels.fY += adjy; } ---- jdk/src/share/native/sun/font/layout/AnchorTables.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/AnchorTables.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/AnchorTables.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/AnchorTables.h 2014-01-18 12:16:22.000000000 -0800 @@ -49,20 +49,23 @@ le_int16 xCoordinate; le_int16 yCoordinate; @@ -48322,8 +78346,8 @@ }; U_NAMESPACE_END ---- jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -51,7 +51,7 @@ U_NAMESPACE_BEGIN @@ -48355,8 +78379,8 @@ /* OpenTypeLayoutEngine will allocate a substitution filter */ } ---- jdk/src/share/native/sun/font/layout/ArabicShaping.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ArabicShaping.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ArabicShaping.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ArabicShaping.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -59,7 +59,8 @@ ArabicShaping::ShapeType ArabicShaping::getShapeType(LEUnicode c) { @@ -48367,8 +78391,8 @@ ArabicShaping::shapingTypeTableLen); le_int32 joiningType = joiningTypes->getGlyphClass(joiningTypes, c, success); ---- jdk/src/share/native/sun/font/layout/CanonShaping.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/CanonShaping.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/CanonShaping.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/CanonShaping.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -60,7 +60,7 @@ LEUnicode *outChars, LEGlyphStorage &glyphStorage) { @@ -48378,8 +78402,8 @@ LEReferenceTo<ClassDefinitionTable> classTable = gdefTable->getMarkAttachClassDefinitionTable(gdefTable, success); le_int32 *combiningClasses = LE_NEW_ARRAY(le_int32, charCount); le_int32 *indices = LE_NEW_ARRAY(le_int32, charCount); ---- jdk/src/share/native/sun/font/layout/CharSubstitutionFilter.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/CharSubstitutionFilter.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/CharSubstitutionFilter.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/CharSubstitutionFilter.h 2014-01-18 12:16:22.000000000 -0800 @@ -43,6 +43,8 @@ * This filter is used by character-based GSUB processors. It * accepts only those characters which the given font can display. @@ -48398,8 +78422,8 @@ }; U_NAMESPACE_END ---- jdk/src/share/native/sun/font/layout/ClassDefinitionTables.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ClassDefinitionTables.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ClassDefinitionTables.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ClassDefinitionTables.h 2014-01-18 12:16:22.000000000 -0800 @@ -49,6 +49,7 @@ le_int32 getGlyphClass(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const; le_bool hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const; @@ -48416,8 +78440,8 @@ }; struct ClassDefFormat1Table : ClassDefinitionTable ---- jdk/src/share/native/sun/font/layout/ContextualGlyphSubstProc2.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ContextualGlyphSubstProc2.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ContextualGlyphSubstProc2.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ContextualGlyphSubstProc2.cpp 2014-04-19 01:27:12.000000000 -0700 @@ -154,6 +154,7 @@ TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid); if ((glyphCode >= firstGlyph) && (glyphCode < lastGlyph)) { @@ -48426,8 +78450,8 @@ newGlyph = SWAPW(valueArray(glyphCode - firstGlyph, success)); } } ---- jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.cpp 2014-04-19 01:27:12.000000000 -0700 @@ -48,7 +48,7 @@ */ void ContextualSubstitutionBase::applySubstitutionLookups( @@ -48949,8 +78973,8 @@ ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success); ---- jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ContextualSubstSubtables.h 2014-01-18 12:16:22.000000000 -0800 @@ -56,20 +56,32 @@ struct ContextualSubstitutionBase : GlyphSubstitutionSubtable { @@ -49066,8 +79090,8 @@ }; LE_VAR_ARRAY(ChainingContextualSubstitutionFormat3Subtable, backtrackCoverageTableOffsetArray) ---- jdk/src/share/native/sun/font/layout/CoverageTables.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/CoverageTables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/CoverageTables.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/CoverageTables.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -37,8 +37,10 @@ U_NAMESPACE_BEGIN @@ -49146,8 +79170,8 @@ return -1; } ---- jdk/src/share/native/sun/font/layout/CoverageTables.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/CoverageTables.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/CoverageTables.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/CoverageTables.h 2014-01-18 12:16:22.000000000 -0800 @@ -46,7 +46,7 @@ { le_uint16 coverageFormat; @@ -49175,8 +79199,8 @@ }; LE_VAR_ARRAY(CoverageFormat2Table, rangeRecordArray) ---- jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -51,23 +51,27 @@ } @@ -49210,8 +79234,8 @@ } else { //glyphIterator->clearCursiveExitPoint(); } ---- jdk/src/share/native/sun/font/layout/DeviceTables.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/DeviceTables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/DeviceTables.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/DeviceTables.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -43,7 +43,7 @@ #define FORMAT_COUNT LE_ARRAY_SIZE(fieldBits) @@ -49235,8 +79259,8 @@ le_uint16 word = SWAPW(deltaValues[sizeIndex / count]); le_uint16 fieldIndex = sizeIndex % count; le_uint16 shift = 16 - (bits * (fieldIndex + 1)); ---- jdk/src/share/native/sun/font/layout/DeviceTables.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/DeviceTables.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/DeviceTables.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/DeviceTables.h 2014-01-18 12:16:22.000000000 -0800 @@ -50,7 +50,7 @@ le_uint16 deltaFormat; le_uint16 deltaValues[ANY_NUMBER]; @@ -49246,8 +79270,8 @@ private: static const le_uint16 fieldMasks[]; ---- jdk/src/share/native/sun/font/layout/ExtensionSubtables.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ExtensionSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ExtensionSubtables.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ExtensionSubtables.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -48,7 +48,6 @@ const LookupProcessor *lookupProcessor, le_uint16 lookupType, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const @@ -49256,8 +79280,8 @@ if (LE_FAILURE(success)) { return 0; } ---- jdk/src/share/native/sun/font/layout/ExtensionSubtables.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ExtensionSubtables.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ExtensionSubtables.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ExtensionSubtables.h 2014-01-18 12:16:22.000000000 -0800 @@ -52,8 +52,7 @@ le_uint16 extensionLookupType; le_uint32 extensionOffset; @@ -49268,8 +79292,8 @@ GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const; }; ---- jdk/src/share/native/sun/font/layout/GDEFMarkFilter.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/GDEFMarkFilter.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/GDEFMarkFilter.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/GDEFMarkFilter.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -49,9 +49,9 @@ // nothing to do? } @@ -49282,8 +79306,8 @@ return glyphClass == gcdMarkGlyph; } ---- jdk/src/share/native/sun/font/layout/GDEFMarkFilter.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/GDEFMarkFilter.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/GDEFMarkFilter.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/GDEFMarkFilter.h 2014-01-18 12:16:22.000000000 -0800 @@ -55,7 +55,7 @@ GDEFMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success); virtual ~GDEFMarkFilter(); @@ -49293,8 +79317,8 @@ }; U_NAMESPACE_END ---- jdk/src/share/native/sun/font/layout/GlyphIterator.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/GlyphIterator.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/GlyphIterator.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/GlyphIterator.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -41,14 +41,13 @@ U_NAMESPACE_BEGIN @@ -49442,8 +79466,8 @@ } le_bool GlyphIterator::hasFeatureTag(le_bool matchGroup) const ---- jdk/src/share/native/sun/font/layout/GlyphIterator.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/GlyphIterator.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/GlyphIterator.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/GlyphIterator.h 2014-01-18 12:16:22.000000000 -0800 @@ -49,7 +49,7 @@ class GlyphIterator : public UMemory { public: @@ -49477,8 +79501,8 @@ }; U_NAMESPACE_END ---- jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/GlyphPosnLookupProc.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -95,6 +95,8 @@ le_uint32 delta = 0; @@ -49527,8 +79551,8 @@ return delta; } ---- jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/GlyphSubstLookupProc.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -123,7 +123,7 @@ { const LEReferenceTo<ContextualSubstitutionSubtable> subtable(lookupSubtable, success); @@ -49547,8 +79571,8 @@ break; } ---- jdk/src/share/native/sun/font/layout/IndicLayoutEngine.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/IndicLayoutEngine.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/IndicLayoutEngine.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/IndicLayoutEngine.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -44,7 +44,7 @@ #include "LEGlyphStorage.h" @@ -49601,8 +79625,8 @@ outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups, success); } ---- jdk/src/share/native/sun/font/layout/KernTable.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/KernTable.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/KernTable.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/KernTable.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -39,7 +39,7 @@ #include <stdio.h> @@ -49670,8 +79694,8 @@ fprintf(stdout, "binary found kerning pair %x:%x at %d, value: 0x%x (%g)\n", storage[i-1], storage[i], i, value & 0xffff, font->xUnitsToPoints(value)); fflush(stdout); ---- jdk/src/share/native/sun/font/layout/LEFontInstance.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LEFontInstance.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LEFontInstance.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LEFontInstance.h 2014-01-18 12:16:22.000000000 -0800 @@ -181,6 +181,10 @@ * * Subclasses which represent composite fonts should always return <code>NULL</code>. @@ -49698,8 +79722,8 @@ #endif - - ---- jdk/src/share/native/sun/font/layout/LEGlyphFilter.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LEGlyphFilter.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LEGlyphFilter.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LEGlyphFilter.h 2014-01-18 12:16:22.000000000 -0800 @@ -62,7 +62,7 @@ * * @internal @@ -49709,8 +79733,8 @@ }; #endif /* U_HIDE_INTERNAL_API */ ---- jdk/src/share/native/sun/font/layout/LEGlyphStorage.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LEGlyphStorage.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LEGlyphStorage.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LEGlyphStorage.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -458,7 +458,7 @@ success = LE_INDEX_OUT_OF_BOUNDS_ERROR; return; @@ -49725,15 +79749,15 @@ U_NAMESPACE_END - ---- jdk/src/share/native/sun/font/layout/LEGlyphStorage.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LEGlyphStorage.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LEGlyphStorage.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LEGlyphStorage.h 2014-01-18 12:16:22.000000000 -0800 @@ -568,4 +568,3 @@ U_NAMESPACE_END #endif - ---- jdk/src/share/native/sun/font/layout/LEScripts.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LEScripts.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LEScripts.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LEScripts.h 2014-01-18 12:16:22.000000000 -0800 @@ -30,7 +30,7 @@ * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS * YOU REALLY KNOW WHAT YOU'RE DOING. @@ -49761,8 +79785,8 @@ }; U_NAMESPACE_END ---- jdk/src/share/native/sun/font/layout/LEStandalone.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LEStandalone.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LEStandalone.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LEStandalone.h 2014-01-18 12:16:22.000000000 -0800 @@ -132,6 +132,9 @@ #define uprv_memcpy memcpy #define uprv_realloc realloc @@ -49773,8 +79797,8 @@ #if !defined(U_IS_BIG_ENDIAN) #ifdef _LITTLE_ENDIAN #define U_IS_BIG_ENDIAN 0 ---- jdk/src/share/native/sun/font/layout/LETableReference.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LETableReference.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LETableReference.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LETableReference.h 2014-01-18 12:16:22.000000000 -0800 @@ -38,34 +38,47 @@ #include "LETypes.h" #include "LEFontInstance.h" @@ -50215,8 +80239,8 @@ U_NAMESPACE_END ---- jdk/src/share/native/sun/font/layout/LETypes.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LETypes.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LETypes.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LETypes.h 2014-01-18 12:16:22.000000000 -0800 @@ -337,6 +337,20 @@ typedef struct LEPoint LEPoint; #endif @@ -50276,8 +80300,8 @@ -#endif /* __LETYPES_H */ +#endif ---- jdk/src/share/native/sun/font/layout/LayoutEngine.cpp 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LayoutEngine.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LayoutEngine.cpp 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LayoutEngine.cpp 2014-01-18 12:16:22.000000000 -0800 @@ -156,7 +156,7 @@ CanonMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success); virtual ~CanonMarkFilter(); @@ -50390,8 +80414,8 @@ result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success); break; ---- jdk/src/share/native/sun/font/layout/LayoutEngine.h 2013-09-06 11:29:01.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LayoutEngine.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LayoutEngine.h 2013-09-06 11:29:01.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LayoutEngine.h 2014-01-18 12:16:23.000000000 -0800 @@ -156,8 +156,8 @@ * @param fontInstance - the font for the text * @param scriptCode - the script for the text @@ -50403,8 +80427,8 @@ * @param success - set to an error code if the operation fails * * @see LEFontInstance ---- jdk/src/share/native/sun/font/layout/LigatureSubstProc2.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LigatureSubstProc2.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LigatureSubstProc2.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LigatureSubstProc2.cpp 2014-04-19 01:27:12.000000000 -0700 @@ -95,7 +95,7 @@ if (actionOffset != 0) { @@ -50432,8 +80456,8 @@ while (mm >= 0) { if (++m >= nComponents) { ---- jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp 2014-01-18 12:16:23.000000000 -0800 @@ -49,14 +49,20 @@ return 0; } @@ -50468,8 +80492,8 @@ GlyphIterator tempIterator(*glyphIterator); TTGlyphID deletedGlyph = tempIterator.ignoresMarks()? 0xFFFE : 0xFFFF; ---- jdk/src/share/native/sun/font/layout/LookupProcessor.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/LookupProcessor.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/LookupProcessor.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/LookupProcessor.cpp 2014-04-19 01:27:12.000000000 -0700 @@ -60,8 +60,10 @@ LEReferenceTo<LookupSubtable> lookupSubtable = lookupTable->getLookupSubtable(lookupTable, subtable, success); @@ -50557,8 +80581,8 @@ le_uint16 featureIndex = SWAPW(featureIndexArray.getObject(feature,success)); // don't add the required feature to the list more than once... ---- jdk/src/share/native/sun/font/layout/Lookups.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/Lookups.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/Lookups.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/Lookups.cpp 2014-01-18 12:16:23.000000000 -0800 @@ -65,7 +65,7 @@ if(LE_FAILURE(success)) return 0; @@ -50568,8 +80592,8 @@ } U_NAMESPACE_END ---- jdk/src/share/native/sun/font/layout/MarkArrays.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/MarkArrays.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/MarkArrays.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/MarkArrays.cpp 2014-01-18 12:16:23.000000000 -0800 @@ -38,20 +38,28 @@ U_NAMESPACE_BEGIN @@ -50605,8 +80629,8 @@ markClass = SWAPW(markRecord->markClass); } ---- jdk/src/share/native/sun/font/layout/MarkArrays.h 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/MarkArrays.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/MarkArrays.h 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/MarkArrays.h 2014-01-18 12:16:23.000000000 -0800 @@ -54,8 +54,9 @@ le_uint16 markCount; MarkRecord markRecordArray[ANY_NUMBER]; @@ -50619,8 +80643,8 @@ }; LE_VAR_ARRAY(MarkArray, markRecordArray) ---- jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/MarkToBasePosnSubtables.cpp 2014-04-19 01:27:12.000000000 -0700 @@ -66,11 +66,12 @@ } @@ -50694,8 +80718,8 @@ fontInstance->pixelsToUnits(pixels, baseAdvance); glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - baseAdvance.fX, anchorDiffY - baseAdvance.fY, -markAdvance.fX, -markAdvance.fY); ---- jdk/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/MarkToLigaturePosnSubtables.cpp 2014-01-18 12:16:23.000000000 -0800 @@ -65,8 +65,11 @@ } @@ -50746,8 +80770,8 @@ fontInstance->getGlyphAdvance(markGlyph, pixels); fontInstance->pixelsToUnits(pixels, markAdvance); ---- jdk/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/MarkToMarkPosnSubtables.cpp 2014-01-18 12:16:23.000000000 -0800 @@ -66,8 +66,11 @@ } @@ -50804,8 +80828,8 @@ glyphIterator->setCurrGlyphBaseOffset(mark2Iterator.getCurrStreamPosition()); if (glyphIterator->isRightToLeft()) { ---- jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp 2014-01-18 12:16:23.000000000 -0800 @@ -54,9 +54,10 @@ // FIXME: is this always the right thing to do? // FIXME: should this only be done for a non-zero @@ -50845,8 +80869,8 @@ return 0; } } ---- jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/OpenTypeLayoutEngine.cpp 2014-01-18 12:16:23.000000000 -0800 @@ -470,6 +470,7 @@ void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success) @@ -50881,8 +80905,8 @@ glyphStorage.adjustPosition(i, xAdjust + xPlacement, -(yAdjust + yPlacement), success); xAdjust += fFontInstance->xUnitsToPoints(xAdvance); ---- jdk/src/share/native/sun/font/layout/OpenTypeUtilities.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/OpenTypeUtilities.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/OpenTypeUtilities.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/OpenTypeUtilities.cpp 2014-04-19 01:27:12.000000000 -0700 @@ -80,6 +80,7 @@ Offset OpenTypeUtilities::getTagOffset(LETag tag, const LEReferenceToArrayOf<TagAndOffsetRecord> &records, LEErrorCode &success) { @@ -50924,8 +80948,8 @@ } } ---- jdk/src/share/native/sun/font/layout/OpenTypeUtilities.h 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/OpenTypeUtilities.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/OpenTypeUtilities.h 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/OpenTypeUtilities.h 2014-01-18 12:16:24.000000000 -0800 @@ -46,15 +46,14 @@ public: static le_int8 highBit(le_int32 value); @@ -50944,8 +80968,8 @@ static le_int32 getGlyphRangeIndex(TTGlyphID glyphID, const LEReferenceToArrayOf<GlyphRangeRecord> &records, LEErrorCode &success); static le_int32 search(le_uint16 value, const le_uint16 array[], le_int32 count); static le_int32 search(le_uint32 value, const le_uint32 array[], le_int32 count); ---- jdk/src/share/native/sun/font/layout/PairPositioningSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/PairPositioningSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/PairPositioningSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/PairPositioningSubtables.cpp 2014-01-18 12:16:24.000000000 -0800 @@ -76,19 +76,17 @@ { LEGlyphID firstGlyph = glyphIterator->getCurrGlyphID(); @@ -51083,8 +81107,8 @@ } U_NAMESPACE_END ---- jdk/src/share/native/sun/font/layout/PairPositioningSubtables.h 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/PairPositioningSubtables.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/PairPositioningSubtables.h 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/PairPositioningSubtables.h 2014-01-18 12:16:24.000000000 -0800 @@ -77,9 +77,8 @@ le_uint32 process(const LEReferenceTo<PairPositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const; @@ -51096,8 +81120,8 @@ }; LE_VAR_ARRAY(PairPositioningFormat1Subtable, pairSetTableOffsetArray) ---- jdk/src/share/native/sun/font/layout/ScriptAndLanguage.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguage.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ScriptAndLanguage.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ScriptAndLanguage.cpp 2014-01-18 12:16:24.000000000 -0800 @@ -106,7 +106,8 @@ } } else { @@ -51108,8 +81132,8 @@ } if (scriptTableOffset != 0) { ---- jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.cpp 2014-01-18 12:16:24.000000000 -0800 @@ -126,13 +126,13 @@ linaScriptTag, /* 'lina' (LINA) */ mandScriptTag, /* 'mand' (MANDAIC) */ @@ -51144,8 +81168,8 @@ narbScriptTag, /* 'narb' (NARB) */ nbatScriptTag, /* 'nbat' (NBAT) */ palmScriptTag, /* 'palm' (PALM) */ ---- jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.h 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.h 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ScriptAndLanguageTags.h 2014-01-18 12:16:24.000000000 -0800 @@ -140,13 +140,13 @@ const LETag linaScriptTag = 0x6C696E61; /* 'lina' (LINA) */ const LETag mandScriptTag = 0x6D616E64; /* 'mand' (MANDAIC) */ @@ -51180,8 +81204,8 @@ const LETag narbScriptTag = 0x6E617262; /* 'narb' (NARB) */ const LETag nbatScriptTag = 0x6E626174; /* 'nbat' (NBAT) */ const LETag palmScriptTag = 0x70616C6D; /* 'palm' (PALM) */ ---- jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/SegmentArrayProcessor.cpp 2014-04-19 01:27:12.000000000 -0700 @@ -73,6 +73,7 @@ if (offset != 0) { @@ -51190,8 +81214,8 @@ TTGlyphID newGlyph = SWAPW(glyphArray(LE_GET_GLYPH(thisGlyph) - firstGlyph, success)); glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph); } ---- jdk/src/share/native/sun/font/layout/SegmentArrayProcessor2.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/SegmentArrayProcessor2.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/SegmentArrayProcessor2.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/SegmentArrayProcessor2.cpp 2014-01-18 12:16:24.000000000 -0800 @@ -65,16 +65,17 @@ for (glyph = 0; glyph < glyphCount; glyph += 1) { @@ -51216,8 +81240,8 @@ glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph); } } ---- jdk/src/share/native/sun/font/layout/SinglePositioningSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/SinglePositioningSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/SinglePositioningSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/SinglePositioningSubtables.cpp 2014-01-18 12:16:24.000000000 -0800 @@ -75,7 +75,7 @@ } @@ -51236,8 +81260,8 @@ return 1; } ---- jdk/src/share/native/sun/font/layout/SingleSubstitutionSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/SingleSubstitutionSubtables.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/SingleSubstitutionSubtables.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/SingleSubstitutionSubtables.cpp 2014-01-18 12:16:24.000000000 -0800 @@ -76,7 +76,7 @@ if (coverageIndex >= 0) { TTGlyphID substitute = ((TTGlyphID) LE_GET_GLYPH(glyph)) + SWAPW(deltaGlyphID); @@ -51256,8 +81280,8 @@ glyphIterator->setCurrGlyphID(substitute); } ---- jdk/src/share/native/sun/font/layout/StateTableProcessor.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/StateTableProcessor.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/StateTableProcessor.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/StateTableProcessor.cpp 2014-04-19 01:27:12.000000000 -0700 @@ -97,6 +97,7 @@ LEReferenceToArrayOf<EntryTableIndex> stateArray(stHeader, success, currentState, LE_UNBOUNDED_ARRAY); @@ -51266,8 +81290,8 @@ LE_STATE_PATIENCE_CURR(le_int32, currGlyph); currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex); LE_STATE_PATIENCE_INCR(currGlyph); ---- jdk/src/share/native/sun/font/layout/SunLayoutEngine.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/SunLayoutEngine.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/SunLayoutEngine.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/SunLayoutEngine.cpp 2013-12-01 11:14:30.000000000 -0800 @@ -104,6 +104,10 @@ int putGV(JNIEnv* env, jint gmask, jint baseIndex, jobject gvdata, const LayoutEngine* engine, int glyphCount) { @@ -51279,8 +81303,8 @@ jarray glyphArray = (jarray)env->GetObjectField(gvdata, gvdGlyphsFID); if (IS_NULL(glyphArray)) { ---- jdk/src/share/native/sun/font/layout/TibetanReordering.h 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/TibetanReordering.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/TibetanReordering.h 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/TibetanReordering.h 2014-01-18 12:16:24.000000000 -0800 @@ -39,7 +39,7 @@ */ @@ -51290,8 +81314,8 @@ /** * \file ---- jdk/src/share/native/sun/font/layout/ValueRecords.cpp 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ValueRecords.cpp 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ValueRecords.cpp 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ValueRecords.cpp 2014-01-18 12:16:24.000000000 -0800 @@ -59,8 +59,8 @@ return SWAPW(value); } @@ -51402,8 +81426,8 @@ yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj); } ---- jdk/src/share/native/sun/font/layout/ValueRecords.h 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/font/layout/ValueRecords.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/font/layout/ValueRecords.h 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/font/layout/ValueRecords.h 2014-01-18 12:16:24.000000000 -0800 @@ -53,10 +53,10 @@ le_int16 getFieldValue(ValueFormat valueFormat, ValueRecordField field) const; @@ -51419,8 +81443,8 @@ static le_int16 getSize(ValueFormat valueFormat); ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmscam02.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmscam02.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmscam02.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmscam02.c 2014-04-19 01:27:12.000000000 -0700 @@ -81,7 +81,7 @@ cmsUInt32Number surround; cmsFloat64Number n, Nbb, Ncb, z, FL, D; @@ -51446,8 +81470,8 @@ _cmsAssert(lpMod != NULL); _cmsAssert(pIn != NULL); _cmsAssert(pOut != NULL); ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmscgats.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmscgats.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmscgats.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmscgats.c 2014-04-19 01:27:12.000000000 -0700 @@ -59,8 +59,8 @@ // IT8.7 / CGATS.17-200x handling ----------------------------------------------------------------------------- @@ -51663,8 +81687,8 @@ it8 ->DoubleFormatter[sizeof(it8 ->DoubleFormatter)-1] = 0; } ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmscnvrt.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmscnvrt.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmscnvrt.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmscnvrt.c 2014-04-19 01:27:12.000000000 -0700 @@ -270,7 +270,7 @@ // m2 holds CHAD from output white to D50 times abs. col. scaling @@ -51842,8 +81866,8 @@ if (fl == NULL) return FALSE; } ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmserr.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmserr.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmserr.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmserr.c 2014-04-19 01:27:12.000000000 -0700 @@ -302,8 +302,6 @@ return NULL; } @@ -51853,8 +81877,8 @@ chunk ->BlockSize = Initial; chunk ->Used = 0; chunk ->next = NULL; ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsgamma.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsgamma.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsgamma.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsgamma.c 2014-04-19 01:27:12.000000000 -0700 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // @@ -52009,8 +82033,8 @@ // Seems ok for (i=0; i < nItems; i++) { ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsgmt.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsgmt.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsgmt.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsgmt.c 2014-04-19 01:27:12.000000000 -0700 @@ -249,13 +249,10 @@ cmsFloat64Number dE1, dE2, ErrorRatio; @@ -52114,8 +82138,8 @@ } } else ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsintrp.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsintrp.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsintrp.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsintrp.c 2014-04-19 01:27:12.000000000 -0700 @@ -83,7 +83,6 @@ @@ -52286,8 +82310,8 @@ k0 = _cmsQuickFloor(pk); rest = pk - (cmsFloat32Number) k0; ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsio0.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsio0.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsio0.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsio0.c 2014-04-19 01:27:12.000000000 -0700 @@ -154,7 +154,6 @@ return iohandler; @@ -52726,8 +82750,8 @@ int i; if (!_cmsNewTag(Icc, sig, &i)) return FALSE; ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsio1.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsio1.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsio1.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsio1.c 2014-04-19 01:27:12.000000000 -0700 @@ -129,7 +129,6 @@ Tag = (cmsMAT3*) cmsReadTag(hProfile, cmsSigChromaticAdaptationTag); @@ -53196,8 +83220,8 @@ } // --------------------------------------------------------------------------------------------------------------- ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmslut.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmslut.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmslut.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmslut.c 2014-04-19 01:27:12.000000000 -0700 @@ -264,10 +264,10 @@ if (NewElem ->TheCurves != NULL) { for (i=0; i < NewElem ->nCurves; i++) { @@ -53430,8 +83454,8 @@ // Take the hint as starting point if specified if (Hint == NULL) { ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsmd5.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsmd5.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsmd5.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsmd5.c 2014-04-19 01:27:12.000000000 -0700 @@ -338,7 +338,7 @@ Error: @@ -53441,8 +83465,8 @@ if (Mem != NULL) _cmsFree(ContextID, Mem); memmove(Icc, &Keep, sizeof(_cmsICCPROFILE)); return FALSE; ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsnamed.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsnamed.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsnamed.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsnamed.c 2014-04-19 01:27:12.000000000 -0700 @@ -359,9 +359,9 @@ if (Best == -1) Best = 0; @@ -53546,8 +83570,8 @@ // Walk the list freeing all nodes entry = old_dict ->head; while (entry != NULL) { ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsopt.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsopt.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsopt.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsopt.c 2014-04-19 01:27:12.000000000 -0700 @@ -27,6 +27,7 @@ // However, the following notice accompanied the original version of this // file: @@ -53874,8 +83898,8 @@ if (fl == NULL) return FALSE; // Copy the parameters ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmspack.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmspack.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmspack.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmspack.c 2014-04-19 01:27:12.000000000 -0700 @@ -317,6 +317,23 @@ } @@ -53928,8 +83952,8 @@ if (fl == NULL) return FALSE; fl ->Factory = Plugin ->FormattersFactory; ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmspcs.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmspcs.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmspcs.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmspcs.c 2014-04-19 01:27:12.000000000 -0700 @@ -898,9 +898,11 @@ { switch (ColorSpace) { @@ -53955,8 +83979,8 @@ case cmsSig4colorData: return 4; case cmsSigMCH5Data: ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsplugin.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsplugin.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsplugin.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsplugin.c 2014-04-19 01:27:12.000000000 -0700 @@ -125,10 +125,14 @@ pOut[0] = pIn[7]; @@ -54065,8 +84089,8 @@ if (PluginPool != NULL) _cmsSubAllocDestroy(PluginPool); ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsps2.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsps2.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsps2.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsps2.c 2014-04-19 01:27:12.000000000 -0700 @@ -806,7 +806,6 @@ mpe = Pipeline ->Elements; @@ -54100,8 +84124,8 @@ } break; ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmssamp.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmssamp.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmssamp.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmssamp.c 2014-04-19 01:27:12.000000000 -0700 @@ -56,6 +56,8 @@ #include "lcms2_internal.h" @@ -54474,8 +84498,8 @@ Lab.L = 0; } ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmstypes.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmstypes.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmstypes.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmstypes.c 2014-04-19 01:27:12.000000000 -0700 @@ -91,7 +91,7 @@ // Register a new type handler. This routine is shared between normal types and MPE @@ -55143,8 +85167,8 @@ if (pt == NULL) return FALSE; pt ->Signature = Plugin ->Signature; ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsvirt.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsvirt.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsvirt.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsvirt.c 2014-04-19 01:27:12.000000000 -0700 @@ -208,9 +208,26 @@ if (TransferFunction) { @@ -55489,8 +85513,8 @@ cmsPipelineFree(LUT); return hProfile; ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmswtpnt.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmswtpnt.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmswtpnt.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmswtpnt.c 2014-04-19 01:27:12.000000000 -0700 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // @@ -55591,8 +85615,8 @@ if (ConeMatrix == NULL) ConeMatrix = &LamRigg; ---- jdk/src/share/native/sun/java2d/cmm/lcms/cmsxform.c 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/cmsxform.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsxform.c 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/cmsxform.c 2014-04-19 01:27:12.000000000 -0700 @@ -396,7 +396,7 @@ static _cmsTransformCollection* TransformCollection = NULL; @@ -55664,8 +85688,8 @@ // Create a gamut check LUT if requested if (hGamutProfile != NULL && (dwFlags & cmsFLAGS_GAMUTCHECK)) ---- jdk/src/share/native/sun/java2d/cmm/lcms/lcms2.h 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/lcms2.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/lcms2.h 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/lcms2.h 2014-04-19 01:27:12.000000000 -0700 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // @@ -55740,8 +85764,8 @@ CMSAPI cmsUInt32Number CMSEXPORT cmsGetHeaderModel(cmsHPROFILE hProfile); CMSAPI void CMSEXPORT cmsSetHeaderModel(cmsHPROFILE hProfile, cmsUInt32Number model); CMSAPI void CMSEXPORT cmsSetHeaderAttributes(cmsHPROFILE hProfile, cmsUInt64Number Flags); ---- jdk/src/share/native/sun/java2d/cmm/lcms/lcms2_internal.h 2013-09-06 11:29:02.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/cmm/lcms/lcms2_internal.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/cmm/lcms/lcms2_internal.h 2013-09-06 11:29:02.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/cmm/lcms/lcms2_internal.h 2014-04-19 01:27:12.000000000 -0700 @@ -27,7 +27,7 @@ // However, the following notice accompanied the original version of this // file: @@ -55829,8 +85853,8 @@ // Profiles used to create the transform cmsSEQ* Sequence; ---- jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c 2013-09-06 11:29:03.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c 2013-09-06 11:29:03.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/opengl/OGLBlitLoops.c 2014-01-18 12:16:24.000000000 -0800 @@ -661,7 +661,12 @@ (sy2-sy1) != (jint)(dy2-dy1) || oglc->extraAlpha != 1.0f; @@ -55845,8 +85869,8 @@ default: // just use the glDrawPixels() codepath viaTexture = JNI_FALSE; ---- jdk/src/share/native/sun/java2d/opengl/OGLFuncs.h 2013-09-06 11:29:03.000000000 -0700 -+++ jdk/src/share/native/sun/java2d/opengl/OGLFuncs.h 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/java2d/opengl/OGLFuncs.h 2013-09-06 11:29:03.000000000 -0700 ++++ ./jdk/src/share/native/sun/java2d/opengl/OGLFuncs.h 2014-06-06 19:56:34.000000000 -0700 @@ -26,7 +26,7 @@ #ifndef OGLFuncs_h_Included #define OGLFuncs_h_Included @@ -55856,8 +85880,8 @@ #include <dlfcn.h> #endif #include "jni.h" ---- jdk/src/share/native/sun/management/Flag.c 2013-09-06 11:29:03.000000000 -0700 -+++ jdk/src/share/native/sun/management/Flag.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/management/Flag.c 2013-09-06 11:29:03.000000000 -0700 ++++ ./jdk/src/share/native/sun/management/Flag.c 2014-04-19 01:27:12.000000000 -0700 @@ -95,12 +95,12 @@ return 0; } @@ -55873,8 +85897,8 @@ globals = (jmmVMGlobal*) malloc(gsize); if (globals == NULL) { JNU_ThrowOutOfMemoryError(env, 0); ---- jdk/src/share/native/sun/management/GcInfoBuilder.c 2013-09-06 11:29:03.000000000 -0700 -+++ jdk/src/share/native/sun/management/GcInfoBuilder.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/management/GcInfoBuilder.c 2013-09-06 11:29:03.000000000 -0700 ++++ ./jdk/src/share/native/sun/management/GcInfoBuilder.c 2014-06-06 19:56:34.000000000 -0700 @@ -59,12 +59,12 @@ return; } @@ -55926,8 +85950,8 @@ if (nativeTypes == NULL) { if (gc_stat.gc_ext_attribute_values != NULL) { free(gc_stat.gc_ext_attribute_values); ---- jdk/src/share/native/sun/management/HotSpotDiagnostic.c 2013-09-06 11:29:03.000000000 -0700 -+++ jdk/src/share/native/sun/management/HotSpotDiagnostic.c 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/src/share/native/sun/management/HotSpotDiagnostic.c 2013-09-06 11:29:03.000000000 -0700 ++++ ./jdk/src/share/native/sun/management/HotSpotDiagnostic.c 2013-12-01 11:14:31.000000000 -0800 @@ -29,7 +29,7 @@ #include "sun_management_HotSpotDiagnostic.h" @@ -55937,8 +85961,154 @@ (JNIEnv *env, jobject dummy, jstring outputfile, jboolean live) { jmm_interface->DumpHeap0(env, outputfile, live); ---- jdk/src/solaris/back/util_md.h 2013-09-06 11:29:05.000000000 -0700 -+++ jdk/src/solaris/back/util_md.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/share/native/sun/security/krb5/nativeccache.c 2013-09-06 11:29:04.000000000 -0700 ++++ ./jdk/src/share/native/sun/security/krb5/nativeccache.c 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:29:05.000000000 -0700 ++++ ./jdk/src/solaris/back/linker_md.c 2014-06-06 19:56:34.000000000 -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/back/util_md.h 2013-09-06 11:29:05.000000000 -0700 ++++ ./jdk/src/solaris/back/util_md.h 2014-06-06 19:56:34.000000000 -0700 @@ -51,7 +51,7 @@ /* On little endian machines, convert java big endian numbers. */ @@ -55948,8 +86118,8 @@ #define HOST_TO_JAVA_CHAR(x) (((x & 0xff) << 8) | ((x >> 8) & (0xff))) #define HOST_TO_JAVA_SHORT(x) (((x & 0xff) << 8) | ((x >> 8) & (0xff))) ---- jdk/src/solaris/bin/ergo.c 2013-09-06 11:29:05.000000000 -0700 -+++ jdk/src/solaris/bin/ergo.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/bin/ergo.c 2013-09-06 11:29:05.000000000 -0700 ++++ ./jdk/src/solaris/bin/ergo.c 2014-06-06 19:56:34.000000000 -0700 @@ -100,6 +100,27 @@ /* Compute physical memory by asking the OS */ uint64_t @@ -55984,8 +86154,8 @@ return result; +#endif } ---- jdk/src/solaris/bin/ergo.h 2013-09-06 11:29:05.000000000 -0700 -+++ jdk/src/solaris/bin/ergo.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/bin/ergo.h 2013-09-06 11:29:05.000000000 -0700 ++++ ./jdk/src/solaris/bin/ergo.h 2014-06-06 19:56:34.000000000 -0700 @@ -33,6 +33,10 @@ #include <sys/stat.h> #include <unistd.h> @@ -55997,8 +86167,8 @@ #include "java.h" ---- jdk/src/solaris/bin/ergo_i586.c 2013-09-06 11:29:05.000000000 -0700 -+++ jdk/src/solaris/bin/ergo_i586.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/bin/ergo_i586.c 2013-09-06 11:29:05.000000000 -0700 ++++ ./jdk/src/solaris/bin/ergo_i586.c 2014-06-06 19:56:34.000000000 -0700 @@ -106,7 +106,7 @@ #endif /* __solaris__ */ @@ -56057,8 +86227,8 @@ return result; +#endif } ---- jdk/src/solaris/bin/java_md_solinux.c 2013-09-06 11:29:05.000000000 -0700 -+++ jdk/src/solaris/bin/java_md_solinux.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/bin/java_md_solinux.c 2013-09-06 11:29:05.000000000 -0700 ++++ ./jdk/src/solaris/bin/java_md_solinux.c 2014-06-06 21:15:42.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. @@ -56066,7 +86236,43 @@ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it -@@ -950,15 +950,46 @@ +@@ -899,8 +899,9 @@ + * onwards the filename returned in DL_info structure from dladdr is + * an absolute pathname so technically realpath isn't required. + * On Linux we read the executable name from /proc/self/exe. +- * As a fallback, and for platforms other than Solaris and Linux, +- * we use FindExecName to compute the executable name. ++ * On *BSD we read the executable name from /proc/curproc/file. ++ * As a fallback, and for platforms other than Solaris, Linux, and ++ * *BSD, we use FindExecName to compute the executable name. + */ + const char* + SetExecname(char **argv) +@@ -927,9 +928,13 @@ + } + } + } +-#elif defined(__linux__) ++#elif defined(__linux__) || defined(_ALLBSD_SOURCE) + { ++#if defined(_ALLBSD_SOURCE) ++ const char* self = "/proc/curproc/file"; ++#else + const char* self = "/proc/self/exe"; ++#endif + char buf[PATH_MAX+1]; + int len = readlink(self, buf, PATH_MAX); + if (len >= 0) { +@@ -937,7 +942,7 @@ + exec_path = JLI_StringDup(buf); + } + } +-#else /* !__solaris__ && !__linux__ */ ++#else /* !__solaris__ && !__linux__ && !_ALLBSD_SOURCE */ + { + /* Not implemented */ + } +@@ -950,15 +955,46 @@ return exec_path; } @@ -56116,8 +86322,8 @@ } if (hSplashLib) { void* sym = dlsym(hSplashLib, name); ---- jdk/src/solaris/bin/java_md_solinux.h 2013-09-06 11:29:05.000000000 -0700 -+++ jdk/src/solaris/bin/java_md_solinux.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/bin/java_md_solinux.h 2013-09-06 11:29:05.000000000 -0700 ++++ ./jdk/src/solaris/bin/java_md_solinux.h 2014-06-06 19:56:34.000000000 -0700 @@ -33,6 +33,10 @@ #include <sys/time.h> #define CounterGet() (gethrtime()/1000) @@ -56139,8 +86345,8 @@ #else /* Solaris */ static const char *system_dir = "/usr/jdk"; static const char *user_dir = "/jdk"; ---- jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd 2013-09-06 11:29:06.000000000 -0700 -+++ jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd 2014-04-28 17:39:02.000000000 -0700 +--- ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.bsd 2014-06-06 19:56:34.000000000 -0700 @@ -63,11 +63,66 @@ private /* final */ InputStream stdout; private /* final */ InputStream stderr; @@ -56244,8 +86450,78 @@ } /** ---- jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux 2013-09-06 11:29:06.000000000 -0700 -+++ jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux 2014-04-20 12:39:22.000000000 -0700 +@@ -253,40 +310,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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.linux 2014-06-06 19:56:33.000000000 -0700 @@ -63,11 +63,61 @@ private /* final */ InputStream stdout; private /* final */ InputStream stderr; @@ -56344,8 +86620,78 @@ } /** ---- jdk/src/solaris/classes/java/lang/UNIXProcess.java.solaris 2013-09-06 11:29:06.000000000 -0700 -+++ jdk/src/solaris/classes/java/lang/UNIXProcess.java.solaris 2014-04-20 12:39:22.000000000 -0700 +@@ -253,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/java/lang/UNIXProcess.java.solaris 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/java/lang/UNIXProcess.java.solaris 2014-04-19 01:27:13.000000000 -0700 @@ -26,6 +26,8 @@ package java.lang; @@ -56456,8 +86802,257 @@ + init(); } } ---- jdk/src/solaris/classes/sun/awt/X11/XClipboard.java 2013-09-06 11:29:06.000000000 -0700 -+++ jdk/src/solaris/classes/sun/awt/X11/XClipboard.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/MotifDnDConstants.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/MotifDnDDropTargetProtocol.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/WindowPropertyGetter.java 2014-06-06 19:56:33.000000000 -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/XClipboard.java 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XClipboard.java 2014-04-19 01:27:13.000000000 -0700 @@ -84,7 +84,7 @@ protected synchronized void setContentsNative(Transferable contents) { @@ -56476,8 +87071,703 @@ } } ---- jdk/src/solaris/classes/sun/awt/X11/XToolkit.java 2013-09-06 11:29:07.000000000 -0700 -+++ jdk/src/solaris/classes/sun/awt/X11/XToolkit.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/awt/X11/XConstants.java 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XConstants.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XDnDDragSourceProtocol.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XDnDDropTargetProtocol.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XDragSourceProtocol.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XDropTargetRegistry.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XEmbedCanvasPeer.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java 2014-06-06 19:56:33.000000000 -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); + } + } + +--- ./jdk/src/solaris/classes/sun/awt/X11/XErrorHandlerUtil.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XErrorHandlerUtil.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:06.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XQueryTree.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:07.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XToolkit.java 2014-06-06 19:56:33.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. @@ -56493,7 +87783,101 @@ import sun.print.PrintJob2D; import sun.security.action.GetPropertyAction; import sun.security.action.GetBooleanAction; -@@ -311,13 +312,7 @@ +@@ -127,7 +128,6 @@ + initIDs(); + setBackingStoreType(); + } +- noisyAwtHandler = AccessController.doPrivileged(new GetBooleanAction("sun.awt.noisyerrorhandler")); + } + + /* +@@ -136,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; +@@ -304,20 +232,12 @@ + 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(); } PrivilegedAction<Void> a = new PrivilegedAction<Void>() { public Void run() { @@ -56508,7 +87892,7 @@ public void run() { XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance(); if (peer != null) { -@@ -379,22 +374,16 @@ +@@ -379,22 +299,16 @@ init(); XWM.init(); SunToolkit.setDataTransfererClassName(DATA_TRANSFERER_CLASS_NAME); @@ -56536,8 +87920,137 @@ toolkitThread.start(); } } ---- jdk/src/solaris/classes/sun/awt/X11FontManager.java 2013-09-06 11:29:07.000000000 -0700 -+++ jdk/src/solaris/classes/sun/awt/X11FontManager.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/awt/X11/XTranslateCoordinates.java 2013-09-06 11:29:07.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XTranslateCoordinates.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:07.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XWM.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:07.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/XlibUtil.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:07.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java 2014-06-06 19:56:29.000000000 -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/classes/sun/awt/X11FontManager.java 2013-09-06 11:29:07.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11FontManager.java 2014-06-06 19:56:34.000000000 -0700 @@ -213,7 +213,7 @@ if (fontID != null) { fileName = (String)fontNameMap.get(fontID); @@ -56565,8 +88078,8 @@ (!mFontConfig.foundOsSpecificFile() || !mFontConfig.fontFilesArePresent()) || (FontUtilities.isSolaris && !mFontConfig.fontFilesArePresent()))) { ---- jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java 2013-09-06 11:29:07.000000000 -0700 -+++ jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java 2013-09-06 11:29:07.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/awt/X11GraphicsDevice.java 2014-04-19 01:27:13.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. @@ -56617,8 +88130,8 @@ t.setContextClassLoader(null); Runtime.getRuntime().addShutdownHook(t); return null; ---- jdk/src/solaris/classes/sun/net/PortConfig.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/solaris/classes/sun/net/PortConfig.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/net/PortConfig.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/solaris/classes/sun/net/PortConfig.java 2014-06-06 19:56:34.000000000 -0700 @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -56709,8 +88222,8 @@ + return upper; + } +} ---- jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java 2013-09-06 11:29:08.000000000 -0700 -+++ jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java 2014-04-28 17:39:02.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java 2013-09-06 11:29:08.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/nio/ch/DefaultAsynchronousChannelProvider.java 2014-06-06 19:56:34.000000000 -0700 @@ -50,7 +50,7 @@ return new SolarisAsynchronousChannelProvider(); if (osname.equals("Linux")) @@ -56720,8 +88233,8 @@ return new BsdAsynchronousChannelProvider(); throw new InternalError("platform not recognized"); } ---- jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java 2013-09-06 11:29:08.000000000 -0700 -+++ jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java 2013-09-06 11:29:08.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java 2013-12-01 11:14:32.000000000 -0800 @@ -26,9 +26,11 @@ package sun.nio.ch; @@ -56748,8 +88261,8 @@ // The pollfd array for results from devpoll driver private final AllocatedNativeObject pollArray; ---- jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java 2013-09-06 11:29:08.000000000 -0700 -+++ jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java 2013-09-06 11:29:08.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java 2013-12-01 11:14:32.000000000 -0800 @@ -26,9 +26,11 @@ package sun.nio.ch; @@ -56799,8 +88312,8 @@ eventsHigh.put(key, Byte.valueOf(events)); } } ---- jdk/src/solaris/classes/sun/nio/ch/EventPortWrapper.java 2013-09-06 11:29:08.000000000 -0700 -+++ jdk/src/solaris/classes/sun/nio/ch/EventPortWrapper.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/nio/ch/EventPortWrapper.java 2013-09-06 11:29:08.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/nio/ch/EventPortWrapper.java 2013-12-01 11:14:32.000000000 -0800 @@ -25,9 +25,14 @@ package sun.nio.ch; @@ -56828,8 +88341,8 @@ // special update status to indicate that it should be ignored private static final byte IGNORE = -1; ---- jdk/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java 2013-09-06 11:29:08.000000000 -0700 -+++ jdk/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java 2013-09-06 11:29:08.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java 2014-01-18 12:16:27.000000000 -0800 @@ -180,6 +180,10 @@ SctpNet.throwAlreadyBoundException(); InetSocketAddress isa = (local == null) ? @@ -56841,8 +88354,8 @@ Net.bind(fd, isa.getAddress(), isa.getPort()); InetSocketAddress boundIsa = Net.localAddress(fd); port = boundIsa.getPort(); ---- jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java 2013-09-06 11:29:08.000000000 -0700 -+++ jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java 2013-09-06 11:29:08.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/nio/fs/DefaultFileSystemProvider.java 2014-06-06 19:56:34.000000000 -0700 @@ -70,6 +70,8 @@ return createProvider("sun.nio.fs.LinuxFileSystemProvider"); if (osname.equals("Darwin") || osname.contains("OS X")) @@ -56852,8 +88365,8 @@ throw new AssertionError("Platform not recognized"); } } ---- jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java 2013-09-06 11:29:08.000000000 -0700 -+++ jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java 2013-09-06 11:29:08.000000000 -0700 ++++ ./jdk/src/solaris/classes/sun/print/UnixPrintServiceLookup.java 2014-06-06 19:56:34.000000000 -0700 @@ -129,6 +129,7 @@ static boolean isBSD() { @@ -56862,8 +88375,8 @@ osname.contains("OS X")); } ---- jdk/src/solaris/demo/jni/Poller/Poller.c 2013-09-06 11:29:09.000000000 -0700 -+++ jdk/src/solaris/demo/jni/Poller/Poller.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/demo/jni/Poller/Poller.c 2013-09-06 11:29:09.000000000 -0700 ++++ ./jdk/src/solaris/demo/jni/Poller/Poller.c 2014-04-19 01:27:14.000000000 -0700 @@ -318,7 +318,7 @@ ioevent_t *ioeh; @@ -56918,8 +88431,63 @@ return STATE_EXCEPTION("nativeWait - handle out of range"); ioeh = &IOE_handles[handle]; ---- jdk/src/solaris/javavm/export/jvm_md.h 2013-09-06 11:29:09.000000000 -0700 -+++ jdk/src/solaris/javavm/export/jvm_md.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/demo/jvmti/hprof/hprof_md.c 2013-09-06 11:29:09.000000000 -0700 ++++ ./jdk/src/solaris/demo/jvmti/hprof/hprof_md.c 2014-06-06 19:56:34.000000000 -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; ++ } ++ ++ next_token = NULL; ++ path = strtok_r(paths_copy, ":", &next_token); + +- if (access(buffer, F_OK) == 0) { ++ 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/javavm/export/jvm_md.h 2013-09-06 11:29:09.000000000 -0700 ++++ ./jdk/src/solaris/javavm/export/jvm_md.h 2014-06-06 19:56:34.000000000 -0700 @@ -75,7 +75,11 @@ #define JVM_O_O_APPEND O_APPEND #define JVM_O_EXCL O_EXCL @@ -56932,8 +88500,8 @@ /* Signals */ ---- jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c 2013-09-06 11:29:09.000000000 -0700 -+++ jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c 2013-09-06 11:29:09.000000000 -0700 ++++ ./jdk/src/solaris/native/com/sun/management/UnixOperatingSystem_md.c 2014-06-06 19:56:34.000000000 -0700 @@ -168,6 +168,9 @@ /* * XXXBSD: there's no way available to get swap info in @@ -56983,8 +88551,8 @@ */ // throw_internal_error(env, "Unimplemented in FreeBSD"); return (100); ---- jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_SolarisOS_Utils.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_SolarisOS_Utils.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_SolarisOS_Utils.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/com/sun/media/sound/PLATFORM_API_SolarisOS_Utils.c 2014-04-19 01:27:14.000000000 -0700 @@ -76,7 +76,7 @@ adPath[*count].st_ino = statBuf.st_ino; adPath[*count].st_dev = statBuf.st_dev; @@ -56994,8 +88562,8 @@ (*count)++; TRACE1("Added audio device %s\n", path); } ---- jdk/src/solaris/native/java/io/UnixFileSystem_md.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/io/UnixFileSystem_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/io/UnixFileSystem_md.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/io/UnixFileSystem_md.c 2014-06-06 19:56:34.000000000 -0700 @@ -151,7 +151,6 @@ return rv; } @@ -57004,8 +88572,8 @@ JNIEXPORT jboolean JNICALL Java_java_io_UnixFileSystem_setPermission(JNIEnv *env, jobject this, jobject file, ---- jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/lang/ProcessEnvironment_md.c 2014-06-06 19:56:34.000000000 -0700 @@ -31,21 +31,24 @@ #ifdef __APPLE__ #include <crt_externs.h> @@ -57059,8 +88627,8 @@ jbyteArray var, val; const char * valBeg = varEnd + 1; jsize varLength = varEnd - environ[i]; ---- jdk/src/solaris/native/java/lang/UNIXProcess_md.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/lang/UNIXProcess_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/lang/UNIXProcess_md.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/lang/UNIXProcess_md.c 2014-06-06 19:56:34.000000000 -0700 @@ -47,19 +47,15 @@ #endif #include <signal.h> @@ -57993,8 +89561,8 @@ goto Finally; } ---- jdk/src/solaris/native/java/lang/childproc.c 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/solaris/native/java/lang/childproc.c 2014-04-28 17:39:02.000000000 -0700 +--- ./jdk/src/solaris/native/java/lang/childproc.c 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/solaris/native/java/lang/childproc.c 2014-06-06 19:56:34.000000000 -0700 @@ -0,0 +1,387 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -58383,8 +89951,8 @@ + _exit(-1); + return 0; /* Suppress warning "no return value from function" */ +} ---- jdk/src/solaris/native/java/lang/childproc.h 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/solaris/native/java/lang/childproc.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/lang/childproc.h 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/solaris/native/java/lang/childproc.h 2014-04-20 10:19:59.000000000 -0700 @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -58531,8 +90099,50 @@ +int childProcess(void *arg); + +#endif ---- jdk/src/solaris/native/java/lang/java_props_md.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/lang/java_props_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/lang/java_props_macosx.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/lang/java_props_macosx.c 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/lang/java_props_macosx.h 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/lang/java_props_md.c 2014-06-06 19:56:34.000000000 -0700 @@ -151,7 +151,7 @@ lc = setlocale(cat, NULL); #endif @@ -58542,7 +90152,33 @@ if (lc == NULL) { return 0; } -@@ -484,12 +484,19 @@ +@@ -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; +@@ -484,12 +503,19 @@ &(sprops.format_country), &(sprops.format_variant), &(sprops.encoding))) { @@ -58562,8 +90198,24 @@ } else { sprops.language = "en"; sprops.encoding = "ISO8859-1"; ---- jdk/src/solaris/native/java/lang/jspawnhelper.c 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/solaris/native/java/lang/jspawnhelper.c 2014-04-20 12:39:22.000000000 -0700 +@@ -527,7 +553,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/lang/jspawnhelper.c 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/solaris/native/java/lang/jspawnhelper.c 2014-04-19 01:27:14.000000000 -0700 @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -58714,8 +90366,8 @@ + childProcess (&c); + return 0; /* NOT REACHED */ +} ---- jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/net/Inet6AddressImpl.c 2014-06-06 19:56:34.000000000 -0700 @@ -122,7 +122,6 @@ static jclass ni_ia6cls; static jmethodID ni_ia4ctrID; @@ -58777,8 +90429,8 @@ setInetAddress_hostName(env, iaObj, host); (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); inet6Index++; ---- jdk/src/solaris/native/java/net/NetworkInterface.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/net/NetworkInterface.c 2014-04-28 17:39:02.000000000 -0700 +--- ./jdk/src/solaris/native/java/net/NetworkInterface.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/net/NetworkInterface.c 2014-06-06 19:56:35.000000000 -0700 @@ -60,14 +60,19 @@ #include <sys/param.h> #include <sys/ioctl.h> @@ -58830,7 +90482,20 @@ i = 0; while (i < 16) { if (caddr[i] != bytes[i]) { -@@ -670,21 +671,17 @@ +@@ -563,11 +564,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); +@@ -670,21 +669,17 @@ int scope=0; iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); if (iaObj) { @@ -58856,7 +90521,7 @@ } ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj) { -@@ -1293,11 +1290,15 @@ +@@ -1293,11 +1288,15 @@ return -1; } @@ -58872,7 +90537,7 @@ return 0; } -@@ -1989,11 +1990,15 @@ +@@ -1989,11 +1988,15 @@ return -1; } @@ -58888,8 +90553,8 @@ return 0; } ---- jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c 2014-06-06 19:56:35.000000000 -0700 @@ -23,12 +23,12 @@ * questions. */ @@ -58927,7 +90592,60 @@ len = sizeof(struct sockaddr_in); } JVM_Connect(fd, (struct sockaddr *)&addr, len); -@@ -2359,8 +2367,7 @@ +@@ -574,6 +582,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 +684,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 +- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); ++ } 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 +923,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 +- JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); ++ } else { ++ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); + #endif ++ } + } else if (ret == JVM_IO_INTR) { + JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", + "operation interrupted"); +@@ -2359,8 +2375,7 @@ caddr[14] = ((address >> 8) & 0xff); caddr[15] = (address & 0xff); } else { @@ -58937,9 +90655,55 @@ } memcpy((void *)&(mname6.ipv6mr_multiaddr), caddr, sizeof(struct in6_addr)); ---- jdk/src/solaris/native/java/net/bsd_close.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/net/bsd_close.c 2014-04-20 12:39:22.000000000 -0700 -@@ -345,6 +345,76 @@ +--- ./jdk/src/solaris/native/java/net/PlainSocketImpl.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/net/PlainSocketImpl.c 2014-06-06 19:56:35.000000000 -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 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/net/SocketInputStream.c 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/net/bsd_close.c 2014-06-06 19:56:35.000000000 -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> + + /* +@@ -345,8 +345,82 @@ * signal other than our wakeup signal. */ int NET_Timeout(int s, long timeout) { @@ -59015,15 +90779,116 @@ +#else 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); -@@ -414,4 +484,5 @@ + + /* +@@ -376,20 +450,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 +486,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,8 +495,11 @@ + t.tv_usec = (timeout % 1000) * 1000; + } + } else { ++ if (allocated != 0) ++ free(fdsp); + return rv; } } +#endif } ---- jdk/src/solaris/native/java/net/net_util_md.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/net/net_util_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/net/linux_close.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/net/linux_close.c 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/net/net_util_md.c 2014-06-06 19:56:35.000000000 -0700 @@ -45,6 +45,10 @@ #endif #endif @@ -59144,8 +91009,8 @@ return setsockopt(fd, level, opt, arg, len); } ---- jdk/src/solaris/native/java/net/net_util_md.h 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/net/net_util_md.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/net/net_util_md.h 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/net/net_util_md.h 2014-06-06 19:56:34.000000000 -0700 @@ -37,7 +37,7 @@ #endif @@ -59165,8 +91030,8 @@ /* needed from libsocket on Solaris 8 */ ---- jdk/src/solaris/native/java/util/TimeZone_md.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/java/util/TimeZone_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/java/util/TimeZone_md.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/java/util/TimeZone_md.c 2014-06-06 19:56:34.000000000 -0700 @@ -123,7 +123,7 @@ return NULL; } @@ -59200,8 +91065,41 @@ } -#endif /* MACOSX */ +#endif /* _ALLBSD_SOURCE */ ---- jdk/src/solaris/native/sun/awt/awt_Font.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/awt_Font.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/awt_DrawingSurface.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_DrawingSurface.c 2014-06-06 19:56:30.000000000 -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_Font.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_Font.c 2014-06-06 19:56:34.000000000 -0700 @@ -334,7 +334,7 @@ if (strcmp(style, "regular") == 0) { altstyle = "roman"; @@ -59211,8 +91109,15 @@ if (!strcmp(family, "lucidasans")) { family = "lucida"; } ---- jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c 2014-06-06 19:56:35.000000000 -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 @@ -123,7 +123,7 @@ */ @@ -59254,7 +91159,53 @@ } #endif /* HEADLESS */ -@@ -1645,7 +1645,7 @@ +@@ -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)); + + /** +@@ -1645,7 +1644,7 @@ { jobject point = NULL; #ifndef HEADLESS /* return NULL in HEADLESS, Linux */ @@ -59263,7 +91214,7 @@ int x,y; AWT_LOCK(); -@@ -1658,7 +1658,7 @@ +@@ -1658,7 +1657,7 @@ DTRACE_PRINTLN("unable to call XineramaSolarisCenterFunc: symbol is null"); } AWT_FLUSH_UNLOCK(); @@ -59272,8 +91223,17 @@ #endif /* HEADLESS */ return point; } ---- jdk/src/solaris/native/sun/awt/awt_InputMethod.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/awt_InputMethod.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.h 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.h 2014-06-06 19:56:30.000000000 -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_InputMethod.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_InputMethod.c 2014-06-06 19:56:34.000000000 -0700 @@ -67,7 +67,7 @@ XIMPreeditDrawCallbackStruct *); static void PreeditCaretCallback(XIC, XPointer, @@ -59513,8 +91473,8 @@ AWT_LOCK(); adjustStatusWindow(window); AWT_UNLOCK(); ---- jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_LoadLibrary.c 2014-06-06 19:56:34.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. @@ -59531,8 +91491,8 @@ realpath((char *)dlinfo.dli_fname, buf); len = strlen(buf); p = strrchr(buf, '/'); ---- jdk/src/solaris/native/sun/awt/awt_Robot.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/awt_Robot.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/awt_Robot.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_Robot.c 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ #include "wsutils.h" #include "list.h" @@ -59542,9 +91502,77 @@ #include <sys/socket.h> #endif ---- jdk/src/solaris/native/sun/awt/awt_util.h 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/awt_util.h 2014-04-20 12:39:22.000000000 -0700 -@@ -187,7 +187,7 @@ +--- ./jdk/src/solaris/native/sun/awt/awt_util.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_util.c 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_util.h 2014-06-06 19:56:35.000000000 -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. +@@ -187,7 +185,7 @@ #ifdef __solaris__ extern Widget awt_util_getXICStatusAreaWindow(Widget w); #else @@ -59553,7 +91581,7 @@ int32_t awt_util_getIMStatusHeight(Widget vw); Widget awt_util_getXICStatusAreaWindow(Widget w); #else -@@ -200,7 +200,7 @@ +@@ -200,7 +198,7 @@ @@ -59562,8 +91590,15 @@ typedef struct _XmImRefRec { Cardinal num_refs; /* Number of referencing widgets. */ Cardinal max_refs; /* Maximum length of refs array. */ ---- jdk/src/solaris/native/sun/awt/awt_wm.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/awt_wm.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/awt_wm.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_wm.c 2014-06-06 19:56:35.000000000 -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 @@ -121,12 +121,19 @@ static Atom XA_KWM_WIN_MAXIMIZED; @@ -59598,7 +91633,23 @@ }; #define ATOM_LIST_LENGTH (sizeof(atom_list)/sizeof(atom_list[0])) -@@ -942,6 +954,39 @@ +@@ -382,14 +394,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. +@@ -942,6 +950,39 @@ return True; } @@ -59638,7 +91689,58 @@ static Boolean awt_wm_isNetWMName(char *name) -@@ -1280,6 +1325,12 @@ +@@ -1011,7 +1052,6 @@ + return awt_wm_isNetWMName("Metacity"); + } + +- + /* + * Temporary error handler that ensures that we know if + * XChangeProperty succeeded or not. +@@ -1020,15 +1060,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 +1194,6 @@ + return True; + } + +- +- + static Boolean winmgr_running = False; + + /* +@@ -1176,14 +1209,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. +@@ -1280,6 +1309,12 @@ else if (awt_wm_isKDE2()) { awt_wmgr = KDE2_WM; } @@ -59651,7 +91753,7 @@ /* * We don't check for legacy WM when we already know that WM * supports WIN or _NET wm spec. -@@ -1302,6 +1353,9 @@ +@@ -1302,6 +1337,9 @@ awt_wmgr = MOTIF_WM; } else if (awt_wm_isOpenLook()) { @@ -59661,8 +91763,8 @@ awt_wmgr = OPENLOOK_WM; } else { ---- jdk/src/solaris/native/sun/awt/awt_wm.h 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/awt_wm.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/awt_wm.h 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_wm.h 2014-06-06 19:56:34.000000000 -0700 @@ -45,7 +45,10 @@ KDE2_WM, SAWFISH_WM, @@ -59675,8 +91777,17 @@ }; extern void awt_wm_init(void); ---- jdk/src/solaris/native/sun/awt/extutil.h 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/extutil.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/awt_xembed_server.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/awt_xembed_server.c 2014-06-06 19:56:30.000000000 -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/awt/extutil.h 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/extutil.h 2014-06-06 19:56:34.000000000 -0700 @@ -58,7 +58,7 @@ */ /* $XFree86: xc/include/extensions/extutil.h,v 1.5 2001/01/17 17:53:20 dawes Exp $ */ @@ -59692,8 +91803,8 @@ -#endif /* __linux__ || MACOSX */ +#endif /* __linux__ || _ALLBSD_SOURCE */ ---- jdk/src/solaris/native/sun/awt/fontpath.c 2013-09-06 11:29:10.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/fontpath.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/fontpath.c 2013-09-06 11:29:10.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/fontpath.c 2014-06-06 19:56:34.000000000 -0700 @@ -23,7 +23,7 @@ * questions. */ @@ -59771,8 +91882,8 @@ } #endif #endif /* !HEADLESS */ ---- jdk/src/solaris/native/sun/awt/robot_common.c 2013-09-06 11:29:11.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/robot_common.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/robot_common.c 2013-09-06 11:29:11.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/robot_common.c 2014-06-06 19:56:34.000000000 -0700 @@ -27,7 +27,7 @@ #error This file should not be included in headless library #endif @@ -59782,8 +91893,8 @@ #include <stdlib.h> #endif ---- jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c 2013-09-06 11:29:11.000000000 -0700 -+++ jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c 2013-09-06 11:29:11.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/awt/splashscreen/splashscreen_sys.c 2014-01-18 12:16:31.000000000 -0800 @@ -577,8 +577,8 @@ SplashUnlock(splash); rc = poll(pfd, 2, timeout); @@ -59795,8 +91906,8 @@ SplashNextFrame(splash); SplashUpdateShape(splash); SplashRedrawWindow(splash); ---- jdk/src/solaris/native/sun/java2d/j2d_md.h 2013-09-06 11:29:11.000000000 -0700 -+++ jdk/src/solaris/native/sun/java2d/j2d_md.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/java2d/j2d_md.h 2013-09-06 11:29:11.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/java2d/j2d_md.h 2014-06-06 19:56:34.000000000 -0700 @@ -28,9 +28,9 @@ #include <sys/types.h> @@ -59809,8 +91920,8 @@ #include <stdint.h> #endif /* __linux__ || MACOSX */ ---- jdk/src/solaris/native/sun/java2d/loops/vis_FuncArray.c 2013-09-06 11:29:11.000000000 -0700 -+++ jdk/src/solaris/native/sun/java2d/loops/vis_FuncArray.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/java2d/loops/vis_FuncArray.c 2013-09-06 11:29:11.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/java2d/loops/vis_FuncArray.c 2014-06-06 19:56:34.000000000 -0700 @@ -804,7 +804,7 @@ static int initialized; static int usevis = JNI_TRUE; @@ -59820,8 +91931,59 @@ # define ULTRA_CHIP "sparc64" #else # define ULTRA_CHIP "sun4u" ---- jdk/src/solaris/native/sun/net/portconfig.c 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/solaris/native/sun/net/portconfig.c 2014-04-28 17:39:02.000000000 -0700 +--- ./jdk/src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/java2d/x11/X11SurfaceData.c 2014-06-06 19:56:35.000000000 -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/net/portconfig.c 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/solaris/native/sun/net/portconfig.c 2014-06-06 19:56:34.000000000 -0700 @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -59963,8 +92125,8 @@ +#ifdef __cplusplus +} +#endif ---- jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c 2013-09-06 11:29:12.000000000 -0700 -+++ jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c 2014-06-06 19:56:34.000000000 -0700 @@ -201,7 +201,7 @@ return IOS_THROWN; } @@ -59983,8 +92145,8 @@ #endif if (numBytes > 0) ---- jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c 2013-09-06 11:29:12.000000000 -0700 -+++ jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/nio/ch/FileDispatcherImpl.c 2014-06-06 19:56:34.000000000 -0700 @@ -227,6 +227,21 @@ fl.l_start = (off64_t)pos; fl.l_type = F_UNLCK; @@ -60007,8 +92169,8 @@ if (lockResult < 0) { JNU_ThrowIOExceptionWithLastError(env, "Release failed"); } ---- jdk/src/solaris/native/sun/nio/ch/Sctp.h 2013-09-06 11:29:12.000000000 -0700 -+++ jdk/src/solaris/native/sun/nio/ch/Sctp.h 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/nio/ch/Sctp.h 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/nio/ch/Sctp.h 2014-06-06 19:56:34.000000000 -0700 @@ -320,8 +320,20 @@ typedef int sctp_peeloff_func(int sock, sctp_assoc_t id); @@ -60048,8 +92210,91 @@ jboolean loadSocketExtensionFuncs(JNIEnv* env); #endif /* !SUN_NIO_CH_SCTP_H */ ---- jdk/src/solaris/native/sun/nio/ch/SctpNet.c 2013-09-06 11:29:12.000000000 -0700 -+++ jdk/src/solaris/native/sun/nio/ch/SctpNet.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/nio/ch/SctpChannelImpl.c 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/nio/ch/SctpChannelImpl.c 2014-06-06 19:56:35.000000000 -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/nio/ch/SctpNet.c 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/nio/ch/SctpNet.c 2014-06-06 19:56:34.000000000 -0700 @@ -58,6 +58,7 @@ */ jboolean loadSocketExtensionFuncs @@ -60066,8 +92311,8 @@ funcsLoaded = JNI_TRUE; return JNI_TRUE; ---- jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c 2013-09-06 11:29:12.000000000 -0700 -+++ jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/security/pkcs11/j2secmod_md.c 2014-06-06 19:56:34.000000000 -0700 @@ -33,6 +33,11 @@ #include "j2secmod.h" @@ -60102,8 +92347,8 @@ (*env)->ReleaseStringUTFChars(env, jLibName, libName); dprintf2("-handle: %u (0X%X)\n", hModule, hModule); ---- jdk/src/solaris/native/sun/xawt/XWindow.c 2013-09-06 11:29:12.000000000 -0700 -+++ jdk/src/solaris/native/sun/xawt/XWindow.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/xawt/XWindow.c 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/xawt/XWindow.c 2014-06-06 19:56:34.000000000 -0700 @@ -867,7 +867,7 @@ { KeySym originalKeysym = *keysym; @@ -60113,8 +92358,326 @@ /* The following code on Linux will cause the keypad keys * not to echo on JTextField when the NumLock is on. The * keysyms will be 0, because the last parameter 2 is not defined. ---- jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java 2013-09-06 11:29:13.000000000 -0700 -+++ jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/solaris/native/sun/xawt/XlibWrapper.c 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/solaris/native/sun/xawt/XlibWrapper.c 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/windows/back/linker_md.c 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:12.000000000 -0700 ++++ ./jdk/src/windows/bin/cmdtoargs.c 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:13.000000000 -0700 ++++ ./jdk/src/windows/classes/java/lang/ProcessImpl.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:13.000000000 -0700 ++++ ./jdk/src/windows/classes/java/net/DualStackPlainSocketImpl.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:13.000000000 -0700 ++++ ./jdk/src/windows/classes/java/net/PlainSocketImpl.java 2014-06-06 19:56:31.000000000 -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/shell/Win32ShellFolderManager2.java 2013-09-06 11:29:13.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. @@ -60163,8 +92726,8 @@ ); return comThread; } ---- jdk/src/windows/classes/sun/awt/windows/WClipboard.java 2013-09-06 11:29:13.000000000 -0700 -+++ jdk/src/windows/classes/sun/awt/windows/WClipboard.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/classes/sun/awt/windows/WClipboard.java 2013-09-06 11:29:13.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/awt/windows/WClipboard.java 2014-04-19 01:27:12.000000000 -0700 @@ -63,7 +63,6 @@ } @@ -60182,8 +92745,395 @@ openClipboard(this); ---- jdk/src/windows/classes/sun/awt/windows/WToolkit.java 2013-09-06 11:29:13.000000000 -0700 -+++ jdk/src/windows/classes/sun/awt/windows/WToolkit.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/classes/sun/awt/windows/WPrinterJob.java 2013-09-06 11:29:13.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/awt/windows/WPrinterJob.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:13.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/awt/windows/WToolkit.java 2014-06-06 19:56:31.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. @@ -60191,15 +93141,17 @@ * 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,6 +38,7 @@ +@@ -37,7 +37,9 @@ + 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; import sun.awt.Win32GraphicsEnvironment; import sun.java2d.d3d.D3DRenderQueue; -@@ -215,7 +216,7 @@ +@@ -215,7 +217,7 @@ private static native void postDispose(); @@ -60208,7 +93160,7 @@ public WToolkit() { // Startup toolkit threads -@@ -232,8 +233,15 @@ +@@ -232,8 +234,15 @@ */ AWTAutoShutdown.notifyToolkitThreadBusy(); @@ -60226,7 +93178,7 @@ toolkitThread.setDaemon(true); toolkitThread.start(); } -@@ -263,14 +271,7 @@ +@@ -263,14 +272,7 @@ private final void registerShutdownHook() { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { @@ -60242,7 +93194,7 @@ public void run() { shutdown(); } -@@ -283,7 +284,14 @@ +@@ -283,7 +285,14 @@ } public void run() { @@ -60258,8 +93210,16 @@ boolean startPump = init(); if (startPump) { ---- jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java 2013-09-06 11:29:13.000000000 -0700 -+++ jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java 2014-04-20 12:39:22.000000000 -0700 +@@ -856,6 +865,7 @@ + */ + private void windowsSettingChange() { + EventQueue.invokeLater(new Runnable() { ++ @Override + public void run() { + updateProperties(); + } +--- ./jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java 2013-09-06 11:29:13.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. @@ -60358,8 +93318,8 @@ screenUpdater.start(); } else { wakeUpUpdateThread(); ---- jdk/src/windows/classes/sun/net/PortConfig.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/windows/classes/sun/net/PortConfig.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/classes/sun/net/PortConfig.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/windows/classes/sun/net/PortConfig.java 2014-01-18 12:16:22.000000000 -0800 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -60426,8 +93386,39 @@ + return upper; + } +} ---- jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java 2013-09-06 11:29:14.000000000 -0700 -+++ jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java 2013-09-06 11:29:14.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java 2014-06-06 19:56:31.000000000 -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/ch/WindowsAsynchronousSocketChannelImpl.java 2013-09-06 11:29:14.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousSocketChannelImpl.java 2014-01-18 12:16:22.000000000 -0800 @@ -31,6 +31,9 @@ import java.net.*; import java.util.concurrent.*; @@ -60472,8 +93463,1277 @@ } catch (IOException x) { bindException = x; } ---- jdk/src/windows/native/java/lang/java_props_md.c 2013-09-06 11:29:15.000000000 -0700 -+++ jdk/src/windows/native/java/lang/java_props_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/classes/sun/nio/fs/WindowsConstants.java 2013-09-06 11:29:14.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/nio/fs/WindowsConstants.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:14.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:14.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/nio/fs/WindowsWatchService.java 2014-06-06 19:56:31.000000000 -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; +- } + +- // 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 ++ criticalError = true; ++ } + } +- +- // 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 2013-09-06 11:29:14.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/print/Win32MediaTray.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:14.000000000 -0700 ++++ ./jdk/src/windows/classes/sun/print/Win32PrintService.java 2014-06-06 19:56:31.000000000 -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); +- } +- +- 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)); +- } ++ // 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); ++ 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 2013-09-06 11:29:14.000000000 -0700 ++++ ./jdk/src/windows/demo/jvmti/hprof/hprof_md.c 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/java/lang/ProcessImpl_md.c 2014-06-06 19:56:31.000000000 -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); ++ 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); ++ } + } +- } + +- 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; ++ 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); + } + } +- _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 (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; ++ 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); + } +- 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/lang/java_props_md.c 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/java/lang/java_props_md.c 2014-04-19 01:27:12.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. @@ -60497,8 +94757,8 @@ default: sprops.os_name = "Windows NT (unknown)"; } } ---- jdk/src/windows/native/java/net/Inet6AddressImpl.c 2013-09-06 11:29:15.000000000 -0700 -+++ jdk/src/windows/native/java/net/Inet6AddressImpl.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/native/java/net/Inet6AddressImpl.c 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/java/net/Inet6AddressImpl.c 2013-12-01 11:14:37.000000000 -0800 @@ -77,7 +77,6 @@ static jclass ni_ia6cls; static jmethodID ni_ia4ctrID; @@ -60547,8 +94807,8 @@ setInetAddress_hostName(env, iaObj, host); (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); inet6Index ++; ---- jdk/src/windows/native/java/net/NetworkInterface.c 2013-09-06 11:29:15.000000000 -0700 -+++ jdk/src/windows/native/java/net/NetworkInterface.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/native/java/net/NetworkInterface.c 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/java/net/NetworkInterface.c 2013-12-01 11:14:37.000000000 -0800 @@ -72,8 +72,6 @@ jclass ni_ia6cls; /* Inet6Address */ @@ -60591,8 +94851,8 @@ ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj == NULL) { free_netaddr(netaddrP); ---- jdk/src/windows/native/java/net/NetworkInterface_winXP.c 2013-09-06 11:29:15.000000000 -0700 -+++ jdk/src/windows/native/java/net/NetworkInterface_winXP.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/native/java/net/NetworkInterface_winXP.c 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/java/net/NetworkInterface_winXP.c 2013-12-01 11:14:37.000000000 -0800 @@ -499,19 +499,15 @@ int scope; iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); @@ -60617,8 +94877,77 @@ ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj == NULL) { free_netaddr(netaddrP); ---- jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c 2013-09-06 11:29:15.000000000 -0700 -+++ jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/native/java/net/SocketInputStream.c 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/java/net/SocketInputStream.c 2014-06-06 19:56:31.000000000 -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; +- +- case WSAECONNRESET: +- case WSAESHUTDOWN: +- /* +- * Connection has been reset - Windows sometimes reports +- * the reset as a shutdown error. +- */ +- JNU_ThrowByName(env, "sun/net/ConnectionResetException", +- ""); +- 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 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/java/net/TwoStacksPlainSocketImpl.c 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/java/net/TwoStacksPlainSocketImpl.c 2013-12-01 11:14:37.000000000 -0800 @@ -728,7 +728,6 @@ setInetAddress_family(env, socketAddressObj, IPv4); (*env)->SetObjectField(env, socket, psi_addressID, socketAddressObj); @@ -60641,8 +94970,8 @@ } /* fields common to AF_INET and AF_INET6 */ ---- jdk/src/windows/native/java/net/net_util_md.c 2013-09-06 11:29:15.000000000 -0700 -+++ jdk/src/windows/native/java/net/net_util_md.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/native/java/net/net_util_md.c 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/java/net/net_util_md.c 2013-12-01 11:14:37.000000000 -0800 @@ -851,7 +851,6 @@ family = (iafam == IPv4)? AF_INET : AF_INET6; if (ipv6_available() && !(family == AF_INET && v4MappedAddress == JNI_FALSE)) { @@ -60664,8 +94993,8 @@ } memset((char *)him6, 0, sizeof(struct SOCKADDR_IN6)); ---- jdk/src/windows/native/sun/font/fontpath.c 2013-09-06 11:29:15.000000000 -0700 -+++ jdk/src/windows/native/sun/font/fontpath.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/native/sun/font/fontpath.c 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/sun/font/fontpath.c 2014-04-19 01:27:12.000000000 -0700 @@ -185,6 +185,12 @@ return 0; } @@ -60759,8 +95088,8 @@ + ReleaseDC(NULL, screenDC); + screenDC = NULL; } ---- jdk/src/windows/native/sun/net/portconfig.c 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/src/windows/native/sun/net/portconfig.c 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/native/sun/net/portconfig.c 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/src/windows/native/sun/net/portconfig.c 2014-01-18 12:16:22.000000000 -0800 @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -60868,8 +95197,596 @@ +#ifdef __cplusplus +} +#endif ---- jdk/src/windows/native/sun/windows/awt_Toolkit.cpp 2013-09-06 11:29:17.000000000 -0700 -+++ jdk/src/windows/native/sun/windows/awt_Toolkit.cpp 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/native/sun/nio/ch/SocketDispatcher.c 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/sun/nio/ch/SocketDispatcher.c 2014-06-06 19:56:31.000000000 -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; + } +- } + +- /* 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 */ ++ count += written; ++ } + + /* 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 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/sun/nio/fs/WindowsNativeDispatcher.c 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:15.000000000 -0700 ++++ ./jdk/src/windows/native/sun/security/krb5/NativeCreds.c 2014-06-06 19:56:31.000000000 -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; ++ if (native_debug) { ++ printf("LSA: TICKET SessionKey KeyType is %d\n", msticket->SessionKey.KeyType); ++ } ++ ++ 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; ++ } + } +- break; +- case KERB_ETYPE_RC4_MD4: +- default: +- // not supported +- ignore_cache = 1; +- break; ++ } + } + +- if (ignore_cache) { ++ 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 2013-09-06 11:29:16.000000000 -0700 ++++ ./jdk/src/windows/native/sun/windows/awt_FileDialog.cpp 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:16.000000000 -0700 ++++ ./jdk/src/windows/native/sun/windows/awt_PrintControl.cpp 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:16.000000000 -0700 ++++ ./jdk/src/windows/native/sun/windows/awt_PrintControl.h 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:16.000000000 -0700 ++++ ./jdk/src/windows/native/sun/windows/awt_PrintJob.cpp 2014-06-06 19:56:31.000000000 -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/src/windows/native/sun/windows/awt_Toolkit.cpp 2013-09-06 11:29:17.000000000 -0700 ++++ ./jdk/src/windows/native/sun/windows/awt_Toolkit.cpp 2014-04-19 01:27:12.000000000 -0700 @@ -365,6 +365,7 @@ HANDLE hCompleted; @@ -60917,8 +95834,8 @@ return result ? JNI_TRUE : JNI_FALSE; } ---- jdk/src/windows/resource/java.manifest 2013-09-06 11:29:17.000000000 -0700 -+++ jdk/src/windows/resource/java.manifest 2014-04-20 12:39:22.000000000 -0700 +--- ./jdk/src/windows/resource/java.manifest 2013-09-06 11:29:17.000000000 -0700 ++++ ./jdk/src/windows/resource/java.manifest 2014-04-19 01:27:12.000000000 -0700 @@ -44,9 +44,15 @@ <!-- Indicate this JDK version is Windows 7 compatible --> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> @@ -60937,8 +95854,8 @@ + </compatibility> </assembly> ---- jdk/test/Makefile 2013-09-06 11:29:17.000000000 -0700 -+++ jdk/test/Makefile 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/Makefile 2013-09-06 11:29:17.000000000 -0700 ++++ ./jdk/test/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -79,6 +79,11 @@ endif OS_VERSION := $(shell $(UNAME) -r) @@ -60951,9 +95868,25 @@ ifeq ($(UNAME_S), Darwin) OS_NAME = macosx OS_ARCH := $(shell $(UNAME) -m) ---- jdk/test/ProblemList.txt 2013-09-06 11:29:17.000000000 -0700 -+++ jdk/test/ProblemList.txt 2014-04-20 12:39:16.000000000 -0700 -@@ -456,6 +456,9 @@ +--- ./jdk/test/ProblemList.txt 2013-09-06 11:29:17.000000000 -0700 ++++ ./jdk/test/ProblemList.txt 2014-06-06 19:56:31.000000000 -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 +@@ -456,6 +447,9 @@ # 7041639, Solaris DSA keypair generation bug java/util/TimeZone/TimeZoneDatePermissionCheck.sh solaris-all @@ -60963,8 +95896,119 @@ ############################################################################ ---- jdk/test/com/sun/corba/se/impl/orb/SetDefaultORBTest.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/com/sun/corba/se/impl/orb/SetDefaultORBTest.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/apple/eawt/DefaultMenuBar/DefaultMenuBarTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/com/apple/eawt/DefaultMenuBar/DefaultMenuBarTest.java 2014-06-06 19:56:31.000000000 -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(); ++ } ++ } ++} +--- ./jdk/test/com/sun/corba/se/impl/orb/SetDefaultORBTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/com/sun/corba/se/impl/orb/SetDefaultORBTest.java 2014-01-18 12:16:22.000000000 -0800 @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -61027,8 +96071,79 @@ + } + } +} ---- jdk/test/com/sun/crypto/provider/TLS/TestLeadingZeroes.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/com/sun/crypto/provider/TLS/TestLeadingZeroes.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/corba/transport/KeepAliveSockets.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/com/sun/corba/transport/KeepAliveSockets.java 2014-06-06 19:56:32.000000000 -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"); ++ } ++ ++} +--- ./jdk/test/com/sun/crypto/provider/TLS/TestLeadingZeroes.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/com/sun/crypto/provider/TLS/TestLeadingZeroes.java 2014-01-18 12:16:22.000000000 -0800 @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -61450,8 +96565,8 @@ + }; +} + ---- jdk/test/com/sun/jdi/ImmutableResourceTest.sh 2013-09-06 11:29:18.000000000 -0700 -+++ jdk/test/com/sun/jdi/ImmutableResourceTest.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/jdi/ImmutableResourceTest.sh 2013-09-06 11:29:18.000000000 -0700 ++++ ./jdk/test/com/sun/jdi/ImmutableResourceTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -56,7 +56,7 @@ OS=`uname -s` @@ -61461,8 +96576,8 @@ PATHSEP=":" ;; ---- jdk/test/com/sun/jdi/JITDebug.sh 2013-09-06 11:29:18.000000000 -0700 -+++ jdk/test/com/sun/jdi/JITDebug.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/jdi/JITDebug.sh 2013-09-06 11:29:18.000000000 -0700 ++++ ./jdk/test/com/sun/jdi/JITDebug.sh 2014-06-06 19:56:34.000000000 -0700 @@ -63,7 +63,7 @@ OS=`uname -s` export TRANSPORT_METHOD @@ -61472,8 +96587,8 @@ PATHSEP=":" TRANSPORT_METHOD=dt_socket ;; ---- jdk/test/com/sun/jdi/PrivateTransportTest.sh 2013-09-06 11:29:18.000000000 -0700 -+++ jdk/test/com/sun/jdi/PrivateTransportTest.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/jdi/PrivateTransportTest.sh 2013-09-06 11:29:18.000000000 -0700 ++++ ./jdk/test/com/sun/jdi/PrivateTransportTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -123,7 +123,7 @@ esac libloc=${jreloc}/lib/${libarch} @@ -61483,8 +96598,8 @@ xx=`find ${jreloc}/lib -name libdt_socket.so` libloc=`dirname ${xx}` ;; ---- jdk/test/com/sun/jdi/ShellScaffold.sh 2013-09-06 11:29:19.000000000 -0700 -+++ jdk/test/com/sun/jdi/ShellScaffold.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/jdi/ShellScaffold.sh 2013-09-06 11:29:19.000000000 -0700 ++++ ./jdk/test/com/sun/jdi/ShellScaffold.sh 2014-06-06 19:56:34.000000000 -0700 @@ -293,7 +293,7 @@ psCmd=ps jstack=jstack.exe @@ -61494,8 +96609,8 @@ transport=dt_socket address= devnull=/dev/null ---- jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh 2013-09-06 11:29:19.000000000 -0700 -+++ jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh 2013-09-06 11:29:19.000000000 -0700 ++++ ./jdk/test/com/sun/jdi/Solaris32AndSolaris64Test.sh 2014-06-06 19:56:34.000000000 -0700 @@ -112,7 +112,7 @@ fi ;; @@ -61505,8 +96620,8 @@ pass "This test always passes on $OS" ;; ---- jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh 2013-09-06 11:29:19.000000000 -0700 -+++ jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh 2013-09-06 11:29:19.000000000 -0700 ++++ ./jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh 2014-06-06 19:56:34.000000000 -0700 @@ -45,7 +45,7 @@ OS=`uname -s` @@ -61516,8 +96631,8 @@ PS=":" ;; Windows* | CYGWIN*) ---- jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh 2013-09-06 11:29:19.000000000 -0700 -+++ jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh 2013-09-06 11:29:19.000000000 -0700 ++++ ./jdk/test/com/sun/management/OperatingSystemMXBean/TestTotalSwap.sh 2014-06-06 19:56:34.000000000 -0700 @@ -72,6 +72,16 @@ done } @@ -61545,8 +96660,8 @@ Darwin ) # $ sysctl -n vm.swapusage # total = 8192.00M used = 7471.11M free = 720.89M (encrypted) ---- jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetMaxFileDescriptorCount.sh 2013-09-06 11:29:19.000000000 -0700 -+++ jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetMaxFileDescriptorCount.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetMaxFileDescriptorCount.sh 2013-09-06 11:29:19.000000000 -0700 ++++ ./jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetMaxFileDescriptorCount.sh 2014-06-06 19:56:34.000000000 -0700 @@ -48,7 +48,7 @@ # Test GetMaxFileDescriptorCount if we are running on Unix @@ -61556,8 +96671,8 @@ runOne GetMaxFileDescriptorCount ;; * ) ---- jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetOpenFileDescriptorCount.sh 2013-09-06 11:29:19.000000000 -0700 -+++ jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetOpenFileDescriptorCount.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetOpenFileDescriptorCount.sh 2013-09-06 11:29:19.000000000 -0700 ++++ ./jdk/test/com/sun/management/UnixOperatingSystemMXBean/GetOpenFileDescriptorCount.sh 2014-06-06 19:56:34.000000000 -0700 @@ -48,7 +48,7 @@ # Test GetOpenFileDescriptorCount if we are running on Unix @@ -61567,8 +96682,287 @@ runOne GetOpenFileDescriptorCount ;; * ) ---- jdk/test/com/sun/tools/attach/CommonSetup.sh 2013-09-06 11:29:21.000000000 -0700 -+++ jdk/test/com/sun/tools/attach/CommonSetup.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/com/sun/nio/sctp/SctpChannel/ReceiveIntoDirect.java 2014-06-06 19:56:32.000000000 -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/com/sun/tools/attach/CommonSetup.sh 2013-09-06 11:29:21.000000000 -0700 ++++ ./jdk/test/com/sun/tools/attach/CommonSetup.sh 2014-06-06 19:56:34.000000000 -0700 @@ -36,7 +36,7 @@ OS=`uname -s` @@ -61578,17 +96972,58 @@ PS=":" FS="/" ;; ---- jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html 2013-09-06 11:29:21.000000000 -0700 -+++ jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html 2014-04-20 12:39:16.000000000 -0700 -@@ -1,6 +1,5 @@ +--- ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/InterprocessMessages.java 2013-09-06 11:29:21.000000000 -0700 ++++ ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/InterprocessMessages.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:29:21.000000000 -0700 ++++ ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.html 2014-06-06 19:56:32.000000000 -0700 +@@ -1,18 +1,39 @@ <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 ++ @bug 8005932 8017456 @summary Java 7 on mac os x only provides text clipboard formats -@@ -9,10 +8,9 @@ + @author mikhail.cherkasov@oracle.com + @library ../../regtesthelpers @library ../../regtesthelpers/process @build Util @build ProcessResults ProcessCommunicator @@ -61601,8 +97036,15 @@ <head> <title>Java 7 on mac os x only provides text clipboard formats</title> </head> ---- jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java 2013-09-06 11:29:21.000000000 -0700 -+++ jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java 2013-09-06 11:29:21.000000000 -0700 ++++ ./jdk/test/java/awt/DataFlavor/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java 2014-06-06 19:56:32.000000000 -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 @@ -22,17 +22,10 @@ */ @@ -61625,8 +97067,666 @@ */ import java.awt.*; import java.awt.datatransfer.DataFlavor; ---- jdk/test/java/awt/Graphics2D/DrawString/DrawRotatedString.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/java/awt/Graphics2D/DrawString/DrawRotatedString.java 2014-04-20 12:39:16.000000000 -0700 +@@ -49,6 +42,7 @@ + import static java.lang.Thread.sleep; + + public class MissedHtmlAndRtfBug extends Applet { ++ + public void init() { + setLayout(new BorderLayout()); + }//End init() +@@ -84,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[]{})); + +@@ -119,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); +@@ -186,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), +@@ -199,6 +197,8 @@ + } catch (InterruptedException e) { + e.printStackTrace(); + } ++ sleep(5000); ++ System.exit(InterprocessMessages.NO_DROP_HAPPENED); + } + + +--- ./jdk/test/java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java 2014-06-06 19:56:32.000000000 -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"); ++ } ++ } ++} +--- ./jdk/test/java/awt/Frame/DefaultUnixIcon/TestUnixDefaultIcon.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/Frame/DefaultUnixIcon/TestUnixDefaultIcon.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:29:22.000000000 -0700 ++++ ./jdk/test/java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java 2014-06-06 19:56:32.000000000 -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 +--- ./jdk/test/java/awt/Graphics2D/DrawString/DrawRotatedString.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/Graphics2D/DrawString/DrawRotatedString.java 2014-04-19 01:27:12.000000000 -0700 @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -61709,8 +97809,8 @@ + return bi; + } +} ---- jdk/test/java/awt/Graphics2D/IncorrectTextSize/IncorrectTextSize.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/java/awt/Graphics2D/IncorrectTextSize/IncorrectTextSize.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/awt/Graphics2D/IncorrectTextSize/IncorrectTextSize.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/Graphics2D/IncorrectTextSize/IncorrectTextSize.java 2014-04-19 01:27:12.000000000 -0700 @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -61789,8 +97889,802 @@ + } + } +} ---- jdk/test/java/awt/PrintJob/Text/stringwidth.sh 2013-09-06 11:29:24.000000000 -0700 -+++ jdk/test/java/awt/PrintJob/Text/stringwidth.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/awt/JAWT/JAWT.sh 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/JAWT/JAWT.sh 2014-06-06 19:56:32.000000000 -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 $? ++ +--- ./jdk/test/java/awt/JAWT/Makefile.cygwin 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/JAWT/Makefile.cygwin 2014-06-06 19:56:32.000000000 -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 ++ +--- ./jdk/test/java/awt/JAWT/Makefile.unix 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/JAWT/Makefile.unix 2014-06-06 19:56:32.000000000 -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) +--- ./jdk/test/java/awt/JAWT/Makefile.win 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/JAWT/Makefile.win 2014-06-06 19:56:32.000000000 -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 +--- ./jdk/test/java/awt/JAWT/MyCanvas.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/JAWT/MyCanvas.java 2014-06-06 19:56:32.000000000 -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); ++ } ++ } ++} +--- ./jdk/test/java/awt/JAWT/myfile.c 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/JAWT/myfile.c 2014-06-06 19:56:32.000000000 -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); ++} +--- ./jdk/test/java/awt/JAWT/myfile.cpp 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/JAWT/myfile.cpp 2014-06-06 19:56:32.000000000 -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); ++} ++ ++} +--- ./jdk/test/java/awt/List/FirstItemRemoveTest/FirstItemRemoveTest.html 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/List/FirstItemRemoveTest/FirstItemRemoveTest.html 2014-06-06 19:56:32.000000000 -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> ++ +--- ./jdk/test/java/awt/List/FirstItemRemoveTest/FirstItemRemoveTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/List/FirstItemRemoveTest/FirstItemRemoveTest.java 2014-06-06 19:56:32.000000000 -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 +--- ./jdk/test/java/awt/PrintJob/Text/stringwidth.sh 2013-09-06 11:29:24.000000000 -0700 ++++ ./jdk/test/java/awt/PrintJob/Text/stringwidth.sh 2014-06-06 19:56:34.000000000 -0700 @@ -25,10 +25,11 @@ fi @@ -61807,8 +98701,8 @@ # Windows if [ -z "${TESTJAVA}" ] ; then ---- jdk/test/java/awt/Toolkit/LoadAWTCrashTest/LoadAWTCrashTest.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/java/awt/Toolkit/LoadAWTCrashTest/LoadAWTCrashTest.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/awt/Toolkit/LoadAWTCrashTest/LoadAWTCrashTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/Toolkit/LoadAWTCrashTest/LoadAWTCrashTest.java 2014-04-19 01:27:12.000000000 -0700 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -61847,8 +98741,623 @@ + // If the bug is present JVM would crash or deadlock + } +} ---- jdk/test/java/awt/event/KeyEvent/KeyReleasedInAppletTest/KeyReleasedInAppletTest.java 2013-09-06 11:29:24.000000000 -0700 -+++ jdk/test/java/awt/event/KeyEvent/KeyReleasedInAppletTest/KeyReleasedInAppletTest.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/awt/Toolkit/ToolkitPropertyTest/bug7129133.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/Toolkit/ToolkitPropertyTest/bug7129133.java 2014-06-06 19:56:32.000000000 -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); ++ } ++ } ++} +--- ./jdk/test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.html 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.html 2014-06-06 19:56:32.000000000 -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> +--- ./jdk/test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/TrayIcon/ShowAfterDisposeTest/ShowAfterDisposeTest.java 2014-06-06 19:56:32.000000000 -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); ++ } ++} +--- ./jdk/test/java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java 2014-06-06 19:56:32.000000000 -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")); ++ } ++ } ++} +--- ./jdk/test/java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java 2014-06-06 19:56:32.000000000 -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")); ++ } ++ } ++} +--- ./jdk/test/java/awt/event/KeyEvent/KeyReleasedInAppletTest/KeyReleasedInAppletTest.java 2013-09-06 11:29:24.000000000 -0700 ++++ ./jdk/test/java/awt/event/KeyEvent/KeyReleasedInAppletTest/KeyReleasedInAppletTest.java 2014-01-18 12:16:24.000000000 -0800 @@ -39,13 +39,10 @@ import java.util.Hashtable; @@ -61867,8 +99376,8 @@ */ public class KeyReleasedInAppletTest extends JApplet { ---- jdk/test/java/awt/font/TextLayout/TestAATMorxFont.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/java/awt/font/TextLayout/TestAATMorxFont.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/awt/font/TextLayout/TestAATMorxFont.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/font/TextLayout/TestAATMorxFont.java 2014-04-19 01:27:12.000000000 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -61956,8 +99465,320 @@ + } +} + ---- jdk/test/java/beans/Introspector/TestTypeResolver.java 2013-09-06 11:29:26.000000000 -0700 -+++ jdk/test/java/beans/Introspector/TestTypeResolver.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/awt/print/bug8023392/bug8023392.html 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/print/bug8023392/bug8023392.html 2014-06-06 19:56:32.000000000 -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> +--- ./jdk/test/java/awt/print/bug8023392/bug8023392.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/awt/print/bug8023392/bug8023392.java 2014-06-06 19:56:32.000000000 -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 ++ +--- ./jdk/test/java/beans/Introspector/TestTypeResolver.java 2013-09-06 11:29:26.000000000 -0700 ++++ ./jdk/test/java/beans/Introspector/TestTypeResolver.java 2014-04-19 01:27:12.000000000 -0700 @@ -113,6 +113,8 @@ // by private implementations of the various Type interfaces if (expect.equals(t) && t.equals(expect)) @@ -61967,8 +99788,322 @@ else { System.out.println(" BUT SHOULD BE " + expect); failedCases.add(c); ---- jdk/test/java/io/File/GetXSpace.sh 2013-09-06 11:29:29.000000000 -0700 -+++ jdk/test/java/io/File/GetXSpace.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/beans/XMLDecoder/8028054/Task.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/beans/XMLDecoder/8028054/Task.java 2014-06-06 19:56:32.000000000 -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; ++ } ++} +--- ./jdk/test/java/beans/XMLDecoder/8028054/TestConstructorFinder.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/beans/XMLDecoder/8028054/TestConstructorFinder.java 2014-06-06 19:56:32.000000000 -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); ++ } ++ } ++} +--- ./jdk/test/java/beans/XMLDecoder/8028054/TestMethodFinder.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/beans/XMLDecoder/8028054/TestMethodFinder.java 2014-06-06 19:56:32.000000000 -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); ++ } ++ } ++} +--- ./jdk/test/java/beans/XMLEncoder/Test8027066.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/beans/XMLEncoder/Test8027066.java 2014-06-06 19:56:32.000000000 -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; ++ } ++} +--- ./jdk/test/java/io/File/GetXSpace.sh 2013-09-06 11:29:29.000000000 -0700 ++++ ./jdk/test/java/io/File/GetXSpace.sh 2014-06-06 19:56:34.000000000 -0700 @@ -26,7 +26,7 @@ # set platform-dependent variable OS=`uname -s` @@ -61978,8 +100113,8 @@ Windows_98 ) return ;; Windows* ) SID=`sid`; TMP="c:/temp" ;; * ) ---- jdk/test/java/io/File/createTempFile/SpecialTempFile.java 2013-09-06 11:29:29.000000000 -0700 -+++ jdk/test/java/io/File/createTempFile/SpecialTempFile.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/io/File/createTempFile/SpecialTempFile.java 2013-09-06 11:29:29.000000000 -0700 ++++ ./jdk/test/java/io/File/createTempFile/SpecialTempFile.java 2013-12-01 11:14:28.000000000 -0800 @@ -23,7 +23,7 @@ /* @@ -62079,8 +100214,8 @@ + test("ReservedName", resvPre, resvSuf, true); } } ---- jdk/test/java/io/FileOutputStream/ManyFiles.java 2013-09-06 11:29:29.000000000 -0700 -+++ jdk/test/java/io/FileOutputStream/ManyFiles.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/io/FileOutputStream/ManyFiles.java 2013-09-06 11:29:29.000000000 -0700 ++++ ./jdk/test/java/io/FileOutputStream/ManyFiles.java 2014-06-06 19:56:34.000000000 -0700 @@ -43,7 +43,7 @@ // Windows capability it is much simpler to only run it // on that platform. @@ -62090,8 +100225,8 @@ return; for (int n = 0; n < NUM_FILES; n++) { ---- jdk/test/java/io/IOException/LastErrorString.java 2013-09-06 11:29:29.000000000 -0700 -+++ jdk/test/java/io/IOException/LastErrorString.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/io/IOException/LastErrorString.java 2013-09-06 11:29:29.000000000 -0700 ++++ ./jdk/test/java/io/IOException/LastErrorString.java 2014-06-06 19:56:32.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved. @@ -62109,8 +100244,8 @@ @summary Test code paths that use the JVM_LastErrorString procedure */ ---- jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh 2013-09-06 11:29:30.000000000 -0700 -+++ jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh 2013-09-06 11:29:30.000000000 -0700 ++++ ./jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh 2014-06-06 19:56:34.000000000 -0700 @@ -41,7 +41,7 @@ # Need to determine the classpath separator and filepath separator based on the # operating system. @@ -62120,8 +100255,8 @@ PS=":" ;; Windows* | CYGWIN* ) PS=";" ;; ---- jdk/test/java/io/Serializable/serialver/classpath/run.sh 2013-09-06 11:29:31.000000000 -0700 -+++ jdk/test/java/io/Serializable/serialver/classpath/run.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/io/Serializable/serialver/classpath/run.sh 2013-09-06 11:29:31.000000000 -0700 ++++ ./jdk/test/java/io/Serializable/serialver/classpath/run.sh 2014-06-06 19:56:34.000000000 -0700 @@ -47,7 +47,7 @@ # set platform-dependent variables OS=`uname -s` @@ -62131,8 +100266,8 @@ PS=":" ;; Windows* | CYGWIN* ) PS=";" ;; ---- jdk/test/java/io/Serializable/serialver/nested/run.sh 2013-09-06 11:29:31.000000000 -0700 -+++ jdk/test/java/io/Serializable/serialver/nested/run.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/io/Serializable/serialver/nested/run.sh 2013-09-06 11:29:31.000000000 -0700 ++++ ./jdk/test/java/io/Serializable/serialver/nested/run.sh 2014-06-06 19:56:34.000000000 -0700 @@ -47,7 +47,7 @@ # set platform-dependent variables OS=`uname -s` @@ -62142,8 +100277,143 @@ PS=":" ;; Windows* | CYGWIN* ) PS=";" ;; ---- jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh 2013-09-06 11:29:32.000000000 -0700 -+++ jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/Class/checkMemberAccess/CheckMemberAccess.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/Class/checkMemberAccess/CheckMemberAccess.java 2014-06-06 19:56:33.000000000 -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 {} ++} +--- ./jdk/test/java/lang/Class/checkMemberAccess/test.policy 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/Class/checkMemberAccess/test.policy 2014-06-06 19:56:33.000000000 -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/ClassLoader/deadlock/TestCrossDelegate.sh 2013-09-06 11:29:32.000000000 -0700 ++++ ./jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh 2014-06-06 19:56:34.000000000 -0700 @@ -45,13 +45,7 @@ # set platform-specific variables OS=`uname -s` @@ -62159,8 +100429,8 @@ FS="/" ;; Windows*) ---- jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh 2013-09-06 11:29:32.000000000 -0700 -+++ jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh 2013-09-06 11:29:32.000000000 -0700 ++++ ./jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh 2014-06-06 19:56:34.000000000 -0700 @@ -49,13 +49,7 @@ # set platform-specific variables OS=`uname -s` @@ -62176,8 +100446,8 @@ FS="/" ;; Windows* | CYGWIN* ) ---- jdk/test/java/lang/ProcessBuilder/Basic.java 2013-09-06 11:29:33.000000000 -0700 -+++ jdk/test/java/lang/ProcessBuilder/Basic.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/ProcessBuilder/Basic.java 2013-09-06 11:29:33.000000000 -0700 ++++ ./jdk/test/java/lang/ProcessBuilder/Basic.java 2014-06-06 19:56:33.000000000 -0700 @@ -29,6 +29,7 @@ * 4947220 7018606 7034570 * @summary Basic tests for Process and Environment Variable code @@ -62186,8 +100456,64 @@ * @author Martin Buchholz */ ---- jdk/test/java/lang/ProcessBuilder/BasicLauncher.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/java/lang/ProcessBuilder/BasicLauncher.java 2014-04-20 12:39:15.000000000 -0700 +@@ -295,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); +@@ -554,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 { +@@ -988,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(); +@@ -1592,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); } +--- ./jdk/test/java/lang/ProcessBuilder/BasicLauncher.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/ProcessBuilder/BasicLauncher.java 2014-04-19 01:27:13.000000000 -0700 @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -62288,8 +100614,649 @@ + } + } +} ---- jdk/test/java/lang/SecurityManager/CheckPackageAccess.java 2013-09-06 11:29:33.000000000 -0700 -+++ jdk/test/java/lang/SecurityManager/CheckPackageAccess.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/ProcessBuilder/InheritIO/InheritIO.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/ProcessBuilder/InheritIO/InheritIO.java 2014-06-06 19:56:33.000000000 -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); ++ } ++ } ++} +--- ./jdk/test/java/lang/ProcessBuilder/InheritIO/InheritIO.sh 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/ProcessBuilder/InheritIO/InheritIO.sh 2014-06-06 19:56:33.000000000 -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' +--- ./jdk/test/java/lang/ProcessBuilder/InheritIOEHandle.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/ProcessBuilder/InheritIOEHandle.java 2014-06-06 19:56:33.000000000 -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. ++ } ++ } ++ } ++} +--- ./jdk/test/java/lang/ProcessBuilder/SiblingIOEHandle.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/ProcessBuilder/SiblingIOEHandle.java 2014-06-06 19:56:33.000000000 -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. ++ } ++ } ++ } ++} +--- ./jdk/test/java/lang/Runtime/exec/CloseRace.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/Runtime/exec/CloseRace.java 2014-06-06 19:56:33.000000000 -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/SecurityManager/CheckPackageAccess.java 2013-09-06 11:29:33.000000000 -0700 ++++ ./jdk/test/java/lang/SecurityManager/CheckPackageAccess.java 2014-06-06 19:56:33.000000000 -0700 @@ -23,7 +23,7 @@ /* @@ -62317,8 +101284,33 @@ "oracle.jrockit.jfr.", "org.jcp.xml.dsig.internal.", }; ---- jdk/test/java/lang/StringCoding/CheckEncodings.sh 2013-09-06 11:29:33.000000000 -0700 -+++ jdk/test/java/lang/StringCoding/CheckEncodings.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/String/ToLowerCase.java 2013-09-06 11:29:33.000000000 -0700 ++++ ./jdk/test/java/lang/String/ToLowerCase.java 2014-06-06 19:56:33.000000000 -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"); +--- ./jdk/test/java/lang/StringCoding/CheckEncodings.sh 2013-09-06 11:29:33.000000000 -0700 ++++ ./jdk/test/java/lang/StringCoding/CheckEncodings.sh 2014-06-06 19:56:34.000000000 -0700 @@ -30,7 +30,7 @@ # set platform-dependent variables OS=`uname -s` @@ -62328,8 +101320,594 @@ Windows* | CYGWIN* ) echo "Passed"; exit 0 ;; * ) echo "Unrecognized system!" ; exit 1 ;; ---- jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh 2013-09-06 11:29:34.000000000 -0700 -+++ jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/System/MacEncoding/ExpectedEncoding.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/System/MacEncoding/ExpectedEncoding.java 2014-06-06 19:56:33.000000000 -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"); ++ } ++ } ++} +--- ./jdk/test/java/lang/System/MacEncoding/MacJNUEncoding.sh 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/System/MacEncoding/MacJNUEncoding.sh 2014-06-06 19:56:33.000000000 -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 ++ +--- ./jdk/test/java/lang/System/MacEncoding/TestFileEncoding.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/System/MacEncoding/TestFileEncoding.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:29:33.000000000 -0700 ++++ ./jdk/test/java/lang/System/MacJNUEncoding/ExpectedEncoding.java 1969-12-31 16:00:00.000000000 -0800 +@@ -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 2013-09-06 11:29:33.000000000 -0700 ++++ ./jdk/test/java/lang/System/MacJNUEncoding/MacJNUEncoding.sh 1969-12-31 16:00:00.000000000 -0800 +@@ -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 2013-09-06 11:29:34.000000000 -0700 ++++ ./jdk/test/java/lang/ThreadGroup/Suspend.java 2014-06-06 19:56:29.000000000 -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/annotation/loaderLeak/LoaderLeak.sh 2013-09-06 11:29:34.000000000 -0700 ++++ ./jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh 2014-06-06 19:56:34.000000000 -0700 @@ -44,7 +44,7 @@ # set platform-dependent variables OS=`uname -s` @@ -62339,8 +101917,8 @@ NULL=/dev/null PS=":" FS="/" ---- jdk/test/java/lang/instrument/MakeJAR2.sh 2013-09-06 11:29:34.000000000 -0700 -+++ jdk/test/java/lang/instrument/MakeJAR2.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/lang/instrument/MakeJAR2.sh 2013-09-06 11:29:34.000000000 -0700 ++++ ./jdk/test/java/lang/instrument/MakeJAR2.sh 2014-06-06 19:56:34.000000000 -0700 @@ -49,7 +49,7 @@ OS=`uname -s` @@ -62350,8 +101928,186 @@ PATHSEP=":" ;; ---- jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh 2013-09-06 11:29:35.000000000 -0700 -+++ jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/instrument/RedefineBigClass.sh 2013-09-06 11:29:34.000000000 -0700 ++++ ./jdk/test/java/lang/instrument/RedefineBigClass.sh 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:34.000000000 -0700 ++++ ./jdk/test/java/lang/instrument/RedefineBigClassApp.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:34.000000000 -0700 ++++ ./jdk/test/java/lang/instrument/RetransformBigClass.sh 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:34.000000000 -0700 ++++ ./jdk/test/java/lang/instrument/RetransformBigClassApp.java 2014-06-06 19:56:29.000000000 -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; ++ } + } +--- ./jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh 2013-09-06 11:29:35.000000000 -0700 ++++ ./jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh 2014-06-06 19:56:34.000000000 -0700 @@ -35,15 +35,7 @@ OS=`uname -s` @@ -62369,8 +102125,82 @@ PS=":" FS="/" ;; ---- jdk/test/java/lang/invoke/MethodHandleConstants.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/java/lang/invoke/MethodHandleConstants.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/invoke/8009222/Test8009222.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/invoke/8009222/Test8009222.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:35.000000000 -0700 ++++ ./jdk/test/java/lang/invoke/BigArityTest.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:35.000000000 -0700 ++++ ./jdk/test/java/lang/invoke/CallSiteTest.java 2014-06-06 19:56:29.000000000 -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/MethodHandleConstants.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/invoke/MethodHandleConstants.java 2013-12-01 11:14:29.000000000 -0800 @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. @@ -62560,8 +102390,130 @@ + } + } +} ---- jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh 2013-09-06 11:29:35.000000000 -0700 -+++ jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/invoke/MethodHandlesTest.java 2013-09-06 11:29:35.000000000 -0700 ++++ ./jdk/test/java/lang/invoke/MethodHandlesTest.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:35.000000000 -0700 ++++ ./jdk/test/java/lang/invoke/RicochetTest.java 2014-06-06 19:56:29.000000000 -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) +--- ./jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/invoke/TestCatchExceptionWithVarargs.java 2014-06-06 19:56:29.000000000 -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/OperatingSystemMXBean/TestSystemLoadAvg.sh 2013-09-06 11:29:35.000000000 -0700 ++++ ./jdk/test/java/lang/management/OperatingSystemMXBean/TestSystemLoadAvg.sh 2014-06-06 19:56:34.000000000 -0700 @@ -61,7 +61,7 @@ while true; do echo "Run $i: TestSystemLoadAvg" @@ -62571,8 +102523,1003 @@ runOne GetSystemLoadAverage ;; * ) ---- jdk/test/java/net/Authenticator/B4933582.sh 2013-09-06 11:29:36.000000000 -0700 -+++ jdk/test/java/net/Authenticator/B4933582.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/lang/management/PlatformLoggingMXBean/LoggingMXBeanTest.java 2013-09-06 11:29:35.000000000 -0700 ++++ ./jdk/test/java/lang/management/PlatformLoggingMXBean/LoggingMXBeanTest.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:35.000000000 -0700 ++++ ./jdk/test/java/lang/management/PlatformLoggingMXBean/PlatformLoggingMXBeanTest.java 2014-06-06 19:56:29.000000000 -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]; +--- ./jdk/test/java/lang/ref/FinalizeOverride.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/lang/ref/FinalizeOverride.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:36.000000000 -0700 ++++ ./jdk/test/java/net/Authenticator/B4769350.java 2014-06-06 19:56:29.000000000 -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"); +- } +- +- void okReply (HttpTransaction req) throws IOException { +- req.addResponseHeader ("Connection", "close"); +- req.setResponseEntityBody ("Hello ."); +- req.sendResponse (200, "Ok"); +- req.orderlyClose(); +- } ++ public void startServer() { ++ InetSocketAddress addr = new InetSocketAddress(0); + +- 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(); +- } ++ 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(); ++ } ++ ++ public int getPort() { ++ return server.getAddress().getPort(); ++ } ++ ++ 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); ++ } + } + } + +- +- 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"); ++ class AuthenticationHandlerT1b 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=\"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"); +- } +- 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 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\""); ++ ++ } ++ } ++ ++ 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; + } + } + } +--- ./jdk/test/java/net/Authenticator/B4933582.sh 2013-09-06 11:29:36.000000000 -0700 ++++ ./jdk/test/java/net/Authenticator/B4933582.sh 2014-06-06 19:56:34.000000000 -0700 @@ -26,7 +26,7 @@ OS=`uname -s` @@ -62582,8 +103529,8 @@ PS=":" FS="/" ;; ---- jdk/test/java/net/DatagramSocket/SendDatagramToBadAddress.java 2013-09-06 11:29:36.000000000 -0700 -+++ jdk/test/java/net/DatagramSocket/SendDatagramToBadAddress.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/net/DatagramSocket/SendDatagramToBadAddress.java 2013-09-06 11:29:36.000000000 -0700 ++++ ./jdk/test/java/net/DatagramSocket/SendDatagramToBadAddress.java 2014-06-06 19:56:34.000000000 -0700 @@ -45,6 +45,8 @@ return (true); if (p.getProperty ("os.name").equals ("Linux")) @@ -62593,8 +103540,8 @@ if (p.getProperty ("os.name").startsWith ("Mac OS")) return (true); // Check for specific Solaris version from here ---- jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh 2013-09-06 11:29:36.000000000 -0700 -+++ jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh 2013-09-06 11:29:36.000000000 -0700 ++++ ./jdk/test/java/net/DatagramSocket/SetDatagramSocketImplFactory/ADatagramSocket.sh 2014-06-06 19:56:34.000000000 -0700 @@ -27,11 +27,7 @@ # set platform-dependent variables OS=`uname -s` @@ -62608,8 +103555,91 @@ PATHSEP=":" FILESEP="/" ;; ---- jdk/test/java/net/Inet6Address/serialize/Serialize.java 2013-09-06 11:29:37.000000000 -0700 -+++ jdk/test/java/net/Inet6Address/serialize/Serialize.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/net/IDN/UseSTD3ASCIIRules.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/net/IDN/UseSTD3ASCIIRules.java 2014-06-06 19:56:29.000000000 -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)); ++ } ++ } ++} +--- ./jdk/test/java/net/Inet6Address/serialize/Serialize.java 2013-09-06 11:29:37.000000000 -0700 ++++ ./jdk/test/java/net/Inet6Address/serialize/Serialize.java 2013-12-01 11:14:30.000000000 -0800 @@ -94,7 +94,26 @@ } finally { ois.close(); @@ -62802,8 +103832,306 @@ + (byte)0x01,(byte)0x78 + }; +} ---- jdk/test/java/net/Socket/OldSocketImpl.sh 2013-09-06 11:29:37.000000000 -0700 -+++ jdk/test/java/net/Socket/OldSocketImpl.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/net/PlainSocketImpl/CustomSocketImplFactory.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/net/PlainSocketImpl/CustomSocketImplFactory.java 2014-06-06 19:56:29.000000000 -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 { ++ } ++ } ++} +--- ./jdk/test/java/net/ServerSocket/AnotherSelectFdsLimit.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/net/ServerSocket/AnotherSelectFdsLimit.java 2014-06-06 19:56:29.000000000 -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); ++ } ++ } ++ } ++} +--- ./jdk/test/java/net/ServerSocket/SelectFdsLimit.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/net/ServerSocket/SelectFdsLimit.java 2014-06-06 19:56:29.000000000 -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) { } ++ } ++} +--- ./jdk/test/java/net/Socket/OldSocketImpl.sh 2013-09-06 11:29:37.000000000 -0700 ++++ ./jdk/test/java/net/Socket/OldSocketImpl.sh 2014-06-06 19:56:34.000000000 -0700 @@ -28,7 +28,7 @@ OS=`uname -s` @@ -62813,8 +104141,88 @@ PS=":" FS="/" ;; ---- jdk/test/java/net/URL/B5086147.sh 2013-09-06 11:29:38.000000000 -0700 -+++ jdk/test/java/net/URL/B5086147.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/net/Socket/asyncClose/Race.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/net/Socket/asyncClose/Race.java 2014-06-06 19:56:29.000000000 -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/URL/B5086147.sh 2013-09-06 11:29:38.000000000 -0700 ++++ ./jdk/test/java/net/URL/B5086147.sh 2014-06-06 19:56:34.000000000 -0700 @@ -26,7 +26,7 @@ OS=`uname -s` @@ -62824,8 +104232,8 @@ exit 0 ;; CYGWIN* ) ---- jdk/test/java/net/URL/runconstructor.sh 2013-09-06 11:29:38.000000000 -0700 -+++ jdk/test/java/net/URL/runconstructor.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/net/URL/runconstructor.sh 2013-09-06 11:29:38.000000000 -0700 ++++ ./jdk/test/java/net/URL/runconstructor.sh 2014-06-06 19:56:34.000000000 -0700 @@ -27,7 +27,7 @@ # OS=`uname -s` @@ -62835,8 +104243,8 @@ PS=":" FS="/" ;; ---- jdk/test/java/net/URLClassLoader/B5077773.sh 2013-09-06 11:29:38.000000000 -0700 -+++ jdk/test/java/net/URLClassLoader/B5077773.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/net/URLClassLoader/B5077773.sh 2013-09-06 11:29:38.000000000 -0700 ++++ ./jdk/test/java/net/URLClassLoader/B5077773.sh 2014-06-06 19:56:34.000000000 -0700 @@ -34,11 +34,7 @@ OS=`uname -s` @@ -62850,8 +104258,90 @@ PS=":" FS="/" ;; ---- jdk/test/java/net/URLClassLoader/sealing/checksealed.sh 2013-09-06 11:29:38.000000000 -0700 -+++ jdk/test/java/net/URLClassLoader/sealing/checksealed.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/net/URLClassLoader/closetest/CloseTest.java 2013-09-06 11:29:38.000000000 -0700 ++++ ./jdk/test/java/net/URLClassLoader/closetest/CloseTest.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:38.000000000 -0700 ++++ ./jdk/test/java/net/URLClassLoader/closetest/Common.java 2014-06-06 19:56:29.000000000 -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 2013-09-06 11:29:38.000000000 -0700 ++++ ./jdk/test/java/net/URLClassLoader/closetest/GetResourceAsStream.java 2014-06-06 19:56:29.000000000 -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/net/URLClassLoader/sealing/checksealed.sh 2013-09-06 11:29:38.000000000 -0700 ++++ ./jdk/test/java/net/URLClassLoader/sealing/checksealed.sh 2014-06-06 19:56:34.000000000 -0700 @@ -27,11 +27,7 @@ OS=`uname -s` @@ -62865,8 +104355,8 @@ PS=":" FS="/" ;; ---- jdk/test/java/net/URLConnection/6212146/test.sh 2013-09-06 11:29:38.000000000 -0700 -+++ jdk/test/java/net/URLConnection/6212146/test.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/net/URLConnection/6212146/test.sh 2013-09-06 11:29:38.000000000 -0700 ++++ ./jdk/test/java/net/URLConnection/6212146/test.sh 2014-06-06 19:56:34.000000000 -0700 @@ -33,11 +33,7 @@ OS=`uname -s` @@ -62880,8 +104370,120 @@ PS=":" FS="/" ;; ---- jdk/test/java/nio/channels/Selector/LotsOfChannels.java 2013-09-06 11:29:40.000000000 -0700 -+++ jdk/test/java/nio/channels/Selector/LotsOfChannels.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java 2013-09-06 11:29:39.000000000 -0700 ++++ ./jdk/test/java/nio/channels/AsynchronousChannelGroup/Unbounded.java 2014-06-06 19:56:29.000000000 -0700 +@@ -36,44 +36,31 @@ + // number of concurrent completion handlers + static final int CONCURRENCY_COUNT = 256; + +- 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); ++ // 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 { + // 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/Selector/LotsOfChannels.java 2013-09-06 11:29:40.000000000 -0700 ++++ ./jdk/test/java/nio/channels/Selector/LotsOfChannels.java 2013-12-01 11:14:31.000000000 -0800 @@ -22,9 +22,10 @@ */ @@ -62895,8 +104497,8 @@ * @author kladko */ ---- jdk/test/java/nio/channels/Selector/SelectorLimit.java 2013-09-06 11:29:40.000000000 -0700 -+++ jdk/test/java/nio/channels/Selector/SelectorLimit.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/nio/channels/Selector/SelectorLimit.java 2013-09-06 11:29:40.000000000 -0700 ++++ ./jdk/test/java/nio/channels/Selector/SelectorLimit.java 2013-12-01 11:14:31.000000000 -0800 @@ -22,12 +22,13 @@ */ @@ -62912,8 +104514,155 @@ */ import java.io.*; ---- jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Makefile 2013-09-06 11:29:40.000000000 -0700 -+++ jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Makefile 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/nio/channels/SocketChannel/ShortWrite.java 2013-09-06 11:29:40.000000000 -0700 ++++ ./jdk/test/java/nio/channels/SocketChannel/ShortWrite.java 2014-06-06 19:56:29.000000000 -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/channels/spi/SelectorProvider/inheritedChannel/Makefile 2013-09-06 11:29:40.000000000 -0700 ++++ ./jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/Makefile 2014-06-06 19:56:34.000000000 -0700 @@ -71,6 +71,48 @@ EXTRA_LIBS = -lc endif @@ -62963,8 +104712,8 @@ LIBDIR=lib/$(PLATFORM)-$(ARCH) LAUNCHERLIB=$(LIBDIR)/libLauncher.so ---- jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh 2013-09-06 11:29:40.000000000 -0700 -+++ jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh 2013-09-06 11:29:40.000000000 -0700 ++++ ./jdk/test/java/nio/channels/spi/SelectorProvider/inheritedChannel/run_tests.sh 2014-06-06 19:56:34.000000000 -0700 @@ -33,11 +33,14 @@ # @run shell run_tests.sh @@ -63033,8 +104782,8 @@ LIBDIR=lib/${PLATFORM}-${ARCH} LAUNCHERLIB=${LIBDIR}/libLauncher.so ---- jdk/test/java/nio/charset/Charset/default.sh 2013-09-06 11:29:40.000000000 -0700 -+++ jdk/test/java/nio/charset/Charset/default.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/nio/charset/Charset/default.sh 2013-09-06 11:29:40.000000000 -0700 ++++ ./jdk/test/java/nio/charset/Charset/default.sh 2014-06-06 19:56:34.000000000 -0700 @@ -41,10 +41,14 @@ fi @@ -63054,8 +104803,8 @@ JAVA=$TESTJAVA/bin/java ---- jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh 2013-09-06 11:29:40.000000000 -0700 -+++ jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh 2013-09-06 11:29:40.000000000 -0700 ++++ ./jdk/test/java/nio/charset/coders/CheckSJISMappingProp.sh 2014-06-06 19:56:34.000000000 -0700 @@ -34,7 +34,7 @@ OS=`uname -s` @@ -63065,8 +104814,8 @@ # Skip locale test for Windows Windows* ) echo "Passed"; exit 0 ;; ---- jdk/test/java/nio/charset/spi/basic.sh 2013-09-06 11:29:40.000000000 -0700 -+++ jdk/test/java/nio/charset/spi/basic.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/nio/charset/spi/basic.sh 2013-09-06 11:29:40.000000000 -0700 ++++ ./jdk/test/java/nio/charset/spi/basic.sh 2014-06-06 19:56:34.000000000 -0700 @@ -70,10 +70,14 @@ L="$1" shift @@ -63095,8 +104844,8 @@ Windows* ) CPS=';' ;; *) echo "Unknown platform: `uname`"; exit 1 ;; esac ---- jdk/test/java/nio/file/FileSystem/Basic.java 2013-09-06 11:29:41.000000000 -0700 -+++ jdk/test/java/nio/file/FileSystem/Basic.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/nio/file/FileSystem/Basic.java 2013-09-06 11:29:41.000000000 -0700 ++++ ./jdk/test/java/nio/file/FileSystem/Basic.java 2014-06-06 19:56:34.000000000 -0700 @@ -76,6 +76,8 @@ checkSupported(fs, "posix", "unix", "owner", "acl", "user"); if (os.equals("Linux")) @@ -63106,8 +104855,72 @@ if (os.contains("OS X")) checkSupported(fs, "posix", "unix", "owner"); if (os.equals("Windows")) ---- jdk/test/java/nio/file/Files/CopyAndMove.java 2013-09-06 11:29:41.000000000 -0700 -+++ jdk/test/java/nio/file/Files/CopyAndMove.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/nio/file/Files/BytesAndLines.java 2013-09-06 11:29:41.000000000 -0700 ++++ ./jdk/test/java/nio/file/Files/BytesAndLines.java 2014-06-06 19:56:29.000000000 -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/nio/file/Files/CopyAndMove.java 2013-09-06 11:29:41.000000000 -0700 ++++ ./jdk/test/java/nio/file/Files/CopyAndMove.java 2014-06-06 19:56:34.000000000 -0700 @@ -634,7 +634,7 @@ // check POSIX attributes are copied @@ -63126,8 +104939,8 @@ boolean isDirectory = isDirectory(file, NOFOLLOW_LINKS); if (isUnix) { ---- jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java 2013-09-06 11:29:42.000000000 -0700 -+++ jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java 2013-09-06 11:29:42.000000000 -0700 ++++ ./jdk/test/java/rmi/activation/rmidViaInheritedChannel/RmidViaInheritedChannel.java 2014-01-18 12:16:28.000000000 -0800 @@ -88,6 +88,17 @@ TestLibrary.RMIDVIAINHERITEDCHANNEL_ACTIVATION_PORT); rmid.addOptions(new String[]{ @@ -63146,8 +104959,8 @@ rmid.start(); /* ---- jdk/test/java/rmi/registry/readTest/readTest.sh 2013-09-06 11:29:43.000000000 -0700 -+++ jdk/test/java/rmi/registry/readTest/readTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/rmi/registry/readTest/readTest.sh 2013-09-06 11:29:43.000000000 -0700 ++++ ./jdk/test/java/rmi/registry/readTest/readTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -29,8 +29,12 @@ # @run shell readTest.sh @@ -63223,8 +105036,8 @@ +exit ${exitCode} ---- jdk/test/java/rmi/reliability/launch_reliability.ksh 2013-09-06 11:29:43.000000000 -0700 -+++ jdk/test/java/rmi/reliability/launch_reliability.ksh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/rmi/reliability/launch_reliability.ksh 2013-09-06 11:29:43.000000000 -0700 ++++ ./jdk/test/java/rmi/reliability/launch_reliability.ksh 2014-06-06 19:56:34.000000000 -0700 @@ -84,14 +84,12 @@ @@ -63244,8 +105057,15 @@ export PATH_SEP mainpid=$$ ---- jdk/test/java/rmi/testlibrary/TestLibrary.java 2013-09-06 11:29:44.000000000 -0700 -+++ jdk/test/java/rmi/testlibrary/TestLibrary.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/rmi/testlibrary/TestLibrary.java 2013-09-06 11:29:44.000000000 -0700 ++++ ./jdk/test/java/rmi/testlibrary/TestLibrary.java 2014-06-06 19:56:30.000000000 -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 @@ -86,13 +86,13 @@ * FIXED_PORT_MIN or above FIXED_PORT_MAX, then adjust * FIXED_PORT_MIN/MAX appropriately. @@ -63267,8 +105087,42 @@ private final static int MAX_SERVER_SOCKET_TRIES = 2*(FIXED_PORT_MAX-FIXED_PORT_MIN+1); static void mesg(Object mesg) { ---- jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh 2013-09-06 11:29:45.000000000 -0700 -+++ jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh 2014-04-20 12:39:15.000000000 -0700 +@@ -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; +--- ./jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh 2013-09-06 11:29:45.000000000 -0700 ++++ ./jdk/test/java/security/Security/ClassLoaderDeadlock/ClassLoaderDeadlock.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,15 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63286,8 +105140,8 @@ PATHSEP=":" FILESEP="/" ;; ---- jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh 2013-09-06 11:29:46.000000000 -0700 -+++ jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh 2013-09-06 11:29:46.000000000 -0700 ++++ ./jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock.sh 2014-06-06 19:56:34.000000000 -0700 @@ -34,15 +34,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63305,8 +105159,8 @@ PATHSEP=":" FILESEP="/" ;; ---- jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh 2013-09-06 11:29:46.000000000 -0700 -+++ jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh 2013-09-06 11:29:46.000000000 -0700 ++++ ./jdk/test/java/security/Security/ClassLoaderDeadlock/Deadlock2.sh 2014-06-06 19:56:34.000000000 -0700 @@ -50,19 +50,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63328,8 +105182,8 @@ PATHSEP=":" FILESEP="/" ;; ---- jdk/test/java/security/Security/signedfirst/Dyn.sh 2013-09-06 11:29:46.000000000 -0700 -+++ jdk/test/java/security/Security/signedfirst/Dyn.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/security/Security/signedfirst/Dyn.sh 2013-09-06 11:29:46.000000000 -0700 ++++ ./jdk/test/java/security/Security/signedfirst/Dyn.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,15 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63347,8 +105201,8 @@ PATHSEP=":" FILESEP="/" ;; ---- jdk/test/java/security/Security/signedfirst/Static.sh 2013-09-06 11:29:46.000000000 -0700 -+++ jdk/test/java/security/Security/signedfirst/Static.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/security/Security/signedfirst/Static.sh 2013-09-06 11:29:46.000000000 -0700 ++++ ./jdk/test/java/security/Security/signedfirst/Static.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,15 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63366,8 +105220,134 @@ PATHSEP=":" FILESEP="/" ;; ---- jdk/test/java/util/Currency/PropertiesTest.sh 2013-09-06 11:29:47.000000000 -0700 -+++ jdk/test/java/util/Currency/PropertiesTest.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/util/Arrays/TimSortStackSize.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/Arrays/TimSortStackSize.java 2014-06-06 19:56:30.000000000 -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; ++ } ++ ++} +--- ./jdk/test/java/util/Currency/PropertiesTest.sh 2013-09-06 11:29:47.000000000 -0700 ++++ ./jdk/test/java/util/Currency/PropertiesTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -30,7 +30,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63377,8 +105357,8 @@ PS=":" FS="/" ;; ---- jdk/test/java/util/PluggableLocale/ExecTest.sh 2013-09-06 11:29:48.000000000 -0700 -+++ jdk/test/java/util/PluggableLocale/ExecTest.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/util/PluggableLocale/ExecTest.sh 2013-09-06 11:29:48.000000000 -0700 ++++ ./jdk/test/java/util/PluggableLocale/ExecTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -58,7 +58,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63388,8 +105368,8 @@ PS=":" FS="/" ;; ---- jdk/test/java/util/ResourceBundle/Bug6299235Test.sh 2013-09-06 11:29:49.000000000 -0700 -+++ jdk/test/java/util/ResourceBundle/Bug6299235Test.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/util/ResourceBundle/Bug6299235Test.sh 2013-09-06 11:29:49.000000000 -0700 ++++ ./jdk/test/java/util/ResourceBundle/Bug6299235Test.sh 2014-06-06 19:56:34.000000000 -0700 @@ -31,7 +31,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63399,8 +105379,8 @@ PATHSEP=":" FILESEP="/" ;; ---- jdk/test/java/util/ResourceBundle/Control/ExpirationTest.sh 2013-09-06 11:29:49.000000000 -0700 -+++ jdk/test/java/util/ResourceBundle/Control/ExpirationTest.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/util/ResourceBundle/Control/ExpirationTest.sh 2013-09-06 11:29:49.000000000 -0700 ++++ ./jdk/test/java/util/ResourceBundle/Control/ExpirationTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -72,10 +72,10 @@ Windows* | CYGWIN* ) DEL=";" @@ -63414,8 +105394,8 @@ DEL=":" HAS_S=YES ;; ---- jdk/test/java/util/ServiceLoader/basic.sh 2013-09-06 11:29:50.000000000 -0700 -+++ jdk/test/java/util/ServiceLoader/basic.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/util/ServiceLoader/basic.sh 2013-09-06 11:29:50.000000000 -0700 ++++ ./jdk/test/java/util/ServiceLoader/basic.sh 2014-06-06 19:56:34.000000000 -0700 @@ -42,9 +42,7 @@ OS=`uname -s` @@ -63427,8 +105407,213 @@ SEP=':' ;; * ) SEP='\;' ;; ---- jdk/test/java/util/logging/TestAppletLoggerContext.java 2013-09-06 11:29:51.000000000 -0700 -+++ jdk/test/java/util/logging/TestAppletLoggerContext.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/util/jar/JarInputStream/ExtraFileInMetaInf.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/jar/JarInputStream/ExtraFileInMetaInf.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:51.000000000 -0700 ++++ ./jdk/test/java/util/logging/LevelResourceBundle.java 2014-06-06 19:56:30.000000000 -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"; +--- ./jdk/test/java/util/logging/LocalizedLevelName.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/logging/LocalizedLevelName.java 2014-06-06 19:56:30.000000000 -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); ++ } ++} +--- ./jdk/test/java/util/logging/TestAppletLoggerContext.java 2013-09-06 11:29:51.000000000 -0700 ++++ ./jdk/test/java/util/logging/TestAppletLoggerContext.java 2014-04-19 01:27:14.000000000 -0700 @@ -110,28 +110,19 @@ } @@ -63463,8 +105648,1242 @@ } final static JavaAWTAccessStub javaAwtAccess = new JavaAWTAccessStub(); ---- jdk/test/java/util/logging/TestLoggingWithMainAppContext.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/java/util/logging/TestLoggingWithMainAppContext.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/util/logging/TestGetLoggerNPE.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/logging/TestGetLoggerNPE.java 2014-06-06 19:56:30.000000000 -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); ++ } ++ ++ } ++ ++} +--- ./jdk/test/java/util/logging/TestLogConfigurationDeadLock.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/logging/TestLogConfigurationDeadLock.java 2014-06-06 19:56:30.000000000 -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; ++ } ++} +--- ./jdk/test/java/util/logging/TestLogConfigurationDeadLockWithConf.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/logging/TestLogConfigurationDeadLockWithConf.java 2014-06-06 19:56:30.000000000 -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; ++ } ++} +--- ./jdk/test/java/util/logging/TestLoggerBundleSync.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/logging/TestLoggerBundleSync.java 2014-06-06 19:56:30.000000000 -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/TestLoggingWithMainAppContext.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/logging/TestLoggingWithMainAppContext.java 2014-04-19 01:27:14.000000000 -0700 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -63541,8 +106960,8 @@ + System.out.println("Test passed."); + } +} ---- jdk/test/java/util/logging/TestMainAppContext.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/java/util/logging/TestMainAppContext.java 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/java/util/logging/TestMainAppContext.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/logging/TestMainAppContext.java 2014-04-19 01:27:14.000000000 -0700 @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -63629,8 +107048,149 @@ + } + +} ---- jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh 2013-09-06 11:29:52.000000000 -0700 -+++ jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java 2013-09-06 11:29:51.000000000 -0700 ++++ ./jdk/test/java/util/logging/bundlesearch/ResourceBundleSearchTest.java 2014-06-06 19:56:30.000000000 -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; +--- ./jdk/test/java/util/logging/deadlockconf.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/java/util/logging/deadlockconf.properties 2014-06-06 19:56:30.000000000 -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 +--- ./jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh 2013-09-06 11:29:52.000000000 -0700 ++++ ./jdk/test/javax/crypto/SecretKeyFactory/FailOverTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -51,7 +51,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63640,8 +107200,8 @@ NULL=/dev/null PS=":" FS="/" ---- jdk/test/javax/imageio/plugins/jpeg/JpegWriterLeakTest.java 2013-09-06 11:29:52.000000000 -0700 -+++ jdk/test/javax/imageio/plugins/jpeg/JpegWriterLeakTest.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/javax/imageio/plugins/jpeg/JpegWriterLeakTest.java 2013-09-06 11:29:52.000000000 -0700 ++++ ./jdk/test/javax/imageio/plugins/jpeg/JpegWriterLeakTest.java 2013-12-01 11:14:33.000000000 -0800 @@ -23,7 +23,7 @@ /** @@ -63651,8 +107211,8 @@ * @summary Test verifies that jpeg writer instances are collected * even if destroy() or reset() methods is not invoked. * ---- jdk/test/javax/imageio/plugins/jpeg/TruncatedImageWarningTest.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/javax/imageio/plugins/jpeg/TruncatedImageWarningTest.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/javax/imageio/plugins/jpeg/TruncatedImageWarningTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/imageio/plugins/jpeg/TruncatedImageWarningTest.java 2014-04-19 01:27:14.000000000 -0700 @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. @@ -63713,8 +107273,8 @@ + } +} Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg differ ---- jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh 2013-09-06 11:29:52.000000000 -0700 -+++ jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh 2013-09-06 11:29:52.000000000 -0700 ++++ ./jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh 2014-06-06 19:56:34.000000000 -0700 @@ -84,7 +84,7 @@ TMP="/tmp" ;; @@ -63739,8 +107299,1285 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk Windows* ) VAR="A different value for Win32" DEFAULT_JDK="C:/Program Files/Java/jdk1.8.0" ---- jdk/test/javax/management/remote/mandatory/loading/MissingClassTest.java 2013-09-06 11:29:54.000000000 -0700 -+++ jdk/test/javax/management/remote/mandatory/loading/MissingClassTest.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/javax/management/MBeanInfo/MBeanInfoEqualsNPETest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/management/MBeanInfo/MBeanInfoEqualsNPETest.java 2014-06-06 19:56:30.000000000 -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++; ++ } ++ } ++} +--- ./jdk/test/javax/management/MBeanInfo/MBeanInfoHashCodeNPETest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/management/MBeanInfo/MBeanInfoHashCodeNPETest.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:53.000000000 -0700 ++++ ./jdk/test/javax/management/monitor/CounterMonitorThresholdTest.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:53.000000000 -0700 ++++ ./jdk/test/javax/management/monitor/NullAttributeValueTest.java 2014-06-06 19:56:30.000000000 -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 + */ +--- ./jdk/test/javax/management/openmbean/OpenMBeanInfoEqualsNPETest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/management/openmbean/OpenMBeanInfoEqualsNPETest.java 2014-06-06 19:56:30.000000000 -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++; ++ } ++ } ++} +--- ./jdk/test/javax/management/openmbean/OpenMBeanInfoHashCodeNPETest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/management/openmbean/OpenMBeanInfoHashCodeNPETest.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:54.000000000 -0700 ++++ ./jdk/test/javax/management/remote/mandatory/URLTest.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:54.000000000 -0700 ++++ ./jdk/test/javax/management/remote/mandatory/connection/BrokenConnectionTest.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:54.000000000 -0700 ++++ ./jdk/test/javax/management/remote/mandatory/connection/IdleTimeoutTest.java 2014-06-06 19:56:30.000000000 -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())) { +--- ./jdk/test/javax/management/remote/mandatory/connection/RMIConnectorInternalMapTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/management/remote/mandatory/connection/RMIConnectorInternalMapTest.java 2014-06-06 19:56:30.000000000 -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) { ++ } ++ } ++ } ++} +--- ./jdk/test/javax/management/remote/mandatory/connection/RMIConnectorNullSubjectConnTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/management/remote/mandatory/connection/RMIConnectorNullSubjectConnTest.java 2014-06-06 19:56:30.000000000 -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) { ++ } ++ } ++ } ++} +--- ./jdk/test/javax/management/remote/mandatory/loading/MissingClassTest.java 2013-09-06 11:29:54.000000000 -0700 ++++ ./jdk/test/javax/management/remote/mandatory/loading/MissingClassTest.java 2013-12-01 11:14:33.000000000 -0800 @@ -23,7 +23,7 @@ /* @@ -63750,8 +108587,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk * @summary Tests behavior when client or server gets object of unknown class * @author Eamonn McManus * @run clean MissingClassTest SingleClassLoader ---- jdk/test/javax/script/CommonSetup.sh 2013-09-06 11:29:55.000000000 -0700 -+++ jdk/test/javax/script/CommonSetup.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/javax/script/CommonSetup.sh 2013-09-06 11:29:55.000000000 -0700 ++++ ./jdk/test/javax/script/CommonSetup.sh 2014-06-06 19:56:34.000000000 -0700 @@ -36,7 +36,7 @@ OS=`uname -s` @@ -63761,8 +108598,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/javax/script/GetInterfaceTest.java 2013-09-06 11:29:55.000000000 -0700 -+++ jdk/test/javax/script/GetInterfaceTest.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/javax/script/GetInterfaceTest.java 2013-09-06 11:29:55.000000000 -0700 ++++ ./jdk/test/javax/script/GetInterfaceTest.java 2014-01-18 12:16:29.000000000 -0800 @@ -67,11 +67,11 @@ foo2.bar2(); } @@ -63777,8 +108614,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk public void bar2(); } } ---- jdk/test/javax/security/auth/Subject/doAs/Test.sh 2013-09-06 11:29:55.000000000 -0700 -+++ jdk/test/javax/security/auth/Subject/doAs/Test.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/javax/security/auth/Subject/doAs/Test.sh 2013-09-06 11:29:55.000000000 -0700 ++++ ./jdk/test/javax/security/auth/Subject/doAs/Test.sh 2014-06-06 19:56:34.000000000 -0700 @@ -33,17 +33,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63798,8 +108635,4037 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" RM="/bin/rm -f" ---- jdk/test/jprt.config 2013-09-06 11:30:01.000000000 -0700 -+++ jdk/test/jprt.config 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/javax/swing/JComboBox/6236162/bug6236162.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/JComboBox/6236162/bug6236162.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:58.000000000 -0700 ++++ ./jdk/test/javax/swing/JFileChooser/4150029/bug4150029.html 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:58.000000000 -0700 ++++ ./jdk/test/javax/swing/JFileChooser/4150029/bug4150029.java 2014-06-06 19:56:30.000000000 -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 +--- ./jdk/test/javax/swing/JInternalFrame/4193219/IconCoord.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/JInternalFrame/4193219/IconCoord.java 2014-06-06 19:56:30.000000000 -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(); ++ } ++ } ++ } ++} +--- ./jdk/test/javax/swing/JInternalFrame/4251301/bug4251301.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/JInternalFrame/4251301/bug4251301.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:58.000000000 -0700 ++++ ./jdk/test/javax/swing/JInternalFrame/InternalFrameIsNotCollectedTest.java 2014-06-06 19:56:30.000000000 -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); +--- ./jdk/test/javax/swing/JMenuBar/4750590/bug4750590.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/JMenuBar/4750590/bug4750590.java 2014-06-06 19:56:30.000000000 -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; ++ } ++ } ++ ++} +--- ./jdk/test/javax/swing/JMenuItem/4171437/bug4171437.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/JMenuItem/4171437/bug4171437.java 2014-06-06 19:56:30.000000000 -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 2013-09-06 11:29:58.000000000 -0700 ++++ ./jdk/test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java 2014-06-06 19:56:30.000000000 -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; +--- ./jdk/test/javax/swing/JPopupMenu/4458079/bug4458079.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/JPopupMenu/4458079/bug4458079.java 2014-06-06 19:56:30.000000000 -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) {} ++} +--- ./jdk/test/javax/swing/JSplitPane/4816114/bug4816114.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/JSplitPane/4816114/bug4816114.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:29:59.000000000 -0700 ++++ ./jdk/test/javax/swing/JTable/7068740/bug7068740.java 2014-06-06 19:56:31.000000000 -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(); +--- ./jdk/test/javax/swing/JTree/4927934/bug4927934.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/JTree/4927934/bug4927934.java 2014-06-06 19:56:31.000000000 -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; ++ } ++} +--- ./jdk/test/javax/swing/Popup/TaskbarPositionTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/Popup/TaskbarPositionTest.java 2014-06-06 19:56:31.000000000 -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); ++ } ++} +--- ./jdk/test/javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 2014-06-06 19:56:31.000000000 -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"); ++ } ++ } ++} +--- ./jdk/test/javax/swing/plaf/basic/BasicTreeUI/8023474/bug8023474.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/plaf/basic/BasicTreeUI/8023474/bug8023474.java 2014-06-06 19:56:31.000000000 -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; ++ } ++ } ++} +--- ./jdk/test/javax/swing/text/StyledEditorKit/8016833/bug8016833.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/swing/text/StyledEditorKit/8016833/bug8016833.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:30:00.000000000 -0700 ++++ ./jdk/test/javax/swing/text/View/8014863/bug8014863.java 2014-06-06 19:56:31.000000000 -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(); + +- Util.hitKeys(robot, KeyEvent.VK_HOME); +- Util.hitKeys(robot, KeyEvent.VK_O); ++ SwingUtilities.invokeAndWait(new Runnable() { ++ public void run() { ++ retrieveGlyphViews(editorPane.getUI().getRootView(editorPane)); ++ } ++ }); ++ GlyphView [] arr1 = glyphViews.toArray(new GlyphView[glyphViews.size()]); + +- toolkit.realSync(); ++ frame.dispose(); ++ glyphViews.clear(); + +- if (3 != getNumberOfTextLines()) { +- throw new RuntimeException("The number of texts lines does not meet the expectation"); +- } +- +- Util.hitKeys(robot, KeyEvent.VK_N); ++ createAndShowGUI(text2); + + toolkit.realSync(); + +- if (3 != getNumberOfTextLines()) { +- throw new RuntimeException("The number of texts lines does not meet the expectation"); +- } ++ Util.hitKeys(robot, KeyEvent.VK_HOME); ++ toolkit.realSync(); + ++ Util.hitKeys(robot, KeyEvent.VK_O); ++ Util.hitKeys(robot, KeyEvent.VK_N); + 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"); +- } +- } +- +- 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(); ++ retrieveGlyphViews(editorPane.getUI().getRootView(editorPane)); + } + }); +- return result[0]; ++ 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 setCaretPosition(final int position) throws Exception { +- SwingUtilities.invokeAndWait(new Runnable() { +- public void run() { +- editorPane.setCaretPosition(position); ++ 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 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); +--- ./jdk/test/javax/xml/jaxp/XPath/8009579/XPathExceptionInitCause.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/XPath/8009579/XPathExceptionInitCause.java 2014-06-06 19:56:31.000000000 -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."); ++ } ++ ++ } ++} +--- ./jdk/test/javax/xml/jaxp/XPath/8015978/XPathNegativeZero.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/XPath/8015978/XPathNegativeZero.java 2014-06-06 19:56:31.000000000 -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(); ++ } ++} +--- ./jdk/test/javax/xml/jaxp/XPath/8015978/dummy.xml 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/XPath/8015978/dummy.xml 2014-06-06 19:56:31.000000000 -0700 +@@ -0,0 +1 @@ ++<top/> +--- ./jdk/test/javax/xml/jaxp/XPath/8015978/negativezero.xsl 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/XPath/8015978/negativezero.xsl 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:30:01.000000000 -0700 ++++ ./jdk/test/javax/xml/jaxp/parsers/8022548/XOMParserTest.java 2014-06-06 19:56:31.000000000 -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 (InputStream xslInput = new FileInputStream(xslFilename); ++ InputStream xmlInput = new FileInputStream(inFilename); ++ OutputStream out = new FileOutputStream(outFilename); ++ ) { + +- try { +- +- 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); +--- ./jdk/test/javax/xml/jaxp/parsers/8024707/TestFunc.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/parsers/8024707/TestFunc.java 2014-06-06 19:56:31.000000000 -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); ++ } ++} +--- ./jdk/test/javax/xml/jaxp/parsers/8024707/XSLT.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/parsers/8024707/XSLT.java 2014-06-06 19:56:31.000000000 -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"); ++ } ++} +--- ./jdk/test/javax/xml/jaxp/parsers/8024707/in.xml 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/parsers/8024707/in.xml 2014-06-06 19:56:31.000000000 -0700 +@@ -0,0 +1,4 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<root> ++<input1><seq-elem1>inp1_1</seq-elem1></input1> ++</root> +--- ./jdk/test/javax/xml/jaxp/parsers/8024707/test.xsl 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/parsers/8024707/test.xsl 2014-06-06 19:56:31.000000000 -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> +--- ./jdk/test/javax/xml/jaxp/transform/8004476/SecureProcessingTest.xml 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/transform/8004476/SecureProcessingTest.xml 2014-06-06 19:56:31.000000000 -0700 +@@ -0,0 +1,2 @@ ++<?xml version="1.0"?> ++<helloWorld/> +--- ./jdk/test/javax/xml/jaxp/transform/8004476/TestBase.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/transform/8004476/TestBase.java 2014-06-06 19:56:31.000000000 -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); ++ } ++ ++} +--- ./jdk/test/javax/xml/jaxp/transform/8004476/XPathExFuncTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/transform/8004476/XPathExFuncTest.java 2014-06-06 19:56:31.000000000 -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() { ++ } ++ } ++} +--- ./jdk/test/javax/xml/jaxp/transform/8004476/XSLTExFuncTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/transform/8004476/XSLTExFuncTest.java 2014-06-06 19:56:31.000000000 -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() { ++ } ++ } ++} +--- ./jdk/test/javax/xml/jaxp/transform/8004476/tokenize.xml 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/transform/8004476/tokenize.xml 2014-06-06 19:56:31.000000000 -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> +--- ./jdk/test/javax/xml/jaxp/transform/8004476/tokenize.xsl 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/transform/8004476/tokenize.xsl 2014-06-06 19:56:31.000000000 -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> +--- ./jdk/test/javax/xml/jaxp/validation/8015092/XPathWhiteSpaceTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/validation/8015092/XPathWhiteSpaceTest.java 2014-06-06 19:56:31.000000000 -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()); ++ } ++ ++ ++ } ++ ++} +--- ./jdk/test/javax/xml/jaxp/validation/8015092/idIxpns.xsd 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/validation/8015092/idIxpns.xsd 2014-06-06 19:56:31.000000000 -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> +--- ./jdk/test/javax/xml/jaxp/validation/8015092/idIxpns1.xsd 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/validation/8015092/idIxpns1.xsd 2014-06-06 19:56:31.000000000 -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> +--- ./jdk/test/javax/xml/jaxp/validation/8015092/idJ029.xsd 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/validation/8015092/idJ029.xsd 2014-06-06 19:56:31.000000000 -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> +--- ./jdk/test/javax/xml/jaxp/validation/8015092/idJimp.xsd 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/validation/8015092/idJimp.xsd 2014-06-06 19:56:31.000000000 -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> +--- ./jdk/test/javax/xml/jaxp/validation/8015243/AnyURITest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/validation/8015243/AnyURITest.java 2014-06-06 19:56:31.000000000 -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. ++ } ++ ++ ++ } ++ ++} +--- ./jdk/test/javax/xml/jaxp/validation/8015243/anyURI_b006.xsd 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/jaxp/validation/8015243/anyURI_b006.xsd 2014-06-06 19:56:31.000000000 -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> +--- ./jdk/test/javax/xml/ws/clientjar/TestService.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/ws/clientjar/TestService.java 2014-06-06 19:56:31.000000000 -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 ++ } ++} +--- ./jdk/test/javax/xml/ws/clientjar/TestWsImport.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/javax/xml/ws/clientjar/TestWsImport.java 2014-06-06 19:56:31.000000000 -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(); ++ } ++ } ++ } ++ } ++} +--- ./jdk/test/jprt.config 2013-09-06 11:30:01.000000000 -0700 ++++ ./jdk/test/jprt.config 2014-06-06 19:56:34.000000000 -0700 @@ -71,8 +71,8 @@ # Uses 'uname -s', but only expect SunOS or Linux, assume Windows otherwise. @@ -63867,8 +112733,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk # Export PATH setting PATH="${path4sdk}" ---- jdk/test/lib/security/java.policy/Ext_AllPolicy.sh 2013-09-06 11:30:01.000000000 -0700 -+++ jdk/test/lib/security/java.policy/Ext_AllPolicy.sh 2014-04-20 12:39:16.000000000 -0700 +--- ./jdk/test/lib/security/java.policy/Ext_AllPolicy.sh 2013-09-06 11:30:01.000000000 -0700 ++++ ./jdk/test/lib/security/java.policy/Ext_AllPolicy.sh 2014-06-06 19:56:34.000000000 -0700 @@ -50,7 +50,7 @@ # set platform-dependent variables OS=`uname -s` @@ -63878,8 +112744,295 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.sh 2013-09-06 11:30:02.000000000 -0700 -+++ jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/lib/testlibrary/jdk/testlibrary/FileUtils.java 2014-06-06 19:56:31.000000000 -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; ++ } ++} ++ +--- ./jdk/test/sun/awt/datatransfer/DataFlavorComparatorTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/sun/awt/datatransfer/DataFlavorComparatorTest.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:30:02.000000000 -0700 ++++ ./jdk/test/sun/management/jdp/JdpTest.sh 2014-06-06 19:56:31.000000000 -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/management/jmxremote/bootstrap/CustomLauncherTest.sh 2013-09-06 11:30:02.000000000 -0700 ++++ ./jdk/test/sun/management/jmxremote/bootstrap/CustomLauncherTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -45,37 +45,53 @@ # has to locate libjvm.so. Also $! is not reliable on some releases of MKS. #{ @@ -63959,8 +113112,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk # ---- jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh 2013-09-06 11:30:02.000000000 -0700 -+++ jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh 2013-09-06 11:30:02.000000000 -0700 ++++ ./jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh 2014-06-06 19:56:34.000000000 -0700 @@ -35,7 +35,7 @@ UMASK=`umask` @@ -63970,8 +113123,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PATHSEP=":" FILESEP="/" DFILESEP=$FILESEP ---- jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.sh 2013-09-06 11:30:02.000000000 -0700 -+++ jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.sh 2013-09-06 11:30:02.000000000 -0700 ++++ ./jdk/test/sun/management/jmxremote/bootstrap/LocalManagementTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -86,10 +86,12 @@ # on Windows 98. @@ -63989,8 +113142,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk JAVA=${TESTJAVA}/bin/java CLASSPATH=${TESTCLASSES} ---- jdk/test/sun/management/jmxremote/bootstrap/PasswordFilePermissionTest.sh 2013-09-06 11:30:02.000000000 -0700 -+++ jdk/test/sun/management/jmxremote/bootstrap/PasswordFilePermissionTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/management/jmxremote/bootstrap/PasswordFilePermissionTest.sh 2013-09-06 11:30:02.000000000 -0700 ++++ ./jdk/test/sun/management/jmxremote/bootstrap/PasswordFilePermissionTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -70,10 +70,12 @@ # security the password file. @@ -64008,8 +113161,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk # Create configuration file and dummy password file ---- jdk/test/sun/management/jmxremote/bootstrap/SSLConfigFilePermissionTest.sh 2013-09-06 11:30:02.000000000 -0700 -+++ jdk/test/sun/management/jmxremote/bootstrap/SSLConfigFilePermissionTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/management/jmxremote/bootstrap/SSLConfigFilePermissionTest.sh 2013-09-06 11:30:02.000000000 -0700 ++++ ./jdk/test/sun/management/jmxremote/bootstrap/SSLConfigFilePermissionTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -69,10 +69,12 @@ # security the password file. @@ -64027,8 +113180,45 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk # Create management and SSL configuration files ---- jdk/test/sun/misc/URLClassPath/ClassnameCharTest.sh 2013-09-06 11:30:03.000000000 -0700 -+++ jdk/test/sun/misc/URLClassPath/ClassnameCharTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/misc/IoTrace/IoTraceAgent.java 2013-09-06 11:30:03.000000000 -0700 ++++ ./jdk/test/sun/misc/IoTrace/IoTraceAgent.java 2014-06-06 19:56:31.000000000 -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 2013-09-06 11:30:03.000000000 -0700 ++++ ./jdk/test/sun/misc/IoTrace/ioTraceTest.sh 2014-06-06 19:56:31.000000000 -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} $* +--- ./jdk/test/sun/misc/URLClassPath/ClassnameCharTest.sh 2013-09-06 11:30:03.000000000 -0700 ++++ ./jdk/test/sun/misc/URLClassPath/ClassnameCharTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -36,7 +36,7 @@ OS=`uname -s` @@ -64038,8 +113228,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/sun/net/www/MarkResetTest.sh 2013-09-06 11:30:03.000000000 -0700 -+++ jdk/test/sun/net/www/MarkResetTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/net/www/MarkResetTest.sh 2013-09-06 11:30:03.000000000 -0700 ++++ ./jdk/test/sun/net/www/MarkResetTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -28,7 +28,7 @@ OS=`uname -s` @@ -64049,8 +113239,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/sun/net/www/http/HttpClient/RetryPost.sh 2013-09-06 11:30:04.000000000 -0700 -+++ jdk/test/sun/net/www/http/HttpClient/RetryPost.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/net/www/http/HttpClient/RetryPost.sh 2013-09-06 11:30:04.000000000 -0700 ++++ ./jdk/test/sun/net/www/http/HttpClient/RetryPost.sh 2014-06-06 19:56:34.000000000 -0700 @@ -28,7 +28,7 @@ OS=`uname -s` @@ -64060,8 +113250,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/sun/net/www/protocol/jar/B5105410.sh 2013-09-06 11:30:04.000000000 -0700 -+++ jdk/test/sun/net/www/protocol/jar/B5105410.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/net/www/protocol/jar/B5105410.sh 2013-09-06 11:30:04.000000000 -0700 ++++ ./jdk/test/sun/net/www/protocol/jar/B5105410.sh 2014-06-06 19:56:34.000000000 -0700 @@ -31,7 +31,7 @@ OS=`uname -s` @@ -64071,8 +113261,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/sun/net/www/protocol/jar/jarbug/run.sh 2013-09-06 11:30:04.000000000 -0700 -+++ jdk/test/sun/net/www/protocol/jar/jarbug/run.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/net/www/protocol/jar/jarbug/run.sh 2013-09-06 11:30:04.000000000 -0700 ++++ ./jdk/test/sun/net/www/protocol/jar/jarbug/run.sh 2014-06-06 19:56:34.000000000 -0700 @@ -31,7 +31,7 @@ OS=`uname -s` @@ -64082,8 +113272,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/sun/nio/ch/SelProvider.java 2013-09-06 11:30:04.000000000 -0700 -+++ jdk/test/sun/nio/ch/SelProvider.java 2014-04-20 12:39:14.000000000 -0700 +--- ./jdk/test/sun/nio/ch/SelProvider.java 2013-09-06 11:30:04.000000000 -0700 ++++ ./jdk/test/sun/nio/ch/SelProvider.java 2014-06-06 19:56:34.000000000 -0700 @@ -39,7 +39,7 @@ expected = "sun.nio.ch.DevPollSelectorProvider"; } else if ("Linux".equals(osname)) { @@ -64093,8 +113283,825 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk expected = "sun.nio.ch.KQueueSelectorProvider"; } else { return; ---- jdk/test/sun/security/krb5/runNameEquals.sh 2013-09-06 11:30:07.000000000 -0700 -+++ jdk/test/sun/security/krb5/runNameEquals.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/jgss/spnego/MechTokenMissing.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/sun/security/jgss/spnego/MechTokenMissing.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:30:06.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/ParseCAPaths.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:30:06.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/auto/BadKdc.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:30:06.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/auto/BadKdc1.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:30:06.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/auto/BadKdc2.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:30:07.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/auto/KDC.java 2014-06-06 19:56:32.000000000 -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<>(); +--- ./jdk/test/sun/security/krb5/auto/LoginNoPass.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/sun/security/krb5/auto/LoginNoPass.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:30:07.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/auto/MaxRetries.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:30:07.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/auto/SaslGSS.java 2014-06-06 19:56:32.000000000 -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 2013-09-06 11:30:07.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/auto/TcpTimeout.java 2014-06-06 19:56:32.000000000 -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(); +- +- FileWriter fw = new FileWriter("alternative-krb5.conf"); +- +- 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"); +- +- fw.close(); +- System.setProperty("java.security.krb5.conf", "alternative-krb5.conf"); +- Config.refresh(); +- +- // 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(); +- +- 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); +- } +- } ++ ServerSocket ss1 = null; ++ ServerSocket ss2 = null; + +- 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; ++ try { ++ ss1 = new ServerSocket(0); ++ ss2 = new ServerSocket(0); ++ int p1 = ss1.getLocalPort(); ++ int p2 = ss2.getLocalPort(); ++ ++ FileWriter fw = new FileWriter("alternative-krb5.conf"); ++ ++ 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"); ++ ++ fw.close(); ++ System.setProperty("java.security.krb5.conf", ++ "alternative-krb5.conf"); ++ Config.refresh(); ++ ++ System.out.println("Ports opened on " + p1 + ", " + p2 + ", " + p3); ++ ++ // 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 (s.trim().startsWith("kdc = ")) { +- fw.write(" kdc = localhost:33333\n"); +- fw.write(" kdc = localhost:22222\n"); ++ if (count != 0) { ++ throw new Exception("Retry count is " + count + " less"); + } +- fw.write(s + "\n"); ++ } finally { ++ if (ss1 != null) ss1.close(); ++ if (ss2 != null) ss2.close(); + } +- fr.close(); +- fw.close(); +- sun.security.krb5.Config.refresh(); + } + } +--- ./jdk/test/sun/security/krb5/krb5-capaths.conf 2013-09-06 11:30:07.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/krb5-capaths.conf 2014-06-06 19:56:32.000000000 -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 ++#} ++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 = . + } +-ES.NET = { +- ANL.GOV = . ++ ++# 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 + } + +-# Extra garbages ++# Full path + + A1.COM = { + A2.COM = . +- A4.COM = A2.COM +- A3.COM = A4.COM + A3.COM = A2.COM ++ A4.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/krb5/runNameEquals.sh 2013-09-06 11:30:07.000000000 -0700 ++++ ./jdk/test/sun/security/krb5/runNameEquals.sh 2014-06-06 19:56:34.000000000 -0700 @@ -48,15 +48,11 @@ # set platform-dependent variables OS=`uname -s` @@ -64112,8 +114119,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk CYGWIN* ) PATHSEP=";" FILESEP="/" ---- jdk/test/sun/security/pkcs11/KeyStore/Basic.sh 2013-09-06 11:30:07.000000000 -0700 -+++ jdk/test/sun/security/pkcs11/KeyStore/Basic.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/pkcs11/KeyStore/Basic.sh 2013-09-06 11:30:07.000000000 -0700 ++++ ./jdk/test/sun/security/pkcs11/KeyStore/Basic.sh 2014-06-06 19:56:34.000000000 -0700 @@ -131,6 +131,27 @@ ;; esac @@ -64142,8 +114149,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk Windows* ) FS="\\" PS=";" ---- jdk/test/sun/security/pkcs11/KeyStore/ClientAuth.sh 2013-09-06 11:30:07.000000000 -0700 -+++ jdk/test/sun/security/pkcs11/KeyStore/ClientAuth.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/pkcs11/KeyStore/ClientAuth.sh 2013-09-06 11:30:07.000000000 -0700 ++++ ./jdk/test/sun/security/pkcs11/KeyStore/ClientAuth.sh 2014-06-06 19:56:34.000000000 -0700 @@ -93,6 +93,27 @@ ;; esac @@ -64172,8 +114179,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk Windows* ) FS="\\" PS=";" ---- jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh 2013-09-06 11:30:08.000000000 -0700 -+++ jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh 2013-09-06 11:30:08.000000000 -0700 ++++ ./jdk/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh 2014-06-06 19:56:34.000000000 -0700 @@ -50,19 +50,7 @@ OS=`uname -s` @@ -64195,8 +114202,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" PS=":" CP="${FS}bin${FS}cp" ---- jdk/test/sun/security/pkcs11/Provider/Login.sh 2013-09-06 11:30:08.000000000 -0700 -+++ jdk/test/sun/security/pkcs11/Provider/Login.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/pkcs11/Provider/Login.sh 2013-09-06 11:30:08.000000000 -0700 ++++ ./jdk/test/sun/security/pkcs11/Provider/Login.sh 2014-06-06 19:56:34.000000000 -0700 @@ -51,19 +51,7 @@ OS=`uname -s` @@ -64218,8 +114225,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" PS=":" CP="${FS}bin${FS}cp" ---- jdk/test/sun/security/pkcs11/tls/TestLeadingZeroesP11.java 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/sun/security/pkcs11/tls/TestLeadingZeroesP11.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/pkcs11/tls/TestLeadingZeroesP11.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/sun/security/pkcs11/tls/TestLeadingZeroesP11.java 2014-01-18 12:16:31.000000000 -0800 @@ -0,0 +1,410 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -64631,8 +114638,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk + }; +} + ---- jdk/test/sun/security/provider/PolicyFile/GrantAllPermToExtWhenNoPolicy.sh 2013-09-06 11:30:09.000000000 -0700 -+++ jdk/test/sun/security/provider/PolicyFile/GrantAllPermToExtWhenNoPolicy.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/provider/PolicyFile/GrantAllPermToExtWhenNoPolicy.sh 2013-09-06 11:30:09.000000000 -0700 ++++ ./jdk/test/sun/security/provider/PolicyFile/GrantAllPermToExtWhenNoPolicy.sh 2014-06-06 19:56:34.000000000 -0700 @@ -44,11 +44,7 @@ # set platform-dependent variables OS=`uname -s` @@ -64646,8 +114653,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PATHSEP=":" FILESEP="/" ;; ---- jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh 2013-09-06 11:30:09.000000000 -0700 -+++ jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh 2013-09-06 11:30:09.000000000 -0700 ++++ ./jdk/test/sun/security/provider/PolicyFile/getinstance/getinstance.sh 2014-06-06 19:56:34.000000000 -0700 @@ -47,15 +47,7 @@ # set platform-dependent variables OS=`uname -s` @@ -64665,8 +114672,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh 2013-09-06 11:30:10.000000000 -0700 -+++ jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh 2013-09-06 11:30:10.000000000 -0700 ++++ ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/EngineArgs/DebugReportsOneExtraByte.sh 2014-06-06 19:56:34.000000000 -0700 @@ -33,7 +33,7 @@ OS=`uname -s` @@ -64676,8 +114683,57 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh 2013-09-06 11:30:11.000000000 -0700 -+++ jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineDeadlock.java 2013-09-06 11:30:10.000000000 -0700 ++++ ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLEngineImpl/SSLEngineDeadlock.java 2014-06-06 19:56:32.000000000 -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; +--- ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh 2013-09-06 11:30:11.000000000 -0700 ++++ ./jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/SSLSocketImpl/NotifyHandshakeTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -42,7 +42,7 @@ OS=`uname -s` @@ -64687,8 +114743,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FILESEP="/" PATHSEP=":" ;; ---- jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxy.sh 2014-06-06 19:56:34.000000000 -0700 @@ -32,7 +32,7 @@ HOSTNAME=`uname -n` OS=`uname -s` @@ -64698,8 +114754,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/PostThruProxyWithAuth.sh 2014-06-06 19:56:34.000000000 -0700 @@ -32,7 +32,7 @@ HOSTNAME=`uname -n` OS=`uname -s` @@ -64709,8 +114765,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- jdk/test/sun/security/tools/jarsigner/AlgOptions.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/jarsigner/AlgOptions.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/jarsigner/AlgOptions.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/jarsigner/AlgOptions.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -64720,8 +114776,215 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/jarsigner/PercentSign.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/jarsigner/PercentSign.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/jarsigner/EntriesOrder.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/sun/security/tools/jarsigner/EntriesOrder.java 2014-06-06 19:56:32.000000000 -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; ++ } ++ }; ++ } ++ }; ++ } ++} +--- ./jdk/test/sun/security/tools/jarsigner/PercentSign.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/jarsigner/PercentSign.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -64731,8 +114994,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/jarsigner/TimestampCheck.java 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/jarsigner/TimestampCheck.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/jarsigner/TimestampCheck.java 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/jarsigner/TimestampCheck.java 2014-01-18 12:16:31.000000000 -0800 @@ -242,13 +242,13 @@ " -J-Djava.security.egd=file:/dev/./urandom" + " -debug -keystore " + TSKS + " -storepass changeit" + @@ -64784,8 +115047,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk + } } } ---- jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh 2014-01-18 12:16:31.000000000 -0800 @@ -136,7 +136,6 @@ # 16 and 32 already covered in the first part # ========================================================== @@ -64804,8 +115067,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk $JARSIGNER -strict -keystore js.jks -storepass changeit a.jar expired [ $? = 4 ] || exit $LINENO ---- jdk/test/sun/security/tools/jarsigner/diffend.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/jarsigner/diffend.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/jarsigner/diffend.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/jarsigner/diffend.sh 2014-06-06 19:56:34.000000000 -0700 @@ -41,7 +41,7 @@ # set platform-dependent variables OS=`uname -s` @@ -64815,8 +115078,87 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/jarsigner/oldsig.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/jarsigner/oldsig.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/jarsigner/jvindex.sh 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/sun/security/tools/jarsigner/jvindex.sh 2014-06-06 19:56:32.000000000 -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 ++ ++ +--- ./jdk/test/sun/security/tools/jarsigner/oldsig.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/jarsigner/oldsig.sh 2014-06-06 19:56:34.000000000 -0700 @@ -42,7 +42,7 @@ # set platform-dependent variables OS=`uname -s` @@ -64826,8 +115168,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/jarsigner/ts.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/jarsigner/ts.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/jarsigner/ts.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/jarsigner/ts.sh 2014-01-18 12:16:31.000000000 -0800 @@ -22,7 +22,7 @@ # @@ -64846,8 +115188,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk rm tsks echo Nothing > A ---- jdk/test/sun/security/tools/jarsigner/warnings.sh 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/sun/security/tools/jarsigner/warnings.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/jarsigner/warnings.sh 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/sun/security/tools/jarsigner/warnings.sh 2014-01-18 12:16:31.000000000 -0800 @@ -0,0 +1,119 @@ +# +# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -64968,8 +115310,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk +fi + + ---- jdk/test/sun/security/tools/keytool/AltProviderPath.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/AltProviderPath.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/AltProviderPath.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/AltProviderPath.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -64979,8 +115321,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/CloneKeyAskPassword.sh 2014-06-06 19:56:34.000000000 -0700 @@ -47,15 +47,7 @@ # set platform-dependent variables OS=`uname -s` @@ -64998,8 +115340,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PATHSEP=":" FILESEP="/" ;; ---- jdk/test/sun/security/tools/keytool/NoExtNPE.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/NoExtNPE.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/NoExtNPE.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/NoExtNPE.sh 2014-06-06 19:56:34.000000000 -0700 @@ -42,13 +42,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65015,8 +115357,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FILESEP="/" ;; CYGWIN* ) ---- jdk/test/sun/security/tools/keytool/SecretKeyKS.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/SecretKeyKS.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/SecretKeyKS.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/SecretKeyKS.sh 2014-06-06 19:56:34.000000000 -0700 @@ -45,7 +45,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65026,8 +115368,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/keytool/StandardAlgName.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/StandardAlgName.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/StandardAlgName.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/StandardAlgName.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65037,8 +115379,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/keytool/autotest.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/autotest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/autotest.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/autotest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -72,6 +72,27 @@ ;; esac @@ -65067,8 +115409,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk * ) echo "Will not run test on: ${OS}" exit 0; ---- jdk/test/sun/security/tools/keytool/i18n.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/i18n.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/i18n.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/i18n.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65078,8 +115420,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/keytool/printssl.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/printssl.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/printssl.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/printssl.sh 2014-06-06 19:56:34.000000000 -0700 @@ -37,7 +37,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65089,8 +115431,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; CYGWIN* ) ---- jdk/test/sun/security/tools/keytool/resource.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/resource.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/resource.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/resource.sh 2014-06-06 19:56:34.000000000 -0700 @@ -43,7 +43,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65100,8 +115442,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null FS="/" ;; ---- jdk/test/sun/security/tools/keytool/standard.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/keytool/standard.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/keytool/standard.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/keytool/standard.sh 2014-06-06 19:56:34.000000000 -0700 @@ -44,7 +44,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65111,8 +115453,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; Windows_* ) ---- jdk/test/sun/security/tools/policytool/Alias.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/policytool/Alias.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/policytool/Alias.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/policytool/Alias.sh 2014-06-06 19:56:34.000000000 -0700 @@ -47,7 +47,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65122,8 +115464,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/policytool/ChangeUI.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/policytool/ChangeUI.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/policytool/ChangeUI.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/policytool/ChangeUI.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65133,8 +115475,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/policytool/OpenPolicy.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/policytool/OpenPolicy.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/policytool/OpenPolicy.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/policytool/OpenPolicy.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65144,8 +115486,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/policytool/SaveAs.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/policytool/SaveAs.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/policytool/SaveAs.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/policytool/SaveAs.sh 2014-06-06 19:56:34.000000000 -0700 @@ -47,7 +47,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65155,8 +115497,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/policytool/UpdatePermissions.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/policytool/UpdatePermissions.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/policytool/UpdatePermissions.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/policytool/UpdatePermissions.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65166,8 +115508,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/policytool/UsePolicy.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/policytool/UsePolicy.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/policytool/UsePolicy.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/policytool/UsePolicy.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65177,8 +115519,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/security/tools/policytool/i18n.sh 2013-09-06 11:30:12.000000000 -0700 -+++ jdk/test/sun/security/tools/policytool/i18n.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/security/tools/policytool/i18n.sh 2013-09-06 11:30:12.000000000 -0700 ++++ ./jdk/test/sun/security/tools/policytool/i18n.sh 2014-06-06 19:56:34.000000000 -0700 @@ -46,7 +46,7 @@ # set platform-dependent variables OS=`uname -s` @@ -65188,8 +115530,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh 1969-12-31 16:00:00.000000000 -0800 -+++ jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/sun/tools/jconsole/ImmutableResourceTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -0,0 +1,111 @@ +# +# Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. @@ -65302,8 +115644,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk + + else fail "unspecified test failure" +fi ---- jdk/test/sun/tools/jconsole/ResourceCheckTest.sh 2013-09-06 11:30:13.000000000 -0700 -+++ jdk/test/sun/tools/jconsole/ResourceCheckTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/tools/jconsole/ResourceCheckTest.sh 2013-09-06 11:30:13.000000000 -0700 ++++ ./jdk/test/sun/tools/jconsole/ResourceCheckTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -54,7 +54,7 @@ OS=`uname -s` @@ -65313,8 +115655,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PATHSEP=":" ;; ---- jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh 2013-09-06 11:30:14.000000000 -0700 -+++ jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh 2013-09-06 11:30:14.000000000 -0700 ++++ ./jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh 2014-06-06 19:56:34.000000000 -0700 @@ -33,7 +33,7 @@ case `uname -s` in @@ -65324,8 +115666,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk esac N2A=$TESTJAVA/bin/native2ascii ---- jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh 2013-09-06 11:30:14.000000000 -0700 -+++ jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh 2013-09-06 11:30:14.000000000 -0700 ++++ ./jdk/test/sun/tools/native2ascii/resources/ImmutableResourceTest.sh 2014-06-06 19:56:34.000000000 -0700 @@ -56,7 +56,7 @@ OS=`uname -s` @@ -65335,8 +115677,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PATHSEP=":" ;; ---- jdk/test/sun/util/resources/TimeZone/Bug6317929.java 2013-09-06 11:30:14.000000000 -0700 -+++ jdk/test/sun/util/resources/TimeZone/Bug6317929.java 2014-04-20 12:39:15.000000000 -0700 +--- ./jdk/test/sun/util/resources/TimeZone/Bug6317929.java 2013-09-06 11:30:14.000000000 -0700 ++++ ./jdk/test/sun/util/resources/TimeZone/Bug6317929.java 2014-01-18 12:16:32.000000000 -0800 @@ -130,12 +130,12 @@ "(New South Wales)\""); tzLocale = locales2Test[1]; @@ -65426,8 +115768,122 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk + "(\u65B0\u5357\u5A01\u723E\u65AF)\""); } } ---- langtools/.hgtags 2013-09-06 11:31:03.000000000 -0700 -+++ langtools/.hgtags 2014-04-20 12:39:14.000000000 -0700 +--- ./jdk/test/tools/launcher/I18NArgTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./jdk/test/tools/launcher/I18NArgTest.java 2014-06-06 19:56:33.000000000 -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 2013-09-06 11:31:03.000000000 -0700 ++++ ./langtools/.hgtags 2014-06-06 19:56:17.000000000 -0700 @@ -123,6 +123,7 @@ 9425dd4f53d5bfcd992d9aecea0eb7d8b2d4f62b jdk7-b146 d34578643d1c6c752d4a6b5e79c6ab1b60850b4a jdk7u1-b01 @@ -65459,10 +115915,11 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk 28358b2489b2ca29c1a6b79f643204da8924a3d7 jdk7u25-b12 5ed8c453480063838b632c74f528924f529361a2 jdk7u25-b13 c6342ec6a12f7283e2a73a80a44dcdd3683e2e8b jdk7u25-b14 -@@ -343,3 +360,59 @@ +@@ -343,3 +360,83 @@ 765bea9bfcfc8c472df0a2daced5e576095f46ac jdk7u40-b42 988ece7b686564084770e99ca26746c45ffb933f jdk7u40-b43 a67dbf96bf86989d0392cc5b66e5d4139cbceec7 jdk7u40-b60 ++849b17bc6e9a08fa41e0ef631e51366a09842e64 jdk7u60-b00 +b2e29b79e54e58349c1dbcf5449f67fc5d5a235a jdk7u40-b61 +94ea3d062a3c28c64a837fa8f999c6b6956ff7c4 jdk7u40-b62 +9bbfba4981e1db5016bbfbc23025763966021c26 jdk7u45-b01 @@ -65504,6 +115961,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk +4d0807934c302f2e35e6a5acc6cdc720c82b5671 jdk7u51-b13 +ada23e55d76a378cb2fc2cd7ffae8c147aaf0055 jdk7u51-b30 +e3d4896d52ab4ad0fc0b7a45d60340dbdcb8826d jdk7u51-b31 ++fb3ff30ecd8ea1637551461bfaf09fc8204b536c jdk7u51-b33 ++4adc6c094545774b324d2e5511723ada2b32e6c4 jdk7u51-b34 +5b44df2114e466da85c3816627bfcd1b59c6499d jdk7u55-b00 +3e64e49131b88c839733c9869ff8aebcd15cf828 jdk7u55-b01 +2a9f5c00ba46f895bc9d16a584bf7d80c1822268 jdk7u55-b02 @@ -65519,8 +115978,29 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk +a3cdca5d3773f67a49091f9131a4d073bc6b83d9 jdk7u55-b12 +81bf1ca3a3a71c628b7d952ba47c6f200a223f27 jdk7u55-b13 +96d55b4d88fea1d9f8227e70003210a6c10a1dba jdk7u55-b30 ---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java 2013-09-06 11:31:06.000000000 -0700 -+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java 2014-04-20 12:39:08.000000000 -0700 ++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 +--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java 2013-09-06 11:31:06.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java 2014-04-19 01:27:04.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. @@ -65537,8 +116017,108 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk } else if (opt.equals("-top")) { top = os[1]; } else if (opt.equals("-bottom")) { ---- langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java 2013-09-06 11:31:06.000000000 -0700 -+++ langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java 2014-04-20 12:39:08.000000000 -0700 +--- ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java 2013-09-06 11:31:06.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:06.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:06.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java 2014-06-06 19:56:17.000000000 -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 @@ -292,7 +292,7 @@ script.addAttr(HtmlAttr.TYPE, "text/javascript"); String scriptCode = "<!--" + DocletConstants.NL + @@ -65602,27 +116182,341 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk * Returns a content tree for the SCRIPT tag for the main page(index.html). * * @return a content for the SCRIPT tag ---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties 2013-09-06 11:31:06.000000000 -0700 -+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties 2014-04-20 12:39:08.000000000 -0700 -@@ -180,6 +180,6 @@ +@@ -315,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 + +@@ -326,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 2013-09-06 11:31:06.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard_ja.properties 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:06.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets.properties 2014-06-06 19:56:17.000000000 -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\ + 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 2013-09-06 11:31:06.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_ja.properties 2014-06-06 19:56:17.000000000 -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 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=\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 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 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_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 ---- langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties 2013-09-06 11:31:06.000000000 -0700 -+++ langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties 2014-04-20 12:39:08.000000000 -0700 -@@ -182,4 +182,4 @@ ++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 2013-09-06 11:31:06.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/doclets_zh_CN.properties 2014-06-06 19:56:17.000000000 -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 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=\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 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 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 \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 \u5982\u679C\u53C2\u6570\u4E3A\u7A7A\u503C, \u5219\u629B\u51FA NullPointerException -+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 ---- langtools/src/share/classes/com/sun/tools/javac/parser/Scanner.java 2013-09-06 11:31:07.000000000 -0700 -+++ langtools/src/share/classes/com/sun/tools/javac/parser/Scanner.java 2014-04-20 12:39:08.000000000 -0700 ++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 2013-09-06 11:31:07.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:07.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/javac/code/Type.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:07.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/javac/code/Types.java 2014-06-06 19:56:17.000000000 -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/parser/Scanner.java 2013-09-06 11:31:07.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/javac/parser/Scanner.java 2013-12-01 11:13:46.000000000 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. @@ -65712,8 +116606,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk } while (true); } ---- langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties 2013-09-06 11:31:07.000000000 -0700 -+++ langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties 2014-04-20 12:39:08.000000000 -0700 +--- ./langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties 2013-09-06 11:31:07.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/javac/resources/compiler_ja.properties 2014-01-18 12:16:11.000000000 -0800 @@ -555,19 +555,19 @@ # 0: name compiler.err.undef.label=\u30E9\u30D9\u30EB{0}\u306F\u672A\u5B9A\u7FA9\u3067\u3059 @@ -65747,8 +116641,49 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk # 0: symbol compiler.misc.diamond={0}<> ---- langtools/src/share/classes/com/sun/tools/javah/resources/l10n_ja.properties 2013-09-06 11:31:08.000000000 -0700 -+++ langtools/src/share/classes/com/sun/tools/javah/resources/l10n_ja.properties 2014-04-20 12:39:08.000000000 -0700 +--- ./langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties 2013-09-06 11:31:07.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/javac/resources/javac_ja.properties 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:08.000000000 -0700 ++++ ./langtools/src/share/classes/com/sun/tools/javah/resources/l10n_ja.properties 2014-06-06 19:56:17.000000000 -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 @@ -90,7 +90,7 @@ err.prefix=\u30A8\u30E9\u30FC: err.cant.use.option.for.fm=\u6307\u5B9A\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u30FB\u30DE\u30CD\u30FC\u30B8\u30E3\u3067{0}\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093 @@ -65758,8 +116693,140 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk err.missing.arg={0}\u306E\u5024\u304C\u3042\u308A\u307E\u305B\u3093 err.no.classes.specified=\u30AF\u30E9\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093 err.unknown.option=\u4E0D\u660E\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: {0} ---- langtools/test/Makefile 2013-09-06 11:31:11.000000000 -0700 -+++ langtools/test/Makefile 2014-04-20 12:39:11.000000000 -0700 +--- ./langtools/src/share/classes/com/sun/tools/javap/resources/javap_ja.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./langtools/src/share/classes/com/sun/tools/javap/resources/javap_ja.properties 2014-06-06 19:56:17.000000000 -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 +--- ./langtools/src/share/classes/com/sun/tools/javap/resources/javap_zh_CN.properties 1969-12-31 16:00:00.000000000 -0800 ++++ ./langtools/src/share/classes/com/sun/tools/javap/resources/javap_zh_CN.properties 2014-06-06 19:56:17.000000000 -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/Makefile 2013-09-06 11:31:11.000000000 -0700 ++++ ./langtools/test/Makefile 2014-06-06 19:56:17.000000000 -0700 @@ -42,6 +42,14 @@ ARCH=i586 endif @@ -65795,8 +116862,153 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk # Root of all test results TEST_OUTPUT_DIR = $(TEST_ROOT)/../build/$(PLATFORM)-$(ARCH)/test/langtools ---- langtools/test/com/sun/javadoc/testWindowTitle/TestWindowTitle.java 1969-12-31 16:00:00.000000000 -0800 -+++ langtools/test/com/sun/javadoc/testWindowTitle/TestWindowTitle.java 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/com/sun/javadoc/testHref/TestHref.java 2013-09-06 11:31:12.000000000 -0700 ++++ ./langtools/test/com/sun/javadoc/testHref/TestHref.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:13.000000000 -0700 ++++ ./langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:13.000000000 -0700 ++++ ./langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:14.000000000 -0700 ++++ ./langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java 2014-06-06 19:56:17.000000000 -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> in class <code>" + + "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" + + "PrivateParent</a></code></dd>"}, +--- ./langtools/test/com/sun/javadoc/testWindowTitle/TestWindowTitle.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./langtools/test/com/sun/javadoc/testWindowTitle/TestWindowTitle.java 2014-04-19 01:27:04.000000000 -0700 @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. @@ -66014,8 +117226,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk + return getClass().getName(); + } +} ---- langtools/test/com/sun/javadoc/testWindowTitle/p1/C1.java 1969-12-31 16:00:00.000000000 -0800 -+++ langtools/test/com/sun/javadoc/testWindowTitle/p1/C1.java 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/com/sun/javadoc/testWindowTitle/p1/C1.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./langtools/test/com/sun/javadoc/testWindowTitle/p1/C1.java 2013-12-01 11:13:46.000000000 -0800 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -66044,8 +117256,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk + +public class C1 { +} ---- langtools/test/com/sun/javadoc/testWindowTitle/p2/C2.java 1969-12-31 16:00:00.000000000 -0800 -+++ langtools/test/com/sun/javadoc/testWindowTitle/p2/C2.java 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/com/sun/javadoc/testWindowTitle/p2/C2.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./langtools/test/com/sun/javadoc/testWindowTitle/p2/C2.java 2013-12-01 11:13:46.000000000 -0800 @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. @@ -66074,8 +117286,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk + +public class C2 { +} ---- langtools/test/tools/javac/4846262/Test.sh 2013-09-06 11:31:16.000000000 -0700 -+++ langtools/test/tools/javac/4846262/Test.sh 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/tools/javac/4846262/Test.sh 2013-09-06 11:31:16.000000000 -0700 ++++ ./langtools/test/tools/javac/4846262/Test.sh 2014-06-06 19:56:17.000000000 -0700 @@ -44,7 +44,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66085,8 +117297,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; CYGWIN* ) ---- langtools/test/tools/javac/6302184/T6302184.sh 2013-09-06 11:31:16.000000000 -0700 -+++ langtools/test/tools/javac/6302184/T6302184.sh 2014-04-20 12:39:10.000000000 -0700 +--- ./langtools/test/tools/javac/6302184/T6302184.sh 2013-09-06 11:31:16.000000000 -0700 ++++ ./langtools/test/tools/javac/6302184/T6302184.sh 2014-06-06 19:56:17.000000000 -0700 @@ -41,7 +41,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66096,8 +117308,26 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; CYGWIN* ) ---- langtools/test/tools/javac/7144981/IgnoreIgnorableCharactersInInput.java 1969-12-31 16:00:00.000000000 -0800 -+++ langtools/test/tools/javac/7144981/IgnoreIgnorableCharactersInInput.java 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/tools/javac/6567415/T6567415.java 2013-09-06 11:31:16.000000000 -0700 ++++ ./langtools/test/tools/javac/6567415/T6567415.java 2014-06-06 19:56:17.000000000 -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"); +--- ./langtools/test/tools/javac/7144981/IgnoreIgnorableCharactersInInput.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./langtools/test/tools/javac/7144981/IgnoreIgnorableCharactersInInput.java 2013-12-01 11:13:46.000000000 -0800 @@ -0,0 +1,92 @@ + +/* @@ -66191,8 +117421,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk + } + } +} ---- langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh 2013-09-06 11:31:17.000000000 -0700 -+++ langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh 2014-04-20 12:39:10.000000000 -0700 +--- ./langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh 2013-09-06 11:31:17.000000000 -0700 ++++ ./langtools/test/tools/javac/ClassPathTest/ClassPathTest.sh 2014-06-06 19:56:17.000000000 -0700 @@ -56,7 +56,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66202,8 +117432,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; Windows* ) ---- langtools/test/tools/javac/ExtDirs/ExtDirs.sh 2013-09-06 11:31:18.000000000 -0700 -+++ langtools/test/tools/javac/ExtDirs/ExtDirs.sh 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/tools/javac/ExtDirs/ExtDirs.sh 2013-09-06 11:31:18.000000000 -0700 ++++ ./langtools/test/tools/javac/ExtDirs/ExtDirs.sh 2014-06-06 19:56:17.000000000 -0700 @@ -54,7 +54,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66213,8 +117443,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- langtools/test/tools/javac/MissingInclude.sh 2013-09-06 11:31:19.000000000 -0700 -+++ langtools/test/tools/javac/MissingInclude.sh 2014-04-20 12:39:11.000000000 -0700 +--- ./langtools/test/tools/javac/MissingInclude.sh 2013-09-06 11:31:19.000000000 -0700 ++++ ./langtools/test/tools/javac/MissingInclude.sh 2014-06-06 19:56:17.000000000 -0700 @@ -47,7 +47,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66224,8 +117454,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; Windows* ) ---- langtools/test/tools/javac/ProtectedInnerClass/ProtectedInnerClass.sh 2013-09-06 11:31:20.000000000 -0700 -+++ langtools/test/tools/javac/ProtectedInnerClass/ProtectedInnerClass.sh 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/tools/javac/ProtectedInnerClass/ProtectedInnerClass.sh 2013-09-06 11:31:20.000000000 -0700 ++++ ./langtools/test/tools/javac/ProtectedInnerClass/ProtectedInnerClass.sh 2014-06-06 19:56:17.000000000 -0700 @@ -52,7 +52,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66235,8 +117465,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- langtools/test/tools/javac/T5090006/compiler.sh 2013-09-06 11:31:20.000000000 -0700 -+++ langtools/test/tools/javac/T5090006/compiler.sh 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/tools/javac/T5090006/compiler.sh 2013-09-06 11:31:20.000000000 -0700 ++++ ./langtools/test/tools/javac/T5090006/compiler.sh 2014-06-06 19:56:17.000000000 -0700 @@ -47,7 +47,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66246,8 +117476,518 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; Windows* ) ---- langtools/test/tools/javac/apt.sh 2013-09-06 11:31:23.000000000 -0700 -+++ langtools/test/tools/javac/apt.sh 2014-04-20 12:39:11.000000000 -0700 +--- ./langtools/test/tools/javac/T8033294/RedundantWarningInIntersectionTest.java 1969-12-31 16:00:00.000000000 -0800 ++++ ./langtools/test/tools/javac/T8033294/RedundantWarningInIntersectionTest.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6406133/T6406133.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6410643/T6410643.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6411310/T6411310.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6411333/T6411333.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6412656/T6412656.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6415780/T6415780.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6418694/T6418694.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6421111/T6421111.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6421756/T6421756.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6422215/T6422215.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6422327/T6422327.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6423003/T6423003.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6431257/T6431257.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6437349/T6437349.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6437999/T6437999.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6440333/T6440333.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6440528/T6440528.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6468404/T6468404.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6731573/T6731573.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/6733837/T6733837.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/TestJavacTaskScanner.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/guide/Test.java 2014-06-06 19:56:17.000000000 -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 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/api/lib/ToolTester.java 2014-06-06 19:56:17.000000000 -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; ++ } + } +--- ./langtools/test/tools/javac/apt.sh 2013-09-06 11:31:23.000000000 -0700 ++++ ./langtools/test/tools/javac/apt.sh 2014-06-06 19:56:17.000000000 -0700 @@ -38,7 +38,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66257,8 +117997,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- langtools/test/tools/javac/constDebug/ConstDebug.sh 2013-09-06 11:31:24.000000000 -0700 -+++ langtools/test/tools/javac/constDebug/ConstDebug.sh 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/tools/javac/constDebug/ConstDebug.sh 2013-09-06 11:31:24.000000000 -0700 ++++ ./langtools/test/tools/javac/constDebug/ConstDebug.sh 2014-06-06 19:56:17.000000000 -0700 @@ -47,7 +47,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66268,8 +118008,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- langtools/test/tools/javac/fatalErrors/NoJavaLang.sh 2013-09-06 11:31:28.000000000 -0700 -+++ langtools/test/tools/javac/fatalErrors/NoJavaLang.sh 2014-04-20 12:39:10.000000000 -0700 +--- ./langtools/test/tools/javac/fatalErrors/NoJavaLang.sh 2013-09-06 11:31:28.000000000 -0700 ++++ ./langtools/test/tools/javac/fatalErrors/NoJavaLang.sh 2014-06-06 19:56:17.000000000 -0700 @@ -48,7 +48,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66279,8 +118019,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; CYGWIN* ) ---- langtools/test/tools/javac/innerClassFile/Driver.sh 2013-09-06 11:31:33.000000000 -0700 -+++ langtools/test/tools/javac/innerClassFile/Driver.sh 2014-04-20 12:39:10.000000000 -0700 +--- ./langtools/test/tools/javac/innerClassFile/Driver.sh 2013-09-06 11:31:33.000000000 -0700 ++++ ./langtools/test/tools/javac/innerClassFile/Driver.sh 2014-06-06 19:56:17.000000000 -0700 @@ -53,7 +53,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66290,8 +118030,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; Windows* ) ---- langtools/test/tools/javac/javazip/Test.sh 2013-09-06 11:31:33.000000000 -0700 -+++ langtools/test/tools/javac/javazip/Test.sh 2014-04-20 12:39:10.000000000 -0700 +--- ./langtools/test/tools/javac/javazip/Test.sh 2013-09-06 11:31:33.000000000 -0700 ++++ ./langtools/test/tools/javac/javazip/Test.sh 2014-06-06 19:56:17.000000000 -0700 @@ -41,7 +41,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66301,8 +118041,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" SCR=`pwd` ;; ---- langtools/test/tools/javac/links/links.sh 2013-09-06 11:31:33.000000000 -0700 -+++ langtools/test/tools/javac/links/links.sh 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/tools/javac/links/links.sh 2013-09-06 11:31:33.000000000 -0700 ++++ ./langtools/test/tools/javac/links/links.sh 2014-06-06 19:56:17.000000000 -0700 @@ -53,7 +53,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66312,8 +118052,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk NULL=/dev/null PS=":" FS="/" ---- langtools/test/tools/javac/newlines/Newlines.sh 2013-09-06 11:31:34.000000000 -0700 -+++ langtools/test/tools/javac/newlines/Newlines.sh 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/tools/javac/newlines/Newlines.sh 2013-09-06 11:31:34.000000000 -0700 ++++ ./langtools/test/tools/javac/newlines/Newlines.sh 2014-06-06 19:56:17.000000000 -0700 @@ -50,7 +50,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66323,8 +118063,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; Windows* ) ---- langtools/test/tools/javac/stackmap/T4955930.sh 2013-09-06 11:31:36.000000000 -0700 -+++ langtools/test/tools/javac/stackmap/T4955930.sh 2014-04-20 12:39:10.000000000 -0700 +--- ./langtools/test/tools/javac/stackmap/T4955930.sh 2013-09-06 11:31:36.000000000 -0700 ++++ ./langtools/test/tools/javac/stackmap/T4955930.sh 2014-06-06 19:56:17.000000000 -0700 @@ -41,7 +41,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66334,8 +118074,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; Windows_95 | Windows_98 | Windows_NT ) ---- langtools/test/tools/javac/unicode/SupplementaryJavaID6.sh 2013-09-06 11:31:36.000000000 -0700 -+++ langtools/test/tools/javac/unicode/SupplementaryJavaID6.sh 2014-04-20 12:39:09.000000000 -0700 +--- ./langtools/test/tools/javac/unicode/SupplementaryJavaID6.sh 2013-09-06 11:31:36.000000000 -0700 ++++ ./langtools/test/tools/javac/unicode/SupplementaryJavaID6.sh 2014-06-06 19:56:17.000000000 -0700 @@ -55,7 +55,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66345,8 +118085,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk if [ -d /usr/lib/locale/en_US.UTF-8 -o -d /usr/lib/locale/en_US.utf8 ] then ENV="env LANG=en_US.UTF-8" ---- langtools/test/tools/javah/6257087/foo.sh 2013-09-06 11:31:38.000000000 -0700 -+++ langtools/test/tools/javah/6257087/foo.sh 2014-04-20 12:39:11.000000000 -0700 +--- ./langtools/test/tools/javah/6257087/foo.sh 2013-09-06 11:31:38.000000000 -0700 ++++ ./langtools/test/tools/javah/6257087/foo.sh 2014-06-06 19:56:17.000000000 -0700 @@ -41,7 +41,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66356,8 +118096,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- langtools/test/tools/javah/ConstMacroTest.sh 2013-09-06 11:31:38.000000000 -0700 -+++ langtools/test/tools/javah/ConstMacroTest.sh 2014-04-20 12:39:11.000000000 -0700 +--- ./langtools/test/tools/javah/ConstMacroTest.sh 2013-09-06 11:31:38.000000000 -0700 ++++ ./langtools/test/tools/javah/ConstMacroTest.sh 2014-06-06 19:56:17.000000000 -0700 @@ -56,7 +56,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66367,8 +118107,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- langtools/test/tools/javah/MissingParamClassTest.sh 2013-09-06 11:31:38.000000000 -0700 -+++ langtools/test/tools/javah/MissingParamClassTest.sh 2014-04-20 12:39:11.000000000 -0700 +--- ./langtools/test/tools/javah/MissingParamClassTest.sh 2013-09-06 11:31:38.000000000 -0700 ++++ ./langtools/test/tools/javah/MissingParamClassTest.sh 2014-06-06 19:56:17.000000000 -0700 @@ -58,7 +58,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66378,8 +118118,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- langtools/test/tools/javah/ReadOldClass.sh 2013-09-06 11:31:38.000000000 -0700 -+++ langtools/test/tools/javah/ReadOldClass.sh 2014-04-20 12:39:11.000000000 -0700 +--- ./langtools/test/tools/javah/ReadOldClass.sh 2013-09-06 11:31:38.000000000 -0700 ++++ ./langtools/test/tools/javah/ReadOldClass.sh 2014-06-06 19:56:17.000000000 -0700 @@ -43,7 +43,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66389,8 +118129,8 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk PS=":" FS="/" ;; ---- langtools/test/tools/javap/pathsep.sh 2013-09-06 11:31:39.000000000 -0700 -+++ langtools/test/tools/javap/pathsep.sh 2014-04-20 12:39:11.000000000 -0700 +--- ./langtools/test/tools/javap/pathsep.sh 2013-09-06 11:31:39.000000000 -0700 ++++ ./langtools/test/tools/javap/pathsep.sh 2014-06-06 19:56:17.000000000 -0700 @@ -40,7 +40,7 @@ # set platform-dependent variables OS=`uname -s` @@ -66400,3 +118140,20 @@ Files openjdk/jdk/test/javax/imageio/plugins/jpeg/truncated.jpg and bsd-port/jdk FS="/" ;; Windows* ) +--- ./make/scripts/webrev.ksh 2013-09-06 11:20:33.000000000 -0700 ++++ ./make/scripts/webrev.ksh 2014-06-06 19:56:10.000000000 -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 diff --git a/java/openjdk7/files/patch-src-solaris-bin-java_md_solinux.c b/java/openjdk7/files/patch-src-solaris-bin-java_md_solinux.c deleted file mode 100644 index 1d6b67c99987..000000000000 --- a/java/openjdk7/files/patch-src-solaris-bin-java_md_solinux.c +++ /dev/null @@ -1,38 +0,0 @@ ---- jdk/src/solaris/bin/java_md_solinux.c -+++ jdk/src/solaris/bin/java_md_solinux.c -@@ -899,8 +899,9 @@ - * onwards the filename returned in DL_info structure from dladdr is - * an absolute pathname so technically realpath isn't required. - * On Linux we read the executable name from /proc/self/exe. -- * As a fallback, and for platforms other than Solaris and Linux, -- * we use FindExecName to compute the executable name. -+ * On FreeBSD we read the executable name from /proc/curproc/file. -+ * As a fallback, and for platforms other than Solaris, Linux, and -+ * FreeBSD, we use FindExecName to compute the executable name. - */ - const char* - SetExecname(char **argv) -@@ -927,9 +928,13 @@ - } - } - } --#elif defined(__linux__) -+#elif defined(__linux__) || defined(__FreeBSD__) - { -+#if defined(__FreeBSD__) -+ const char* self = "/proc/curproc/file"; -+#else - const char* self = "/proc/self/exe"; -+#endif - char buf[PATH_MAX+1]; - int len = readlink(self, buf, PATH_MAX); - if (len >= 0) { -@@ -937,7 +942,7 @@ - exec_path = JLI_StringDup(buf); - } - } --#else /* !__solaris__ && !__linux__ */ -+#else /* !__solaris__ && !__linux__ && !__FreeBSD__ */ - { - /* Not implemented */ - } |