changeset 8967:78d395c7c479

Merge
author lana
date Thu, 12 Dec 2013 20:04:31 -0800
parents 06c655658b89 (current diff) 27b384262cba (diff)
children 20d504a20a87
files make/data/cryptopolicy/limited/LIMITED make/data/cryptopolicy/unlimited/UNLIMITED test/com/sun/jmx/snmp/NoInfoLeakTest.java test/com/sun/tools/attach/AgentSetup.sh test/com/sun/tools/attach/ApplicationSetup.sh test/com/sun/tools/attach/BasicTests.sh test/com/sun/tools/attach/CommonSetup.sh test/com/sun/tools/attach/PermissionTests.sh test/com/sun/tools/attach/ProviderTests.sh test/java/lang/management/MemoryMXBean/CollectionUsageThresholdConcMarkSweepGC.sh test/java/lang/management/MemoryMXBean/CollectionUsageThresholdParallelGC.sh test/java/lang/management/MemoryMXBean/CollectionUsageThresholdSerialGC.sh test/java/rmi/reliability/benchmark/runRmiBench.sh test/java/rmi/reliability/benchmark/runSerialBench.sh
diffstat 217 files changed, 4149 insertions(+), 2840 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Thu Dec 12 16:30:22 2013 +0400
+++ b/.hgtags	Thu Dec 12 20:04:31 2013 -0800
@@ -240,3 +240,5 @@
 0dc0067f3b8efb299a4c23f76ee26ea64df9e1d7 jdk8-b116
 fc4ac66aa657e09de5f8257c3174f240ed0cbaf7 jdk8-b117
 28ca338366ff2774ac9002f9f6eaff4101a3ea3b jdk8-b118
+e4499a6529e8c3e762ba86f45cdd774c92a8e7bc jdk8-b119
+d31cd980e1da31fa496a359caaf1a165aeb5791a jdk8-b120
--- a/make/CreateSecurityJars.gmk	Thu Dec 12 16:30:22 2013 +0400
+++ b/make/CreateSecurityJars.gmk	Thu Dec 12 20:04:31 2013 -0800
@@ -54,7 +54,7 @@
 ##########################################################################################
 # For security and crypto jars, always build the jar, but for closed, install the prebuilt
 # signed version instead of the newly built jar. Unsigned jars are treated as intermediate
-# targets and explicitly added to the JARS list. For open, signing is not needed. See
+# targets and explicitly added to the TARGETS list. For open, signing is not needed. See
 # SignJars.gmk for more information.
 #
 # The source for the crypto jars is not available for all licensees. The BUILD_CRYPTO
@@ -63,7 +63,7 @@
 # other way to get the jars than to build them.
 
 SUNPKCS11_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunpkcs11.jar
-SUNPKCS11_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/sunpkcs11.jar
+SUNPKCS11_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/sunpkcs11.jar
 
 $(eval $(call SetupArchive,BUILD_SUNPKCS11_JAR, , \
     SRCS := $(JDK_OUTPUTDIR)/classes_security, \
@@ -78,19 +78,19 @@
 ifndef OPENJDK
   SUNPKCS11_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/pkcs11/sunpkcs11.jar
   $(SUNPKCS11_JAR_DST): $(SUNPKCS11_JAR_SRC)
-	@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt SunPKCS11 provider..."
+	@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
 	$(install-file)
 else
   $(SUNPKCS11_JAR_DST): $(SUNPKCS11_JAR_UNSIGNED)
 	$(install-file)
 endif
 
-JARS += $(SUNPKCS11_JAR_UNSIGNED) $(SUNPKCS11_JAR_DST)
+TARGETS += $(SUNPKCS11_JAR_UNSIGNED) $(SUNPKCS11_JAR_DST)
 
 ##########################################################################################
 
 SUNEC_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunec.jar
-SUNEC_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/sunec.jar
+SUNEC_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/sunec.jar
 
 $(eval $(call SetupArchive,BUILD_SUNEC_JAR, , \
     SRCS := $(JDK_OUTPUTDIR)/classes_security, \
@@ -105,19 +105,19 @@
 ifndef OPENJDK
   SUNEC_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ec/sunec.jar
   $(SUNEC_JAR_DST): $(SUNEC_JAR_SRC)
-	@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt SunEC provider..."
+	@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
 	$(install-file)
 else
   $(SUNEC_JAR_DST): $(SUNEC_JAR_UNSIGNED)
 	$(install-file)
 endif
 
-JARS += $(SUNEC_JAR_UNSIGNED) $(SUNEC_JAR_DST)
+TARGETS += $(SUNEC_JAR_UNSIGNED) $(SUNEC_JAR_DST)
 
 ##########################################################################################
 
 SUNJCE_PROVIDER_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunjce_provider.jar
-SUNJCE_PROVIDER_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/sunjce_provider.jar
+SUNJCE_PROVIDER_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/sunjce_provider.jar
 
 ifneq ($(BUILD_CRYPTO), no)
   $(eval $(call SetupArchive,BUILD_SUNJCE_PROVIDER_JAR, , \
@@ -130,25 +130,25 @@
 
   $(SUNJCE_PROVIDER_JAR_UNSIGNED): $(JCE_MANIFEST)
 
-  JARS += $(SUNJCE_PROVIDER_JAR_UNSIGNED)
+  TARGETS += $(SUNJCE_PROVIDER_JAR_UNSIGNED)
 endif
 
 ifndef OPENJDK
   SUNJCE_PROVIDER_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/jce/sunjce_provider.jar
   $(SUNJCE_PROVIDER_JAR_DST): $(SUNJCE_PROVIDER_JAR_SRC)
-	@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt SunJCE provider..."
+	@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
 	$(install-file)
 else
   $(SUNJCE_PROVIDER_JAR_DST): $(SUNJCE_PROVIDER_JAR_UNSIGNED)
 	$(install-file)
 endif
 
-JARS += $(SUNJCE_PROVIDER_JAR_DST)
+TARGETS += $(SUNJCE_PROVIDER_JAR_DST)
 
 ##########################################################################################
 
 JCE_JAR_DST := $(JDK_OUTPUTDIR)/lib/jce.jar
-JCE_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/jce.jar
+JCE_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/jce.jar
 
 ifneq ($(BUILD_CRYPTO), no)
   $(eval $(call SetupArchive,BUILD_JCE_JAR, , \
@@ -161,36 +161,43 @@
 
   $(JCE_JAR_UNSIGNED): $(JCE_MANIFEST)
 
-  JARS += $(JCE_JAR_UNSIGNED)
+  TARGETS += $(JCE_JAR_UNSIGNED)
 endif
 
 ifndef OPENJDK
   JCE_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/jce/jce.jar
   $(JCE_JAR_DST): $(JCE_JAR_SRC)
-	@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt jce.jar..."
+	@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
 	$(install-file)
 else
   $(JCE_JAR_DST): $(JCE_JAR_UNSIGNED)
 	$(install-file)
 endif
 
-JARS += $(JCE_JAR_DST)
+TARGETS += $(JCE_JAR_DST)
 
 ##########################################################################################
 
 US_EXPORT_POLICY_JAR_DST := $(JDK_OUTPUTDIR)/lib/security/US_export_policy.jar
-US_EXPORT_POLICY_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/US_export_policy.jar
 
 ifneq ($(BUILD_CRYPTO), no)
+
+  US_EXPORT_POLICY_JAR_LIMITED_UNSIGNED := \
+      $(JDK_OUTPUTDIR)/jce/unsigned/policy/limited/US_export_policy.jar
+  US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED := \
+      $(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/US_export_policy.jar
+
   #
   # TODO fix so that SetupArchive does not write files into SRCS
   # then we don't need this extra copying
   #
   # NOTE: We currently do not place restrictions on our limited export
-  # policy. This was not a typo.
+  # policy. This was not a typo. This means we are shipping the same file
+  # for both limimted and unlimited US_export_policy.jar.
   #
   US_EXPORT_POLICY_JAR_SRC_DIR := $(JDK_TOPDIR)/make/data/cryptopolicy/unlimited
-  US_EXPORT_POLICY_JAR_TMP := $(JDK_OUTPUTDIR)/US_export_policy_jar.tmp
+  US_EXPORT_POLICY_JAR_TMP := \
+      $(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/US_export_policy_jar.tmp
 
   $(US_EXPORT_POLICY_JAR_TMP)/%: $(US_EXPORT_POLICY_JAR_SRC_DIR)/%
 	$(install-file)
@@ -200,77 +207,113 @@
   $(eval $(call SetupArchive,BUILD_US_EXPORT_POLICY_JAR, $(US_EXPORT_POLICY_JAR_DEPS), \
       SRCS := $(US_EXPORT_POLICY_JAR_TMP), \
       SUFFIXES := .policy, \
-      JAR := $(US_EXPORT_POLICY_JAR_UNSIGNED), \
+      JAR := $(US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED), \
       EXTRA_MANIFEST_ATTR := Crypto-Strength: unlimited, \
       SKIP_METAINF := true))
 
-  JARS += $(US_EXPORT_POLICY_JAR_UNSIGNED)
+  $(US_EXPORT_POLICY_JAR_LIMITED_UNSIGNED): $(US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED)
+	$(ECHO) $(LOG_INFO) Copying unlimited $(patsubst $(OUTPUT_ROOT)/%,%,$@)
+	$(install-file)
+
+  TARGETS += $(US_EXPORT_POLICY_JAR_LIMITED_UNSIGNED) \
+      $(US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED)
 endif
 
 ifndef OPENJDK
+  ifeq ($(UNLIMITED_CRYPTO), true)
+    $(error No prebuilt unlimited crypto jars available)
+  endif
   $(US_EXPORT_POLICY_JAR_DST): $(JDK_TOPDIR)/make/closed/tools/crypto/jce/US_export_policy.jar
-	$(ECHO) $(LOG_INFO) Copying $(@F)
+	$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
 	$(install-file)
 else
-  $(US_EXPORT_POLICY_JAR_DST): $(US_EXPORT_POLICY_JAR_UNSIGNED)
+  ifeq ($(UNLIMITED_CRYPTO), true)
+    $(US_EXPORT_POLICY_JAR_DST): $(US_EXPORT_POLICY_JAR_UNLIMITED_UNSIGNED)
 	$(install-file)
+  else
+    $(US_EXPORT_POLICY_JAR_DST): $(US_EXPORT_POLICY_JAR_LIMITED_UNSIGNED)
+	$(install-file)
+  endif
 endif
 
-JARS += $(US_EXPORT_POLICY_JAR_DST)
+TARGETS += $(US_EXPORT_POLICY_JAR_DST)
 
 ##########################################################################################
 
 LOCAL_POLICY_JAR_DST := $(JDK_OUTPUTDIR)/lib/security/local_policy.jar
-LOCAL_POLICY_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/local_policy.jar
 
 ifneq ($(BUILD_CRYPTO), no)
+
+  LOCAL_POLICY_JAR_LIMITED_UNSIGNED := \
+      $(JDK_OUTPUTDIR)/jce/unsigned/policy/limited/local_policy.jar
+  LOCAL_POLICY_JAR_UNLIMITED_UNSIGNED := \
+      $(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/local_policy.jar
+
   #
   # TODO fix so that SetupArchive does not write files into SRCS
   # then we don't need this extra copying
   #
-  LOCAL_POLICY_JAR_TMP := $(JDK_OUTPUTDIR)/local_policy_jar.tmp
+  LOCAL_POLICY_JAR_LIMITED_TMP := \
+      $(JDK_OUTPUTDIR)/jce/unsigned/policy/limited/local_policy_jar.tmp
+  LOCAL_POLICY_JAR_UNLIMITED_TMP := \
+      $(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/local_policy_jar.tmp
 
-  ifeq ($(UNLIMITED_CRYPTO), true)
-    LOCAL_POLICY_JAR_SRC_DIR := $(JDK_TOPDIR)/make/data/cryptopolicy/unlimited
-    LOCAL_POLICY_JAR_DEPS := $(LOCAL_POLICY_JAR_TMP)/default_local.policy
-    LOCAL_POLICY_JAR_ATTR := Crypto-Strength: unlimited
-  else
-    LOCAL_POLICY_JAR_SRC_DIR := $(JDK_TOPDIR)/make/data/cryptopolicy/limited
-    LOCAL_POLICY_JAR_DEPS := $(LOCAL_POLICY_JAR_TMP)/exempt_local.policy \
-        $(LOCAL_POLICY_JAR_TMP)/default_local.policy
-    LOCAL_POLICY_JAR_ATTR := Crypto-Strength: limited
-  endif
+  $(LOCAL_POLICY_JAR_LIMITED_TMP)/%: $(JDK_TOPDIR)/make/data/cryptopolicy/limited/%
+	$(install-file)
 
-  $(LOCAL_POLICY_JAR_TMP)/%: $(LOCAL_POLICY_JAR_SRC_DIR)/%
+  $(LOCAL_POLICY_JAR_UNLIMITED_TMP)/%: $(JDK_TOPDIR)/make/data/cryptopolicy/unlimited/%
 	$(install-file)
 
-  $(eval $(call SetupArchive,BUILD_LOCAL_POLICY_JAR, $(LOCAL_POLICY_JAR_DEPS), \
-      SRCS := $(LOCAL_POLICY_JAR_TMP), \
+  $(eval $(call SetupArchive,BUILD_LOCAL_POLICY_JAR_LIMITED, \
+      $(LOCAL_POLICY_JAR_LIMITED_TMP)/exempt_local.policy \
+      $(LOCAL_POLICY_JAR_LIMITED_TMP)/default_local.policy, \
+      SRCS := $(LOCAL_POLICY_JAR_LIMITED_TMP), \
       SUFFIXES := .policy, \
-      JAR := $(LOCAL_POLICY_JAR_UNSIGNED), \
-      EXTRA_MANIFEST_ATTR := $(LOCAL_POLICY_JAR_ATTR), \
+      JAR := $(LOCAL_POLICY_JAR_LIMITED_UNSIGNED), \
+      EXTRA_MANIFEST_ATTR := Crypto-Strength: limited, \
       SKIP_METAINF := true))
 
-  JARS += $(LOCAL_POLICY_JAR_UNSIGNED)
+  $(eval $(call SetupArchive,BUILD_LOCAL_POLICY_JAR_UNLIMITED, \
+      $(LOCAL_POLICY_JAR_UNLIMITED_TMP)/default_local.policy, \
+      SRCS := $(LOCAL_POLICY_JAR_UNLIMITED_TMP), \
+      SUFFIXES := .policy, \
+      JAR := $(LOCAL_POLICY_JAR_UNLIMITED_UNSIGNED), \
+      EXTRA_MANIFEST_ATTR := Crypto-Strength: unlimited, \
+      SKIP_METAINF := true))
+
+  TARGETS += $(LOCAL_POLICY_JAR_LIMITED_UNSIGNED) $(LOCAL_POLICY_JAR_UNLIMITED_UNSIGNED)
+
+  ifndef OPENJDK
+    $(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/README.txt: \
+        $(JDK_TOPDIR)/make/closed/javax/crypto/doc/README.txt
+		$(install-file)
+
+    TARGETS += $(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/README.txt
+  endif
 endif
 
 ifndef OPENJDK
   $(LOCAL_POLICY_JAR_DST): $(JDK_TOPDIR)/make/closed/tools/crypto/jce/local_policy.jar
-	$(ECHO) $(LOG_INFO) Copying $(@F)
+	$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
 	$(install-file)
 else
-  $(LOCAL_POLICY_JAR_DST): $(LOCAL_POLICY_JAR_UNSIGNED)
+  ifeq ($(UNLIMITED_CRYPTO), true)
+    $(LOCAL_POLICY_JAR_DST): $(LOCAL_POLICY_JAR_UNLIMITED_UNSIGNED)
 	$(install-file)
+  else
+    $(LOCAL_POLICY_JAR_DST): $(LOCAL_POLICY_JAR_LIMITED_UNSIGNED)
+	$(install-file)
+  endif
 endif
 
-JARS += $(LOCAL_POLICY_JAR_DST)
+TARGETS += $(LOCAL_POLICY_JAR_DST)
 
 ##########################################################################################
 
 ifeq ($(OPENJDK_TARGET_OS), windows)
 
   SUNMSCAPI_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/sunmscapi.jar
-  SUNMSCAPI_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/sunmscapi.jar
+  SUNMSCAPI_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/sunmscapi.jar
 
   $(eval $(call SetupArchive,BUILD_SUNMSCAPI_JAR, , \
       SRCS := $(JDK_OUTPUTDIR)/classes_security, \
@@ -285,14 +328,14 @@
   ifndef OPENJDK
     SUNMSCAPI_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/mscapi/sunmscapi.jar
     $(SUNMSCAPI_JAR_DST): $(SUNMSCAPI_JAR_SRC)
-	@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt SunMSCAPI provider..."
+	@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
 	$(install-file)
   else
     $(SUNMSCAPI_JAR_DST): $(SUNMSCAPI_JAR_UNSIGNED)
 	$(install-file)
   endif
 
-  JARS += $(SUNMSCAPI_JAR_UNSIGNED) $(SUNMSCAPI_JAR_DST)
+  TARGETS += $(SUNMSCAPI_JAR_UNSIGNED) $(SUNMSCAPI_JAR_DST)
 
 endif
 
@@ -302,7 +345,7 @@
   ifndef OPENJDK
 
     UCRYPTO_JAR_DST := $(JDK_OUTPUTDIR)/lib/ext/ucrypto.jar
-    UCRYPTO_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/unsigned/ucrypto.jar
+    UCRYPTO_JAR_UNSIGNED := $(JDK_OUTPUTDIR)/jce/unsigned/ucrypto.jar
     UCRYPTO_JAR_SRC := $(JDK_TOPDIR)/make/closed/tools/crypto/ucrypto/ucrypto.jar
 
     $(eval $(call SetupArchive,BUILD_UCRYPTO_JAR, , \
@@ -316,14 +359,14 @@
     $(UCRYPTO_JAR_UNSIGNED): $(JCE_MANIFEST)
 
     $(UCRYPTO_JAR_DST): $(UCRYPTO_JAR_SRC)
-	@$(ECHO) $(LOG_INFO) "\n>>>Installing prebuilt OracleUcrypto provider..."
+	@$(ECHO) $(LOG_INFO) Copying prebuilt $(@F)
 	$(install-file)
 
-    JARS += $(UCRYPTO_JAR_UNSIGNED) $(UCRYPTO_JAR_DST)
+    TARGETS += $(UCRYPTO_JAR_UNSIGNED) $(UCRYPTO_JAR_DST)
 
   endif
 endif
 
-all: $(JARS)
+all: $(TARGETS)
 
 .PHONY: default all
--- a/make/SignJars.gmk	Thu Dec 12 16:30:22 2013 +0400
+++ b/make/SignJars.gmk	Thu Dec 12 20:04:31 2013 -0800
@@ -80,7 +80,7 @@
 	  exit 2; \
 	fi
 
-$(JCE_OUTPUTDIR)/%: $(JDK_OUTPUTDIR)/unsigned/%
+$(JDK_OUTPUTDIR)/jce/signed/%: $(JDK_OUTPUTDIR)/jce/unsigned/%
 	$(call install-file)
 	$(JARSIGNER) -keystore $(SIGNING_KEYSTORE) \
 	    $@ $(SIGNING_ALIAS) < $(SIGNING_PASSPHRASE)
@@ -88,26 +88,33 @@
 
 JAR_LIST := \
     jce.jar \
-    local_policy.jar \
+    policy/limited/local_policy.jar \
+    policy/limited/US_export_policy.jar \
+    policy/unlimited/local_policy.jar \
+    policy/unlimited/US_export_policy.jar \
     sunec.jar \
     sunjce_provider.jar \
     sunpkcs11.jar \
-    US_export_policy.jar \
     sunmscapi.jar \
     ucrypto.jar \
     #
 
-UNSIGNED_JARS := $(wildcard $(addprefix $(JDK_OUTPUTDIR)/unsigned/, $(JAR_LIST)))
+UNSIGNED_JARS := $(wildcard $(addprefix $(JDK_OUTPUTDIR)/jce/unsigned/, $(JAR_LIST)))
 
 ifeq ($(UNSIGNED_JARS), )
-  $(error No jars found in $(JDK_OUTPUTDIR)/unsigned/)
+  $(error No jars found in $(JDK_OUTPUTDIR)/jce/unsigned/)
 endif
 
-SIGNED_JARS := $(patsubst $(JDK_OUTPUTDIR)/unsigned/%,$(JCE_OUTPUTDIR)/%, $(UNSIGNED_JARS))
+SIGNED_JARS := $(patsubst $(JDK_OUTPUTDIR)/jce/unsigned/%,$(JDK_OUTPUTDIR)/jce/signed/%, \
+    $(UNSIGNED_JARS))
 
 $(SIGNED_JARS): check-keystore
 
-all: $(SIGNED_JARS)
+$(JDK_OUTPUTDIR)/jce/signed/policy/unlimited/README.txt: \
+    $(JDK_OUTPUTDIR)/jce/unsigned/policy/unlimited/README.txt
+	$(install-file)
+
+all: $(SIGNED_JARS) $(JDK_OUTPUTDIR)/jce/signed/policy/unlimited/README.txt
 	@$(PRINTF) "\n*** The jar files built by the 'sign-jars' target are developer      ***"
 	@$(PRINTF) "\n*** builds only and *MUST NOT* be checked into the closed workspace. ***"
 	@$(PRINTF) "\n***                                                                  ***"
--- a/make/data/cryptopolicy/limited/LIMITED	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-Crypto-Strength: limited
--- a/make/data/cryptopolicy/unlimited/UNLIMITED	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-Crypto-Strength: unlimited
--- a/src/bsd/doc/man/jdeps.1	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/bsd/doc/man/jdeps.1	Thu Dec 12 20:04:31 2013 -0800
@@ -62,7 +62,7 @@
 \fIoptions\fR
 Command-line options\&. See Options\&.
 .TP     
-\fIclass\fR\fIes\fR
+\fIclasses\fR
 Name of the classes to analyze\&. You can specify a class that can be found in the class path, by its file name, a directory, or a JAR file\&.
 .SH DESCRIPTION    
 The \fI\fR\f3jdeps\fR command shows the package-level or class-level dependencies of Java class files\&. The input class can be a path name to a \f3\&.class\fR file, a directory, a JAR file, or it can be a fully qualified class name to analyze all class files\&. The options determine the output\&. By default, \f3jdeps\fR outputs the dependencies to the system output\&. It can generate the dependencies in DOT language (see the \f3-dotoutput\fR option)\&.
@@ -106,6 +106,12 @@
 .br
 Restricts analysis to classes matching pattern\&. This option filters the list of classes to be analyzed\&. It can be used together with \f3-p\fR and \f3-e\fR which apply pattern to the dependencies\&.
 .TP
+-jdkinternals
+.br
+Finds class-level dependences in JDK internal APIs\&. By default, it analyzes all classes specified in the \f3-classpath\fR option and in input files unless you specified the \f3-include\fR option\&. You cannot use this option with the \f3-p\fR, \f3-e\fR, and \f3-s\fR options\&.
+
+\fIWarning\fR: JDK internal APIs may not be accessible in upcoming releases\&.
+.TP
 -P, -profile
 .br
 Shows profile or the file containing a package\&.
--- a/src/linux/doc/man/jdeps.1	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/linux/doc/man/jdeps.1	Thu Dec 12 20:04:31 2013 -0800
@@ -62,7 +62,7 @@
 \fIoptions\fR
 Command-line options\&. See Options\&.
 .TP     
-\fIclass\fR\fIes\fR
+\fIclasses\fR
 Name of the classes to analyze\&. You can specify a class that can be found in the class path, by its file name, a directory, or a JAR file\&.
 .SH DESCRIPTION    
 The \fI\fR\f3jdeps\fR command shows the package-level or class-level dependencies of Java class files\&. The input class can be a path name to a \f3\&.class\fR file, a directory, a JAR file, or it can be a fully qualified class name to analyze all class files\&. The options determine the output\&. By default, \f3jdeps\fR outputs the dependencies to the system output\&. It can generate the dependencies in DOT language (see the \f3-dotoutput\fR option)\&.
@@ -106,6 +106,12 @@
 .br
 Restricts analysis to classes matching pattern\&. This option filters the list of classes to be analyzed\&. It can be used together with \f3-p\fR and \f3-e\fR which apply pattern to the dependencies\&.
 .TP
+-jdkinternals
+.br
+Finds class-level dependences in JDK internal APIs\&. By default, it analyzes all classes specified in the \f3-classpath\fR option and in input files unless you specified the \f3-include\fR option\&. You cannot use this option with the \f3-p\fR, \f3-e\fR, and \f3-s\fR options\&.
+
+\fIWarning\fR: JDK internal APIs may not be accessible in upcoming releases\&.
+.TP
 -P, -profile
 .br
 Shows profile or the file containing a package\&.
--- a/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java	Thu Dec 12 20:04:31 2013 -0800
@@ -916,8 +916,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,
--- a/src/share/classes/java/applet/Applet.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/applet/Applet.java	Thu Dec 12 20:04:31 2013 -0800
@@ -392,7 +392,7 @@
      * Each element of the array should be a set of three
      * <code>Strings</code> containing the name, the type, and a
      * description. For example:
-     * <p><blockquote><pre>
+     * <blockquote><pre>
      * String pinfo[][] = {
      *   {"fps",    "1-10",    "frames per second"},
      *   {"repeat", "boolean", "repeat image loop"},
--- a/src/share/classes/java/applet/AppletContext.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/applet/AppletContext.java	Thu Dec 12 20:04:31 2013 -0800
@@ -107,7 +107,7 @@
      * <code>target</code> argument indicates in which HTML frame the
      * document is to be displayed.
      * The target argument is interpreted as follows:
-     * <p>
+     *
      * <center><table border="3" summary="Target arguments and their descriptions">
      * <tr><th>Target Argument</th><th>Description</th></tr>
      * <tr><td><code>"_self"</code>  <td>Show in the window and frame that
--- a/src/share/classes/java/awt/AWTPermission.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/AWTPermission.java	Thu Dec 12 20:04:31 2013 -0800
@@ -43,7 +43,6 @@
  * target names, and for each provides a description of what the
  * permission allows and a discussion of the risks of granting code
  * the permission.
- * <P>
  *
  * <table border=1 cellpadding=5 summary="AWTPermission target names, descriptions, and associated risks.">
  * <tr>
--- a/src/share/classes/java/awt/AlphaComposite.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/AlphaComposite.java	Thu Dec 12 20:04:31 2013 -0800
@@ -175,7 +175,6 @@
  * <em>F<sub>s</sub></em> and <em>F<sub>d</sub></em> and then the resulting
  * premultiplied components <em>A<sub>r</sub></em> and <em>C<sub>r</sub></em>.
  *
- * <p>
  * <h3>Preparing Results</h3>
  *
  * <p>
@@ -193,7 +192,6 @@
  * by zero" and the color components are left as
  * all zeros.
  *
- * <p>
  * <h3>Performance Considerations</h3>
  *
  * <p>
@@ -216,7 +214,6 @@
  * for their pixels.  Such sources supply an alpha of 1.0 for
  * all of their pixels.
  *
- * <p>
  * <li>
  * Many destinations also have no place to store the alpha values
  * that result from the blending calculations performed by this class.
@@ -227,7 +224,6 @@
  * values by the resulting alpha value before storing the color
  * values and discarding the alpha value.
  *
- * <p>
  * <li>
  * The accuracy of the results depends on the manner in which pixels
  * are stored in the destination.
@@ -248,7 +244,6 @@
  * the need to choose a pixel from a limited palette to match the
  * results of the blending equations.
  *
- * <p>
  * <li>
  * Nearly all formats store pixels as discrete integers rather than
  * the floating point values used in the reference equations above.
@@ -268,7 +263,6 @@
  * represents 0.0 and 0xff represents
  * 1.0.
  *
- * <p>
  * <li>
  * The internal implementation can approximate some of the equations
  * and it can also eliminate some steps to avoid unnecessary operations.
@@ -332,7 +326,6 @@
  * <p>
  * and thus they would all match.
  *
- * <p>
  * <li>
  * Because of the technique of simplifying the equations for
  * calculation efficiency, some implementations might perform
--- a/src/share/classes/java/awt/BasicStroke.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/BasicStroke.java	Thu Dec 12 20:04:31 2013 -0800
@@ -39,7 +39,7 @@
  * {@link Shape} and the decorations applied at the ends and joins of
  * path segments of the <code>Shape</code>.
  * These rendering attributes include:
- * <dl compact>
+ * <dl>
  * <dt><i>width</i>
  * <dd>The pen width, measured perpendicularly to the pen trajectory.
  * <dt><i>end caps</i>
--- a/src/share/classes/java/awt/BorderLayout.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/BorderLayout.java	Thu Dec 12 20:04:31 2013 -0800
@@ -99,7 +99,7 @@
  * style="float:center; margin: 7px 10px;">
  * <p>
  * The code for this applet is as follows:
- * <p>
+ *
  * <hr><blockquote><pre>
  * import java.awt.*;
  * import java.applet.Applet;
--- a/src/share/classes/java/awt/Button.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Button.java	Thu Dec 12 20:04:31 2013 -0800
@@ -388,7 +388,7 @@
      * This method is not called unless action events are
      * enabled for this button. Action events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>ActionListener</code> object is registered
      * via <code>addActionListener</code>.
      * <li>Action events are enabled via <code>enableEvents</code>.
--- a/src/share/classes/java/awt/Checkbox.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Checkbox.java	Thu Dec 12 20:04:31 2013 -0800
@@ -41,7 +41,7 @@
  * <p>
  * The following code example creates a set of check boxes in
  * a grid layout:
- * <p>
+ *
  * <hr><blockquote><pre>
  * setLayout(new GridLayout(3, 1));
  * add(new Checkbox("one", null, true));
@@ -558,7 +558,7 @@
      * This method is not called unless item events are
      * enabled for this component. Item events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>ItemListener</code> object is registered
      * via <code>addItemListener</code>.
      * <li>Item events are enabled via <code>enableEvents</code>.
--- a/src/share/classes/java/awt/CheckboxGroup.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/CheckboxGroup.java	Thu Dec 12 20:04:31 2013 -0800
@@ -35,7 +35,7 @@
  * <p>
  * The following code example produces a new check box group,
  * with three check boxes:
- * <p>
+ *
  * <hr><blockquote><pre>
  * setLayout(new GridLayout(3, 1));
  * CheckboxGroup cbg = new CheckboxGroup();
--- a/src/share/classes/java/awt/CheckboxMenuItem.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/CheckboxMenuItem.java	Thu Dec 12 20:04:31 2013 -0800
@@ -367,7 +367,7 @@
      * This method is not called unless item events are
      * enabled for this menu item. Item events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>ItemListener</code> object is registered
      * via <code>addItemListener</code>.
      * <li>Item events are enabled via <code>enableEvents</code>.
--- a/src/share/classes/java/awt/Choice.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Choice.java	Thu Dec 12 20:04:31 2013 -0800
@@ -40,7 +40,7 @@
  * The current choice is displayed as the title of the menu.
  * <p>
  * The following code example produces a pop-up menu:
- * <p>
+ *
  * <hr><blockquote><pre>
  * Choice ColorChooser = new Choice();
  * ColorChooser.add("Green");
@@ -609,7 +609,7 @@
      * This method is not called unless item events are
      * enabled for this component. Item events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>ItemListener</code> object is registered
      * via <code>addItemListener</code>.
      * <li>Item events are enabled via <code>enableEvents</code>.
--- a/src/share/classes/java/awt/Component.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Component.java	Thu Dec 12 20:04:31 2013 -0800
@@ -106,7 +106,7 @@
  * adding/removing components to/from containers, the whole hierarchy must be
  * validated afterwards by means of the {@link Container#validate()} method
  * invoked on the top-most invalid container of the hierarchy.
- * <p>
+ *
  * <h3>Serialization</h3>
  * It is important to note that only AWT listeners which conform
  * to the <code>Serializable</code> protocol will be saved when
@@ -3859,7 +3859,7 @@
      * This is a proxy capabilities class used when a FlipBufferStrategy
      * is created instead of the requested Blit strategy.
      *
-     * @see sun.awt.SunGraphicsEnvironment#isFlipStrategyPreferred(ComponentPeer)
+     * @see sun.java2d.SunGraphicsEnvironment#isFlipStrategyPreferred(ComponentPeer)
      */
     private class ProxyCapabilities extends ExtendedBufferCapabilities {
         private BufferCapabilities orig;
@@ -4515,7 +4515,7 @@
      * Private class to perform sub-region blitting.  Swing will use
      * this subclass via the SubRegionShowable interface in order to
      * copy only the area changed during a repaint.
-     * @see javax.swing.BufferStrategyPaintManager
+     * See javax.swing.BufferStrategyPaintManager.
      */
     private class BltSubRegionBufferStrategy extends BltBufferStrategy
         implements SubRegionShowable
@@ -6328,7 +6328,7 @@
      * This method is not called unless component events are
      * enabled for this component. Component events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>A <code>ComponentListener</code> object is registered
      * via <code>addComponentListener</code>.
      * <li>Component events are enabled via <code>enableEvents</code>.
@@ -6373,7 +6373,7 @@
      * This method is not called unless focus events are
      * enabled for this component. Focus events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>A <code>FocusListener</code> object is registered
      * via <code>addFocusListener</code>.
      * <li>Focus events are enabled via <code>enableEvents</code>.
@@ -6393,7 +6393,7 @@
      * with a <code>FocusEvent</code> as the argument will result in a
      * call to the <code>Component</code>'s <code>processFocusEvent</code>
      * method regardless of the current <code>KeyboardFocusManager</code>.
-     * <p>
+     *
      * <p>Note that if the event parameter is <code>null</code>
      * the behavior is unspecified and may result in an
      * exception.
@@ -6430,7 +6430,7 @@
      * This method is not called unless key events are
      * enabled for this component. Key events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>A <code>KeyListener</code> object is registered
      * via <code>addKeyListener</code>.
      * <li>Key events are enabled via <code>enableEvents</code>.
@@ -6499,7 +6499,7 @@
      * This method is not called unless mouse events are
      * enabled for this component. Mouse events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>A <code>MouseListener</code> object is registered
      * via <code>addMouseListener</code>.
      * <li>Mouse events are enabled via <code>enableEvents</code>.
@@ -6547,7 +6547,7 @@
      * This method is not called unless mouse motion events are
      * enabled for this component. Mouse motion events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>A <code>MouseMotionListener</code> object is registered
      * via <code>addMouseMotionListener</code>.
      * <li>Mouse motion events are enabled via <code>enableEvents</code>.
@@ -6586,7 +6586,7 @@
      * This method is not called unless mouse wheel events are
      * enabled for this component. Mouse wheel events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>A <code>MouseWheelListener</code> object is registered
      * via <code>addMouseWheelListener</code>.
      * <li>Mouse wheel events are enabled via <code>enableEvents</code>.
@@ -6630,7 +6630,7 @@
      * This method is not called unless input method events
      * are enabled for this component. Input method events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>InputMethodListener</code> object is registered
      * via <code>addInputMethodListener</code>.
      * <li>Input method events are enabled via <code>enableEvents</code>.
@@ -6669,7 +6669,7 @@
      * This method is not called unless hierarchy events
      * are enabled for this component. Hierarchy events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>HierarchyListener</code> object is registered
      * via <code>addHierarchyListener</code>.
      * <li>Hierarchy events are enabled via <code>enableEvents</code>.
@@ -6705,7 +6705,7 @@
      * This method is not called unless hierarchy bounds events
      * are enabled for this component. Hierarchy bounds events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>HierarchyBoundsListener</code> object is registered
      * via <code>addHierarchyBoundsListener</code>.
      * <li>Hierarchy bounds events are enabled via <code>enableEvents</code>.
--- a/src/share/classes/java/awt/Container.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Container.java	Thu Dec 12 20:04:31 2013 -0800
@@ -185,7 +185,7 @@
      * the method can return the Container on which it is originally called
      * in case if none of its children are the current mouse event targets.
      *
-     * @see #getMouseEventTarget(int, int, boolean, boolean, boolean)
+     * @see #getMouseEventTarget(int, int, boolean)
      */
     static final boolean INCLUDE_SELF = true;
 
@@ -194,7 +194,7 @@
      * of <code>getMouseEventTarget</code>. It is used to specify whether
      * the method should search only lightweight components.
      *
-     * @see #getMouseEventTarget(int, int, boolean, boolean, boolean)
+     * @see #getMouseEventTarget(int, int, boolean)
      */
     static final boolean SEARCH_HEAVYWEIGHTS = true;
 
@@ -1036,7 +1036,7 @@
      * every add request to a container as all other add methods defer
      * to this one. An overriding method should
      * usually include a call to the superclass's version of the method:
-     * <p>
+     *
      * <blockquote>
      * <code>super.addImpl(comp, constraints, index)</code>
      * </blockquote>
--- a/src/share/classes/java/awt/EventFilter.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/EventFilter.java	Thu Dec 12 20:04:31 2013 -0800
@@ -28,20 +28,20 @@
 
     /**
      * Enumeration for possible values for <code>acceptEvent(AWTEvent ev)</code> method.
-     * @see EventDispatchThread#pumpEventsForFilters(EventFilter)
+     * @see EventDispatchThread#pumpEventsForFilter
      */
     static enum FilterAction {
         /**
          * ACCEPT means that this filter do not filter the event and allowes other
          * active filters to proceed it. If all the active filters accept the event, it
          * is dispatched by the <code>EventDispatchThread</code>
-         * @see EventDispatchThread#pumpEventsForFilters(EventFilter)
+         * @see EventDispatchThread#pumpEventsForFilter
          */
         ACCEPT,
         /**
          * REJECT means that this filter filter the event. No other filters are queried,
          * and the event is not dispatched by the <code>EventDispatchedThread</code>
-         * @see EventDispatchThread#pumpEventsForFilters(EventFilter)
+         * @see EventDispatchThread#pumpEventsForFilter
          */
         REJECT,
         /**
@@ -51,7 +51,7 @@
          * It is not recommended to use ACCEPT_IMMEDIATELY as there may be some active
          * filters not queried yet that do not accept this event. It is primarily used
          * by modal filters.
-         * @see EventDispatchThread#pumpEventsForFilters(EventFilter)
+         * @see EventDispatchThread#pumpEventsForFilter
          * @see ModalEventFilter
          */
         ACCEPT_IMMEDIATELY
--- a/src/share/classes/java/awt/EventQueue.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/EventQueue.java	Thu Dec 12 20:04:31 2013 -0800
@@ -652,7 +652,7 @@
      * Dispatches an event. The manner in which the event is
      * dispatched depends upon the type of the event and the
      * type of the event's source object:
-     * <p>
+     *
      * <table border=1 summary="Event types, source types, and dispatch methods">
      * <tr>
      *     <th>Event Type</th>
--- a/src/share/classes/java/awt/FileDialog.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/FileDialog.java	Thu Dec 12 20:04:31 2013 -0800
@@ -439,7 +439,6 @@
      * Note that the method is private and it's intended to be used
      * by the peers through the AWTAccessor API.
      *
-     * @param directory the current directory
      * @param files     the array that contains the short names of
      *                  all the files that the user selects.
      *
--- a/src/share/classes/java/awt/FlowLayout.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/FlowLayout.java	Thu Dec 12 20:04:31 2013 -0800
@@ -57,7 +57,7 @@
  * style="float:center; margin: 7px 10px;">
  * <p>
  * Here is the code for this applet:
- * <p>
+ *
  * <hr><blockquote><pre>
  * import java.awt.*;
  * import java.applet.Applet;
@@ -129,9 +129,9 @@
      * how each row distributes empty space.
      * It can be one of the following values:
      * <ul>
-     * <code>LEFT</code>
-     * <code>RIGHT</code>
-     * <code>CENTER</code>
+     * <li><code>LEFT</code>
+     * <li><code>RIGHT</code>
+     * <li><code>CENTER</code>
      * </ul>
      *
      * @serial
@@ -146,11 +146,11 @@
      * v1.2 and greater.
      * It can be one of the following three values:
      * <ul>
-     * <code>LEFT</code>
-     * <code>RIGHT</code>
-     * <code>CENTER</code>
-     * <code>LEADING</code>
-     * <code>TRAILING</code>
+     * <li><code>LEFT</code>
+     * <li><code>RIGHT</code>
+     * <li><code>CENTER</code>
+     * <li><code>LEADING</code>
+     * <li><code>TRAILING</code>
      * </ul>
      *
      * @serial
--- a/src/share/classes/java/awt/Font.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Font.java	Thu Dec 12 20:04:31 2013 -0800
@@ -75,13 +75,13 @@
  *
  * A <em>character</em> is a symbol that represents an item such as a letter,
  * a digit, or punctuation in an abstract way. For example, <code>'g'</code>,
- * <font size=-1>LATIN SMALL LETTER G</font>, is a character.
+ * LATIN SMALL LETTER G, is a character.
  * <p>
  * A <em>glyph</em> is a shape used to render a character or a sequence of
  * characters. In simple writing systems, such as Latin, typically one glyph
  * represents one character. In general, however, characters and glyphs do not
  * have one-to-one correspondence. For example, the character '&aacute;'
- * <font size=-1>LATIN SMALL LETTER A WITH ACUTE</font>, can be represented by
+ * LATIN SMALL LETTER A WITH ACUTE, can be represented by
  * two glyphs: one for 'a' and one for '&acute;'. On the other hand, the
  * two-character string "fi" can be represented by a single glyph, an
  * "fi" ligature. In complex writing systems, such as Arabic or the South
@@ -93,7 +93,7 @@
  * of characters as well as the tables needed to map sequences of characters to
  * corresponding sequences of glyphs.
  *
- * <h4>Physical and Logical Fonts</h4>
+ * <h3>Physical and Logical Fonts</h3>
  *
  * The Java Platform distinguishes between two kinds of fonts:
  * <em>physical</em> fonts and <em>logical</em> fonts.
@@ -130,7 +130,7 @@
  * <a href="http://www.oracle.com/technetwork/java/javase/tech/faq-jsp-138165.html">Internationalization FAQ</a>
  * document.
  *
- * <h4>Font Faces and Names</h4>
+ * <h3>Font Faces and Names</h3>
  *
  * A <code>Font</code>
  * can have many faces, such as heavy, medium, oblique, gothic and
@@ -160,7 +160,7 @@
  * with varying sizes, styles, transforms and font features via the
  * <code>deriveFont</code> methods in this class.
  *
- * <h4>Font and TextAttribute</h4>
+ * <h3>Font and TextAttribute</h3>
  *
  * <p><code>Font</code> supports most
  * <code>TextAttribute</code>s.  This makes some operations, such as
@@ -197,7 +197,7 @@
  * avoid this problem.  Clients who use input method highlights can
  * convert these to the platform-specific attributes for that
  * highlight on the current platform and set them on the Font as
- * a workaround.</p>
+ * a workaround.
  *
  * <p>The <code>Map</code>-based constructor and
  * <code>deriveFont</code> APIs ignore the FONT attribute, and it is
@@ -1419,7 +1419,7 @@
      * To ensure that this method returns the desired Font,
      * format the <code>str</code> parameter in
      * one of these ways
-     * <p>
+     *
      * <ul>
      * <li><em>fontname-style-pointsize</em>
      * <li><em>fontname-pointsize</em>
--- a/src/share/classes/java/awt/Graphics.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Graphics.java	Thu Dec 12 20:04:31 2013 -0800
@@ -39,7 +39,7 @@
  * A <code>Graphics</code> object encapsulates state information needed
  * for the basic rendering operations that Java supports.  This
  * state information includes the following properties:
- * <p>
+ *
  * <ul>
  * <li>The <code>Component</code> object on which to draw.
  * <li>A translation origin for rendering and clipping coordinates.
@@ -63,7 +63,7 @@
  * <p>
  * The graphics pen hangs down and to the right from the path it traverses.
  * This has the following implications:
- * <p><ul>
+ * <ul>
  * <li>If you draw a figure that covers a given rectangle, that
  * figure occupies one extra row of pixels on the right and bottom edges
  * as compared to filling a figure that is bounded by that same rectangle.
@@ -136,7 +136,7 @@
      * interpreted in the coordinate system of the original
      * <code>Graphics</code> object. The new graphics context is
      * identical to the original, except in two respects:
-     * <p>
+     *
      * <ul>
      * <li>
      * The new graphics context is translated by (<i>x</i>,&nbsp;<i>y</i>).
--- a/src/share/classes/java/awt/GridBagConstraints.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/GridBagConstraints.java	Thu Dec 12 20:04:31 2013 -0800
@@ -457,7 +457,7 @@
      * resize the component, and if so, how.
      * <p>
      * The following values are valid for <code>fill</code>:
-     * <p>
+     *
      * <ul>
      * <li>
      * <code>NONE</code>: Do not resize the component.
--- a/src/share/classes/java/awt/GridBagLayout.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/GridBagLayout.java	Thu Dec 12 20:04:31 2013 -0800
@@ -55,7 +55,7 @@
  * of the <code>GridBagConstraints</code> objects that are associated
  * with its components. You customize a <code>GridBagConstraints</code>
  * object by setting one or more of its instance variables:
- * <p>
+ *
  * <dl>
  * <dt>{@link GridBagConstraints#gridx},
  * {@link GridBagConstraints#gridy}
@@ -121,7 +121,7 @@
  * <code>ComponentOrientation</code> property while absolute values
  * are not.  Baseline relative values are calculated relative to the
  * baseline.  Valid values are:
- * <p>
+ *
  * <center><table BORDER=0 WIDTH=800
  *        SUMMARY="absolute, relative and baseline values as described above">
  * <tr>
@@ -251,7 +251,7 @@
  * managed by a grid bag layout.  Figure 2 shows the layout for a horizontal,
  * left-to-right container and Figure 3 shows the layout for a horizontal,
  * right-to-left container.
- * <p>
+ *
  * <center><table WIDTH=600 summary="layout">
  * <tr ALIGN=CENTER>
  * <td>
@@ -270,7 +270,7 @@
  * of its associated <code>GridBagConstraints</code> object
  * set to <code>GridBagConstraints.BOTH</code>.
  * In addition, the components have the following non-default constraints:
- * <p>
+ *
  * <ul>
  * <li>Button1, Button2, Button3: <code>weightx&nbsp;=&nbsp;1.0</code>
  * <li>Button4: <code>weightx&nbsp;=&nbsp;1.0</code>,
@@ -285,7 +285,7 @@
  * </ul>
  * <p>
  * Here is the code that implements the example shown above:
- * <p>
+ *
  * <hr><blockquote><pre>
  * import java.awt.*;
  * import java.util.*;
--- a/src/share/classes/java/awt/GridLayout.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/GridLayout.java	Thu Dec 12 20:04:31 2013 -0800
@@ -32,7 +32,7 @@
  * and one component is placed in each rectangle.
  * For example, the following is an applet that lays out six buttons
  * into three rows and two columns:
- * <p>
+ *
  * <hr><blockquote>
  * <pre>
  * import java.awt.*;
@@ -54,7 +54,7 @@
  * and left-to-right, the above example produces the output shown in Figure 1.
  * If the container's <code>ComponentOrientation</code> property is horizontal
  * and right-to-left, the example produces the output shown in Figure 2.
- * <p>
+ *
  * <table style="float:center" WIDTH=600 summary="layout">
  * <tr ALIGN=CENTER>
  * <td><img SRC="doc-files/GridLayout-1.gif"
--- a/src/share/classes/java/awt/Label.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Label.java	Thu Dec 12 20:04:31 2013 -0800
@@ -36,7 +36,7 @@
  * directly.
  * <p>
  * For example, the code&nbsp;.&nbsp;.&nbsp;.
- * <p>
+ *
  * <hr><blockquote><pre>
  * setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
  * add(new Label("Hi There!"));
--- a/src/share/classes/java/awt/LinearGradientPaint.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/LinearGradientPaint.java	Thu Dec 12 20:04:31 2013 -0800
@@ -75,7 +75,6 @@
  * <p>
  * The following code demonstrates typical usage of
  * {@code LinearGradientPaint}:
- * <p>
  * <pre>
  *     Point2D start = new Point2D.Float(0, 0);
  *     Point2D end = new Point2D.Float(50, 50);
@@ -92,7 +91,6 @@
  * <p>
  * This image demonstrates the example code above for each
  * of the three cycle methods:
- * <p>
  * <center>
  * <img src = "doc-files/LinearGradientPaint.png"
  * alt="image showing the output of the example code">
--- a/src/share/classes/java/awt/LinearGradientPaintContext.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/LinearGradientPaintContext.java	Thu Dec 12 20:04:31 2013 -0800
@@ -66,8 +66,8 @@
      *          concatenated with this)
      * @param hints the hints that the context object uses to choose
      *              between rendering alternatives
-     * @param dStart gradient start point, in user space
-     * @param dEnd gradient end point, in user space
+     * @param start gradient start point, in user space
+     * @param end gradient end point, in user space
      * @param fractions the fractions specifying the gradient distribution
      * @param colors the gradient colors
      * @param cycleMethod either NO_CYCLE, REFLECT, or REPEAT
--- a/src/share/classes/java/awt/List.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/List.java	Thu Dec 12 20:04:31 2013 -0800
@@ -41,7 +41,7 @@
  * the user can choose either one item or multiple items.
  * <p>
  * For example, the code&nbsp;.&nbsp;.&nbsp;.
- * <p>
+ *
  * <hr><blockquote><pre>
  * List lst = new List(4, false);
  * lst.add("Mercury");
@@ -1082,7 +1082,7 @@
      * This method is not called unless item events are
      * enabled for this component. Item events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>ItemListener</code> object is registered
      * via <code>addItemListener</code>.
      * <li>Item events are enabled via <code>enableEvents</code>.
@@ -1113,7 +1113,7 @@
      * This method is not called unless action events are
      * enabled for this component. Action events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>ActionListener</code> object is registered
      * via <code>addActionListener</code>.
      * <li>Action events are enabled via <code>enableEvents</code>.
--- a/src/share/classes/java/awt/MenuItem.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/MenuItem.java	Thu Dec 12 20:04:31 2013 -0800
@@ -648,7 +648,7 @@
      * This method is not called unless action events are
      * enabled for this component. Action events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>ActionListener</code> object is registered
      * via <code>addActionListener</code>.
      * <li>Action events are enabled via <code>enableEvents</code>.
--- a/src/share/classes/java/awt/RadialGradientPaint.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/RadialGradientPaint.java	Thu Dec 12 20:04:31 2013 -0800
@@ -104,7 +104,6 @@
  * The following code demonstrates typical usage of
  * {@code RadialGradientPaint}, where the center and focus points are
  * the same:
- * <p>
  * <pre>
  *     Point2D center = new Point2D.Float(50, 50);
  *     float radius = 25;
@@ -117,7 +116,6 @@
  * <p>
  * This image demonstrates the example code above, with default
  * (centered) focus for each of the three cycle methods:
- * <p>
  * <center>
  * <img src = "doc-files/RadialGradientPaint-1.png" alt="image showing the
  * output of the sameple code">
@@ -126,7 +124,6 @@
  * <p>
  * It is also possible to specify a non-centered focus point, as
  * in the following code:
- * <p>
  * <pre>
  *     Point2D center = new Point2D.Float(50, 50);
  *     float radius = 25;
@@ -142,7 +139,6 @@
  * <p>
  * This image demonstrates the previous example code, with non-centered
  * focus for each of the three cycle methods:
- * <p>
  * <center>
  * <img src = "doc-files/RadialGradientPaint-2.png" alt="image showing the
  * output of the sample code">
--- a/src/share/classes/java/awt/Scrollbar.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Scrollbar.java	Thu Dec 12 20:04:31 2013 -0800
@@ -46,7 +46,7 @@
  * <p>
  * Each scroll bar in this example could be created with
  * code similar to the following:
- * <p>
+ *
  * <hr><blockquote><pre>
  * redSlider=new Scrollbar(Scrollbar.VERTICAL, 0, 1, 0, 255);
  * add(redSlider);
@@ -65,7 +65,7 @@
  * The value range represented by the bubble in this example
  * is the <em>visible amount</em>. The horizontal scroll bar
  * in this example could be created with code like the following:
- * <p>
+ *
  * <hr><blockquote><pre>
  * ranger = new Scrollbar(Scrollbar.HORIZONTAL, 0, 60, 0, 300);
  * add(ranger);
@@ -103,7 +103,7 @@
  * <p>
  * The <code>AdjustmentEvent</code> class defines five types
  * of adjustment event, listed here:
- * <p>
+ *
  * <ul>
  * <li><code>AdjustmentEvent.TRACK</code> is sent out when the
  * user drags the scroll bar's bubble.
@@ -136,7 +136,7 @@
  * that are associated with scroll bars in previous platform versions.
  * The following list gives the adjustment event type,
  * and the corresponding JDK&nbsp;1.0 event type it replaces.
- * <p>
+ *
  * <ul>
  * <li><code>AdjustmentEvent.TRACK</code> replaces
  * <code>Event.SCROLL_ABSOLUTE</code>
@@ -295,7 +295,7 @@
      * Constructs a new vertical scroll bar.
      * The default properties of the scroll bar are listed in
      * the following table:
-     * <p>
+     *
      * <table border=1 summary="Scrollbar default properties">
      * <tr>
      *   <th>Property</th>
@@ -1104,11 +1104,11 @@
      * This method is not called unless adjustment events are
      * enabled for this component. Adjustment events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>AdjustmentListener</code> object is registered
      * via <code>addAdjustmentListener</code>.
      * <li>Adjustment events are enabled via <code>enableEvents</code>.
-     * </ul><p>
+     * </ul>
      * <p>Note that if the event parameter is <code>null</code>
      * the behavior is unspecified and may result in an
      * exception.
--- a/src/share/classes/java/awt/SystemColor.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/SystemColor.java	Thu Dec 12 20:04:31 2013 -0800
@@ -463,7 +463,7 @@
     }
 
     /**
-     * Called from <init> & toolkit to update the above systemColors cache.
+     * Called from {@code <init>} and toolkit to update the above systemColors cache.
      */
     private static void updateSystemColors() {
         if (!GraphicsEnvironment.isHeadless()) {
--- a/src/share/classes/java/awt/SystemTray.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/SystemTray.java	Thu Dec 12 20:04:31 2013 -0800
@@ -361,7 +361,7 @@
     /**
      * Adds a {@code PropertyChangeListener} to the list of listeners for the
      * specific property. The following properties are currently supported:
-     * <p>
+     *
      * <table border=1 summary="SystemTray properties">
      * <tr>
      *    <th>Property</th>
--- a/src/share/classes/java/awt/TextArea.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/TextArea.java	Thu Dec 12 20:04:31 2013 -0800
@@ -45,7 +45,7 @@
  * style="float:center; margin: 7px 10px;">
  * <p>
  * This text area could be created by the following line of code:
- * <p>
+ *
  * <hr><blockquote><pre>
  * new TextArea("Hello", 5, 40);
  * </pre></blockquote><hr>
--- a/src/share/classes/java/awt/TextField.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/TextField.java	Thu Dec 12 20:04:31 2013 -0800
@@ -45,7 +45,7 @@
  * style="float:center; margin: 7px 10px;">
  * <p>
  * Here is the code that produces these four text fields:
- * <p>
+ *
  * <hr><blockquote><pre>
  * TextField tf1, tf2, tf3, tf4;
  * // a blank text field
@@ -596,7 +596,7 @@
      * This method is not called unless action events are
      * enabled for this component. Action events are enabled
      * when one of the following occurs:
-     * <p><ul>
+     * <ul>
      * <li>An <code>ActionListener</code> object is registered
      * via <code>addActionListener</code>.
      * <li>Action events are enabled via <code>enableEvents</code>.
--- a/src/share/classes/java/awt/Toolkit.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Toolkit.java	Thu Dec 12 20:04:31 2013 -0800
@@ -80,19 +80,19 @@
  * <br>For example, calling <code>ScrollPane.setScrollPosition</code>
  *     and then <code>getScrollPosition</code> may return an incorrect
  *     value if the original request has not yet been processed.
- * <p>
+ *
  * <li>Moving the focus from one component to another.
  * <br>For more information, see
  * <a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html#transferTiming">Timing
  * Focus Transfers</a>, a section in
  * <a href="http://java.sun.com/docs/books/tutorial/uiswing/">The Swing
  * Tutorial</a>.
- * <p>
+ *
  * <li>Making a top-level container visible.
  * <br>Calling <code>setVisible(true)</code> on a <code>Window</code>,
  *     <code>Frame</code> or <code>Dialog</code> may occur
  *     asynchronously.
- * <p>
+ *
  * <li>Setting the size or location of a top-level container.
  * <br>Calls to <code>setSize</code>, <code>setBounds</code> or
  *     <code>setLocation</code> on a <code>Window</code>,
--- a/src/share/classes/java/awt/WaitDispatchSupport.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/WaitDispatchSupport.java	Thu Dec 12 20:04:31 2013 -0800
@@ -91,7 +91,7 @@
      *
      * @param dispatchThread An event dispatch thread that
      *        should not stop dispatching events while waiting
-     * @param extCondition A conditional object used to determine
+     * @param extCond A conditional object used to determine
      *        if the loop should be terminated
      *
      * @since 1.7
@@ -161,7 +161,7 @@
     }
 
     /**
-     * @inheritDoc
+     * {@inheritDoc}
      */
     @Override
     public boolean enter() {
@@ -281,7 +281,7 @@
     }
 
     /**
-     * @inheritDoc
+     * {@inheritDoc}
      */
     public boolean exit() {
         if (log.isLoggable(PlatformLogger.Level.FINE)) {
--- a/src/share/classes/java/awt/Window.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/Window.java	Thu Dec 12 20:04:31 2013 -0800
@@ -212,7 +212,7 @@
      *
      * @serial
      * @see #getIconImages
-     * @see #setIconImages(List<? extends Image>)
+     * @see #setIconImages
      */
     transient java.util.List<Image> icons;
 
--- a/src/share/classes/java/awt/color/CMMException.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/color/CMMException.java	Thu Dec 12 20:04:31 2013 -0800
@@ -27,7 +27,8 @@
 
  *
  */
-/**********************************************************************
+/*
+ **********************************************************************
  **********************************************************************
  **********************************************************************
  *** COPYRIGHT (c) Eastman Kodak Company, 1997                      ***
--- a/src/share/classes/java/awt/color/ColorSpace.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/color/ColorSpace.java	Thu Dec 12 20:04:31 2013 -0800
@@ -23,7 +23,8 @@
  * questions.
  */
 
-/**********************************************************************
+/*
+ **********************************************************************
  **********************************************************************
  **********************************************************************
  *** COPYRIGHT (c) Eastman Kodak Company, 1997                      ***
@@ -91,7 +92,6 @@
 
 </pre>
  *
- * <p>
  * @see ICC_ColorSpace
  */
 
--- a/src/share/classes/java/awt/color/ICC_ColorSpace.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/color/ICC_ColorSpace.java	Thu Dec 12 20:04:31 2013 -0800
@@ -23,7 +23,8 @@
  * questions.
  */
 
-/**********************************************************************
+/*
+ **********************************************************************
  **********************************************************************
  **********************************************************************
  *** COPYRIGHT (c) Eastman Kodak Company, 1997                      ***
@@ -77,7 +78,6 @@
  * imported images with a known color space.  At most, such applets
  * would need to get one of the default color spaces via
  * ColorSpace.getInstance().
- * <p>
  * @see ColorSpace
  * @see ICC_Profile
  */
@@ -481,7 +481,6 @@
      * be the same as the media white point tag XYZ value in the ICC
      * profile for an sRGB device.
      * <p>
-     * <p>
      * @param colorvalue a float array with length of at least 3.
      * @return a float array with length equal to the number of
      *         components in this ColorSpace.
--- a/src/share/classes/java/awt/color/ICC_Profile.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/color/ICC_Profile.java	Thu Dec 12 20:04:31 2013 -0800
@@ -23,7 +23,8 @@
  * questions.
  */
 
-/**********************************************************************
+/*
+ **********************************************************************
  **********************************************************************
  **********************************************************************
  *** COPYRIGHT (c) Eastman Kodak Company, 1997                      ***
@@ -86,7 +87,6 @@
  * ICC Profile Format Specification.  Most profiles of interest
  * either have invertible transformations or explicitly specify
  * transformations going both directions.
- * <p>
  * @see ICC_ColorSpace
  */
 
--- a/src/share/classes/java/awt/color/ICC_ProfileGray.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/color/ICC_ProfileGray.java	Thu Dec 12 20:04:31 2013 -0800
@@ -23,7 +23,8 @@
  * questions.
  */
 
-/**********************************************************************
+/*
+ **********************************************************************
  **********************************************************************
  **********************************************************************
  *** COPYRIGHT (c) Eastman Kodak Company, 1997                      ***
@@ -63,7 +64,6 @@
 </pre>
  * The inverse transform is done by converting the PCS Y components to
  * device Gray via the inverse of the grayTRC.
- * <p>
  */
 
 
--- a/src/share/classes/java/awt/color/ICC_ProfileRGB.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/color/ICC_ProfileRGB.java	Thu Dec 12 20:04:31 2013 -0800
@@ -23,7 +23,8 @@
  * questions.
  */
 
-/**********************************************************************
+/*
+ **********************************************************************
  **********************************************************************
  **********************************************************************
  *** COPYRIGHT (c) Eastman Kodak Company, 1997                      ***
@@ -82,7 +83,6 @@
  * The inverse transform is performed by converting PCS XYZ components to linear
  * RGB components through the inverse of the above 3x3 matrix, and then converting
  * linear RGB to device RGB through inverses of the TRCs.
- * <p>
  */
 
 
@@ -111,7 +111,7 @@
     /**
      * Constructs an new <code>ICC_ProfileRGB</code> from a CMM ID.
      *
-     * @param ID The CMM ID for the profile.
+     * @param p The CMM ID for the profile.
      *
      */
     ICC_ProfileRGB(Profile p) {
--- a/src/share/classes/java/awt/dnd/DnDEventMulticaster.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/dnd/DnDEventMulticaster.java	Thu Dec 12 20:04:31 2013 -0800
@@ -71,7 +71,7 @@
      * Handles the <code>DragSourceDragEvent</code> by invoking
      * <code>dragOver</code> on listener-a and listener-b.
      *
-     * @param e the <code>DragSourceDragEvent</code>
+     * @param dsde the <code>DragSourceDragEvent</code>
      */
     public void dragOver(DragSourceDragEvent dsde) {
         ((DragSourceListener)a).dragOver(dsde);
--- a/src/share/classes/java/awt/dnd/DragSourceDropEvent.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/dnd/DragSourceDropEvent.java	Thu Dec 12 20:04:31 2013 -0800
@@ -37,7 +37,6 @@
  * to provide appropriate feedback to the end user
  * when the operation completes.
  * <P>
- * <P>
  * @since 1.2
  */
 
--- a/src/share/classes/java/awt/dnd/DropTarget.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/dnd/DropTarget.java	Thu Dec 12 20:04:31 2013 -0800
@@ -197,7 +197,7 @@
      * <P>
      * The Component will receive drops only if it is enabled.
      * @param c The new <code>Component</code> this <code>DropTarget</code>
-     * is to be associated with.<P>
+     * is to be associated with.
      */
 
     public synchronized void setComponent(Component c) {
@@ -246,7 +246,6 @@
      * Sets the default acceptable actions for this <code>DropTarget</code>
      * <P>
      * @param ops the default actions
-     * <P>
      * @see java.awt.dnd.DnDConstants
      */
 
--- a/src/share/classes/java/awt/event/MouseAdapter.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/event/MouseAdapter.java	Thu Dec 12 20:04:31 2013 -0800
@@ -49,7 +49,7 @@
  * methods.
  * The relevant method in the listener object is invoked  and the {@code MouseEvent}
  * or {@code MouseWheelEvent}  is passed to it in following cases:
- * <p><ul>
+ * <ul>
  * <li>when a mouse button is pressed, released, or clicked (pressed and  released)
  * <li>when the mouse cursor enters or exits the component
  * <li>when the mouse wheel rotated, or mouse moved or dragged
--- a/src/share/classes/java/awt/font/FontRenderContext.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/font/FontRenderContext.java	Thu Dec 12 20:04:31 2013 -0800
@@ -57,7 +57,6 @@
 *   <code>FontRenderContext</code> which is directly constructed will
 *   most likely not represent any actual graphics device, and may lead
 *   to unexpected or incorrect results.
-*   <p>
 *   @see java.awt.RenderingHints#KEY_TEXT_ANTIALIASING
 *   @see java.awt.RenderingHints#KEY_FRACTIONALMETRICS
 *   @see java.awt.Graphics2D#getFontRenderContext()
--- a/src/share/classes/java/awt/font/StyledParagraph.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/font/StyledParagraph.java	Thu Dec 12 20:04:31 2013 -0800
@@ -322,7 +322,7 @@
     }
 
     /**
-     * Return i such that starts[i] <= index < starts[i+1].  starts
+     * Return i such that starts[i] &lt;= index &lt; starts[i+1].  starts
      * must be in increasing order, with at least one element greater
      * than index.
      */
--- a/src/share/classes/java/awt/geom/AffineTransform.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/geom/AffineTransform.java	Thu Dec 12 20:04:31 2013 -0800
@@ -46,8 +46,7 @@
  *      [ y'] = [  m10  m11  m12  ] [ y ] = [ m10x + m11y + m12 ]
  *      [ 1 ]   [   0    0    1   ] [ 1 ]   [         1         ]
  * </pre>
- * <p>
- * <h4><a name="quadrantapproximation">Handling 90-Degree Rotations</a></h4>
+ * <h3><a name="quadrantapproximation">Handling 90-Degree Rotations</a></h3>
  * <p>
  * In some variations of the <code>rotate</code> methods in the
  * <code>AffineTransform</code> class, a double-precision argument
--- a/src/share/classes/java/awt/geom/QuadCurve2D.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/geom/QuadCurve2D.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1047,7 +1047,7 @@
     /**
      * Evaluate the t values in the first num slots of the vals[] array
      * and place the evaluated values back into the same array.  Only
-     * evaluate t values that are within the range <0, 1>, including
+     * evaluate t values that are within the range &lt;0, 1&gt;, including
      * the 0 and 1 ends of the range iff the include0 or include1
      * booleans are true.  If an "inflection" equation is handed in,
      * then any points which represent a point of inflection for that
@@ -1081,7 +1081,7 @@
 
     /**
      * Determine where coord lies with respect to the range from
-     * low to high.  It is assumed that low <= high.  The return
+     * low to high.  It is assumed that low &lt;= high.  The return
      * value is one of the 5 values BELOW, LOWEDGE, INSIDE, HIGHEDGE,
      * or ABOVE.
      */
--- a/src/share/classes/java/awt/image/BufferStrategy.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/image/BufferStrategy.java	Thu Dec 12 20:04:31 2013 -0800
@@ -54,7 +54,6 @@
  * <p>
  * Alternatively, the contents of the back buffer can be copied, or
  * <i>blitted</i> forward in a chain instead of moving the video pointer.
- * <p>
  * <pre>{@code
  * Double buffering:
  *
--- a/src/share/classes/java/awt/image/BufferedImage.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/image/BufferedImage.java	Thu Dec 12 20:04:31 2013 -0800
@@ -927,7 +927,6 @@
      * each color component in the returned data when
      * using this method.  With a specified coordinate (x,&nbsp;y) in the
      * image, the ARGB pixel can be accessed in this way:
-     * <p>
      *
      * <pre>
      *    pixel   = rgbArray[offset + (y-startY)*scansize + (x-startX)]; </pre>
--- a/src/share/classes/java/awt/image/ColorConvertOp.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/image/ColorConvertOp.java	Thu Dec 12 20:04:31 2013 -0800
@@ -23,7 +23,8 @@
  * questions.
  */
 
-/**********************************************************************
+/*
+ **********************************************************************
  **********************************************************************
  **********************************************************************
  *** COPYRIGHT (c) Eastman Kodak Company, 1997                      ***
@@ -64,7 +65,6 @@
  * color conversion.
  * <p>
  * Note that Source and Destination may be the same object.
- * <p>
  * @see java.awt.RenderingHints#KEY_COLOR_RENDERING
  * @see java.awt.RenderingHints#KEY_DITHERING
  */
--- a/src/share/classes/java/awt/peer/CheckboxPeer.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/peer/CheckboxPeer.java	Thu Dec 12 20:04:31 2013 -0800
@@ -41,7 +41,7 @@
      * Sets the state of the checkbox to be checked ({@code true}) or
      * unchecked ({@code false}).
      *
-     * @param t the state to set on the checkbox
+     * @param state the state to set on the checkbox
      *
      * @see Checkbox#setState(boolean)
      */
--- a/src/share/classes/java/awt/peer/DesktopPeer.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/awt/peer/DesktopPeer.java	Thu Dec 12 20:04:31 2013 -0800
@@ -87,7 +87,7 @@
      * filling the message fields including to, cc, etc, with the values
      * specified by the given mailto URL.
      *
-     * @param uri represents a mailto URL with specified values of the message.
+     * @param mailtoURL represents a mailto URL with specified values of the message.
      *        The syntax of mailto URL is defined by
      *        <a href="http://www.ietf.org/rfc/rfc2368.txt">RFC2368: The mailto
      *        URL scheme</a>
@@ -103,5 +103,5 @@
      * @throws IOException If the user default browser is not found,
      *         or it fails to be launched.
      */
-    void browse(URI url) throws IOException;
+    void browse(URI uri) throws IOException;
 }
--- a/src/share/classes/java/io/BufferedReader.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/io/BufferedReader.java	Thu Dec 12 20:04:31 2013 -0800
@@ -533,7 +533,7 @@
     /**
      * Returns a {@code Stream}, the elements of which are lines read from
      * this {@code BufferedReader}.  The {@link Stream} is lazily populated,
-     * i.e, read only occurs during the
+     * i.e., read only occurs during the
      * <a href="../util/stream/package-summary.html#StreamOps">terminal
      * stream operation</a>.
      *
@@ -550,8 +550,8 @@
      * UncheckedIOException} which will be thrown from the {@code Stream}
      * method that caused the read to take place. This method will return a
      * Stream if invoked on a BufferedReader that is closed. Any operation on
-     * that stream requires reading from the BufferedReader after is it closed
-     * will cause an UncheckedIOException to be thrown.
+     * that stream that requires reading from the BufferedReader after it is
+     * closed, will cause an UncheckedIOException to be thrown.
      *
      * @return a {@code Stream<String>} providing the lines of text
      *         described by this {@code BufferedReader}
@@ -587,6 +587,7 @@
                 }
             }
         };
-        return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iter, Spliterator.ORDERED), false);
+        return StreamSupport.stream(Spliterators.spliteratorUnknownSize(
+                iter, Spliterator.ORDERED | Spliterator.NONNULL), false);
     }
 }
--- a/src/share/classes/java/lang/CharSequence.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/lang/CharSequence.java	Thu Dec 12 20:04:31 2013 -0800
@@ -87,7 +87,7 @@
     char charAt(int index);
 
     /**
-     * Returns a new <code>CharSequence</code> that is a subsequence of this sequence.
+     * Returns a <code>CharSequence</code> that is a subsequence of this sequence.
      * The subsequence starts with the <code>char</code> value at the specified index and
      * ends with the <code>char</code> value at index <tt>end - 1</tt>.  The length
      * (in <code>char</code>s) of the
--- a/src/share/classes/java/lang/Class.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/lang/Class.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1565,8 +1565,12 @@
      * methods inherited by the array type from {@code Object}. It does not
      * contain a {@code Method} object for {@code clone()}.
      *
-     * <p> If this {@code Class} object represents a class or interface with no
-     * public methods, then the returned array has length 0.
+     * <p> If this {@code Class} object represents an interface then the
+     * returned array does not contain any implicitly declared methods from
+     * {@code Object}. Therefore, if no methods are explicitly declared in
+     * this interface or any of its superinterfaces then the returned array
+     * has length 0. (Note that a {@code Class} object which represents a class
+     * always has public methods, inherited from {@code Object}.)
      *
      * <p> If this {@code Class} object represents a primitive type or void,
      * then the returned array has length 0.
@@ -1699,25 +1703,29 @@
      * order. If {@code parameterTypes} is {@code null}, it is
      * treated as if it were an empty array.
      *
-     * <p> If the {@code name} is "{@code <init>};"or "{@code <clinit>}" a
+     * <p> If the {@code name} is "{@code <init>}" or "{@code <clinit>}" a
      * {@code NoSuchMethodException} is raised. Otherwise, the method to
      * be reflected is determined by the algorithm that follows.  Let C be the
-     * class represented by this object:
+     * class or interface represented by this object:
      * <OL>
-     * <LI> C is searched for any <I>matching methods</I>. If no matching
-     *      method is found, the algorithm of step 1 is invoked recursively on
-     *      the superclass of C.</LI>
-     * <LI> If no method was found in step 1 above, the superinterfaces of C
-     *      are searched for a matching method. If any such method is found, it
-     *      is reflected.</LI>
+     * <LI> C is searched for a <I>matching method</I>, as defined below. If a
+     *      matching method is found, it is reflected.</LI>
+     * <LI> If no matching method is found by step 1 then:
+     *   <OL TYPE="a">
+     *   <LI> If C is a class other than {@code Object}, then this algorithm is
+     *        invoked recursively on the superclass of C.</LI>
+     *   <LI> If C is the class {@code Object}, or if C is an interface, then
+     *        the superinterfaces of C (if any) are searched for a matching
+     *        method. If any such method is found, it is reflected.</LI>
+     *   </OL></LI>
      * </OL>
      *
-     * To find a matching method in a class C:&nbsp; If C declares exactly one
-     * public method with the specified name and exactly the same formal
-     * parameter types, that is the method reflected. If more than one such
-     * method is found in C, and one of these methods has a return type that is
-     * more specific than any of the others, that method is reflected;
-     * otherwise one of the methods is chosen arbitrarily.
+     * <p> To find a matching method in a class or interface C:&nbsp; If C
+     * declares exactly one public method with the specified name and exactly
+     * the same formal parameter types, that is the method reflected. If more
+     * than one such method is found in C, and one of these methods has a
+     * return type that is more specific than any of the others, that method is
+     * reflected; otherwise one of the methods is chosen arbitrarily.
      *
      * <p>Note that there may be more than one matching method in a
      * class because while the Java language forbids a class to
--- a/src/share/classes/java/lang/String.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/lang/String.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1958,7 +1958,7 @@
     }
 
     /**
-     * Returns a new character sequence that is a subsequence of this sequence.
+     * Returns a character sequence that is a subsequence of this sequence.
      *
      * <p> An invocation of this method of the form
      *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/java/lang/doc-files/ValueBased.html	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+  <title>Value-based Classes</title>
+  <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+</head>
+<body>
+<h2 id="ValueBased">Value-based Classes</h2>
+
+Some classes, such as <code>java.util.Optional</code> and
+<code>java.time.LocalDateTime</code>, are <em>value-based</em>.  Instances of a
+value-based class:
+<ul>
+    <li>are final and immutable (though may contain references to mutable
+        objects);</li>
+    <li>have implementations of <code>equals</code>,
+        <code>hashCode</code>, and <code>toString</code> which are computed
+        solely from the instance's state and not from its identity or the state
+        of any other object or variable;</li>
+    <li>make no use of identity-sensitive operations such as reference
+        equality (<code>==</code>) between instances, identity hash code of
+        instances, or synchronization on an instances's intrinsic lock;</li>
+    <li>are considered equal solely based on <code>equals()</code>, not
+        based on reference equality (<code>==</code>);</li>
+    <li>do not have accessible constructors, but are instead instantiated
+        through factory methods which make no committment as to the identity
+        of returned instances;</li>
+    <li>are <em>freely substitutable</em> when equal, meaning that interchanging
+        any two instances <code>x</code> and <code>y</code> that are equal
+        according to <code>equals()</code> in any computation or method
+        invocation should produce no visible change in behavior.
+    </li>
+</ul>
+
+<p>A program may produce unpredictable results if it attempts to distinguish two
+    references to equal values of a value-based class, whether directly via reference
+    equality or indirectly via an appeal to synchronization, identity hashing,
+    serialization, or any other identity-sensitive mechanism.  Use of such
+    identity-sensitive operations on instances of value-based classes may have
+    unpredictable effects and should be avoided.</p>
+</body>
+</html>
--- a/src/share/classes/java/math/BigInteger.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/math/BigInteger.java	Thu Dec 12 20:04:31 2013 -0800
@@ -215,7 +215,7 @@
      * Karatsuba multiplication will be used.   This value is found
      * experimentally to work well.
      */
-    private static final int KARATSUBA_THRESHOLD = 50;
+    private static final int KARATSUBA_THRESHOLD = 80;
 
     /**
      * The threshold value for using 3-way Toom-Cook multiplication.
@@ -224,7 +224,7 @@
      * the mag arrays is greater than this threshold, then Toom-Cook
      * multiplication will be used.
      */
-    private static final int TOOM_COOK_THRESHOLD = 75;
+    private static final int TOOM_COOK_THRESHOLD = 240;
 
     /**
      * The threshold value for using Karatsuba squaring.  If the number
@@ -232,7 +232,7 @@
      * Karatsuba squaring will be used.   This value is found
      * experimentally to work well.
      */
-    private static final int KARATSUBA_SQUARE_THRESHOLD = 90;
+    private static final int KARATSUBA_SQUARE_THRESHOLD = 128;
 
     /**
      * The threshold value for using Toom-Cook squaring.  If the number
@@ -240,15 +240,23 @@
      * Toom-Cook squaring will be used.   This value is found
      * experimentally to work well.
      */
-    private static final int TOOM_COOK_SQUARE_THRESHOLD = 140;
+    private static final int TOOM_COOK_SQUARE_THRESHOLD = 216;
 
     /**
      * The threshold value for using Burnikel-Ziegler division.  If the number
-     * of ints in the number are larger than this value,
-     * Burnikel-Ziegler division will be used.   This value is found
-     * experimentally to work well.
+     * of ints in the divisor are larger than this value, Burnikel-Ziegler
+     * division may be used.  This value is found experimentally to work well.
      */
-    static final int BURNIKEL_ZIEGLER_THRESHOLD = 50;
+    static final int BURNIKEL_ZIEGLER_THRESHOLD = 80;
+
+    /**
+     * The offset value for using Burnikel-Ziegler division.  If the number
+     * of ints in the divisor exceeds the Burnikel-Ziegler threshold, and the
+     * number of ints in the dividend is greater than the number of ints in the
+     * divisor plus this value, Burnikel-Ziegler division will be used.  This
+     * value is found experimentally to work well.
+     */
+    static final int BURNIKEL_ZIEGLER_OFFSET = 40;
 
     /**
      * The threshold value for using Schoenhage recursive base conversion. If
@@ -258,7 +266,7 @@
      * relatively flat for thresholds between 2-25, so this choice may be
      * varied within this range for very small effect.
      */
-    private static final int SCHOENHAGE_BASE_CONVERSION_THRESHOLD = 8;
+    private static final int SCHOENHAGE_BASE_CONVERSION_THRESHOLD = 20;
 
     //Constructors
 
@@ -1815,7 +1823,7 @@
         int len = mag.length;
 
         if (len <= n) {
-            return this;
+            return abs();
         }
 
         int lowerInts[] = new int[n];
@@ -2017,8 +2025,8 @@
      * @throws ArithmeticException if {@code val} is zero.
      */
     public BigInteger divide(BigInteger val) {
-        if (mag.length < BURNIKEL_ZIEGLER_THRESHOLD ||
-                val.mag.length < BURNIKEL_ZIEGLER_THRESHOLD) {
+        if (val.mag.length < BURNIKEL_ZIEGLER_THRESHOLD ||
+                mag.length - val.mag.length < BURNIKEL_ZIEGLER_OFFSET) {
             return divideKnuth(val);
         } else {
             return divideBurnikelZiegler(val);
@@ -2054,8 +2062,8 @@
      * @throws ArithmeticException if {@code val} is zero.
      */
     public BigInteger[] divideAndRemainder(BigInteger val) {
-        if (mag.length < BURNIKEL_ZIEGLER_THRESHOLD ||
-                val.mag.length < BURNIKEL_ZIEGLER_THRESHOLD) {
+        if (val.mag.length < BURNIKEL_ZIEGLER_THRESHOLD ||
+                mag.length - val.mag.length < BURNIKEL_ZIEGLER_OFFSET) {
             return divideAndRemainderKnuth(val);
         } else {
             return divideAndRemainderBurnikelZiegler(val);
@@ -2083,8 +2091,8 @@
      * @throws ArithmeticException if {@code val} is zero.
      */
     public BigInteger remainder(BigInteger val) {
-        if (mag.length < BURNIKEL_ZIEGLER_THRESHOLD ||
-                val.mag.length < BURNIKEL_ZIEGLER_THRESHOLD) {
+        if (val.mag.length < BURNIKEL_ZIEGLER_THRESHOLD ||
+                mag.length - val.mag.length < BURNIKEL_ZIEGLER_OFFSET) {
             return remainderKnuth(val);
         } else {
             return remainderBurnikelZiegler(val);
--- a/src/share/classes/java/math/MutableBigInteger.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/math/MutableBigInteger.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1148,8 +1148,8 @@
     }
 
     MutableBigInteger divide(MutableBigInteger b, MutableBigInteger quotient, boolean needRemainder) {
-        if (intLen < BigInteger.BURNIKEL_ZIEGLER_THRESHOLD ||
-                b.intLen < BigInteger.BURNIKEL_ZIEGLER_THRESHOLD) {
+        if (b.intLen < BigInteger.BURNIKEL_ZIEGLER_THRESHOLD ||
+                intLen - b.intLen < BigInteger.BURNIKEL_ZIEGLER_OFFSET) {
             return divideKnuth(b, quotient, needRemainder);
         } else {
             return divideAndRemainderBurnikelZiegler(b, quotient);
--- a/src/share/classes/java/security/Provider.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/security/Provider.java	Thu Dec 12 20:04:31 2013 -0800
@@ -336,6 +336,8 @@
      *          if a security manager exists and its {@link
      *          java.lang.SecurityManager#checkSecurityAccess} method
      *          denies access to set property values.
+     *
+     * @since 1.8
      */
     @Override
     public synchronized Object putIfAbsent(Object key, Object value) {
@@ -385,6 +387,8 @@
      *          if a security manager exists and its {@link
      *          java.lang.SecurityManager#checkSecurityAccess} method
      *          denies access to remove this provider's properties.
+     *
+     * @since 1.8
      */
     @Override
     public synchronized boolean remove(Object key, Object value) {
@@ -408,6 +412,8 @@
      *          if a security manager exists and its {@link
      *          java.lang.SecurityManager#checkSecurityAccess} method
      *          denies access to set property values.
+     *
+     * @since 1.8
      */
     @Override
     public synchronized boolean replace(Object key, Object oldValue,
@@ -433,6 +439,8 @@
      *          if a security manager exists and its {@link
      *          java.lang.SecurityManager#checkSecurityAccess} method
      *          denies access to set property values.
+     *
+     * @since 1.8
      */
     @Override
     public synchronized Object replace(Object key, Object value) {
@@ -459,6 +467,8 @@
      *          if a security manager exists and its {@link
      *          java.lang.SecurityManager#checkSecurityAccess} method
      *          denies access to set property values.
+     *
+     * @since 1.8
      */
     @Override
     public synchronized void replaceAll(BiFunction<? super Object, ? super Object, ? extends Object> function) {
@@ -485,6 +495,8 @@
      *          if a security manager exists and its {@link
      *          java.lang.SecurityManager#checkSecurityAccess} method
      *          denies access to set property values or remove properties.
+     *
+     * @since 1.8
      */
     @Override
     public synchronized Object compute(Object key,
@@ -514,6 +526,8 @@
      *          if a security manager exists and its {@link
      *          java.lang.SecurityManager#checkSecurityAccess} method
      *          denies access to set property values and remove properties.
+     *
+     * @since 1.8
      */
     @Override
     public synchronized Object computeIfAbsent(Object key, Function<? super Object, ? extends Object> mappingFunction) {
@@ -541,6 +555,8 @@
      *          if a security manager exists and its {@link
      *          java.lang.SecurityManager#checkSecurityAccess} method
      *          denies access to set property values or remove properties.
+     *
+     * @since 1.8
      */
     @Override
     public synchronized Object computeIfPresent(Object key, BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction) {
@@ -571,6 +587,8 @@
      *          if a security manager exists and its {@link
      *          java.lang.SecurityManager#checkSecurityAccess} method
      *          denies access to set property values or remove properties.
+     *
+     * @since 1.8
      */
     @Override
     public synchronized Object merge(Object key, Object value,  BiFunction<? super Object, ? super Object, ? extends Object>  remappingFunction) {
@@ -589,13 +607,18 @@
         checkInitialized();
         return super.get(key);
     }
-
+    /**
+     * @since 1.8
+     */
     @Override
     public synchronized Object getOrDefault(Object key, Object defaultValue) {
         checkInitialized();
         return super.getOrDefault(key, defaultValue);
     }
 
+    /**
+     * @since 1.8
+     */
     @Override
     public synchronized void forEach(BiConsumer<? super Object, ? super Object> action) {
         checkInitialized();
--- a/src/share/classes/java/sql/CallableStatement.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/sql/CallableStatement.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1108,7 +1108,7 @@
      * parameter; if a database access error occurs or
      * this method is called on a closed <code>CallableStatement</code>
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified targetSqlType
      * @see Types
      * @see #getObject
      * @since 1.4
@@ -1131,7 +1131,7 @@
      * parameter; if a database access error occurs or
      * this method is called on a closed <code>CallableStatement</code>
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified targetSqlType
      * @see #getObject
      * @since 1.4
      */
@@ -2536,7 +2536,7 @@
      *            or Reader object and the value of the scale parameter is less
      *            than zero
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified targetSqlType
      * @see JDBCType
      * @see SQLType
      *
@@ -2562,7 +2562,7 @@
      * parameter; if a database access error occurs
      * or this method is called on a closed {@code CallableStatement}
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified targetSqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
@@ -2603,7 +2603,7 @@
      * if a database access error occurs or
      * this method is called on a closed {@code CallableStatement}
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified sqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
@@ -2639,7 +2639,7 @@
      * if a database access error occurs or
      * this method is called on a closed {@code CallableStatement}
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified sqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
@@ -2686,7 +2686,7 @@
      * if a database access error occurs or
      * this method is called on a closed {@code CallableStatement}
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified sqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
@@ -2725,7 +2725,7 @@
      * parameter; if a database access error occurs or
      * this method is called on a closed {@code CallableStatement}
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified sqlType
      * or if the JDBC driver does not support
      * this method
      * @since 1.8
@@ -2762,7 +2762,7 @@
      * parameter; if a database access error occurs or
      * this method is called on a closed {@code CallableStatement}
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified sqlType
      * or if the JDBC driver does not support
      * this method
      * @since 1.8
@@ -2811,7 +2811,7 @@
      * parameter; if a database access error occurs or
      * this method is called on a closed {@code CallableStatement}
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified sqlType
      * or if the JDBC driver does not support this method
      * @see JDBCType
      * @see SQLType
--- a/src/share/classes/java/sql/DriverManager.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/sql/DriverManager.java	Thu Dec 12 20:04:31 2013 -0800
@@ -213,8 +213,8 @@
      * The <code>DriverManager</code> attempts to select an appropriate driver from
      * the set of registered JDBC drivers.
      *<p>
-     * <B>Note:</B> If a property is specified as part of the {@code url} and
-     * is also specified in the {@code Properties} object, it is
+     * <B>Note:</B> If the {@code user} or {@code password} property are
+     * also specified as part of the {@code url}, it is
      * implementation-defined as to which value will take precedence.
      * For maximum portability, an application should only specify a
      * property once.
@@ -320,7 +320,7 @@
      * Registers the given driver with the {@code DriverManager}.
      * A newly-loaded driver class should call
      * the method {@code registerDriver} to make itself
-     * known to the {@code DriverManager}. If the driver had previously been
+     * known to the {@code DriverManager}. If the driver is currently
      * registered, no action is taken.
      *
      * @param driver the new JDBC Driver that is to be registered with the
@@ -338,7 +338,7 @@
      * Registers the given driver with the {@code DriverManager}.
      * A newly-loaded driver class should call
      * the method {@code registerDriver} to make itself
-     * known to the {@code DriverManager}. If the driver had previously been
+     * known to the {@code DriverManager}. If the driver is currently
      * registered, no action is taken.
      *
      * @param driver the new JDBC Driver that is to be registered with the
@@ -347,6 +347,7 @@
      *               {@code DriverManager#deregisterDriver} is called
      * @exception SQLException if a database access error occurs
      * @exception NullPointerException if {@code driver} is null
+     * @since 1.8
      */
     public static synchronized void registerDriver(java.sql.Driver driver,
             DriverAction da)
--- a/src/share/classes/java/sql/JDBCType.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/sql/JDBCType.java	Thu Dec 12 20:04:31 2013 -0800
@@ -218,8 +218,8 @@
     }
 
     /**
-     * Returns the name of the data type.
-     * @return The name of the data type.
+     *{@inheritDoc }
+     * @return The name of this {@code SQLType}.
      */
     public String getName() {
         return name();
--- a/src/share/classes/java/sql/PreparedStatement.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/sql/PreparedStatement.java	Thu Dec 12 20:04:31 2013 -0800
@@ -401,7 +401,7 @@
     * marker in the SQL statement; if a database access error occurs or this
     * method is called on a closed PreparedStatement
     * @exception SQLFeatureNotSupportedException if
-    * the JDBC driver does not support this data type
+    * the JDBC driver does not support the specified targetSqlType
     * @see Types
     */
     void setObject(int parameterIndex, Object x, int targetSqlType)
@@ -951,7 +951,7 @@
      *            or Reader object and the value of the scale parameter is less
      *            than zero
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified targetSqlType
      * @see Types
      *
      */
@@ -1255,7 +1255,7 @@
      *            or Reader object and the value of the scale parameter is less
      *            than zero
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified targetSqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
@@ -1281,7 +1281,7 @@
      * parameter marker in the SQL statement; if a database access error occurs
      * or this method is called on a closed {@code PreparedStatement}
      * @exception SQLFeatureNotSupportedException if
-     * the JDBC driver does not support this data type
+     * the JDBC driver does not support the specified targetSqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
--- a/src/share/classes/java/sql/ResultSet.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/sql/ResultSet.java	Thu Dec 12 20:04:31 2013 -0800
@@ -4178,7 +4178,7 @@
      * the result set concurrency is {@code CONCUR_READ_ONLY}
      * or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not
-     * support this method; if the JDBC driver does not support this data type
+     * support this method; if the JDBC driver does not support the specified targetSqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
@@ -4221,7 +4221,7 @@
      * the result set concurrency is {@code CONCUR_READ_ONLY}
      * or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not
-     * support this method; if the JDBC driver does not support this data type
+     * support this method; if the JDBC driver does not support the specified targetSqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
@@ -4249,7 +4249,7 @@
      * the result set concurrency is {@code CONCUR_READ_ONLY}
      * or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not
-     * support this method; if the JDBC driver does not support this data type
+     * support this method; if the JDBC driver does not support the specified targetSqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
@@ -4279,7 +4279,7 @@
      * the result set concurrency is {@code CONCUR_READ_ONLY}
      * or this method is called on a closed result set
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not
-     * support this method; if the JDBC driver does not support this data type
+     * support this method; if the JDBC driver does not support the specified targetSqlType
      * @see JDBCType
      * @see SQLType
      * @since 1.8
--- a/src/share/classes/java/sql/SQLPermission.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/sql/SQLPermission.java	Thu Dec 12 20:04:31 2013 -0800
@@ -122,7 +122,7 @@
      *
      * @param name the name of this <code>SQLPermission</code> object, which must
      * be either {@code  setLog}, {@code callAbort}, {@code setSyncFactory},
-     *  or {@code setNetworkTimeout}
+     *  {@code deregisterDriver}, or {@code setNetworkTimeout}
      * @throws NullPointerException if <code>name</code> is <code>null</code>.
      * @throws IllegalArgumentException if <code>name</code> is empty.
 
@@ -140,7 +140,7 @@
      *
      * @param name the name of this <code>SQLPermission</code> object, which must
      * be either {@code  setLog}, {@code callAbort}, {@code setSyncFactory},
-     *  or {@code setNetworkTimeout}
+     *  {@code deregisterDriver}, or {@code setNetworkTimeout}
      * @param actions should be <code>null</code>
      * @throws NullPointerException if <code>name</code> is <code>null</code>.
      * @throws IllegalArgumentException if <code>name</code> is empty.
--- a/src/share/classes/java/util/Base64.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/Base64.java	Thu Dec 12 20:04:31 2013 -0800
@@ -351,62 +351,6 @@
         }
 
         /**
-         * Encodes as many bytes as possible from the input byte buffer
-         * using the {@link Base64} encoding scheme, writing the resulting
-         * bytes to the given output byte buffer.
-         *
-         * <p>The buffers are read from, and written to, starting at their
-         * current positions. Upon return, the input and output buffers'
-         * positions will be advanced to reflect the bytes read and written,
-         * but their limits will not be modified.
-         *
-         * <p>The encoding operation will stop and return if either all
-         * remaining bytes in the input buffer have been encoded and written
-         * to the output buffer, or the output buffer has insufficient space
-         * to encode any more input bytes. The encoding operation can be
-         * continued, if there is more bytes in input buffer to be encoded,
-         * by invoking this method again with an output buffer that has more
-         * {@linkplain java.nio.Buffer#remaining remaining} bytes. This is
-         * typically done by draining any encoded bytes from the output buffer.
-         * The value returned from last invocation needs to be passed in as the
-         * third parameter {@code bytesOut} if it is to continue an unfinished
-         * encoding, 0 otherwise.
-         *
-         * <p><b>Recommended Usage Example</b>
-         * <pre>
-         *    ByteBuffer src = ...;
-         *    ByteBuffer dst = ...;
-         *    Base64.Encoder enc = Base64.getMimeDecoder();
-         *
-         *    int bytesOut = 0;
-         *    while (src.hasRemaining()) {
-         *        // clear output buffer for decoding
-         *        dst.clear();
-         *        bytesOut = enc.encode(src, dst, bytesOut);
-         *
-         *        // read encoded bytes out of "dst"
-         *        dst.flip();
-         *        ...
-         *    }
-         * </pre>
-         *
-         * @param   src
-         *          the input byte buffer to encode
-         * @param   dst
-         *          the output byte buffer
-         * @param   bytesOut
-         *          the return value of last invocation if this is to continue
-         *          an unfinished encoding operation, 0 otherwise
-         * @return  The sum total of {@code bytesOut} and the number of bytes
-         *          written to the output ByteBuffer during this invocation.
-         */
-        public int encode(ByteBuffer src, ByteBuffer dst, int bytesOut) {
-            if (src.hasArray() && dst.hasArray())
-                return encodeArray(src, dst, bytesOut);
-            return encodeBuffer(src, dst, bytesOut);
-        }
-
-        /**
          * Wraps an output stream for encoding byte data using the {@link Base64}
          * encoding scheme.
          *
@@ -444,160 +388,6 @@
             return new Encoder(isURL, newline, linemax, false);
         }
 
-        private int encodeArray(ByteBuffer src, ByteBuffer dst, int bytesOut) {
-            char[] base64 = isURL? toBase64URL : toBase64;
-            byte[] sa = src.array();
-            int    sp = src.arrayOffset() + src.position();
-            int    sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int    dp = dst.arrayOffset() + dst.position();
-            int    dl = dst.arrayOffset() + dst.limit();
-            int    dp00 = dp;
-            int    dpos = 0;        // dp of each line
-            if (linemax > 0 && bytesOut > 0)
-                dpos = bytesOut % (linemax + newline.length);
-            try {
-                if (dpos == linemax && sp < src.limit()) {
-                    if (dp + newline.length > dl)
-                        return  dp - dp00 + bytesOut;
-                    for (byte b : newline){
-                        dst.put(dp++, b);
-                    }
-                    dpos = 0;
-                }
-                sl = sp + (sl - sp) / 3 * 3;
-                while (sp < sl) {
-                    int slen = (linemax > 0) ? (linemax - dpos) / 4 * 3
-                                             : sl - sp;
-                    int sl0 = Math.min(sp + slen, sl);
-                    for (int sp0 = sp, dp0 = dp ; sp0 < sl0; ) {
-                        if (dp0 + 4 > dl) {
-                            sp = sp0; dp = dp0;
-                            return  dp0 - dp00 + bytesOut;
-                        }
-                        int bits = (sa[sp0++] & 0xff) << 16 |
-                                   (sa[sp0++] & 0xff) <<  8 |
-                                   (sa[sp0++] & 0xff);
-                        da[dp0++] = (byte)base64[(bits >>> 18) & 0x3f];
-                        da[dp0++] = (byte)base64[(bits >>> 12) & 0x3f];
-                        da[dp0++] = (byte)base64[(bits >>> 6)  & 0x3f];
-                        da[dp0++] = (byte)base64[bits & 0x3f];
-                    }
-                    int n = (sl0 - sp) / 3 * 4;
-                    dpos += n;
-                    dp += n;
-                    sp = sl0;
-                    if (dpos == linemax && sp < src.limit()) {
-                        if (dp + newline.length > dl)
-                            return  dp - dp00 + bytesOut;
-                        for (byte b : newline){
-                            da[dp++] = b;
-                        }
-                        dpos = 0;
-                    }
-                }
-                sl = src.arrayOffset() + src.limit();
-                if (sp < sl && dl >= dp + 4) {       // 1 or 2 leftover bytes
-                    int b0 = sa[sp++] & 0xff;
-                    da[dp++] = (byte)base64[b0 >> 2];
-                    if (sp == sl) {
-                        da[dp++] = (byte)base64[(b0 << 4) & 0x3f];
-                        if (doPadding) {
-                            da[dp++] = '=';
-                            da[dp++] = '=';
-                        }
-                    } else {
-                        int b1 = sa[sp++] & 0xff;
-                        da[dp++] = (byte)base64[(b0 << 4) & 0x3f | (b1 >> 4)];
-                        da[dp++] = (byte)base64[(b1 << 2) & 0x3f];
-                        if (doPadding) {
-                            da[dp++] = '=';
-                        }
-                    }
-                }
-                return dp - dp00 + bytesOut;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private int encodeBuffer(ByteBuffer src, ByteBuffer dst, int bytesOut) {
-            char[] base64 = isURL? toBase64URL : toBase64;
-            int sp = src.position();
-            int sl = src.limit();
-            int dp = dst.position();
-            int dl = dst.limit();
-            int dp00 = dp;
-
-            int dpos = 0;        // dp of each line
-            if (linemax > 0 && bytesOut > 0)
-                dpos = bytesOut % (linemax + newline.length);
-            try {
-                if (dpos == linemax && sp < src.limit()) {
-                    if (dp + newline.length > dl)
-                        return  dp - dp00 + bytesOut;
-                    for (byte b : newline){
-                        dst.put(dp++, b);
-                    }
-                    dpos = 0;
-                }
-                sl = sp + (sl - sp) / 3 * 3;
-                while (sp < sl) {
-                    int slen = (linemax > 0) ? (linemax - dpos) / 4 * 3
-                                             : sl - sp;
-                    int sl0 = Math.min(sp + slen, sl);
-                    for (int sp0 = sp, dp0 = dp ; sp0 < sl0; ) {
-                        if (dp0 + 4 > dl) {
-                            sp = sp0; dp = dp0;
-                            return  dp0 - dp00 + bytesOut;
-                        }
-                        int bits = (src.get(sp0++) & 0xff) << 16 |
-                                   (src.get(sp0++) & 0xff) <<  8 |
-                                   (src.get(sp0++) & 0xff);
-                        dst.put(dp0++, (byte)base64[(bits >>> 18) & 0x3f]);
-                        dst.put(dp0++, (byte)base64[(bits >>> 12) & 0x3f]);
-                        dst.put(dp0++, (byte)base64[(bits >>> 6)  & 0x3f]);
-                        dst.put(dp0++, (byte)base64[bits & 0x3f]);
-                    }
-                    int n = (sl0 - sp) / 3 * 4;
-                    dpos += n;
-                    dp += n;
-                    sp = sl0;
-                    if (dpos == linemax && sp < src.limit()) {
-                        if (dp + newline.length > dl)
-                            return  dp - dp00 + bytesOut;
-                        for (byte b : newline){
-                            dst.put(dp++, b);
-                        }
-                        dpos = 0;
-                    }
-                }
-                if (sp < src.limit() && dl >= dp + 4) {       // 1 or 2 leftover bytes
-                    int b0 = src.get(sp++) & 0xff;
-                    dst.put(dp++, (byte)base64[b0 >> 2]);
-                    if (sp == src.limit()) {
-                        dst.put(dp++, (byte)base64[(b0 << 4) & 0x3f]);
-                        if (doPadding) {
-                            dst.put(dp++, (byte)'=');
-                            dst.put(dp++, (byte)'=');
-                        }
-                    } else {
-                        int b1 = src.get(sp++) & 0xff;
-                        dst.put(dp++, (byte)base64[(b0 << 4) & 0x3f | (b1 >> 4)]);
-                        dst.put(dp++, (byte)base64[(b1 << 2) & 0x3f]);
-                        if (doPadding) {
-                            dst.put(dp++, (byte)'=');
-                        }
-                    }
-                }
-                return dp - dp00 + bytesOut;
-            } finally {
-                src.position(sp);
-                dst.position(dp);
-            }
-        }
-
         private int encode0(byte[] src, int off, int end, byte[] dst) {
             char[] base64 = isURL ? toBase64URL : toBase64;
             int sp = off;
@@ -657,20 +447,11 @@
      * required. So if the final unit of the encoded byte data only has
      * two or three Base64 characters (without the corresponding padding
      * character(s) padded), they are decoded as if followed by padding
-     * character(s).
-     * <p>
-     * For decoders that use the <a href="#basic">Basic</a> and
-     * <a href="#url">URL and Filename safe</a> type base64 scheme, and
-     * if there is padding character present in the final unit, the
-     * correct number of padding character(s) must be present, otherwise
-     * {@code IllegalArgumentException} ({@code IOException} when reading
-     * from a Base64 stream) is thrown during decoding.
-     * <p>
-     * Decoders that use the <a href="#mime">MIME</a> type base64 scheme
-     * are more lenient when decoding the padding character(s). If the
-     * padding character(s) is incorrectly encoded, the first padding
-     * character encountered is interpreted as the end of the encoded byte
-     * data, the decoding operation will then end and return normally.
+     * character(s). If there is a padding character present in the
+     * final unit, the correct number of padding character(s) must be
+     * present, otherwise {@code IllegalArgumentException} (
+     * {@code IOException} when reading from a Base64 stream) is thrown
+     * during decoding.
      *
      * <p> Instances of {@link Decoder} class are safe for use by
      * multiple concurrent threads.
@@ -810,6 +591,10 @@
          * output buffer's position will be zero and its limit will be the
          * number of resulting decoded bytes
          *
+         * <p> {@code IllegalArgumentException} is thrown if the input buffer
+         * is not in valid Base64 encoding scheme. The position of the input
+         * buffer will not be advanced in this case.
+         *
          * @param   buffer
          *          the ByteBuffer to decode
          *
@@ -843,76 +628,6 @@
         }
 
         /**
-         * Decodes as many bytes as possible from the input byte buffer
-         * using the {@link Base64} encoding scheme, writing the resulting
-         * bytes to the given output byte buffer.
-         *
-         * <p>The buffers are read from, and written to, starting at their
-         * current positions. Upon return, the input and output buffers'
-         * positions will be advanced to reflect the bytes read and written,
-         * but their limits will not be modified.
-         *
-         * <p> If the input buffer is not in valid Base64 encoding scheme
-         * then some bytes may have been written to the output buffer
-         * before IllegalArgumentException is thrown. The positions of
-         * both input and output buffer will not be advanced in this case.
-         *
-         * <p>The decoding operation will end and return if all remaining
-         * bytes in the input buffer have been decoded and written to the
-         * output buffer.
-         *
-         * <p> The decoding operation will stop and return if the output
-         * buffer has insufficient space to decode any more input bytes.
-         * The decoding operation can be continued, if there is more bytes
-         * in input buffer to be decoded, by invoking this method again with
-         * an output buffer that has more {@linkplain java.nio.Buffer#remaining
-         * remaining} bytes. This is typically done by draining any decoded
-         * bytes from the output buffer.
-         *
-         * <p><b>Recommended Usage Example</b>
-         * <pre>
-         *    ByteBuffer src = ...;
-         *    ByteBuffer dst = ...;
-         *    Base64.Decoder dec = Base64.getDecoder();
-         *
-         *    while (src.hasRemaining()) {
-         *
-         *        // prepare the output byte buffer
-         *        dst.clear();
-         *        dec.decode(src, dst);
-         *
-         *        // read bytes from the output buffer
-         *        dst.flip();
-         *        ...
-         *    }
-         * </pre>
-         *
-         * @param   src
-         *          the input byte buffer to decode
-         * @param   dst
-         *          the output byte buffer
-         *
-         * @return  The number of bytes written to the output byte buffer during
-         *          this decoding invocation
-         *
-         * @throws  IllegalArgumentException
-         *          if {@code src} is not in valid Base64 scheme.
-         */
-        public int decode(ByteBuffer src, ByteBuffer dst) {
-            int sp0 = src.position();
-            int dp0 = dst.position();
-            try {
-                if (src.hasArray() && dst.hasArray())
-                    return decodeArray(src, dst);
-                return decodeBuffer(src, dst);
-            } catch (IllegalArgumentException iae) {
-                src.position(sp0);
-                dst.position(dp0);
-                throw iae;
-            }
-        }
-
-        /**
          * Returns an input stream for decoding {@link Base64} encoded byte stream.
          *
          * <p> The {@code read}  methods of the returned {@code InputStream} will
@@ -932,150 +647,6 @@
             return new DecInputStream(is, isURL ? fromBase64URL : fromBase64, isMIME);
         }
 
-        private int decodeArray(ByteBuffer src, ByteBuffer dst) {
-            int[] base64 = isURL ? fromBase64URL : fromBase64;
-            int   bits = 0;
-            int   shiftto = 18;       // pos of first byte of 4-byte atom
-            byte[] sa = src.array();
-            int    sp = src.arrayOffset() + src.position();
-            int    sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int    dp = dst.arrayOffset() + dst.position();
-            int    dl = dst.arrayOffset() + dst.limit();
-            int    dp0 = dp;
-            int    mark = sp;
-            try {
-                while (sp < sl) {
-                    int b = sa[sp++] & 0xff;
-                    if ((b = base64[b]) < 0) {
-                        if (b == -2) {   // padding byte
-                            if (!isMIME &&
-                                (shiftto == 6 && (sp == sl || sa[sp++] != '=') ||
-                                 shiftto == 18)) {
-                                throw new IllegalArgumentException(
-                                     "Input byte array has wrong 4-byte ending unit");
-                            }
-                            break;
-                        }
-                        if (isMIME)     // skip if for rfc2045
-                            continue;
-                        else
-                            throw new IllegalArgumentException(
-                                "Illegal base64 character " +
-                                Integer.toString(sa[sp - 1], 16));
-                    }
-                    bits |= (b << shiftto);
-                    shiftto -= 6;
-                    if (shiftto < 0) {
-                        if (dl < dp + 3)
-                            return dp - dp0;
-                        da[dp++] = (byte)(bits >> 16);
-                        da[dp++] = (byte)(bits >>  8);
-                        da[dp++] = (byte)(bits);
-                        shiftto = 18;
-                        bits = 0;
-                        mark = sp;
-                    }
-                }
-                if (shiftto == 6) {
-                    if (dl - dp < 1)
-                        return dp - dp0;
-                    da[dp++] = (byte)(bits >> 16);
-                } else if (shiftto == 0) {
-                    if (dl - dp < 2)
-                        return dp - dp0;
-                    da[dp++] = (byte)(bits >> 16);
-                    da[dp++] = (byte)(bits >>  8);
-                } else if (shiftto == 12) {
-                    throw new IllegalArgumentException(
-                        "Last unit does not have enough valid bits");
-                }
-                if (sp < sl) {
-                    if (isMIME)
-                        sp = sl;
-                    else
-                        throw new IllegalArgumentException(
-                            "Input byte array has incorrect ending byte at " + sp);
-                }
-                mark = sp;
-                return dp - dp0;
-            } finally {
-                src.position(mark);
-                dst.position(dp);
-            }
-        }
-
-        private int decodeBuffer(ByteBuffer src, ByteBuffer dst) {
-            int[] base64 = isURL ? fromBase64URL : fromBase64;
-            int   bits = 0;
-            int   shiftto = 18;       // pos of first byte of 4-byte atom
-            int    sp = src.position();
-            int    sl = src.limit();
-            int    dp = dst.position();
-            int    dl = dst.limit();
-            int    dp0 = dp;
-            int    mark = sp;
-            try {
-                while (sp < sl) {
-                    int b = src.get(sp++) & 0xff;
-                    if ((b = base64[b]) < 0) {
-                        if (b == -2) {  // padding byte
-                            if (!isMIME &&
-                                (shiftto == 6 && (sp == sl || src.get(sp++) != '=') ||
-                                 shiftto == 18)) {
-                                throw new IllegalArgumentException(
-                                     "Input byte array has wrong 4-byte ending unit");
-                            }
-                            break;
-                        }
-                        if (isMIME)     // skip if for rfc2045
-                            continue;
-                        else
-                            throw new IllegalArgumentException(
-                                "Illegal base64 character " +
-                                Integer.toString(src.get(sp - 1), 16));
-                    }
-                    bits |= (b << shiftto);
-                    shiftto -= 6;
-                    if (shiftto < 0) {
-                        if (dl < dp + 3)
-                            return dp - dp0;
-                        dst.put(dp++, (byte)(bits >> 16));
-                        dst.put(dp++, (byte)(bits >>  8));
-                        dst.put(dp++, (byte)(bits));
-                        shiftto = 18;
-                        bits = 0;
-                        mark = sp;
-                    }
-                }
-                if (shiftto == 6) {
-                    if (dl - dp < 1)
-                        return dp - dp0;
-                     dst.put(dp++, (byte)(bits >> 16));
-                } else if (shiftto == 0) {
-                    if (dl - dp < 2)
-                        return dp - dp0;
-                    dst.put(dp++, (byte)(bits >> 16));
-                    dst.put(dp++, (byte)(bits >>  8));
-                } else if (shiftto == 12) {
-                    throw new IllegalArgumentException(
-                        "Last unit does not have enough valid bits");
-                }
-                if (sp < sl) {
-                    if (isMIME)
-                        sp = sl;
-                    else
-                        throw new IllegalArgumentException(
-                            "Input byte array has incorrect ending byte at " + sp);
-                }
-                mark = sp;
-                return dp - dp0;
-            } finally {
-                src.position(mark);
-                dst.position(dp);
-            }
-        }
-
         private int outLength(byte[] src, int sp, int sl) {
             int[] base64 = isURL ? fromBase64URL : fromBase64;
             int paddings = 0;
@@ -1123,14 +694,13 @@
                 int b = src[sp++] & 0xff;
                 if ((b = base64[b]) < 0) {
                     if (b == -2) {         // padding byte '='
-                        if (!isMIME  &&    // be lenient for rfc2045
-                            // =     shiftto==18 unnecessary padding
-                            // x=    shiftto==12 a dangling single x
-                            // x     to be handled together with non-padding case
-                            // xx=   shiftto==6&&sp==sl missing last =
-                            // xx=y  shiftto==6 last is not =
-                            (shiftto == 6 && (sp == sl || src[sp++] != '=') ||
-                            shiftto == 18)) {
+                        // =     shiftto==18 unnecessary padding
+                        // x=    shiftto==12 a dangling single x
+                        // x     to be handled together with non-padding case
+                        // xx=   shiftto==6&&sp==sl missing last =
+                        // xx=y  shiftto==6 last is not =
+                        if (shiftto == 6 && (sp == sl || src[sp++] != '=') ||
+                            shiftto == 18) {
                             throw new IllegalArgumentException(
                                 "Input byte array has wrong 4-byte ending unit");
                         }
@@ -1160,14 +730,15 @@
                 dst[dp++] = (byte)(bits >> 16);
                 dst[dp++] = (byte)(bits >>  8);
             } else if (shiftto == 12) {
-                // dangling single "x", throw exception even in lenient mode,
-                // it's incorrectly encoded.
+                // dangling single "x", incorrectly encoded.
                 throw new IllegalArgumentException(
                     "Last unit does not have enough valid bits");
             }
             // anything left is invalid, if is not MIME.
-            // if MIME (lenient), just ignore all leftover
-            if (sp < sl && !isMIME) {
+            // if MIME, ignore all non-base64 character
+            while (sp < sl) {
+                if (isMIME && base64[src[sp++]] < 0)
+                    continue;
                 throw new IllegalArgumentException(
                     "Input byte array has incorrect ending byte at " + sp);
             }
@@ -1367,26 +938,16 @@
                     // xx=y  or last is not '='
                     if (nextin == 18 || nextin == 12 ||
                         nextin == 6 && is.read() != '=') {
-                        if (!isMIME || nextin == 12) {
-                            throw new IOException("Illegal base64 ending sequence:" + nextin);
-                        } else if (nextin != 18) {
-                            // lenient mode for mime
-                            // (1) handle the "unnecessary padding in "xxxx ="
-                            //     case as the eof (nextin == 18)
-                            // (2) decode "xx=" and "xx=y" normally
-                            b[off++] = (byte)(bits >> (16));
-                            len--;
-                        }
-                    } else {
-                        b[off++] = (byte)(bits >> (16));
-                        len--;
-                        if (nextin == 0) {           // only one padding byte
-                            if (len == 0) {          // no enough output space
-                                bits >>= 8;          // shift to lowest byte
-                                nextout = 0;
-                            } else {
-                                b[off++] = (byte) (bits >>  8);
-                            }
+                        throw new IOException("Illegal base64 ending sequence:" + nextin);
+                    }
+                    b[off++] = (byte)(bits >> (16));
+                    len--;
+                    if (nextin == 0) {           // only one padding byte
+                        if (len == 0) {          // no enough output space
+                            bits >>= 8;          // shift to lowest byte
+                            nextout = 0;
+                        } else {
+                            b[off++] = (byte) (bits >>  8);
                         }
                     }
                     eof = true;
--- a/src/share/classes/java/util/DoubleSummaryStatistics.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/DoubleSummaryStatistics.java	Thu Dec 12 20:04:31 2013 -0800
@@ -63,6 +63,7 @@
 public class DoubleSummaryStatistics implements DoubleConsumer {
     private long count;
     private double sum;
+    private double sumCompensation; // Low order bits of sum
     private double min = Double.POSITIVE_INFINITY;
     private double max = Double.NEGATIVE_INFINITY;
 
@@ -81,7 +82,7 @@
     @Override
     public void accept(double value) {
         ++count;
-        sum += value;
+        sumWithCompensation(value);
         min = Math.min(min, value);
         max = Math.max(max, value);
     }
@@ -95,12 +96,24 @@
      */
     public void combine(DoubleSummaryStatistics other) {
         count += other.count;
-        sum += other.sum;
+        sumWithCompensation(other.sum);
+        sumWithCompensation(other.sumCompensation);
         min = Math.min(min, other.min);
         max = Math.max(max, other.max);
     }
 
     /**
+     * Incorporate a new double value using Kahan summation /
+     * compensated summation.
+     */
+    private void sumWithCompensation(double value) {
+        double tmp = value - sumCompensation;
+        double velvel = sum + tmp; // Little wolf of rounding error
+        sumCompensation = (velvel - sum) - tmp;
+        sum = velvel;
+    }
+
+    /**
      * Return the count of values recorded.
      *
      * @return the count of values
@@ -133,7 +146,8 @@
      * @return the sum of values, or zero if none
      */
     public final double getSum() {
-        return sum;
+        // Better error bounds to add both terms as the final sum
+        return sum + sumCompensation;
     }
 
     /**
--- a/src/share/classes/java/util/ListResourceBundle.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/ListResourceBundle.java	Thu Dec 12 20:04:31 2013 -0800
@@ -105,6 +105,12 @@
  * }
  * </pre>
  * </blockquote>
+ *
+ * <p>
+ * The implementation of a {@code ListResourceBundle} subclass must be thread-safe
+ * if it's simultaneously used by multiple threads. The default implementations
+ * of the methods in this class are thread-safe.
+ *
  * @see ResourceBundle
  * @see PropertyResourceBundle
  * @since JDK1.1
--- a/src/share/classes/java/util/Optional.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/Optional.java	Thu Dec 12 20:04:31 2013 -0800
@@ -40,6 +40,11 @@
  * {@link #ifPresent(java.util.function.Consumer) ifPresent()} (execute a block
  * of code if the value is present).
  *
+ * <p>This is a <a href="../lang/doc-files/ValueBased.html">value-based</a>
+ * class; use of identity-sensitive operations (including reference equality
+ * ({@code ==}), identity hash code, or synchronization) on instances of
+ * {@code Optional} may have unpredictable results and should be avoided.
+ *
  * @since 1.8
  */
 public final class Optional<T> {
--- a/src/share/classes/java/util/OptionalDouble.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/OptionalDouble.java	Thu Dec 12 20:04:31 2013 -0800
@@ -31,7 +31,7 @@
 /**
  * A container object which may or may not contain a {@code double} value.
  * If a value is present, {@code isPresent()} will return {@code true} and
- * {@code get()} will return the value.
+ * {@code getAsDouble()} will return the value.
  *
  * <p>Additional methods that depend on the presence or absence of a contained
  * value are provided, such as {@link #orElse(double) orElse()}
@@ -39,6 +39,11 @@
  * {@link #ifPresent(java.util.function.DoubleConsumer) ifPresent()} (execute a block
  * of code if the value is present).
  *
+ * <p>This is a <a href="../lang/doc-files/ValueBased.html">value-based</a>
+ * class; use of identity-sensitive operations (including reference equality
+ * ({@code ==}), identity hash code, or synchronization) on instances of
+ * {@code OptionalDouble} may have unpredictable results and should be avoided.
+ *
  * @since 1.8
  */
 public final class OptionalDouble {
--- a/src/share/classes/java/util/OptionalInt.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/OptionalInt.java	Thu Dec 12 20:04:31 2013 -0800
@@ -31,7 +31,7 @@
 /**
  * A container object which may or may not contain a {@code int} value.
  * If a value is present, {@code isPresent()} will return {@code true} and
- * {@code get()} will return the value.
+ * {@code getAsInt()} will return the value.
  *
  * <p>Additional methods that depend on the presence or absence of a contained
  * value are provided, such as {@link #orElse(int) orElse()}
@@ -39,6 +39,11 @@
  * {@link #ifPresent(java.util.function.IntConsumer) ifPresent()} (execute a block
  * of code if the value is present).
  *
+ * <p>This is a <a href="../lang/doc-files/ValueBased.html">value-based</a>
+ * class; use of identity-sensitive operations (including reference equality
+ * ({@code ==}), identity hash code, or synchronization) on instances of
+ * {@code OptionalInt} may have unpredictable results and should be avoided.
+ *
  * @since 1.8
  */
 public final class OptionalInt {
--- a/src/share/classes/java/util/OptionalLong.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/OptionalLong.java	Thu Dec 12 20:04:31 2013 -0800
@@ -31,7 +31,7 @@
 /**
  * A container object which may or may not contain a {@code long} value.
  * If a value is present, {@code isPresent()} will return {@code true} and
- * {@code get()} will return the value.
+ * {@code getAsLong()} will return the value.
  *
  * <p>Additional methods that depend on the presence or absence of a contained
  * value are provided, such as {@link #orElse(long) orElse()}
@@ -39,6 +39,11 @@
  * {@link #ifPresent(java.util.function.LongConsumer) ifPresent()} (execute a block
  * of code if the value is present).
  *
+ * <p>This is a <a href="../lang/doc-files/ValueBased.html">value-based</a>
+ * class; use of identity-sensitive operations (including reference equality
+ * ({@code ==}), identity hash code, or synchronization) on instances of
+ * {@code OptionalLong} may have unpredictable results and should be avoided.
+ *
  * @since 1.8
  */
 public final class OptionalLong {
--- a/src/share/classes/java/util/PropertyResourceBundle.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/PropertyResourceBundle.java	Thu Dec 12 20:04:31 2013 -0800
@@ -100,6 +100,11 @@
  * </blockquote>
  *
  * <p>
+ * The implementation of a {@code PropertyResourceBundle} subclass must be
+ * thread-safe if it's simultaneously used by multiple threads. The default
+ * implementations of the non-abstract methods in this class are thread-safe.
+ *
+ * <p>
  * <strong>Note:</strong> PropertyResourceBundle can be constructed either
  * from an InputStream or a Reader, which represents a property file.
  * Constructing a PropertyResourceBundle instance from an InputStream requires
--- a/src/share/classes/java/util/ResourceBundle.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/ResourceBundle.java	Thu Dec 12 20:04:31 2013 -0800
@@ -184,6 +184,13 @@
  * subclass.  Your subclasses must override two methods: <code>handleGetObject</code>
  * and <code>getKeys()</code>.
  *
+ * <p>
+ * The implementation of a {@code ResourceBundle} subclass must be thread-safe
+ * if it's simultaneously used by multiple threads. The default implementations
+ * of the non-abstract methods in this class, and the methods in the direct
+ * known concrete subclasses {@code ListResourceBundle} and
+ * {@code PropertyResourceBundle} are thread-safe.
+ *
  * <h3>ResourceBundle.Control</h3>
  *
  * The {@link ResourceBundle.Control} class provides information necessary
--- a/src/share/classes/java/util/StringJoiner.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/StringJoiner.java	Thu Dec 12 20:04:31 2013 -0800
@@ -131,7 +131,7 @@
     /**
      * Sets the sequence of characters to be used when determining the string
      * representation of this {@code StringJoiner} and no elements have been
-     * added yet, i.e. when it is empty.  A copy of the {@code emptyValue}
+     * added yet, that is, when it is empty.  A copy of the {@code emptyValue}
      * parameter is made for this purpose. Note that once an add method has been
      * called, the {@code StringJoiner} is no longer considered empty, even if
      * the element(s) added correspond to the empty {@code String}.
@@ -228,8 +228,8 @@
     }
 
     /**
-     * The length of the {@code StringJoiner} value, i.e. the length of
-     * {@code String} representation of the {@code StringJoiner}. Note that if
+     * Returns the length of the {@code String} representation
+     * of this {@code StringJoiner}. Note that if
      * no add methods have been called, then the length of the {@code String}
      * representation (either {@code prefix + suffix} or {@code emptyValue})
      * will be returned. The value should be equivalent to
--- a/src/share/classes/java/util/concurrent/Callable.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/concurrent/Callable.java	Thu Dec 12 20:04:31 2013 -0800
@@ -54,6 +54,7 @@
  * @author Doug Lea
  * @param <V> the result type of method {@code call}
  */
+@FunctionalInterface
 public interface Callable<V> {
     /**
      * Computes a result, or throws an exception if unable to do so.
--- a/src/share/classes/java/util/concurrent/CompletableFuture.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/concurrent/CompletableFuture.java	Thu Dec 12 20:04:31 2013 -0800
@@ -2004,7 +2004,7 @@
             }
             if (dst == null)
                 dst = new CompletableFuture<U>();
-            if (e == null || ex != null)
+            if (ex != null)
                 dst.internalComplete(null, ex);
         }
         helpPostComplete();
--- a/src/share/classes/java/util/concurrent/ConcurrentHashMap.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/concurrent/ConcurrentHashMap.java	Thu Dec 12 20:04:31 2013 -0800
@@ -49,7 +49,6 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.NoSuchElementException;
-import java.util.Objects;
 import java.util.Set;
 import java.util.Spliterator;
 import java.util.concurrent.ConcurrentMap;
@@ -381,19 +380,21 @@
      * progress.  Resizing proceeds by transferring bins, one by one,
      * from the table to the next table. However, threads claim small
      * blocks of indices to transfer (via field transferIndex) before
-     * doing so, reducing contention.  Because we are using
-     * power-of-two expansion, the elements from each bin must either
-     * stay at same index, or move with a power of two offset. We
-     * eliminate unnecessary node creation by catching cases where old
-     * nodes can be reused because their next fields won't change.  On
-     * average, only about one-sixth of them need cloning when a table
-     * doubles. The nodes they replace will be garbage collectable as
-     * soon as they are no longer referenced by any reader thread that
-     * may be in the midst of concurrently traversing table.  Upon
-     * transfer, the old table bin contains only a special forwarding
-     * node (with hash field "MOVED") that contains the next table as
-     * its key. On encountering a forwarding node, access and update
-     * operations restart, using the new table.
+     * doing so, reducing contention.  A generation stamp in field
+     * sizeCtl ensures that resizings do not overlap. Because we are
+     * using power-of-two expansion, the elements from each bin must
+     * either stay at same index, or move with a power of two
+     * offset. We eliminate unnecessary node creation by catching
+     * cases where old nodes can be reused because their next fields
+     * won't change.  On average, only about one-sixth of them need
+     * cloning when a table doubles. The nodes they replace will be
+     * garbage collectable as soon as they are no longer referenced by
+     * any reader thread that may be in the midst of concurrently
+     * traversing table.  Upon transfer, the old table bin contains
+     * only a special forwarding node (with hash field "MOVED") that
+     * contains the next table as its key. On encountering a
+     * forwarding node, access and update operations restart, using
+     * the new table.
      *
      * Each bin transfer requires its bin lock, which can stall
      * waiting for locks while resizing. However, because other
@@ -570,6 +571,23 @@
      */
     private static final int MIN_TRANSFER_STRIDE = 16;
 
+    /**
+     * The number of bits used for generation stamp in sizeCtl.
+     * Must be at least 6 for 32bit arrays.
+     */
+    private static int RESIZE_STAMP_BITS = 16;
+
+    /**
+     * The maximum number of threads that can help resize.
+     * Must fit in 32 - RESIZE_STAMP_BITS bits.
+     */
+    private static final int MAX_RESIZERS = (1 << (32 - RESIZE_STAMP_BITS)) - 1;
+
+    /**
+     * The bit shift for recording size stamp in sizeCtl.
+     */
+    private static final int RESIZE_STAMP_SHIFT = 32 - RESIZE_STAMP_BITS;
+
     /*
      * Encodings for Node hash fields. See above for explanation.
      */
@@ -727,7 +745,7 @@
      * errors by users, these checks must operate on local variables,
      * which accounts for some odd-looking inline assignments below.
      * Note that calls to setTabAt always occur within locked regions,
-     * and so in principle require only release ordering, not need
+     * and so in principle require only release ordering, not
      * full volatile semantics, but are currently coded as volatile
      * writes to be conservative.
      */
@@ -2192,6 +2210,14 @@
     /* ---------------- Table Initialization and Resizing -------------- */
 
     /**
+     * Returns the stamp bits for resizing a table of size n.
+     * Must be negative when shifted left by RESIZE_STAMP_SHIFT.
+     */
+    static final int resizeStamp(int n) {
+        return Integer.numberOfLeadingZeros(n) | (1 << (RESIZE_STAMP_BITS - 1));
+    }
+
+    /**
      * Initializes table, using the size recorded in sizeCtl.
      */
     private final Node<K,V>[] initTable() {
@@ -2245,17 +2271,20 @@
             s = sumCount();
         }
         if (check >= 0) {
-            Node<K,V>[] tab, nt; int sc;
+            Node<K,V>[] tab, nt; int n, sc;
             while (s >= (long)(sc = sizeCtl) && (tab = table) != null &&
-                   tab.length < MAXIMUM_CAPACITY) {
+                   (n = tab.length) < MAXIMUM_CAPACITY) {
+                int rs = resizeStamp(n);
                 if (sc < 0) {
-                    if (sc == -1 || transferIndex <= 0 ||
-                        (nt = nextTable) == null)
+                    if ((sc >>> RESIZE_STAMP_SHIFT) != rs || sc == rs + 1 ||
+                        sc == rs + MAX_RESIZERS || (nt = nextTable) == null ||
+                        transferIndex <= 0)
                         break;
-                    if (U.compareAndSwapInt(this, SIZECTL, sc, sc - 1))
+                    if (U.compareAndSwapInt(this, SIZECTL, sc, sc + 1))
                         transfer(tab, nt);
                 }
-                else if (U.compareAndSwapInt(this, SIZECTL, sc, -2))
+                else if (U.compareAndSwapInt(this, SIZECTL, sc,
+                                             (rs << RESIZE_STAMP_SHIFT) + 2))
                     transfer(tab, null);
                 s = sumCount();
             }
@@ -2267,11 +2296,15 @@
      */
     final Node<K,V>[] helpTransfer(Node<K,V>[] tab, Node<K,V> f) {
         Node<K,V>[] nextTab; int sc;
-        if ((f instanceof ForwardingNode) &&
+        if (tab != null && (f instanceof ForwardingNode) &&
             (nextTab = ((ForwardingNode<K,V>)f).nextTable) != null) {
-            while (transferIndex > 0 && nextTab == nextTable &&
-                   (sc = sizeCtl) < -1) {
-                if (U.compareAndSwapInt(this, SIZECTL, sc, sc - 1)) {
+            int rs = resizeStamp(tab.length);
+            while (nextTab == nextTable && table == tab &&
+                   (sc = sizeCtl) < 0) {
+                if ((sc >>> RESIZE_STAMP_SHIFT) != rs || sc == rs + 1 ||
+                    sc == rs + MAX_RESIZERS || transferIndex <= 0)
+                    break;
+                if (U.compareAndSwapInt(this, SIZECTL, sc, sc + 1)) {
                     transfer(tab, nextTab);
                     break;
                 }
@@ -2309,9 +2342,21 @@
             }
             else if (c <= sc || n >= MAXIMUM_CAPACITY)
                 break;
-            else if (tab == table &&
-                     U.compareAndSwapInt(this, SIZECTL, sc, -2))
-                transfer(tab, null);
+            else if (tab == table) {
+                int rs = resizeStamp(n);
+                if (sc < 0) {
+                    Node<K,V>[] nt;
+                    if ((sc >>> RESIZE_STAMP_SHIFT) != rs || sc == rs + 1 ||
+                        sc == rs + MAX_RESIZERS || (nt = nextTable) == null ||
+                        transferIndex <= 0)
+                        break;
+                    if (U.compareAndSwapInt(this, SIZECTL, sc, sc + 1))
+                        transfer(tab, nt);
+                }
+                else if (U.compareAndSwapInt(this, SIZECTL, sc,
+                                             (rs << RESIZE_STAMP_SHIFT) + 2))
+                    transfer(tab, null);
+            }
         }
     }
 
@@ -2366,8 +2411,8 @@
                     sizeCtl = (n << 1) - (n >>> 1);
                     return;
                 }
-                if (U.compareAndSwapInt(this, SIZECTL, sc = sizeCtl, ++sc)) {
-                    if (sc != -1)
+                if (U.compareAndSwapInt(this, SIZECTL, sc = sizeCtl, sc - 1)) {
+                    if ((sc - 2) != resizeStamp(n) << RESIZE_STAMP_SHIFT)
                         return;
                     finishing = advance = true;
                     i = n; // recheck before commit
@@ -2566,11 +2611,8 @@
     private final void treeifyBin(Node<K,V>[] tab, int index) {
         Node<K,V> b; int n, sc;
         if (tab != null) {
-            if ((n = tab.length) < MIN_TREEIFY_CAPACITY) {
-                if (tab == table && (sc = sizeCtl) >= 0 &&
-                    U.compareAndSwapInt(this, SIZECTL, sc, -2))
-                    transfer(tab, null);
-            }
+            if ((n = tab.length) < MIN_TREEIFY_CAPACITY)
+                tryPresize(n << 1);
             else if ((b = tabAt(tab, index)) != null && b.hash >= 0) {
                 synchronized (b) {
                     if (tabAt(tab, index) == b) {
@@ -2768,7 +2810,7 @@
         private final void contendedLock() {
             boolean waiting = false;
             for (int s;;) {
-                if (((s = lockState) & WRITER) == 0) {
+                if (((s = lockState) & ~WAITER) == 0) {
                     if (U.compareAndSwapInt(this, LOCKSTATE, s, WRITER)) {
                         if (waiting)
                             waiter = null;
@@ -2793,12 +2835,13 @@
          */
         final Node<K,V> find(int h, Object k) {
             if (k != null) {
-                for (Node<K,V> e = first; e != null; e = e.next) {
+                for (Node<K,V> e = first; e != null; ) {
                     int s; K ek;
                     if (((s = lockState) & (WAITER|WRITER)) != 0) {
                         if (e.hash == h &&
                             ((ek = e.key) == k || (ek != null && k.equals(ek))))
                             return e;
+                        e = e.next;
                     }
                     else if (U.compareAndSwapInt(this, LOCKSTATE, s,
                                                  s + READER)) {
@@ -4454,7 +4497,7 @@
         }
 
         public final boolean removeAll(Collection<?> c) {
-            Objects.requireNonNull(c);
+            if (c == null) throw new NullPointerException();
             boolean modified = false;
             for (Iterator<E> it = iterator(); it.hasNext();) {
                 if (c.contains(it.next())) {
@@ -4466,7 +4509,7 @@
         }
 
         public final boolean retainAll(Collection<?> c) {
-            Objects.requireNonNull(c);
+            if (c == null) throw new NullPointerException();
             boolean modified = false;
             for (Iterator<E> it = iterator(); it.hasNext();) {
                 if (!c.contains(it.next())) {
--- a/src/share/classes/java/util/logging/LogManager.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/logging/LogManager.java	Thu Dec 12 20:04:31 2013 -0800
@@ -146,7 +146,14 @@
     // The global LogManager object
     private static final 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 final static Level defaultLevel = Level.INFO;
 
     // The map of the registered listeners. The map value is the registration
@@ -670,7 +677,7 @@
             if (logger == null) {
                 // Hashtable holds stale weak reference
                 // to a logger which has been GC-ed.
-                removeLogger(name);
+                ref.dispose();
             }
             return logger;
         }
@@ -756,7 +763,7 @@
                     // It's possible that the Logger was GC'ed after a
                     // drainLoggerRefQueueBounded() call above 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;
@@ -808,10 +815,8 @@
             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) {
+            namedLoggers.remove(name, ref);
         }
 
         synchronized Enumeration<String> getLoggerNames() {
@@ -993,6 +998,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);
@@ -1002,14 +1008,45 @@
 
         // dispose of this LoggerWeakRef object
         void dispose() {
-            if (node != null) {
-                // if we have a LogNode, then we were a named Logger
-                // so clear namedLoggers weak ref to us
-                node.context.removeLogger(name);
-                name = null;  // clear our ref to the Logger's name
+            // Avoid calling dispose twice. When a Logger is gc'ed, its
+            // LoggerWeakRef will be enqueued.
+            // However, a new logger of the same name may be added (or looked
+            // up) before the queue is drained. When that happens, dispose()
+            // will be called by addLocalLogger() or findLogger().
+            // Later when the queue is drained, dispose() will be called again
+            // for the same LoggerWeakRef. Marking LoggerWeakRef as disposed
+            // avoids processing the data twice (even though the code should
+            // now be reentrant).
+            synchronized(this) {
+                // Note to maintainers:
+                // Be careful not to call any method that tries to acquire
+                // another lock from within this block - as this would surely
+                // lead to deadlocks, given that dispose() can be called by
+                // multiple threads, and from within different synchronized
+                // methods/blocks.
+                if (disposed) return;
+                disposed = true;
+            }
 
-                node.loggerRef = null;  // clear LogNode's weak ref to us
-                node = null;            // clear our ref to LogNode
+            final LogNode n = node;
+            if (n != null) {
+                // n.loggerRef can only be safely modified from within
+                // a lock on LoggerContext. removeLoggerRef is already
+                // synchronized on LoggerContext so calling
+                // n.context.removeLoggerRef from within this lock is safe.
+                synchronized (n.context) {
+                    // if we have a LogNode, then we were a named Logger
+                    // so clear namedLoggers weak ref to us
+                    n.context.removeLoggerRef(name, this);
+                    name = null;  // clear our ref to the Logger's name
+
+                    // LogNode may have been reused - so only clear
+                    // LogNode.loggerRef if LogNode.loggerRef == this
+                    if (n.loggerRef == this) {
+                        n.loggerRef = null;  // clear LogNode's weak ref to us
+                    }
+                    node = null;            // clear our ref to LogNode
+                }
             }
 
             if (parentRef != null) {
@@ -1062,7 +1099,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
--- a/src/share/classes/java/util/logging/Logger.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/logging/Logger.java	Thu Dec 12 20:04:31 2013 -0800
@@ -218,12 +218,46 @@
 public class Logger {
     private static final Handler emptyHandlers[] = new Handler[0];
     private static final int offValue = Level.OFF.intValue();
-    private LogManager manager;
+
+    static final String SYSTEM_LOGGER_RB_NAME = "sun.util.logging.resources.logging";
+
+    // This class is immutable and it is important that it remains so.
+    private static final class LoggerBundle {
+        final String resourceBundleName; // Base name of the bundle.
+        final ResourceBundle userBundle; // Bundle set through setResourceBundle.
+        private LoggerBundle(String resourceBundleName, ResourceBundle bundle) {
+            this.resourceBundleName = resourceBundleName;
+            this.userBundle = bundle;
+        }
+        boolean isSystemBundle() {
+            return SYSTEM_LOGGER_RB_NAME.equals(resourceBundleName);
+        }
+        static LoggerBundle get(String name, ResourceBundle bundle) {
+            if (name == null && bundle == null) {
+                return NO_RESOURCE_BUNDLE;
+            } else if (SYSTEM_LOGGER_RB_NAME.equals(name) && bundle == null) {
+                return SYSTEM_BUNDLE;
+            } else {
+                return new LoggerBundle(name, bundle);
+            }
+        }
+    }
+
+    // This instance will be shared by all loggers created by the system
+    // code
+    private static final LoggerBundle SYSTEM_BUNDLE =
+            new LoggerBundle(SYSTEM_LOGGER_RB_NAME, null);
+
+    // This instance indicates that no resource bundle has been specified yet,
+    // and it will be shared by all loggers which have no resource bundle.
+    private static final LoggerBundle NO_RESOURCE_BUNDLE =
+            new LoggerBundle(null, null);
+
+    private volatile LogManager manager;
     private String name;
     private final CopyOnWriteArrayList<Handler> handlers =
         new CopyOnWriteArrayList<>();
-    private String resourceBundleName;  // Base name of the bundle.
-    private ResourceBundle userBundle;  // Bundle set through setResourceBundle.
+    private volatile LoggerBundle loggerBundle = NO_RESOURCE_BUNDLE;
     private volatile boolean useParentHandlers = true;
     private volatile Filter filter;
     private boolean anonymous;
@@ -641,7 +675,7 @@
      * @return localization bundle name (may be {@code null})
      */
     public String getResourceBundleName() {
-        return resourceBundleName;
+        return loggerBundle.resourceBundleName;
     }
 
     /**
@@ -710,8 +744,9 @@
     // resource bundle and then call "void log(LogRecord)".
     private void doLog(LogRecord lr) {
         lr.setLoggerName(name);
-        final ResourceBundle bundle = getEffectiveResourceBundle();
-        final String ebname = getEffectiveResourceBundleName();
+        final LoggerBundle lb = getEffectiveLoggerBundle();
+        final ResourceBundle  bundle = lb.userBundle;
+        final String ebname = lb.resourceBundleName;
         if (ebname != null && bundle != null) {
             lr.setResourceBundleName(ebname);
             lr.setResourceBundle(bundle);
@@ -1757,8 +1792,6 @@
         return useParentHandlers;
     }
 
-    static final String SYSTEM_LOGGER_RB_NAME = "sun.util.logging.resources.logging";
-
     private static ResourceBundle findSystemResourceBundle(final Locale locale) {
         // the resource bundle is in a restricted package
         return AccessController.doPrivileged(new PrivilegedAction<ResourceBundle>() {
@@ -1801,11 +1834,12 @@
         }
 
         Locale currentLocale = Locale.getDefault();
+        final LoggerBundle lb = loggerBundle;
 
         // Normally we should hit on our simple one entry cache.
-        if (userBundle != null &&
-                name.equals(resourceBundleName)) {
-            return userBundle;
+        if (lb.userBundle != null &&
+                name.equals(lb.resourceBundleName)) {
+            return lb.userBundle;
         } else if (catalog != null && currentLocale.equals(catalogLocale)
                 && name.equals(catalogName)) {
             return catalog;
@@ -1864,17 +1898,18 @@
     // Synchronized to prevent races in setting the fields.
     private synchronized void setupResourceInfo(String name,
                                                 Class<?> callersClass) {
-        if (resourceBundleName != null) {
+        final LoggerBundle lb = loggerBundle;
+        if (lb.resourceBundleName != null) {
             // this Logger already has a ResourceBundle
 
-            if (resourceBundleName.equals(name)) {
+            if (lb.resourceBundleName.equals(name)) {
                 // the names match so there is nothing more to do
                 return;
             }
 
             // cannot change ResourceBundles once they are set
             throw new IllegalArgumentException(
-                resourceBundleName + " != " + name);
+                lb.resourceBundleName + " != " + name);
         }
 
         if (name == null) {
@@ -1890,7 +1925,10 @@
             throw new MissingResourceException("Can't find " + name + " bundle",
                                                 name, "");
         }
-        resourceBundleName = name;
+
+        // if lb.userBundle is not null we won't reach this line.
+        assert lb.userBundle == null;
+        loggerBundle = LoggerBundle.get(name, null);
     }
 
     /**
@@ -1920,16 +1958,16 @@
         }
 
         synchronized (this) {
-            final boolean canReplaceResourceBundle = resourceBundleName == null
-                    || resourceBundleName.equals(baseName);
+            LoggerBundle lb = loggerBundle;
+            final boolean canReplaceResourceBundle = lb.resourceBundleName == null
+                    || lb.resourceBundleName.equals(baseName);
 
             if (!canReplaceResourceBundle) {
                 throw new IllegalArgumentException("can't replace resource bundle");
             }
 
 
-            userBundle = bundle;
-            resourceBundleName = baseName;
+            loggerBundle = LoggerBundle.get(baseName, bundle);
         }
     }
 
@@ -2082,45 +2120,44 @@
 
 
     // Private method to get the potentially inherited
-    // resource bundle name for this Logger.
-    // May return null
-    private String getEffectiveResourceBundleName() {
-        Logger target = this;
+    // resource bundle and resource bundle name for this Logger.
+    // This method never returns null.
+    private LoggerBundle getEffectiveLoggerBundle() {
+        final LoggerBundle lb = loggerBundle;
+        if (lb.isSystemBundle()) {
+            return SYSTEM_BUNDLE;
+        }
+
+        // first take care of this logger
+        final ResourceBundle b = getResourceBundle();
+        if (b != null && b == lb.userBundle) {
+            return lb;
+        } else if (b != null) {
+            // either lb.userBundle is null or getResourceBundle() is
+            // overriden
+            final String rbName = getResourceBundleName();
+            return LoggerBundle.get(rbName, b);
+        }
+
+        // no resource bundle was specified on this logger, look up the
+        // parent stack.
+        Logger target = this.parent;
         while (target != null) {
-            String rbn = target.getResourceBundleName();
-            if (rbn != null) {
-                return rbn;
+            final LoggerBundle trb = target.loggerBundle;
+            if (trb.isSystemBundle()) {
+                return SYSTEM_BUNDLE;
+            }
+            if (trb.userBundle != null) {
+                return trb;
+            }
+            final String rbName = target.getResourceBundleName();
+            if (rbName != null) {
+                return LoggerBundle.get(rbName,
+                            findResourceBundle(rbName, true));
             }
             target = target.getParent();
         }
-        return null;
-    }
-
-
-    private ResourceBundle getEffectiveResourceBundle() {
-        Logger target = this;
-        if (SYSTEM_LOGGER_RB_NAME.equals(resourceBundleName)) return null;
-        ResourceBundle localRB = getResourceBundle();
-        if (localRB != null) {
-            return localRB;
-        }
-
-        while (target != null) {
-            final ResourceBundle rb = target.userBundle;
-            if (rb != null) {
-                return rb;
-            }
-            final String rbn = target.getResourceBundleName();
-            if (rbn != null) {
-                if (!SYSTEM_LOGGER_RB_NAME.equals(rbn)) {
-                    return findResourceBundle(rbn, true);
-                } else {
-                    return null;
-                }
-            }
-            target = target.getParent();
-        }
-        return null;
+        return NO_RESOURCE_BUNDLE;
     }
 
 }
--- a/src/share/classes/java/util/stream/Collectors.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/stream/Collectors.java	Thu Dec 12 20:04:31 2013 -0800
@@ -505,14 +505,43 @@
      */
     public static <T> Collector<T, ?, Double>
     summingDouble(ToDoubleFunction<? super T> mapper) {
+        /*
+         * In the arrays allocated for the collect operation, index 0
+         * holds the high-order bits of the running sum and index 1
+         * holds the low-order bits of the sum computed via
+         * compensated summation.
+         */
         return new CollectorImpl<>(
-                () -> new double[1],
-                (a, t) -> { a[0] += mapper.applyAsDouble(t); },
-                (a, b) -> { a[0] += b[0]; return a; },
-                a -> a[0], CH_NOID);
+                () -> new double[2],
+                (a, t) -> { sumWithCompensation(a, mapper.applyAsDouble(t)); },
+                (a, b) -> { sumWithCompensation(a, b[0]); return sumWithCompensation(a, b[1]); },
+                // Better error bounds to add both terms as the final sum
+                a -> a[0] + a[1],
+                CH_NOID);
     }
 
     /**
+     * Incorporate a new double value using Kahan summation /
+     * compensation summation.
+     *
+     * High-order bits of the sum are in intermediateSum[0], low-order
+     * bits of the sum are in intermediateSum[1], any additional
+     * elements are application-specific.
+     *
+     * @param intermediateSum the high-order and low-order words of the intermediate sum
+     * @param value the name value to be included in the running sum
+     */
+    static double[] sumWithCompensation(double[] intermediateSum, double value) {
+        double tmp = value - intermediateSum[1];
+        double sum = intermediateSum[0];
+        double velvel = sum + tmp; // Little wolf of rounding error
+        intermediateSum[1] = (velvel - sum) - tmp;
+        intermediateSum[0] = velvel;
+        return intermediateSum;
+    }
+
+
+    /**
      * Returns a {@code Collector} that produces the arithmetic mean of an integer-valued
      * function applied to the input elements.  If no elements are present,
      * the result is 0.
@@ -560,17 +589,31 @@
      * value is a {@code NaN} or the sum is at any point a {@code NaN} then the
      * average will be {@code NaN}.
      *
+     * @implNote The {@code double} format can represent all
+     * consecutive integers in the range -2<sup>53</sup> to
+     * 2<sup>53</sup>. If the pipeline has more than 2<sup>53</sup>
+     * values, the divisor in the average computation will saturate at
+     * 2<sup>53</sup>, leading to additional numerical errors.
+     *
      * @param <T> the type of the input elements
      * @param mapper a function extracting the property to be summed
      * @return a {@code Collector} that produces the sum of a derived property
      */
     public static <T> Collector<T, ?, Double>
     averagingDouble(ToDoubleFunction<? super T> mapper) {
+        /*
+         * In the arrays allocated for the collect operation, index 0
+         * holds the high-order bits of the running sum, index 1 holds
+         * the low-order bits of the sum computed via compensated
+         * summation, and index 2 holds the number of values seen.
+         */
         return new CollectorImpl<>(
-                () -> new double[2],
-                (a, t) -> { a[0] += mapper.applyAsDouble(t); a[1]++; },
-                (a, b) -> { a[0] += b[0]; a[1] += b[1]; return a; },
-                a -> (a[1] == 0) ? 0.0d : a[0] / a[1], CH_NOID);
+                () -> new double[3],
+                (a, t) -> { sumWithCompensation(a, mapper.applyAsDouble(t)); a[2]++; },
+                (a, b) -> { sumWithCompensation(a, b[0]); sumWithCompensation(a, b[1]); a[2] += b[2]; return a; },
+                // Better error bounds to add both terms as the final sum to compute average
+                a -> (a[2] == 0) ? 0.0d : ((a[0] + a[1]) / a[2]),
+                CH_NOID);
     }
 
     /**
--- a/src/share/classes/java/util/stream/DoublePipeline.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/java/util/stream/DoublePipeline.java	Thu Dec 12 20:04:31 2013 -0800
@@ -377,8 +377,23 @@
 
     @Override
     public final double sum() {
-        // TODO: better algorithm to compensate for errors
-        return reduce(0.0, Double::sum);
+        /*
+         * In the arrays allocated for the collect operation, index 0
+         * holds the high-order bits of the running sum and index 1
+         * holds the low-order bits of the sum computed via
+         * compensated summation.
+         */
+        double[] summation = collect(() -> new double[2],
+                               (ll, d) -> {
+                                   Collectors.sumWithCompensation(ll, d);
+                               },
+                               (ll, rr) -> {
+                                   Collectors.sumWithCompensation(ll, rr[0]);
+                                   Collectors.sumWithCompensation(ll, rr[1]);
+                               });
+
+        // Better error bounds to add both terms as the final sum
+        return summation[0] + summation[1];
     }
 
     @Override
@@ -391,20 +406,37 @@
         return reduce(Math::max);
     }
 
+    /**
+     * {@inheritDoc}
+     *
+     * @implNote The {@code double} format can represent all
+     * consecutive integers in the range -2<sup>53</sup> to
+     * 2<sup>53</sup>. If the pipeline has more than 2<sup>53</sup>
+     * values, the divisor in the average computation will saturate at
+     * 2<sup>53</sup>, leading to additional numerical errors.
+     */
     @Override
     public final OptionalDouble average() {
-        double[] avg = collect(() -> new double[2],
-                               (ll, i) -> {
-                                   ll[0]++;
-                                   ll[1] += i;
+        /*
+         * In the arrays allocated for the collect operation, index 0
+         * holds the high-order bits of the running sum, index 1 holds
+         * the low-order bits of the sum computed via compensated
+         * summation, and index 2 holds the number of values seen.
+         */
+        double[] avg = collect(() -> new double[3],
+                               (ll, d) -> {
+                                   ll[2]++;
+                                   Collectors.sumWithCompensation(ll, d);
                                },
                                (ll, rr) -> {
-                                   ll[0] += rr[0];
-                                   ll[1] += rr[1];
+                                   Collectors.sumWithCompensation(ll, rr[0]);
+                                   Collectors.sumWithCompensation(ll, rr[1]);
+                                   ll[2] += rr[2];
                                });
-        return avg[0] > 0
-               ? OptionalDouble.of(avg[1] / avg[0])
-               : OptionalDouble.empty();
+        return avg[2] > 0
+            // Better error bounds to add both terms as the final sum to compute average
+            ? OptionalDouble.of((avg[0] + avg[1]) / avg[2])
+            : OptionalDouble.empty();
     }
 
     @Override
--- a/src/share/classes/javax/crypto/Cipher.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/crypto/Cipher.java	Thu Dec 12 20:04:31 2013 -0800
@@ -62,17 +62,17 @@
  * algorithm (e.g., <i>DES</i>), and may be followed by a feedback mode and
  * padding scheme.
  *
- * <p> A transformation is of the form:<p>
+ * <p> A transformation is of the form:
  *
  * <ul>
  * <li>"<i>algorithm/mode/padding</i>" or
- * <p>
+ *
  * <li>"<i>algorithm</i>"
  * </ul>
  *
  * <P> (in the latter case,
  * provider-specific default values for the mode and padding scheme are used).
- * For example, the following is a valid transformation:<p>
+ * For example, the following is a valid transformation:
  *
  * <pre>
  *     Cipher c = Cipher.getInstance("<i>DES/CBC/PKCS5Padding</i>");
--- a/src/share/classes/javax/crypto/CipherSpi.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/crypto/CipherSpi.java	Thu Dec 12 20:04:31 2013 -0800
@@ -62,17 +62,17 @@
  * algorithm (e.g., <i>DES</i>), and may be followed by a feedback mode and
  * padding scheme.
  *
- * <p> A transformation is of the form:<p>
+ * <p> A transformation is of the form:
  *
  * <ul>
  * <li>"<i>algorithm/mode/padding</i>" or
- * <p>
+ *
  * <li>"<i>algorithm</i>"
  * </ul>
  *
  * <P> (in the latter case,
  * provider-specific default values for the mode and padding scheme are used).
- * For example, the following is a valid transformation:<p>
+ * For example, the following is a valid transformation:
  *
  * <pre>
  *     Cipher c = Cipher.getInstance("<i>DES/CBC/PKCS5Padding</i>");
@@ -129,7 +129,7 @@
  * <i>DES/CBC/PKCS5Padding</i>, one that implements
  * <i>DES/CFB/PKCS5Padding</i>, and yet another one that implements
  * <i>DES/OFB/PKCS5Padding</i>. That provider would have the following
- * <code>Cipher</code> properties in its master class:<p>
+ * <code>Cipher</code> properties in its master class:
  *
  * <ul>
  *
@@ -160,7 +160,7 @@
  * and one for <i>OFB</i>), one class for <i>PKCS5Padding</i>,
  * and a generic <i>DES</i> class that subclasses from <code>CipherSpi</code>.
  * That provider would have the following
- * <code>Cipher</code> properties in its master class:<p>
+ * <code>Cipher</code> properties in its master class:
  *
  * <ul>
  *
@@ -197,20 +197,20 @@
  * Check if the provider has registered a subclass of <code>CipherSpi</code>
  * for the specified "<i>algorithm/mode/padding</i>" transformation.
  * <p>If the answer is YES, instantiate it.
- * <p>If the answer is NO, go to the next step.<p>
+ * <p>If the answer is NO, go to the next step.
  * <li>
  * Check if the provider has registered a subclass of <code>CipherSpi</code>
  * for the sub-transformation "<i>algorithm/mode</i>".
  * <p>If the answer is YES, instantiate it, and call
  * <code>engineSetPadding(<i>padding</i>)</code> on the new instance.
- * <p>If the answer is NO, go to the next step.<p>
+ * <p>If the answer is NO, go to the next step.
  * <li>
  * Check if the provider has registered a subclass of <code>CipherSpi</code>
  * for the sub-transformation "<i>algorithm//padding</i>" (note the double
  * slashes).
  * <p>If the answer is YES, instantiate it, and call
  * <code>engineSetMode(<i>mode</i>)</code> on the new instance.
- * <p>If the answer is NO, go to the next step.<p>
+ * <p>If the answer is NO, go to the next step.
  * <li>
  * Check if the provider has registered a subclass of <code>CipherSpi</code>
  * for the sub-transformation "<i>algorithm</i>".
--- a/src/share/classes/javax/crypto/KeyGenerator.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/crypto/KeyGenerator.java	Thu Dec 12 20:04:31 2013 -0800
@@ -66,7 +66,6 @@
  * algorithm-independent <code>init</code> methods, it is up to the
  * provider what to do about the algorithm-specific parameters (if any) to be
  * associated with each of the keys.
- * <p>
  *
  * <li><b>Algorithm-Specific Initialization</b>
  * <p>For situations where a set of algorithm-specific parameters already
--- a/src/share/classes/javax/crypto/SealedObject.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/crypto/SealedObject.java	Thu Dec 12 20:04:31 2013 -0800
@@ -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
@@ -50,7 +50,7 @@
  * to a SealedObject.
  *
  * <p> The original object that was sealed can be recovered in two different
- * ways: <p>
+ * ways:
  *
  * <ul>
  *
@@ -68,8 +68,6 @@
  * decryption key, it could hand over the cipher object to
  * another party who then unseals the sealed object.
  *
- * <p>
- *
  * <li>by using one of the
  * {@link #getObject(java.security.Key) getObject} methods
  * that take a <code>Key</code> object.
--- a/src/share/classes/javax/net/ssl/SSLEngine.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/net/ssl/SSLEngine.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2012, 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
@@ -329,7 +329,7 @@
  * is saved.  All future delegated tasks will be processed using this
  * context:  that is, all access control decisions will be made using the
  * context captured at engine creation.
- * <P>
+ *
  * <HR>
  *
  * <B>Concurrency Notes</B>:
@@ -345,7 +345,7 @@
  *      out-of-order, unexpected or fatal results may occur.
  * <P>
  *      For example:
- * <P>
+ *
  *      <pre>
  *              synchronized (outboundLock) {
  *                  sslEngine.wrap(src, dst);
--- a/src/share/classes/javax/net/ssl/SSLPermission.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/net/ssl/SSLPermission.java	Thu Dec 12 20:04:31 2013 -0800
@@ -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
@@ -43,7 +43,6 @@
  * The following table lists all the possible SSLPermission target names,
  * and for each provides a description of what the permission allows
  * and a discussion of the risks of granting code the permission.
- * <P>
  *
  * <table border=1 cellpadding=5
  *  summary="permission name, what it allows, and associated risks">
--- a/src/share/classes/javax/script/ScriptEngineFactory.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/script/ScriptEngineFactory.java	Thu Dec 12 20:04:31 2013 -0800
@@ -144,7 +144,7 @@
      * Returns a String which can be used to invoke a method of a  Java object using the syntax
      * of the supported scripting language.  For instance, an implementation for a Javascript
      * engine might be;
-     * <p>
+     *
      * <pre>{@code
      * public String getMethodCallSyntax(String obj,
      *                                   String m, String... args) {
@@ -180,7 +180,7 @@
      * Returns a String that can be used as a statement to display the specified String  using
      * the syntax of the supported scripting language.  For instance, the implementation for a Perl
      * engine might be;
-     * <p>
+     *
      * <pre><code>
      * public String getOutputStatement(String toDisplay) {
      *      return "print(" + toDisplay + ")";
@@ -198,7 +198,7 @@
     /**
      * Returns a valid scripting language executable program with given statements.
      * For instance an implementation for a PHP engine might be:
-     * <p>
+     *
      * <pre>{@code
      * public String getProgram(String... statements) {
      *      String retval = "<?\n";
--- a/src/share/classes/javax/security/auth/PrivateCredentialPermission.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/security/auth/PrivateCredentialPermission.java	Thu Dec 12 20:04:31 2013 -0800
@@ -228,8 +228,8 @@
      * <p>
      *
      * This method returns true if:
-     * <p><ul>
-     * <li> <i>p</i> is an instanceof PrivateCredentialPermission and <p>
+     * <ul>
+     * <li> <i>p</i> is an instanceof PrivateCredentialPermission and
      * <li> the target name for <i>p</i> is implied by this object's
      *          target name.  For example:
      * <pre>
--- a/src/share/classes/javax/security/auth/kerberos/DelegationPermission.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/security/auth/kerberos/DelegationPermission.java	Thu Dec 12 20:04:31 2013 -0800
@@ -48,14 +48,14 @@
  * <p>
  * For example, to specify the "host" service use of a forwardable TGT the
  * target permission is specified as follows:
- * <p>
+ *
  * <pre>
  *  DelegationPermission("\"host/foo.example.com@EXAMPLE.COM\" \"krbtgt/EXAMPLE.COM@EXAMPLE.COM\"");
  * </pre>
  * <p>
  * To give the "backup" service a proxiable nfs service ticket the target permission
  * might be specified:
- * <p>
+ *
  * <pre>
  *  DelegationPermission("\"backup/bar.example.com@EXAMPLE.COM\" \"nfs/home.EXAMPLE.COM@EXAMPLE.COM\"");
  * </pre>
--- a/src/share/classes/javax/security/auth/kerberos/ServicePermission.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/security/auth/kerberos/ServicePermission.java	Thu Dec 12 20:04:31 2013 -0800
@@ -62,7 +62,7 @@
  * Authentication Service exchange.
  * <p>
  * The possible actions are:
- * <p>
+ *
  * <pre>
  *    initiate -              allow the caller to use the credential to
  *                            initiate a security context with a service
@@ -75,7 +75,7 @@
  *
  * For example, to specify the permission to access to the TGT to
  * initiate a security context the permission is constructed as follows:
- * <p>
+ *
  * <pre>
  *     ServicePermission("krbtgt/EXAMPLE.COM@EXAMPLE.COM", "initiate");
  * </pre>
@@ -89,7 +89,7 @@
  * For a Kerberized server the action is "accept". For example, the permission
  * necessary to access and use the secret key of the  Kerberized "host"
  * service (telnet and the likes)  would be constructed as follows:
- * <p>
+ *
  * <pre>
  *     ServicePermission("host/foo.example.com@EXAMPLE.COM", "accept");
  * </pre>
--- a/src/share/classes/javax/security/auth/login/LoginContext.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/security/auth/login/LoginContext.java	Thu Dec 12 20:04:31 2013 -0800
@@ -101,11 +101,11 @@
  * <li> If the constructor has a Subject
  * input parameter, the LoginContext uses the caller-specified
  * Subject object.
- * <p>
+ *
  * <li> If the caller specifies a {@code null} Subject
  * and a {@code null} value is permitted,
  * the LoginContext instantiates a new Subject.
- * <p>
+ *
  * <li> If the constructor does <b>not</b> have a Subject
  * input parameter, the LoginContext instantiates a new Subject.
  * <p>
@@ -132,7 +132,7 @@
  * {@code getAppConfigurationEntry} with the name, "<i>other</i>"
  * (the default entry name).  If there is no entry for "<i>other</i>",
  * then a {@code LoginException} is thrown.
- * <p>
+ *
  * <li> When LoginContext uses the installed Configuration, the caller
  * requires the createLoginContext.<em>name</em> and possibly
  * createLoginContext.other AuthPermissions. Furthermore, the
@@ -141,7 +141,7 @@
  * perform security-sensitive tasks (such as connecting to remote hosts,
  * and updating the Subject) will require the respective permissions, but
  * the callers of the LoginContext will not require those permissions.
- * <p>
+ *
  * <li> When LoginContext uses a caller-specified Configuration, the caller
  * does not require any createLoginContext AuthPermission.  The LoginContext
  * saves the {@code AccessControlContext} for the caller,
@@ -158,7 +158,7 @@
  * <li> If the constructor has a CallbackHandler
  * input parameter, the LoginContext uses the caller-specified
  * CallbackHandler object.
- * <p>
+ *
  * <li> If the constructor does <b>not</b> have a CallbackHandler
  * input parameter, or if the caller specifies a {@code null}
  * CallbackHandler object (and a {@code null} value is permitted),
@@ -171,7 +171,7 @@
  * with users.  The caller thus assumes that the configured
  * modules have alternative means for authenticating the user.
  *
- * <p>
+ *
  * <li> When the LoginContext uses the installed Configuration (instead of
  * a caller-specified Configuration, see above),
  * then this LoginContext must wrap any
--- a/src/share/classes/javax/security/auth/x500/X500Principal.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/security/auth/x500/X500Principal.java	Thu Dec 12 20:04:31 2013 -0800
@@ -314,7 +314,7 @@
      * this method returns an RFC 2253 conformant string representation
      * with the following additional canonicalizations:
      *
-     * <p><ol>
+     * <ol>
      * <li> Leading zeros are removed from attribute types
      *          that are encoded as dotted decimal OIDs
      * <li> DirectoryString attribute values of type
--- a/src/share/classes/javax/swing/Action.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/Action.java	Thu Dec 12 20:04:31 2013 -0800
@@ -67,7 +67,7 @@
  * functionality and broadcast of property changes.  For this reason,
  * you should take care to only use <code>Action</code>s where their benefits
  * are desired, and use simple <code>ActionListener</code>s elsewhere.
- * <p>
+ * <br>
  *
  * <h3><a name="buttonActions"></a>Swing Components Supporting <code>Action</code></h3>
  * <p>
@@ -93,7 +93,7 @@
  * <code>null</code> property value in an <code>Action</code> (or a
  * <code>Action</code> that is <code>null</code>) results in the
  * button's corresponding property being set to <code>null</code>.
- * <p>
+ *
  * <table border="1" cellpadding="1" cellspacing="0"
  *         summary="Supported Action properties">
  *  <tr valign="top"  align="left">
--- a/src/share/classes/javax/swing/DefaultComboBoxModel.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/DefaultComboBoxModel.java	Thu Dec 12 20:04:31 2013 -0800
@@ -83,7 +83,7 @@
     // implements javax.swing.ComboBoxModel
     /**
      * Set the value of the selected item. The selected item may be null.
-     * <p>
+     *
      * @param anObject The combo box value or null for no selection.
      */
     public void setSelectedItem(Object anObject) {
--- a/src/share/classes/javax/swing/GroupLayout.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/GroupLayout.java	Thu Dec 12 20:04:31 2013 -0800
@@ -100,7 +100,7 @@
  * The following diagram shows the same three components, but with the
  * parallel group along the horizontal axis and the sequential group along
  * the vertical axis.
- * <p>
+ *
  * <p style="text-align:center">
  * <img src="doc-files/groupLayout.2.gif" alt="Sequential group along the vertical axis in three components">
  * <p>
--- a/src/share/classes/javax/swing/InputVerifier.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/InputVerifier.java	Thu Dec 12 20:04:31 2013 -0800
@@ -47,7 +47,7 @@
  * either by clicking in it or by pressing TAB. However, if another string
  * is entered in the first text field, then the user will be unable to
  * transfer focus to the second text field.
- * <p>
+ *
  * <pre>
  * import java.awt.*;
  * import java.util.*;
--- a/src/share/classes/javax/swing/JComponent.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JComponent.java	Thu Dec 12 20:04:31 2013 -0800
@@ -4827,7 +4827,6 @@
      * updating differs from the AWT because programs generally no
      * longer need to invoke <code>validate</code> to get the contents of the
      * GUI to update.
-     * <p>
      *
      * @see java.awt.Component#invalidate
      * @see java.awt.Container#validate
--- a/src/share/classes/javax/swing/JDialog.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JDialog.java	Thu Dec 12 20:04:31 2013 -0800
@@ -701,7 +701,7 @@
      * Sets the operation that will happen by default when
      * the user initiates a "close" on this dialog.
      * You must specify one of the following choices:
-     * <p>
+     * <br><br>
      * <ul>
      * <li>{@code DO_NOTHING_ON_CLOSE}
      * (defined in {@code WindowConstants}):
--- a/src/share/classes/javax/swing/JFrame.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JFrame.java	Thu Dec 12 20:04:31 2013 -0800
@@ -324,7 +324,7 @@
      * Sets the operation that will happen by default when
      * the user initiates a "close" on this frame.
      * You must specify one of the following choices:
-     * <p>
+     * <br><br>
      * <ul>
      * <li><code>DO_NOTHING_ON_CLOSE</code>
      * (defined in <code>WindowConstants</code>):
--- a/src/share/classes/javax/swing/JInternalFrame.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JInternalFrame.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1645,7 +1645,7 @@
      * Sets the operation that will happen by default when
      * the user initiates a "close" on this internal frame.
      * The possible choices are:
-     * <p>
+     * <br><br>
      * <dl>
      * <dt><code>DO_NOTHING_ON_CLOSE</code>
      * <dd> Do nothing.
--- a/src/share/classes/javax/swing/JLayeredPane.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JLayeredPane.java	Thu Dec 12 20:04:31 2013 -0800
@@ -43,7 +43,7 @@
  * For task-oriented documentation and examples of using layered panes see
  * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/layeredpane.html">How to Use a Layered Pane</a>,
  * a section in <em>The Java Tutorial</em>.
- * <P>
+ *
  * <TABLE STYLE="FLOAT:RIGHT" BORDER="0" SUMMARY="layout">
  * <TR>
  *   <TD ALIGN="CENTER">
--- a/src/share/classes/javax/swing/JList.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JList.java	Thu Dec 12 20:04:31 2013 -0800
@@ -950,7 +950,7 @@
     /**
      * Defines the way list cells are layed out. Consider a {@code JList}
      * with five cells. Cells can be layed out in one of the following ways:
-     * <p>
+     *
      * <pre>
      * VERTICAL:          0
      *                    1
--- a/src/share/classes/javax/swing/JOptionPane.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JOptionPane.java	Thu Dec 12 20:04:31 2013 -0800
@@ -106,7 +106,6 @@
  * <p>
  * All dialogs are modal. Each <code>showXxxDialog</code> method blocks
  * the caller until the user's interaction is complete.
- * <p>
  *
  * <table cellspacing=6 cellpadding=4 border=0 style="float:right" summary="layout">
  * <tr>
@@ -143,7 +142,7 @@
  * just below the component. This parameter may be <code>null</code>,
  * in which case a default <code>Frame</code> is used as the parent,
  * and the dialog will be
- * centered on the screen (depending on the L&F).
+ * centered on the screen (depending on the {@literal L&F}).
  * <dt><a name=message>message</a><dd>
  * A descriptive message to be placed in the dialog box.
  * In the most common usage, message is just a <code>String</code> or
@@ -225,42 +224,42 @@
  * <dt>Show an error dialog that displays the message, 'alert':
  * <dd><code>
  * JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE);
- * </code><p>
+ * </code>
  * <dt>Show an internal information dialog with the message, 'information':
- * <dd><code>
- * JOptionPane.showInternalMessageDialog(frame, "information",<br>
- *             <ul><ul>"information", JOptionPane.INFORMATION_MESSAGE);</ul></ul>
- * </code><p>
+ * <dd><pre>
+ * JOptionPane.showInternalMessageDialog(frame, "information",
+ *             "information", JOptionPane.INFORMATION_MESSAGE);
+ * </pre>
  * <dt>Show an information panel with the options yes/no and message 'choose one':
- * <dd><code>JOptionPane.showConfirmDialog(null,
- *             <ul><ul>"choose one", "choose one", JOptionPane.YES_NO_OPTION);</ul></ul>
- * </code><p>
+ * <dd><pre>JOptionPane.showConfirmDialog(null,
+ *             "choose one", "choose one", JOptionPane.YES_NO_OPTION);
+ * </pre>
  * <dt>Show an internal information dialog with the options yes/no/cancel and
  * message 'please choose one' and title information:
- * <dd><code>JOptionPane.showInternalConfirmDialog(frame,
- *             <ul><ul>"please choose one", "information",</ul></ul>
- *             <ul><ul>JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);</ul></ul>
- * </code><p>
+ * <dd><pre>JOptionPane.showInternalConfirmDialog(frame,
+ *             "please choose one", "information",
+ *             JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
+ * </pre>
  * <dt>Show a warning dialog with the options OK, CANCEL, title 'Warning', and
  * message 'Click OK to continue':
- * <dd><code>
- * Object[] options = { "OK", "CANCEL" };<br>
+ * <dd><pre>
+ * Object[] options = { "OK", "CANCEL" };
  * JOptionPane.showOptionDialog(null, "Click OK to continue", "Warning",
- *             <ul><ul>JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,</ul></ul>
- *             <ul><ul>null, options, options[0]);</ul></ul>
- * </code><p>
+ *             JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,
+ *             null, options, options[0]);
+ * </pre>
  * <dt>Show a dialog asking the user to type in a String:
  * <dd><code>
  * String inputValue = JOptionPane.showInputDialog("Please input a value");
- * </code><p>
+ * </code>
  * <dt>Show a dialog asking the user to select a String:
- * <dd><code>
+ * <dd><pre>
  * Object[] possibleValues = { "First", "Second", "Third" };<br>
  * Object selectedValue = JOptionPane.showInputDialog(null,
- *             <ul><ul>"Choose one", "Input",</ul></ul>
- *             <ul><ul>JOptionPane.INFORMATION_MESSAGE, null,</ul></ul>
- *             <ul><ul>possibleValues, possibleValues[0]);</ul></ul>
- * </code><p>
+ *             "Choose one", "Input",
+ *             JOptionPane.INFORMATION_MESSAGE, null,
+ *             possibleValues, possibleValues[0]);
+ * </pre><p>
  * </dl>
  * <b>Direct Use:</b><br>
  * To create and use an <code>JOptionPane</code> directly, the
@@ -281,7 +280,7 @@
  *     }
  *     <i>//If there is an array of option buttons:</i>
  *     for(int counter = 0, maxCounter = options.length;
- *        counter < maxCounter; counter++) {
+ *        counter &lt; maxCounter; counter++) {
  *        if(options[counter].equals(selectedValue))
  *        return counter;
  *     }
@@ -1847,9 +1846,9 @@
     }
 
     /**
-     * Sets the UI object which implements the L&F for this component.
+     * Sets the UI object which implements the {@literal L&F} for this component.
      *
-     * @param ui  the <code>OptionPaneUI</code> L&F object
+     * @param ui  the <code>OptionPaneUI</code> {@literal L&F} object
      * @see UIDefaults#getUI
      * @beaninfo
      *       bound: true
@@ -1864,7 +1863,7 @@
     }
 
     /**
-     * Returns the UI object which implements the L&F for this component.
+     * Returns the UI object which implements the {@literal L&F} for this component.
      *
      * @return the <code>OptionPaneUI</code> object
      */
@@ -1873,7 +1872,7 @@
     }
 
     /**
-     * Notification from the <code>UIManager</code> that the L&F has changed.
+     * Notification from the <code>UIManager</code> that the {@literal L&F} has changed.
      * Replaces the current UI object with the latest version from the
      * <code>UIManager</code>.
      *
@@ -1886,7 +1885,7 @@
 
     /**
      * Returns the name of the UI class that implements the
-     * L&F for this component.
+     * {@literal L&F} for this component.
      *
      * @return the string "OptionPaneUI"
      * @see JComponent#getUIClassID
@@ -2103,7 +2102,7 @@
      * Sets the options to display.
      * The option type is used by the Look and Feel to
      * determine what buttons to show (unless options are supplied).
-     * @param newType an integer specifying the options the L&F is to display:
+     * @param newType an integer specifying the options the {@literal L&F} is to display:
      *                  <code>DEFAULT_OPTION</code>,
      *                  <code>YES_NO_OPTION</code>,
      *                  <code>YES_NO_CANCEL_OPTION</code>,
--- a/src/share/classes/javax/swing/JScrollBar.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JScrollBar.java	Thu Dec 12 20:04:31 2013 -0800
@@ -192,9 +192,9 @@
 
 
     /**
-     * Sets the L&F object that renders this component.
+     * Sets the {@literal L&F} object that renders this component.
      *
-     * @param ui  the <code>ScrollBarUI</code> L&F object
+     * @param ui  the <code>ScrollBarUI</code> {@literal L&F} object
      * @see UIDefaults#getUI
      * @since 1.4
      * @beaninfo
@@ -606,9 +606,9 @@
      * Sets the four BoundedRangeModel properties after forcing
      * the arguments to obey the usual constraints:
      * <pre>
-     * minimum <= value <= value+extent <= maximum
+     * minimum &le; value &le; value+extent &le; maximum
      * </pre>
-     * <p>
+     *
      *
      * @see BoundedRangeModel#setRangeProperties
      * @see #setValue
--- a/src/share/classes/javax/swing/JScrollPane.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JScrollPane.java	Thu Dec 12 20:04:31 2013 -0800
@@ -53,7 +53,7 @@
  *  <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html">How to Use Scroll Panes</a>,
  * a section in <em>The Java Tutorial</em>.  Note that
  * <code>JScrollPane</code> does not support heavyweight components.
- * <p>
+ *
  * <TABLE STYLE="FLOAT:RIGHT" BORDER="0" SUMMARY="layout">
  *    <TR>
  *    <TD ALIGN="CENTER">
--- a/src/share/classes/javax/swing/JTable.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JTable.java	Thu Dec 12 20:04:31 2013 -0800
@@ -73,7 +73,7 @@
  * but provides defaults for these features so that simple tables can be
  * set up easily.  For example, to set up a table with 10 rows and 10
  * columns of numbers:
- * <p>
+ *
  * <pre>
  *      TableModel dataModel = new AbstractTableModel() {
  *          public int getColumnCount() { return 10; }
@@ -659,7 +659,7 @@
      * should contain the values for that row. In other words,
      * the value of the cell at row 1, column 5 can be obtained
      * with the following code:
-     * <p>
+     *
      * <pre>((Vector)rowData.elementAt(1)).elementAt(5);</pre>
      * <p>
      * @param rowData           the data for the new table
@@ -674,7 +674,7 @@
      * <code>rowData</code>, with column names, <code>columnNames</code>.
      * <code>rowData</code> is an array of rows, so the value of the cell at row 1,
      * column 5 can be obtained with the following code:
-     * <p>
+     *
      * <pre> rowData[1][5]; </pre>
      * <p>
      * All rows must be of the same length as <code>columnNames</code>.
@@ -3062,9 +3062,9 @@
      *   interface that allows any data structure containing a collection
      *   of elements with a size, preferred size, maximum size and minimum size
      *   to have its elements manipulated by the algorithm.
-     * <p>
+     *
      * <H3> Distributing the delta </H3>
-     * <p>
+     *
      * <H4> Overview </H4>
      * <P>
      * Call "DELTA" the difference between the target size and the
@@ -3073,7 +3073,7 @@
      * sizes and adding a share of the DELTA - that share being based on
      * how far each preferred size is from its limiting bound (minimum or
      * maximum).
-     * <p>
+     *
      * <H4>Definition</H4>
      * <P>
      * Call the individual constraints min[i], max[i], and pref[i].
@@ -3081,21 +3081,21 @@
      * Call their respective sums: MIN, MAX, and PREF.
      * <p>
      * Each new size will be calculated using:
-     * <p>
+     *
      * <pre>
      *          size[i] = pref[i] + delta[i]
      * </pre>
      * where each individual delta[i] is calculated according to:
      * <p>
      * If (DELTA &lt; 0) we are in shrink mode where:
-     * <p>
+     *
      * <PRE>
      *                        DELTA
      *          delta[i] = ------------ * (pref[i] - min[i])
      *                     (PREF - MIN)
      * </PRE>
      * If (DELTA &gt; 0) we are in expand mode where:
-     * <p>
+     *
      * <PRE>
      *                        DELTA
      *          delta[i] = ------------ * (max[i] - pref[i])
@@ -6373,7 +6373,7 @@
      * <p>
      * Here's an example of creating a <code>MessageFormat</code> that can be
      * used to print "Duke's Table: Page - " and the current page number:
-     * <p>
+     *
      * <pre>
      *     // notice the escaping of the single quote
      *     // notice how the page number is included with "{0}"
@@ -7686,7 +7686,7 @@
              * Returns a boolean value indicating whether the specified column
              * is selected.
              *
-             * @param r zero-based column of the table
+             * @param c zero-based column of the table
              * @return the boolean value true if the specified column is selected.
              * Otherwise, false.
              * @since 1.3
--- a/src/share/classes/javax/swing/JTextArea.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JTextArea.java	Thu Dec 12 20:04:31 2013 -0800
@@ -93,7 +93,7 @@
  *    JTextArea myArea = ??;
  *    myArea.getDocument().addDocumentListener(myListener);
  * </pre>
- * <p>
+ *
  * <dl>
  * <dt><b><font size=+1>Newlines</font></b>
  * <dd>
--- a/src/share/classes/javax/swing/JTextPane.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JTextPane.java	Thu Dec 12 20:04:31 2013 -0800
@@ -49,7 +49,7 @@
  * the default attributes to use if not overridden by attributes set
  * on the paragraph or character run.  Components and images may
  * be embedded in the flow of text.
- * <p>
+ *
  * <dl>
  * <dt><b><font size=+1>Newlines</font></b>
  * <dd>
--- a/src/share/classes/javax/swing/JTree.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/JTree.java	Thu Dec 12 20:04:31 2013 -0800
@@ -3956,7 +3956,7 @@
          * allows children depends on how it was created.
          *
          * @return true if this node allows children, false otherwise
-         * @see #JTree.DynamicUtilTreeNode
+         * @see JTree.DynamicUtilTreeNode
          */
         public boolean isLeaf() {
             return !getAllowsChildren();
--- a/src/share/classes/javax/swing/LookAndFeel.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/LookAndFeel.java	Thu Dec 12 20:04:31 2013 -0800
@@ -91,7 +91,7 @@
  * to provide a specific set of defaults. These are documented in the
  * classes that require the specific default.
  *
- * <h3><a name="#defaultRecommendation">ComponentUIs and defaults</a></h3>
+ * <h3><a name="defaultRecommendation">ComponentUIs and defaults</a></h3>
  *
  * All {@code ComponentUIs} typically need to set various properties
  * on the {@code JComponent} the {@code ComponentUI} is providing the
@@ -120,7 +120,7 @@
  * {@code ComponentUI} implementations should use the various install methods
  * provided by this class as they handle the necessary checking and install
  * the property using the recommended guidelines.
- * <p>
+ *
  * <h3><a name="exceptions"></a>Exceptions</h3>
  *
  * All of the install methods provided by {@code LookAndFeel} need to
--- a/src/share/classes/javax/swing/Painter.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/Painter.java	Thu Dec 12 20:04:31 2013 -0800
@@ -54,7 +54,7 @@
  *     }
  * }
  * }
- * </pre></p>
+ * </pre>
  *
  * <p>This interface makes no guarantees of threadsafety.</p>
  *
--- a/src/share/classes/javax/swing/RowFilter.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/RowFilter.java	Thu Dec 12 20:04:31 2013 -0800
@@ -31,6 +31,7 @@
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
 
 /**
  * <code>RowFilter</code> is used to filter out entries from the
@@ -129,7 +130,7 @@
 
     /**
      * Throws an IllegalArgumentException if any of the values in
-     * columns are < 0.
+     * columns are {@literal <} 0.
      */
     private static void checkIndices(int[] columns) {
         for (int i = columns.length - 1; i >= 0; i--) {
--- a/src/share/classes/javax/swing/SizeSequence.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/SizeSequence.java	Thu Dec 12 20:04:31 2013 -0800
@@ -52,7 +52,7 @@
  * <p>
  * The following figure shows the relationship between size and position data
  * for a multi-column component.
- * <p>
+ *
  * <center>
  * <img src="doc-files/SizeSequence-1.gif" width=384 height = 100
  * alt="The first item begins at position 0, the second at the position equal
@@ -76,7 +76,6 @@
  * However, any other unit of measure (for example, time in days)
  * could be just as valid.
  *
- * <p>
  *
  * <h3>Implementation Notes</h3>
  *
--- a/src/share/classes/javax/swing/Spring.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/Spring.java	Thu Dec 12 20:04:31 2013 -0800
@@ -65,7 +65,7 @@
  *  from <code>a</code>
  *  to <code>b</code>,
  *  where <code>a &lt;= b</code>).
- *  <p>
+ *
  *  <pre>
  *          [a1, b1] + [a2, b2] = [a1 + a2, b1 + b2]
  *
@@ -78,7 +78,7 @@
  *  If we denote <code>Spring</code>s as <code>[a, b, c]</code>,
  *  where <code>a &lt;= b &lt;= c</code>, we can define the same
  *  arithmetic operators on <code>Spring</code>s:
- *  <p>
+ *
  *  <pre>
  *          [a1, b1, c1] + [a2, b2, c2] = [a1 + a2, b1 + b2, c1 + c2]
  *
@@ -89,7 +89,7 @@
  *  <p>
  *  With both intervals and <code>Spring</code>s we can define "-" and <em>min</em>
  *  in terms of negation:
- *  <p>
+ *
  *  <pre>
  *      X - Y = X + (-Y)
  *
--- a/src/share/classes/javax/swing/SpringLayout.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/SpringLayout.java	Thu Dec 12 20:04:31 2013 -0800
@@ -297,7 +297,7 @@
      * and "a - b" is equal to
      * <code>Spring.sum(a, Spring.minus(b))</code>.
      * See the
-     * {@link Spring <code>Spring</code> API documentation}
+     * {@link Spring Spring API documentation}
      * for further details
      * of spring arithmetic.
      *
--- a/src/share/classes/javax/swing/SwingWorker.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/SwingWorker.java	Thu Dec 12 20:04:31 2013 -0800
@@ -62,7 +62,6 @@
  *   </li>
  * </ul>
  *
- * <p>
  *
  * <p>
  * These constraints mean that a GUI application with time intensive
--- a/src/share/classes/javax/swing/border/CompoundBorder.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/border/CompoundBorder.java	Thu Dec 12 20:04:31 2013 -0800
@@ -36,7 +36,7 @@
  *
  * For example, this class may be used to add blank margin space
  * to a component with an existing decorative border:
- * <p>
+ *
  * <pre>
  *    Border border = comp.getBorder();
  *    Border margin = new EmptyBorder(10,10,10,10);
--- a/src/share/classes/javax/swing/event/TableModelEvent.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/event/TableModelEvent.java	Thu Dec 12 20:04:31 2013 -0800
@@ -34,7 +34,7 @@
  * and all references to rows and columns are in the co-ordinate
  * system of the model.
  * Depending on the parameters used in the constructors, the TableModelevent
- * can be used to specify the following types of changes: <p>
+ * can be used to specify the following types of changes:
  *
  * <pre>
  * TableModelEvent(source);              //  The data, ie. all rows changed
--- a/src/share/classes/javax/swing/event/TreeModelListener.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/event/TreeModelListener.java	Thu Dec 12 20:04:31 2013 -0800
@@ -86,7 +86,7 @@
      * <p>Invoked after the tree has drastically changed structure from a
      * given node down.  If the path returned by e.getPath() is of length
      * one and the first element does not identify the current root node
-     * the first element should become the new root of the tree.<p>
+     * the first element should become the new root of the tree.
      *
      * <p>Use <code>e.getPath()</code>
      * to get the path to the node.
--- a/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java	Thu Dec 12 20:04:31 2013 -0800
@@ -48,7 +48,7 @@
  * Provides the basic look and feel for a <code>JOptionPane</code>.
  * <code>BasicMessagePaneUI</code> provides a means to place an icon,
  * message and buttons into a <code>Container</code>.
- * Generally, the layout will look like:<p>
+ * Generally, the layout will look like:
  * <pre>
  *        ------------------
  *        | i | message    |
--- a/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneDivider.java	Thu Dec 12 20:04:31 2013 -0800
@@ -521,7 +521,7 @@
      * MouseHandler is responsible for converting mouse events
      * (released, dragged...) into the appropriate DragController
      * methods.
-     * <p>
+     *
      */
     protected class MouseHandler extends MouseAdapter
             implements MouseMotionListener
@@ -890,7 +890,7 @@
      * Used to layout a <code>BasicSplitPaneDivider</code>.
      * Layout for the divider
      * involves appropriately moving the left/right buttons around.
-     * <p>
+     *
      */
     protected class DividerLayout implements LayoutManager
     {
--- a/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java	Thu Dec 12 20:04:31 2013 -0800
@@ -2015,7 +2015,7 @@
     /**
      * LayoutManager used for JSplitPanes with an orientation of
      * VERTICAL_SPLIT.
-     * <p>
+     *
      */
     public class BasicVerticalLayoutManager extends
             BasicHorizontalLayoutManager
--- a/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/plaf/basic/BasicTreeUI.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1398,7 +1398,7 @@
 
     /**
      * Paints the vertical part of the leg. The receiver should
-     * NOT modify <code>clipBounds</code>, <code>insets</code>.<p>
+     * NOT modify <code>clipBounds</code>, <code>insets</code>.
      */
     protected void paintVerticalPartOfLeg(Graphics g, Rectangle clipBounds,
                                           Insets insets, TreePath path) {
--- a/src/share/classes/javax/swing/table/DefaultTableModel.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/table/DefaultTableModel.java	Thu Dec 12 20:04:31 2013 -0800
@@ -182,7 +182,7 @@
      *  each a single row of values.  In other words, to get to the cell
      *  at row 1, column 5: <p>
      *
-     *  <code>((Vector)getDataVector().elementAt(1)).elementAt(5);</code><p>
+     *  <code>((Vector)getDataVector().elementAt(1)).elementAt(5);</code>
      *
      * @return  the vector of vectors containing the tables data values
      *
@@ -306,7 +306,7 @@
      *  Sets the number of rows in the model.  If the new size is greater
      *  than the current size, new rows are added to the end of the model
      *  If the new size is less than the current size, all
-     *  rows at index <code>rowCount</code> and greater are discarded. <p>
+     *  rows at index <code>rowCount</code> and greater are discarded.
      *
      * @param   rowCount   the new number of rows
      * @see #setRowCount
@@ -330,7 +330,7 @@
      *  Sets the number of rows in the model.  If the new size is greater
      *  than the current size, new rows are added to the end of the model
      *  If the new size is less than the current size, all
-     *  rows at index <code>rowCount</code> and greater are discarded. <p>
+     *  rows at index <code>rowCount</code> and greater are discarded.
      *
      *  @see #setColumnCount
      * @since 1.3
@@ -414,7 +414,7 @@
      *  After the move, the row that was at index <code>start</code>
      *  will be at index <code>to</code>.
      *  This method will send a <code>tableChanged</code> notification
-     *  message to all the listeners. <p>
+       message to all the listeners.
      *
      *  <pre>
      *  Examples of moves:
@@ -473,7 +473,7 @@
      * of columns, new columns are added to the end of each row in the model.
      * If the number of <code>newIdentifier</code>s is less than the current
      * number of columns, all the extra columns at the end of a row are
-     * discarded. <p>
+     * discarded.
      *
      * @param   columnIdentifiers  vector of column identifiers.  If
      *                          <code>null</code>, set the model
@@ -490,7 +490,7 @@
      * of columns, new columns are added to the end of each row in the model.
      * If the number of <code>newIdentifier</code>s is less than the current
      * number of columns, all the extra columns at the end of a row are
-     * discarded. <p>
+     * discarded.
      *
      * @param   newIdentifiers  array of column identifiers.
      *                          If <code>null</code>, set
--- a/src/share/classes/javax/swing/table/TableModel.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/table/TableModel.java	Thu Dec 12 20:04:31 2013 -0800
@@ -34,7 +34,7 @@
  *
  *  The <code>JTable</code> can be set up to display any data
  *  model which implements the
- *  <code>TableModel</code> interface with a couple of lines of code:  <p>
+ *  <code>TableModel</code> interface with a couple of lines of code:
  *  <pre>
  *      TableModel myData = new MyTableModel();
  *      JTable table = new JTable(myData);
@@ -42,7 +42,7 @@
  *
  * For further documentation, see <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data">Creating a Table Model</a>
  * in <em>The Java Tutorial</em>.
- * <p>
+ *
  * @author Philip Milne
  * @see JTable
  */
--- a/src/share/classes/javax/swing/text/AbstractDocument.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/text/AbstractDocument.java	Thu Dec 12 20:04:31 2013 -0800
@@ -804,7 +804,7 @@
      * returns will give better performance for situations where large
      * parts of the document are being scanned.  The following is an example
      * of using the partial return to access the entire document:
-     * <p>
+     *
      * <pre>
      * &nbsp; int nleft = doc.getDocumentLength();
      * &nbsp; Segment text = new Segment();
--- a/src/share/classes/javax/swing/text/DefaultEditorKit.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/text/DefaultEditorKit.java	Thu Dec 12 20:04:31 2013 -0800
@@ -41,7 +41,7 @@
  * of text document.  This implementation provides a default
  * implementation which treats text as plain text and
  * provides a minimal set of actions for a simple editor.
- * <p>
+ *
  * <dl>
  * <dt><b><font size=+1>Newlines</font></b>
  * <dd>
--- a/src/share/classes/javax/swing/text/Document.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/text/Document.java	Thu Dec 12 20:04:31 2013 -0800
@@ -354,7 +354,7 @@
      * returns will give better performance for situations where large
      * parts of the document are being scanned.  The following is an example
      * of using the partial return to access the entire document:
-     * <p>
+     *
      * <pre><code>
      *
      * &nbsp; int nleft = doc.getDocumentLength();
--- a/src/share/classes/javax/swing/text/JTextComponent.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/text/JTextComponent.java	Thu Dec 12 20:04:31 2013 -0800
@@ -87,7 +87,6 @@
  * <a href="http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html">General Rules for Using Text Components</a>,
  * a section in <em>The Java Tutorial.</em>
  *
- * <p>
  * <dl>
  * <dt><b><font size=+1>Caret Changes</font></b>
  * <dd>
@@ -108,7 +107,6 @@
  * <b>Note</b>: Non-editable text components also have a caret though
  * it may not be painted.
  *
- * <p>
  * <dt><b><font size=+1>Commands</font></b>
  * <dd>
  * Text components provide a number of commands that can be used
@@ -120,7 +118,6 @@
  * found with the {@link #getActions} method.  These actions
  * can be bound to key events, fired from buttons, etc.
  *
- * <p>
  * <dt><b><font size=+1>Text Input</font></b>
  * <dd>
  * The text components support flexible and internationalized text input, using
@@ -206,7 +203,6 @@
  * <li>caret movement forward and backward
  * </ul>
  *
- * <p>
  * <dt><b><font size=+1>Model/View Split</font></b>
  * <dd>
  * The text components have a model-view split.  A text component pulls
@@ -231,14 +227,12 @@
  * {@link DocumentListener}
  * interface and registered interest with the model being observed.
  *
- * <p>
  * <dt><b><font size=+1>Location Information</font></b>
  * <dd>
  * The capability of determining the location of text in
  * the view is provided.  There are two methods, {@link #modelToView}
  * and {@link #viewToModel} for determining this information.
  *
- * <p>
  * <dt><b><font size=+1>Undo/Redo support</font></b>
  * <dd>
  * Support for an edit history mechanism is provided to allow
@@ -249,7 +243,6 @@
  * The support is provided by the Document model, which allows
  * one to attach UndoableEditListener implementations.
  *
- * <p>
  * <dt><b><font size=+1>Thread Safety</font></b>
  * <dd>
  * The swing text components provide some support of thread
@@ -261,13 +254,12 @@
  * The methods that are safe to call asynchronously are marked
  * with comments.
  *
- * <p>
  * <dt><b><font size=+1>Newlines</font></b>
  * <dd>
  * For a discussion on how newlines are handled, see
  * <a href="DefaultEditorKit.html">DefaultEditorKit</a>.
  *
- * <p>
+ *
  * <dt><b><font size=+1>Printing support</font></b>
  * <dd>
  * Several {@link #print print} methods are provided for basic
--- a/src/share/classes/javax/swing/text/View.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/text/View.java	Thu Dec 12 20:04:31 2013 -0800
@@ -144,7 +144,6 @@
     <ul>
     <li>{@link #paint(java.awt.Graphics, java.awt.Shape) paint}
     </ul>
-    <p>
 
     <dt><b>Translate between the model and view coordinate systems.</b>
     <dd>
--- a/src/share/classes/javax/swing/text/html/HTMLDocument.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/text/html/HTMLDocument.java	Thu Dec 12 20:04:31 2013 -0800
@@ -2089,7 +2089,7 @@
      *
      * <p>
      * The assignment of the actions described is shown in the
-     * following table for the tags defined in <code>HTML.Tag</code>.<P>
+     * following table for the tags defined in <code>HTML.Tag</code>.
      * <table border=1 summary="HTML tags and assigned actions">
      * <tr><th>Tag</th><th>Action</th></tr>
      * <tr><td><code>HTML.Tag.A</code>         <td>CharacterAction
@@ -3968,7 +3968,7 @@
         }
 
         /**
-         * This is set to true when and end is invoked for <html>.
+         * This is set to true when and end is invoked for {@literal <html>}.
          */
         private boolean receivedEndHTML;
         /** Number of times <code>flushBuffer</code> has been invoked. */
@@ -3990,7 +3990,7 @@
         boolean inTitle = false;
         boolean lastWasNewline = true;
         boolean emptyAnchor;
-        /** True if (!emptyDocument && insertTag == null), this is used so
+        /** True if (!emptyDocument &amp;&amp; insertTag == null), this is used so
          * much it is cached. */
         boolean midInsert;
         /** True when the body has been encountered. */
--- a/src/share/classes/javax/swing/text/html/HTMLEditorKit.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/text/html/HTMLEditorKit.java	Thu Dec 12 20:04:31 2013 -0800
@@ -71,7 +71,7 @@
  * The modeling of HTML is provided by the class <code>HTMLDocument</code>.
  * Its documentation describes the details of how the HTML is modeled.
  * The editing support leverages heavily off of the text package.
- * <p>
+ *
  * <dt>
  * Extendable/Scalable
  * <dd>
@@ -114,7 +114,7 @@
  *   attributes for display.  This helps make the View implementations
  *   more general purpose
  * </ol>
- * <p>
+ *
  * <dt>
  * Asynchronous Loading
  * <dd>
@@ -127,7 +127,7 @@
  * by the <code>HTMLDocument.HTMLReader</code> class.  The actual
  * work is done by the <code>DefaultStyledDocument</code> and
  * <code>AbstractDocument</code> classes in the text package.
- * <p>
+ *
  * <dt>
  * Customization from current LAF
  * <dd>
@@ -141,7 +141,7 @@
  * The support for this is provided by the <code>StyleSheet</code>
  * class.  The presentation of the HTML can be heavily influenced
  * by the setting of the StyleSheet property on the EditorKit.
- * <p>
+ *
  * <dt>
  * Not lossy
  * <dd>
@@ -839,7 +839,7 @@
          * if the given position represents a link. If this was the result
          * of a mouse click, <code>x</code> and
          * <code>y</code> will give the location of the mouse, otherwise
-         * they will be < 0.
+         * they will be {@literal <} 0.
          *
          * @param pos the position
          * @param html the editor pane
@@ -2027,8 +2027,8 @@
              * Paints a portion of a highlight.
              *
              * @param g the graphics context
-             * @param offs0 the starting model offset >= 0
-             * @param offs1 the ending model offset >= offs1
+             * @param offs0 the starting model offset &ge; 0
+             * @param offs1 the ending model offset &ge; offs1
              * @param bounds the bounding box of the view, which is not
              *        necessarily the region to paint.
              * @param c the editor
--- a/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/javax/swing/tree/FixedHeightLayoutCache.java	Thu Dec 12 20:04:31 2013 -0800
@@ -469,7 +469,7 @@
      * <p>Invoked after the tree has drastically changed structure from a
      * given node down.  If the path returned by e.getPath() is of length
      * one and the first element does not identify the current root node
-     * the first element should become the new root of the tree.<p>
+     * the first element should become the new root of the tree.
      *
      * <p>e.path() holds the path to the node.</p>
      * <p>e.childIndices() returns null.</p>
@@ -677,7 +677,7 @@
 
     /**
      * Messages getTreeNodeForPage(path, onlyIfVisible, shouldCreate,
-     * path.length) as long as path is non-null and the length is > 0.
+     * path.length) as long as path is non-null and the length is {@literal >} 0.
      * Otherwise returns null.
      */
     private FHTreeStateNode getNodeForPath(TreePath path,
@@ -1283,7 +1283,7 @@
 
         /**
          * Messaged when a child has been inserted at index. For all the
-         * children that have a childIndex >= index their index is incremented
+         * children that have a childIndex &ge; index their index is incremented
          * by one.
          */
         protected void childInsertedAtModelIndex(int index,
--- a/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Thu Dec 12 20:04:31 2013 -0800
@@ -2594,7 +2594,7 @@
 
                 requests = new MessageHeader();
                 setRequests = false;
-                setRequestMethod("GET");
+                super.setRequestMethod("GET"); // avoid the connecting check
                 poster = null;
                 if (!checkReuseConnection())
                     connect();
--- a/src/share/classes/sun/tools/jar/resources/jar_de.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_de.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=Fehler beim Schreiben in vorhandener JAR-Datei
 error.create.dir={0}: Verzeichnis konnte nicht erstellt werden
 error.incorrect.length=Falsche L\u00E4nge bei der Verarbeitung: {0}
+error.create.tempfile=Es konnte keine tempor\u00E4re Datei erstellt werden
 out.added.manifest=Manifest wurde hinzugef\u00FCgt
 out.update.manifest=Manifest wurde aktualisiert
 out.ignore.entry=Eintrag {0} wird ignoriert
@@ -44,4 +45,4 @@
 out.inflated=\ vergr\u00F6\u00DFert: {0}
 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
+usage=Verwendung: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] Dateien ...\nOptionen:\n    -c  Neues Archiv erstellen\n    -t  Inhaltsverzeichnis f\u00FCr Archiv anzeigen\n    -x  Benannte (oder alle) Dateien aus dem Archiv extrahieren\n    -u  Vorhandenes Archiv aktualisieren\n    -v  Ausgabe im Verbose-Modus aus Standard-Ausgabe generieren\n    -f  Dateinamen f\u00FCr Archiv angeben\n    -m  Manifest-Informationen aus angegebener Manifest-Datei einschlie\u00DFen\n    -n  Pack200-Normalisierung nach Erstellung eines neuen Archivs ausf\u00FChren\n    -e  Anwendungs-Einstiegspunkt f\u00FCr alleinstehende Anwendung angeben\n        in einer ausf\u00FChrbaren JAR-Datei geb\u00FCndelt\n    -0  nur speichern; keine ZIP-Komprimierung verwenden\n    -M  keine Manifest-Datei f\u00FCr die Eintr\u00E4ge erstellen\n    -i  Index-Informationen f\u00FCr die angegebenen JAR-Dateien generieren\n    -C  zu angegebenem Verzeichnis wechseln und die folgende Datei einschlie\u00DFen\nDateien, die Verzeichnisse sind, werden rekursiv verarbeitet.\nDie Namen der Manifest-Datei, der Archiv-Datei und des Einstiegspunkts sind\nin derselben Reihenfolge wie die Kennzeichen f\u00FCr "m", "f" und "e" angegeben.\n\nBeispiel 1: Archivieren von zwei Klassendateien in einem Archiv mit dem Namen "classes.jar": \n       jar cvf classes.jar Foo.class Bar.class \nBeispiel 2: Verwenden einer vorhandenen Manifest-Datei mit dem Namen "mymanifest" und Archivieren aller\n           Dateien im Verzeichnis mit dem Namen "foo/" in die Archiv-Datei "classes.jar": \n       jar cvfm classes.jar mymanifest -C foo/ .\n
--- a/src/share/classes/sun/tools/jar/resources/jar_es.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_es.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=Error al escribir un archivo jar existente
 error.create.dir={0} : no se ha podido crear el directorio
 error.incorrect.length=longitud incorrecta al procesar: {0}
+error.create.tempfile=No se ha podido crear el archivo temporal
 out.added.manifest=manifiesto agregado
 out.update.manifest=manifiesto actualizado
 out.ignore.entry=ignorando entrada {0}
@@ -44,4 +45,4 @@
 out.inflated=\ inflado: {0}
 out.size=(entrada = {0}) (salida = {1})
 
-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}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-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    -n  realizar normalizaci\u00F3n de Pack200 despu\u00E9s de crear un nuevo archivo\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
--- a/src/share/classes/sun/tools/jar/resources/jar_fr.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_fr.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=Erreur lors de l'\u00E9criture d'un fichier JAR existant
 error.create.dir={0} : impossible de cr\u00E9er le r\u00E9pertoire
 error.incorrect.length=longueur incorrecte lors du traitement de : {0}
+error.create.tempfile=Impossible de cr\u00E9er un fichier temporaire
 out.added.manifest=manifeste ajout\u00E9
 out.update.manifest=manifeste mis \u00E0 jour
 out.ignore.entry=entr\u00E9e {0} ignor\u00E9e
@@ -44,4 +45,4 @@
 out.inflated=\ d\u00E9compress\u00E9 : {0}
 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
+usage=Syntaxe : jar {ctxui}[vfmn0Me] [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 manifeste sp\u00E9cifi\u00E9\n    -n  effectue une normalisation Pack200 apr\u00E8s la cr\u00E9ation d'une archive\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 d'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
--- a/src/share/classes/sun/tools/jar/resources/jar_it.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_it.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=Errore durante la scrittura del file jar esistente
 error.create.dir={0} : impossibile creare la directory
 error.incorrect.length=lunghezza non valida durante l''elaborazione: {0}
+error.create.tempfile=Impossibile creare il file temporaneo.
 out.added.manifest=aggiunto manifest
 out.update.manifest=aggiornato manifest
 out.ignore.entry=la voce {0} sar\u00E0 ignorata
@@ -44,4 +45,4 @@
 out.inflated=\ decompresso: {0}
 out.size=(in = {0}) (out = {1})
 
-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}[vfmn0Me] [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    -n  esegue la normalizzazione Pack200 dopo la creazione di un nuovo archivio\n    -e  specifica il punto di ingresso per l'applicazione standalone \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
--- a/src/share/classes/sun/tools/jar/resources/jar_ja.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_ja.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=\u65E2\u5B58jar\u30D5\u30A1\u30A4\u30EB\u306E\u66F8\u8FBC\u307F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
 error.create.dir=\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA{0}\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
 error.incorrect.length={0}\u306E\u51E6\u7406\u4E2D\u306B\u4E0D\u6B63\u306A\u9577\u3055\u304C\u3042\u308A\u307E\u3057\u305F
+error.create.tempfile=\u4E00\u6642\u30D5\u30A1\u30A4\u30EB\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F
 out.added.manifest=\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u304C\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F
 out.update.manifest=\u30DE\u30CB\u30D5\u30A7\u30B9\u30C8\u304C\u66F4\u65B0\u3055\u308C\u307E\u3057\u305F
 out.ignore.entry=\u30A8\u30F3\u30C8\u30EA{0}\u3092\u7121\u8996\u3057\u307E\u3059
@@ -44,4 +45,4 @@
 out.inflated=\ {0}\u304C\u5C55\u958B\u3055\u308C\u307E\u3057\u305F
 out.size=(\u5165={0})(\u51FA={1})
 
-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}[vfmn0Me] [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    -n  \u65B0\u898F\u30A2\u30FC\u30AB\u30A4\u30D6\u306E\u4F5C\u6210\u5F8C\u306BPack200\u6B63\u898F\u5316\u3092\u5B9F\u884C\u3059\u308B\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\n        \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\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\u6B21\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
--- a/src/share/classes/sun/tools/jar/resources/jar_ko.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_ko.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=\uAE30\uC874 jar \uD30C\uC77C\uC5D0 \uC4F0\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.
 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}
+error.create.tempfile=\uC784\uC2DC \uD30C\uC77C\uC744 \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
 out.added.manifest=Manifest\uB97C \uCD94\uAC00\uD568
 out.update.manifest=Manifest\uB97C \uC5C5\uB370\uC774\uD2B8\uD568
 out.ignore.entry={0} \uD56D\uBAA9\uC744 \uBB34\uC2DC\uD558\uB294 \uC911
@@ -44,4 +45,4 @@
 out.inflated=\ \uC99D\uAC00\uB428: {0}
 out.size=(\uC785\uB825 = {0}) (\uCD9C\uB825 = {1})
 
-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
+usage=\uC0AC\uC6A9\uBC95: jar {ctxui}[vfmn0Me] [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    -n  \uC0C8 \uC544\uCE74\uC774\uBE0C\uB97C \uC0DD\uC131\uD55C \uD6C4 Pack200 \uC815\uADDC\uD654\uB97C \uC218\uD589\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/ .
--- a/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_pt_BR.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=Erro ao gravar o arquivo jar existente
 error.create.dir={0} : n\u00E3o foi poss\u00EDvel criar o diret\u00F3rio
 error.incorrect.length=largura incorreta durante o processamento: {0}
+error.create.tempfile=N\u00E3o foi poss\u00EDvel criar um arquivo tempor\u00E1rio
 out.added.manifest=manifesto adicionado
 out.update.manifest=manifesto atualizado
 out.ignore.entry=ignorando entrada {0}
@@ -44,4 +45,4 @@
 out.inflated=\ inflado: {0}
 out.size=(entrada = {0}) (sa\u00EDda= {1})
 
-usage=Uso: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] arquivos ...\nOp\u00E7\u00F5es:\n    -c  cria novo arquivo compactado\n    -t  lista o sum\u00E1rio do arquivo compactado\n    -x  extrai arquivos com o nome (ou todos) do arquivo compactado\n    -u  atualizar o arquivo compactado existente\n    -v  gera sa\u00EDda detalhada na sa\u00EDda padr\u00E3o\n    -f  especifica o nome do arquivo do arquivo compactado\n    -m  inclui as informa\u00E7\u00F5es do manifesto do arquivo de manifesto especificado\n    -e  especifica o ponto de entrada da aplica\u00E7\u00E3o para aplica\u00E7\u00E3o independente \n        empacotando em um arquivo jar execut\u00E1vel\n    -0  armazena somente; n\u00E3o usa compacta\u00E7\u00E3o ZIP\n    -M  n\u00E3o cria um arquivo de manifesto para as entradas\n    -i  gera informa\u00E7\u00F5es de \u00EDndice para os arquivos especificados\n    -C  altera para o diret\u00F3rio e inclui o arquivo seguinte\nSe nenhum arquivo for um diret\u00F3rio, ent\u00E3o ser\u00E1 processado repetidamente.\nO nome do arquivo de manifesto, o nome do arquivo compactado e o nome do ponto de entrada s\u00E3o\nespecificados na mesma ordem dos flags  'm', 'f' e 'e'.\n\nExemplo 1: para arquivar dois arquivos de classe em um arquivo compactado com o nome classes.jar: \n       jar cvf classes.jar Foo.class Bar.class \nExemplo 2: use um arquivo de manifesto existente 'mymanifest' e arquive todos os\n           arquivos no diret\u00F3rio foo/ na 'classes.jar': \n       jar cvfm classes.jar mymanifest -C foo/ .\n
+usage=Uso: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] arquivos ...\nOp\u00E7\u00F5es:\n    -c  cria novo archive\n    -t  lista o sum\u00E1rio do archive\n    -x  extrai arquivos com o nome (ou todos) do arquivo compactado\n    -u  atualiza o archive existente\n    -v  gera sa\u00EDda detalhada na sa\u00EDda padr\u00E3o\n    -f  especifica o nome do archive\n    -m  inclui as informa\u00E7\u00F5es do manifesto do arquivo de manifesto especificado\n    -n  executa a normaliza\u00E7\u00E3o Pack200 ap\u00F3s a cria\u00E7\u00E3o de um novo archive\n    -e  especifica o ponto de entrada da aplica\u00E7\u00E3o para aplica\u00E7\u00E3o independente \n        empacotada 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 jar especificados\n    -C  altera para o diret\u00F3rio especificado e inclui o arquivo seguinte\nSe algum arquivo for um diret\u00F3rio, ent\u00E3o ser\u00E1 processado repetidamente.\nO nome do arquivo de manifesto, o nome do archive 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 archive chamado 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
--- a/src/share/classes/sun/tools/jar/resources/jar_sv.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_sv.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=Det uppstod ett fel vid skrivning till befintlig jar-fil.
 error.create.dir={0} : kunde inte skapa n\u00E5gon katalog
 error.incorrect.length=ogiltig l\u00E4ngd vid bearbetning: {0}
+error.create.tempfile=Kunde inte skapa en tillf\u00E4llig fil
 out.added.manifest=tillagt manifestfil
 out.update.manifest=uppdaterat manifest
 out.ignore.entry=ignorerar posten {0}
@@ -44,4 +45,4 @@
 out.inflated=\ uppackat: {0}
 out.size=(in = {0}) (ut = {1})
 
-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
+usage=Syntax: jar {ctxui}[vfmn0Me] [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    -n  utf\u00F6r Pack200-normalisering efter att ha skapat ett nytt arkiv\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\ni samma ordning 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
--- a/src/share/classes/sun/tools/jar/resources/jar_zh_CN.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_zh_CN.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=\u5199\u5165\u73B0\u6709\u7684 jar \u6587\u4EF6\u65F6\u51FA\u9519
 error.create.dir={0}: \u65E0\u6CD5\u521B\u5EFA\u76EE\u5F55
 error.incorrect.length=\u5904\u7406\u65F6\u9047\u5230\u4E0D\u6B63\u786E\u7684\u957F\u5EA6: {0}
+error.create.tempfile=\u65E0\u6CD5\u521B\u5EFA\u4E34\u65F6\u6587\u4EF6
 out.added.manifest=\u5DF2\u6DFB\u52A0\u6E05\u5355
 out.update.manifest=\u5DF2\u66F4\u65B0\u6E05\u5355
 out.ignore.entry=\u6B63\u5728\u5FFD\u7565\u6761\u76EE{0}
@@ -44,4 +45,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/ .\n
+usage=\u7528\u6CD5: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...\n\u9009\u9879:\n    -c  \u521B\u5EFA\u65B0\u6863\u6848\n    -t  \u5217\u51FA\u6863\u6848\u76EE\u5F55\n    -x  \u4ECE\u6863\u6848\u4E2D\u63D0\u53D6\u6307\u5B9A\u7684 (\u6216\u6240\u6709) \u6587\u4EF6\n    -u  \u66F4\u65B0\u73B0\u6709\u6863\u6848\n    -v  \u5728\u6807\u51C6\u8F93\u51FA\u4E2D\u751F\u6210\u8BE6\u7EC6\u8F93\u51FA\n    -f  \u6307\u5B9A\u6863\u6848\u6587\u4EF6\u540D\n    -m  \u5305\u542B\u6307\u5B9A\u6E05\u5355\u6587\u4EF6\u4E2D\u7684\u6E05\u5355\u4FE1\u606F\n    -n  \u521B\u5EFA\u65B0\u6863\u6848\u540E\u6267\u884C Pack200 \u89C4\u8303\u5316\n    -e  \u4E3A\u7ED1\u5B9A\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\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\u4EE5\u4E0B\u6587\u4EF6\n\u5982\u679C\u4EFB\u4F55\u6587\u4EF6\u4E3A\u76EE\u5F55, \u5219\u5BF9\u5176\u8FDB\u884C\u9012\u5F52\u5904\u7406\u3002\n\u6E05\u5355\u6587\u4EF6\u540D, \u6863\u6848\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\u6863\u6848\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
--- a/src/share/classes/sun/tools/jar/resources/jar_zh_TW.properties	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/share/classes/sun/tools/jar/resources/jar_zh_TW.properties	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,7 @@
 error.write.file=\u5BEB\u5165\u73FE\u6709\u7684 jar \u6A94\u6848\u6642\u767C\u751F\u932F\u8AA4
 error.create.dir={0} : \u7121\u6CD5\u5EFA\u7ACB\u76EE\u9304
 error.incorrect.length=\u8655\u7406 {0} \u6642\u9577\u5EA6\u4E0D\u6B63\u78BA
+error.create.tempfile=\u7121\u6CD5\u5EFA\u7ACB\u66AB\u5B58\u6A94\u6848
 out.added.manifest=\u5DF2\u65B0\u589E\u8CC7\u8A0A\u6E05\u55AE
 out.update.manifest=\u5DF2\u66F4\u65B0\u8CC7\u8A0A\u6E05\u55AE
 out.ignore.entry=\u5FFD\u7565\u9805\u76EE {0}
@@ -44,4 +45,4 @@
 out.inflated=\ \u64F4\u5C55: {0}
 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
+usage=\u7528\u6CD5: jar {ctxui}[vfmn0Me] [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    -n  \u5728\u5EFA\u7ACB\u65B0\u6B78\u6A94\u4E4B\u5F8C\u57F7\u884C Pack200 \u6B63\u898F\u5316\n    -e  \u70BA\u5DF2\u96A8\u9644\u65BC\u53EF\u57F7\u884C jar \u6A94\u6848\u4E2D\u7684\u7368\u7ACB\u61C9\u7528\u7A0B\u5F0F\n        \u6307\u5B9A\u61C9\u7528\u7A0B\u5F0F\u9032\u5165\u9EDE\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
--- a/src/solaris/doc/sun/man/man1/jdeps.1	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/solaris/doc/sun/man/man1/jdeps.1	Thu Dec 12 20:04:31 2013 -0800
@@ -62,7 +62,7 @@
 \fIoptions\fR
 Command-line options\&. See Options\&.
 .TP     
-\fIclass\fR\fIes\fR
+\fIclasses\fR
 Name of the classes to analyze\&. You can specify a class that can be found in the class path, by its file name, a directory, or a JAR file\&.
 .SH DESCRIPTION    
 The \fI\fR\f3jdeps\fR command shows the package-level or class-level dependencies of Java class files\&. The input class can be a path name to a \f3\&.class\fR file, a directory, a JAR file, or it can be a fully qualified class name to analyze all class files\&. The options determine the output\&. By default, \f3jdeps\fR outputs the dependencies to the system output\&. It can generate the dependencies in DOT language (see the \f3-dotoutput\fR option)\&.
@@ -106,6 +106,12 @@
 .br
 Restricts analysis to classes matching pattern\&. This option filters the list of classes to be analyzed\&. It can be used together with \f3-p\fR and \f3-e\fR which apply pattern to the dependencies\&.
 .TP
+-jdkinternals
+.br
+Finds class-level dependences in JDK internal APIs\&. By default, it analyzes all classes specified in the \f3-classpath\fR option and in input files unless you specified the \f3-include\fR option\&. You cannot use this option with the \f3-p\fR, \f3-e\fR, and \f3-s\fR options\&.
+
+\fIWarning\fR: JDK internal APIs may not be accessible in upcoming releases\&.
+.TP
 -P, -profile
 .br
 Shows profile or the file containing a package\&.
--- a/src/windows/classes/sun/awt/windows/WPathGraphics.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/src/windows/classes/sun/awt/windows/WPathGraphics.java	Thu Dec 12 20:04:31 2013 -0800
@@ -570,6 +570,10 @@
             return false;
         }
 
+        if (gv.getNumGlyphs() == 0) {
+            return true; // nothing to do.
+        }
+
         AffineTransform deviceTransform = getTransform();
         AffineTransform fontTransform = new AffineTransform(deviceTransform);
         Font font = gv.getFont();
@@ -599,6 +603,10 @@
          * device space.
          */
         Point2D.Float userpos = new Point2D.Float(x, y);
+        /* Add the position of the first glyph - its not always 0,0 */
+        Point2D g0pos = gv.getGlyphPosition(0);
+        userpos.x += (float)g0pos.getX();
+        userpos.y += (float)g0pos.getY();
         Point2D.Float devpos = new Point2D.Float();
 
         /* Already have the translate from the deviceTransform,
--- a/test/ProblemList.txt	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/ProblemList.txt	Thu Dec 12 20:04:31 2013 -0800
@@ -120,9 +120,6 @@
 
 # jdk_lang
 
-# 7067973
-java/lang/management/MemoryMXBean/CollectionUsageThreshold.java generic-all
-
 # 8029415
 java/lang/reflect/Method/invoke/TestPrivateInterfaceMethodReflect.java generic-all
 
@@ -208,9 +205,6 @@
 # 7146541
 java/rmi/transport/rapidExportUnexport/RapidExportUnexport.java	linux-all
 
-# 7190106
-java/rmi/reliability/benchmark/runRmiBench.sh                   generic-all
-
 # 7191877
 java/rmi/transport/checkLeaseInfoLeak/CheckLeaseLeak.java       generic-all
 
@@ -269,9 +263,6 @@
 
 # jdk_tools
 
-# 6461635
-com/sun/tools/attach/BasicTests.sh                              generic-all
-
 # 7132203
 sun/jvmstat/monitor/MonitoredVm/CR6672135.java                  generic-all
 
@@ -299,9 +290,6 @@
 
 # jdk_util
 
-# Filed 6933803
-java/util/concurrent/ThreadPoolExecutor/CoreThreadTimeOut.java  generic-all
-
 # Filed 6772009
 java/util/concurrent/locks/ReentrantLock/CancelledLockLoops.java generic-all
 
--- a/test/com/sun/jmx/snmp/NoInfoLeakTest.java	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +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
- * @bug 8026028
- * @summary Tests no leak of internal info
- * @author Shanliang JIANG
- * @run clean NoInfoLeakTest
- * @run build NoInfoLeakTest
- * @run main NoInfoLeakTest
- */
-
-import com.sun.jmx.snmp.SnmpString;
-import com.sun.jmx.snmp.agent.SnmpMib;
-import com.sun.jmx.snmp.agent.SnmpMibTable;
-import com.sun.jmx.snmp.daemon.CommunicatorServer;
-import com.sun.jmx.snmp.daemon.SnmpAdaptorServer;
-import javax.management.MBeanNotificationInfo;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
-
-public class NoInfoLeakTest {
-    public static void main(String[] args) throws Exception {
-        boolean ok = true;
-        ok &= snmpStringTest();
-        ok &= snmpMibTest();
-        ok &= communicatorServerTest();
-
-        if (!ok) {
-            throw new RuntimeException("Some tests are failed!");
-        }
-    }
-
-    private static boolean snmpStringTest() {
-        System.out.println("\n---NoInfoLeakTest-snmpStringTest: testing the method byteValue()...");
-        boolean passed = true;
-
-        byte[] mine = new byte[]{1,1,1,};
-        SnmpString ss = new SnmpString(mine);
-        byte[] got = ss.byteValue();
-        got[0]=0;
-
-        if (ss.byteValue()[0] == 0) {
-            System.err.println("Failed: SnmpString.byteValue() returns an internal mutable object value");
-            passed = false;
-        } else {
-            System.out.println("---NoInfoLeakTest-snmpStringTest done.");
-        }
-        return passed;
-    }
-
-    private static boolean snmpMibTest() {
-        boolean passed = true;
-        System.out.println("\n---NoInfoLeakTest-snmpMibTest: testing the method "
-                + "SnmpMib.getRootOid()...");
-        SnmpMib mib = new MySnmpMib();
-
-        if (mib.getRootOid() == mib.getRootOid()) {
-            System.err.println("Failed: SnmpMib.getRootOid() returns an internal"
-                    + " mutable object value "+mib.getRootOid());
-        } else {
-            System.out.println("---NoInfoLeakTest-snmpMibTest done.");
-        }
-        return passed;
-    }
-
-    private static boolean communicatorServerTest() {
-        boolean passed = true;
-        System.out.println("\n---NoInfoLeakTest-communicatorServerTest: testing the method CommunicatorServer.getNotificationInfo()...");
-        CommunicatorServer server = new SnmpAdaptorServer();
-        MBeanNotificationInfo[] notifs = server.getNotificationInfo();
-
-        assert notifs.length > 0 && notifs[0] != null; // the current implementation ensures this
-        notifs[0] = null;
-        if (server.getNotificationInfo()[0] == null) {
-            System.err.println("Failed: CommunicatorServer.getNotificationInfo()"
-                    + " returns an internal mutable object value");
-            passed = false;
-        } else {
-            System.out.println("---NoInfoLeakTest-communicatorServerTest done.");
-        }
-        return passed;
-    }
-
-    private static class MySnmpMib extends SnmpMib {
-        @Override
-        public void registerTableMeta(String name, SnmpMibTable table) {
-            throw new UnsupportedOperationException("Not supported yet.");
-        }
-
-        @Override
-        public SnmpMibTable getRegisteredTableMeta(String name) {
-            throw new UnsupportedOperationException("Not supported yet.");
-        }
-
-        @Override
-        public void init() throws IllegalAccessException {
-            throw new UnsupportedOperationException("Not supported yet.");
-        }
-
-        @Override
-        public ObjectName preRegister(MBeanServer server, ObjectName name) throws Exception {
-            throw new UnsupportedOperationException("Not supported yet.");
-        }
-    }
-}
--- a/test/com/sun/management/GarbageCollectorMXBean/LastGCInfo.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/com/sun/management/GarbageCollectorMXBean/LastGCInfo.java	Thu Dec 12 20:04:31 2013 -0800
@@ -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
@@ -27,8 +27,11 @@
  * @summary Sanity Test for GarbageCollectorMXBean.getLastGcInfo().
  * @author  Mandy Chung
  *
- * @run main LastGCInfo
+ * @run main/othervm -XX:-ExplicitGCInvokesConcurrent LastGCInfo
  */
+// Passing "-XX:-ExplicitGCInvokesConcurrent" to force System.gc()
+// run on foreground when CMS is used and prevent situations when "GcInfo"
+// is missing even though System.gc() was successfuly processed.
 
 import java.lang.management.ManagementFactory;
 import java.lang.management.MemoryUsage;
--- a/test/com/sun/tools/attach/AgentSetup.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute 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.
-#
-
-
-#
-#
-# Agent set - creates Agent.jar, BadAgent.jar and RedefineAgent.jar in ${TESTCLASSES}
- 
-$JAVAC -d "${TESTCLASSES}" "${TESTSRC}"/Agent.java "${TESTSRC}"/BadAgent.java "${TESTSRC}"/RedefineAgent.java
-
-$JAR -cfm "${TESTCLASSES}"/Agent.jar "${TESTSRC}"/agent.mf \
-  -C "${TESTCLASSES}" Agent.class
-
-$JAR -cfm "${TESTCLASSES}"/BadAgent.jar "${TESTSRC}"/badagent.mf \
-  -C "${TESTCLASSES}" BadAgent.class
-
-$JAR -cfm "${TESTCLASSES}"/RedefineAgent.jar "${TESTSRC}"/redefineagent.mf \
-  -C "${TESTCLASSES}" RedefineAgent.class
-
-agent="${TESTCLASSES}${FS}Agent.jar"
-badagent="${TESTCLASSES}${FS}BadAgent.jar"
-redefineagent="${TESTCLASSES}${FS}RedefineAgent.jar"
-
--- a/test/com/sun/tools/attach/Application.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/com/sun/tools/attach/Application.java	Thu Dec 12 20:04:31 2013 -0800
@@ -22,25 +22,39 @@
  */
 
 /*
- *
- *
  * A simple "Application" used by the Attach API unit tests. This application is
  * launched by the test. It binds to a random port and shuts down when somebody
  * connects to that port.
+ * Used port and pid are written both to stdout and to a specified file.
  */
 import java.net.Socket;
 import java.net.ServerSocket;
+import java.io.PrintWriter;
+import jdk.testlibrary.ProcessTools;
 
 public class Application {
     public static void main(String args[]) throws Exception {
         // bind to a random port
+        if (args.length < 1) {
+            System.err.println("First argument should be path to output file.");
+        }
+        String outFileName = args[0];
+
         ServerSocket ss = new ServerSocket(0);
         int port = ss.getLocalPort();
+        int pid = ProcessTools.getProcessId();
 
-        // signal test that we are started - do not remove this line!!
-        System.out.println(port);
+        System.out.println("shutdownPort=" + port);
+        System.out.println("pid=" + pid);
         System.out.flush();
 
+        try (PrintWriter writer = new PrintWriter(outFileName)) {
+            writer.println("shutdownPort=" + port);
+            writer.println("pid=" + pid);
+            writer.println("done");
+            writer.flush();
+        }
+
         // wait for test harness to connect
         Socket s = ss.accept();
         s.close();
--- a/test/com/sun/tools/attach/ApplicationSetup.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 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.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-
-#
-#
-# Application Setup - creates ${TESTCLASSES}/Application.jar and the following
-# procedures:
-#	startApplication - starts target application
-#	stopApplication $1 - stops application via TCP shutdown port $1
-
-$JAVAC -d "${TESTCLASSES}" "${TESTSRC}"/Application.java "${TESTSRC}"/Shutdown.java
-$JAR -cfm "${TESTCLASSES}"/Application.jar "${TESTSRC}"/application.mf \
-  -C "${TESTCLASSES}" Application.class
-
-OUTPUTFILE=${TESTCLASSES}/Application.out
-rm -f ${OUTPUTFILE}
-
-startApplication() 
-{
-  # put all output from the app into ${OUTPUTFILE}
-  ${JAVA} ${TESTVMOPTS} $1 $2 $3 -jar "${TESTCLASSES}"/Application.jar > ${OUTPUTFILE} 2>&1 &
-  pid="$!"
-
-  # MKS creates an intermediate shell to launch ${JAVA} so
-  # ${pid} is not the actual pid. We have put in a small sleep
-  # to give the intermediate shell process time to launch the
-  # "java" process.
-  if [ "$OS" = "Windows" ]; then
-    sleep 2
-    if [ "${isCygwin}" = "true" ] ; then
-      realpid=`ps -p ${pid} | tail -1 | awk '{print $4;}'`
-    else
-      realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6`
-    fi
-    pid=${realpid}
-  fi
-                                                                                                                  
-  echo "Waiting for Application to initialize..."
-  attempts=0
-  while true; do
-    sleep 1
-    port=`tail -1 ${OUTPUTFILE} | sed -e 's@\\r@@g' `
-    if [ ! -z "$port" ]; then
-      # In case of errors wait time for output to be flushed
-      sleep 1
-      cat ${OUTPUTFILE}
-      break
-    fi
-    attempts=`expr $attempts + 1`
-    echo "Waiting $attempts second(s) ..."
-  done
-  echo "Application is process $pid, shutdown port is $port"
-  return $port
-}
-
-stopApplication() 
-{
-  $JAVA ${TESTVMOPTS} -classpath "${TESTCLASSES}" Shutdown $1
-}
-
--- a/test/com/sun/tools/attach/BasicTests.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/com/sun/tools/attach/BasicTests.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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,160 +21,257 @@
  * questions.
  */
 
-/*
- *
- *
- * Unit test for Attach API. Attaches to the given VM and performs a number
- * unit tests.
- */
 import com.sun.tools.attach.*;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.io.IOException;
 import java.util.Properties;
 import java.util.List;
+import java.io.File;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.ProcessThread;
 
+/*
+ * @test
+ * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
+ * @summary Basic unit tests for the VM attach mechanism.
+ * @library /lib/testlibrary
+ * @run build Agent BadAgent RedefineAgent Application Shutdown RedefineDummy
+ * @run main BasicTests
+ *
+ * This test will perform a number of basic attach tests.
+ */
 public class BasicTests {
-    public static void main(String args[]) throws Exception {
-        String pid = args[0];
-        String agent = args[1];
-        String badagent = args[2];
-        String redefineagent = args[3];
 
-        System.out.println(" - Attaching to application ...");
-        VirtualMachine vm = VirtualMachine.attach(pid);
+    /*
+     * The actual test is in the nested class TestMain.
+     * The responsibility of this class is to:
+     * 1. Build all needed jars.
+     * 2. Start the Application class in a separate process.
+     * 3. Find the pid and shutdown port of the running Application.
+     * 4. Launches the tests in nested class TestMain that will attach to the Application.
+     * 5. Shut down the Application.
+     */
+    public static void main(String args[]) throws Throwable {
+        final String pidFile = "TestsBasic.Application.pid";
+        ProcessThread processThread = null;
+        RunnerUtil.ProcessInfo info = null;
+        try {
+            buildJars();
+            processThread = RunnerUtil.startApplication(pidFile);
+            info = RunnerUtil.readProcessInfo(pidFile);
+            runTests(info.pid);
+        } catch (Throwable t) {
+            System.out.println("TestBasic got unexpected exception: " + t);
+            t.printStackTrace();
+            throw t;
+        } finally {
+            // Make sure the Application process is stopped.
+            RunnerUtil.stopApplication(info.shutdownPort, processThread);
+        }
+    }
 
-        // Test 1 - read the system properties from the target VM and
-        // check that property is set
-        System.out.println(" - Test: system properties in target VM");
-        Properties props = vm.getSystemProperties();
-        String value = props.getProperty("attach.test");
-        if (value == null || !value.equals("true")) {
-            throw new RuntimeException("attach.test property not set");
-        }
-        System.out.println(" - attach.test property set as expected");
+    /**
+     * Runs the actual tests in nested class TestMain.
+     * The reason for running the tests in a separate process
+     * is that we need to modify the class path.
+     */
+    private static void runTests(int pid) throws Throwable {
+        final String sep = File.separator;
 
-        // Test 1a - read the agent properties from the target VM.
-        // By default, the agent property contains "sun.java.command",
-        // "sun.jvm.flags", and "sun.jvm.args".
-        // Just sanity check - make sure not empty.
-        System.out.println(" - Test: agent properties in target VM");
-        props = vm.getAgentProperties();
-        if (props == null || props.size() == 0) {
-            throw new RuntimeException("Agent properties is empty");
-        }
-        System.out.println(" - agent properties non-empty as expected");
+        // Need to add jdk/lib/tools.jar to classpath.
+        String classpath =
+            System.getProperty("test.class.path", "") + File.pathSeparator +
+            System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar";
+        String testClassDir = System.getProperty("test.classes", "") + sep;
+
+        // Argumenta : -classpath cp BasicTests$TestMain pid agent badagent redefineagent
+        String[] args = {
+            "-classpath",
+            classpath,
+            "BasicTests$TestMain",
+            Integer.toString(pid),
+            testClassDir + "Agent.jar",
+            testClassDir + "BadAgent.jar",
+            testClassDir + "RedefineAgent.jar" };
+        OutputAnalyzer output = ProcessTools.executeTestJvm(args);
+        output.shouldHaveExitValue(0);
+    }
 
-        // Test 2 - attempt to load an agent that does not exist
-        System.out.println(" - Test: Load an agent that does not exist");
-        try {
-            vm.loadAgent("SilverBullet.jar");
-        } catch (AgentLoadException x) {
-            System.out.println(" - AgentLoadException thrown as expected!");
+    /**
+     * Will build all jars needed by the tests.
+     */
+    private static void buildJars() throws Throwable {
+        String[] jars = {"Agent", "BadAgent", "RedefineAgent", "Application" };
+        for (String jar : jars) {
+            buildJar(jar);
         }
+    }
 
-        // Test 3 - load an "bad" agent (agentmain throws an exception)
-        System.out.println(" - Test: Load a bad agent");
-        System.out.println("INFO: This test will cause error messages "
-            + "to appear in the application log about SilverBullet.jar "
-            + "not being found and an agent failing to start.");
-        try {
-            vm.loadAgent(badagent);
-            throw new RuntimeException(
-                "AgentInitializationException not thrown as expected!");
-        } catch (AgentInitializationException x) {
-            System.out.println(
-                " - AgentInitializationException thrown as expected!");
-        }
+    /**
+     * Will build a jar with the given name.
+     * Class file and manifest must already exist.
+     * @param jarName Name of the jar.
+     */
+    private static void buildJar(String jarName) throws Throwable {
+        String testClasses = System.getProperty("test.classes", "?");
+        String testSrc = System.getProperty("test.src", "?");
+        String jar = String.format("%s/%s.jar", testClasses, jarName);
+        String manifest = String.format("%s/%s.mf", testSrc, jarName.toLowerCase());
+        String clazz = String.format("%s.class", jarName);
+
+        // Arguments to the jar command has this format:
+        // "-cfm TESTCLASSES/Agent.jar TESTSRC/agent.mf -C TESTCLASSES Agent.class"
+        RunnerUtil.createJar("-cfm", jar, manifest, "-C", testClasses, clazz);
+    }
+
+    /**
+     * This is the actual test. It will attach to the running Application
+     * and perform a number of basic attach tests.
+     */
+    public static class TestMain {
+        public static void main(String args[]) throws Exception {
+            String pid = args[0];
+            String agent = args[1];
+            String badagent = args[2];
+            String redefineagent = args[3];
 
-        // Test 4 - detach from the VM and attempt a load (should throw IOE)
-        System.out.println(" - Test: Detach from VM");
-        System.out.println("INFO: This test will cause error messages "
-            + "to appear in the application log about a BadAgent including "
-            + "a RuntimeException and an InvocationTargetException.");
-        vm.detach();
-        try {
-            vm.loadAgent(agent);
-            throw new RuntimeException("loadAgent did not throw an exception!!");
-        } catch (IOException ioe) {
-            System.out.println(" - IOException as expected");
-        }
+            System.out.println(" - Attaching to application ...");
+            VirtualMachine vm = VirtualMachine.attach(pid);
+
+            // Test 1 - read the system properties from the target VM and
+            // check that property is set
+            System.out.println(" - Test: system properties in target VM");
+            Properties props = vm.getSystemProperties();
+            String value = props.getProperty("attach.test");
+            if (value == null || !value.equals("true")) {
+                throw new RuntimeException("attach.test property not set");
+            }
+            System.out.println(" - attach.test property set as expected");
 
-        // Test 5 - functional "end-to-end" test.
-        // Create a listener socket. Load Agent.jar into the target VM passing
-        // it the port number of our listener. When agent loads it should connect
-        // back to the tool.
-
-        System.out.println(" - Re-attaching to application ...");
-        vm = VirtualMachine.attach(pid);
+            // Test 1a - read the agent properties from the target VM.
+            // By default, the agent property contains "sun.java.command",
+            // "sun.jvm.flags", and "sun.jvm.args".
+            // Just sanity check - make sure not empty.
+            System.out.println(" - Test: agent properties in target VM");
+            props = vm.getAgentProperties();
+            if (props == null || props.size() == 0) {
+                throw new RuntimeException("Agent properties is empty");
+            }
+            System.out.println(" - agent properties non-empty as expected");
 
-        System.out.println(" - Test: End-to-end connection with agent");
+            // Test 2 - attempt to load an agent that does not exist
+            System.out.println(" - Test: Load an agent that does not exist");
+            try {
+                vm.loadAgent("SilverBullet.jar");
+            } catch (AgentLoadException x) {
+                System.out.println(" - AgentLoadException thrown as expected!");
+            }
 
-        ServerSocket ss = new ServerSocket(0);
-        int port = ss.getLocalPort();
-
-        System.out.println(" - Loading Agent.jar into target VM ...");
-        vm.loadAgent(agent, Integer.toString(port));
+            // Test 3 - load an "bad" agent (agentmain throws an exception)
+            System.out.println(" - Test: Load a bad agent");
+            System.out.println("INFO: This test will cause error messages "
+                + "to appear in the application log about SilverBullet.jar "
+                + "not being found and an agent failing to start.");
+            try {
+                vm.loadAgent(badagent);
+                throw new RuntimeException(
+                    "AgentInitializationException not thrown as expected!");
+            } catch (AgentInitializationException x) {
+                System.out.println(
+                    " - AgentInitializationException thrown as expected!");
+            }
 
-        System.out.println(" - Waiting for agent to connect back to tool ...");
-        Socket s = ss.accept();
-        System.out.println(" - Connected to agent.");
-
-        // Test 5b - functional "end-to-end" test.
-        // Now with an agent that does redefine.
+            // Test 4 - detach from the VM and attempt a load (should throw IOE)
+            System.out.println(" - Test: Detach from VM");
+            System.out.println("INFO: This test will cause error messages "
+                + "to appear in the application log about a BadAgent including "
+                + "a RuntimeException and an InvocationTargetException.");
+            vm.detach();
+            try {
+                vm.loadAgent(agent);
+                throw new RuntimeException("loadAgent did not throw an exception!!");
+            } catch (IOException ioe) {
+                System.out.println(" - IOException as expected");
+            }
 
-        System.out.println(" - Re-attaching to application ...");
-        vm = VirtualMachine.attach(pid);
+            // Test 5 - functional "end-to-end" test.
+            // Create a listener socket. Load Agent.jar into the target VM passing
+            // it the port number of our listener. When agent loads it should connect
+            // back to the tool.
+
+            System.out.println(" - Re-attaching to application ...");
+            vm = VirtualMachine.attach(pid);
+
+            System.out.println(" - Test: End-to-end connection with agent");
 
-        System.out.println(" - Test: End-to-end connection with RedefineAgent");
+            ServerSocket ss = new ServerSocket(0);
+            int port = ss.getLocalPort();
 
-        ServerSocket ss2 = new ServerSocket(0);
-        int port2 = ss2.getLocalPort();
+            System.out.println(" - Loading Agent.jar into target VM ...");
+            vm.loadAgent(agent, Integer.toString(port));
+
+            System.out.println(" - Waiting for agent to connect back to tool ...");
+            Socket s = ss.accept();
+            System.out.println(" - Connected to agent.");
 
-        System.out.println(" - Loading RedefineAgent.jar into target VM ...");
-        vm.loadAgent(redefineagent, Integer.toString(port2));
+            // Test 5b - functional "end-to-end" test.
+            // Now with an agent that does redefine.
+
+            System.out.println(" - Re-attaching to application ...");
+            vm = VirtualMachine.attach(pid);
 
-        System.out.println(" - Waiting for RedefineAgent to connect back to tool ...");
-        Socket s2 = ss2.accept();
-        System.out.println(" - Connected to RedefineAgent.");
+            System.out.println(" - Test: End-to-end connection with RedefineAgent");
+
+            ServerSocket ss2 = new ServerSocket(0);
+            int port2 = ss2.getLocalPort();
+
+            System.out.println(" - Loading RedefineAgent.jar into target VM ...");
+            vm.loadAgent(redefineagent, Integer.toString(port2));
 
-        // Test 6 - list method should list the target VM
-        System.out.println(" - Test: VirtualMachine.list");
-        List<VirtualMachineDescriptor> l = VirtualMachine.list();
-        if (!l.isEmpty()) {
-            boolean found = false;
-            for (VirtualMachineDescriptor vmd: l) {
-                if (vmd.id().equals(pid)) {
-                    found = true;
-                    break;
+            System.out.println(" - Waiting for RedefineAgent to connect back to tool ...");
+            Socket s2 = ss2.accept();
+            System.out.println(" - Connected to RedefineAgent.");
+
+            // Test 6 - list method should list the target VM
+            System.out.println(" - Test: VirtualMachine.list");
+            List<VirtualMachineDescriptor> l = VirtualMachine.list();
+            if (!l.isEmpty()) {
+                boolean found = false;
+                for (VirtualMachineDescriptor vmd: l) {
+                    if (vmd.id().equals(pid)) {
+                        found = true;
+                        break;
+                    }
+                }
+                if (found) {
+                    System.out.println(" - " + pid + " found.");
+                } else {
+                    throw new RuntimeException(pid + " not found in VM list");
                 }
             }
-            if (found) {
-                System.out.println(" - " + pid + " found.");
-            } else {
-                throw new RuntimeException(pid + " not found in VM list");
-            }
-        }
 
-        // test 7 - basic hashCode/equals tests
-        System.out.println(" - Test: hashCode/equals");
+            // test 7 - basic hashCode/equals tests
+            System.out.println(" - Test: hashCode/equals");
 
-        VirtualMachine vm1 = VirtualMachine.attach(pid);
-        VirtualMachine vm2 = VirtualMachine.attach(pid);
-        if (!vm1.equals(vm2)) {
-            throw new RuntimeException("virtual machines are not equal");
-        }
-        if (vm.hashCode() != vm.hashCode()) {
-            throw new RuntimeException("virtual machine hashCodes not equal");
+            VirtualMachine vm1 = VirtualMachine.attach(pid);
+            VirtualMachine vm2 = VirtualMachine.attach(pid);
+            if (!vm1.equals(vm2)) {
+                throw new RuntimeException("virtual machines are not equal");
+            }
+            if (vm.hashCode() != vm.hashCode()) {
+                throw new RuntimeException("virtual machine hashCodes not equal");
+            }
+            System.out.println(" - hashCode/equals okay");
+
+            // ---
+            System.out.println(" - Cleaning up...");
+            s.close();
+            ss.close();
+            s2.close();
+            ss2.close();
         }
-        System.out.println(" - hashCode/equals okay");
-
-
-        // ---
-        System.out.println(" - Cleaning up...");
-        s.close();
-        ss.close();
-        s2.close();
-        ss2.close();
     }
 }
--- a/test/com/sun/tools/attach/BasicTests.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 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.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please 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 6173612 6273707 6277253 6335921 6348630 6342019 6381757
-# @summary Basic unit tests for the VM attach mechanism.
-#
-# @build BasicTests
-# @run shell BasicTests.sh
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-# Windows 2000 is a problem here, so we skip it, see 6962615
-osrev=`uname -a`
-if [ "`echo ${osrev} | grep 'CYGWIN[^ ]*-5\.0'`" != "" ] ; then
-  echo "Treating as a pass, not testing Windows 2000"
-  exit 0
-fi
-if [ "`echo ${osrev} | grep 'Windows'`" != "" ] ; then
-  if [ "`echo ${osrev} | grep '5 00'`" != "" ] ; then
-     echo "Treating as a pass, not testing Windows 2000"
-     exit 0
-  fi
-fi
-
-. ${TESTSRC}/CommonSetup.sh
-. ${TESTSRC}/ApplicationSetup.sh
-. ${TESTSRC}/AgentSetup.sh
-
-startApplication -Dattach.test=true
-# pid = process-id, port = shutdown port
-
-failures=0
-
-echo "Running tests ..."
-
-$JAVA ${TESTVMOPTS} -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
-  BasicTests $pid $agent $badagent $redefineagent 2>&1
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-
-stopApplication $port
-
-# Add these info messages to $OUTPUTFILE just in case someone
-# looks at it and wonders about the failures. We have to do
-# this after the application is stopped because it is writing
-# to $OUTPUTFILE.
-(
-echo ""
-echo "INFO: Test 2 will cause error messages about SilverBullet.jar" \
-    "and an agent failing to start."
-echo "INFO: Test 3 will cause error messages about BadAgent" \
-    "including a RuntimeException and an InvocationTargetException."
-) >> ${OUTPUTFILE}
-
-if [ $failures = 0 ]; 
-  then echo "All tests passed.";
-  else echo "$failures test(s) failed:"; cat ${OUTPUTFILE};
-fi
-exit $failures
--- a/test/com/sun/tools/attach/CommonSetup.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 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.
-#
-
-
-#
-#
-# Common setup for the Attach API unit tests. Setups up the following variables:
-#
-# PS - path sep.
-# FS - file sep.
-# JAVA - java cmd.
-# JAVAC - javac cmd.
-# JAR - jar cmd.
-
-OS=`uname -s`
-case "$OS" in
-  SunOS | Linux | Darwin )
-    PS=":"
-    FS="/"
-    ;;
-  Windows* )
-    PS=";"
-    OS="Windows"
-    FS="\\"
-    ;;
-  CYGWIN* )
-    PS=";"
-    OS="Windows"
-    FS="\\"
-    isCygwin=true
-    ;;
-  * )
-    echo "Unrecognized system!"
-    exit 1;
-    ;;
-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
-
-JAVA="${TESTJAVA}/bin/java"
-JAVAC="${TESTJAVA}/bin/javac"
-JAR="${TESTJAVA}/bin/jar"
-
--- a/test/com/sun/tools/attach/PermissionTest.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/com/sun/tools/attach/PermissionTest.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 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
@@ -21,39 +21,119 @@
  * questions.
  */
 
-/*
- *
- *
- * Unit test for Attach API - this checks that a SecurityException is thrown as
- * expected.
- */
 import com.sun.tools.attach.VirtualMachine;
 import com.sun.tools.attach.AttachNotSupportedException;
 import java.util.Properties;
+import java.io.File;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.ProcessThread;
 
+/*
+ * @test
+ * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
+ * @summary Basic unit tests for the VM attach mechanism.
+ * @library /lib/testlibrary
+ * @run build Application Shutdown
+ * @run main PermissionTest
+ *
+ * Unit test for Attach API -
+ * this checks that a SecurityException is thrown as expected.
+ */
 public class PermissionTest {
-    public static void main(String args[]) throws Exception {
-        SecurityManager sm = System.getSecurityManager();
-        if (sm == null) {
-            throw new RuntimeException("Test configuration error - no security manager set");
-        }
 
-        String pid = args[0];
-        boolean shouldFail = Boolean.parseBoolean(args[1]);
-
+    /*
+     * The actual test is in the nested class TestMain.
+     * The responsibility of this class is to:
+     * 1. Start the Application class in a separate process.
+     * 2. Find the pid and shutdown port of the running Application.
+     * 3. Run the tests in TstMain that will attach to the Application.
+     * 4. Shut down the Application.
+     */
+    public static void main(String args[]) throws Throwable {
+        final String pidFile ="TestPermission.Application.pid";
+        ProcessThread processThread = null;
+        RunnerUtil.ProcessInfo info = null;
         try {
-            VirtualMachine.attach(pid).detach();
-            if (shouldFail) {
-                throw new RuntimeException("SecurityException should be thrown");
+            processThread = RunnerUtil.startApplication(pidFile);
+            info = RunnerUtil.readProcessInfo(pidFile);
+            runTests(info.pid);
+        } catch (Throwable t) {
+            System.out.println("TestPermission got unexpected exception: " + t);
+            t.printStackTrace();
+            throw t;
+        } finally {
+            // Make sure the Application process is stopped.
+            RunnerUtil.stopApplication(info.shutdownPort, processThread);
+        }
+    }
+
+    /**
+     * Runs the actual test the nested class TestMain.
+     * The test is run in a separate process because we need to add to the classpath.
+     */
+    private static void runTests(int pid) throws Throwable {
+        final String sep = File.separator;
+
+        // Need to add jdk/lib/tools.jar to classpath.
+        String classpath =
+            System.getProperty("test.class.path", "") + File.pathSeparator +
+            System.getProperty("test.jdk", ".") + sep + "lib" + sep + "tools.jar";
+        String testSrc = System.getProperty("test.src", "") + sep;
+
+        // Use a policy that will NOT allow attach. Test will verify exception.
+        String[] args = {
+            "-classpath",
+            classpath,
+            "-Djava.security.manager",
+            String.format("-Djava.security.policy=%sjava.policy.deny", testSrc),
+            "PermissionTest$TestMain",
+            Integer.toString(pid),
+            "true" };
+        OutputAnalyzer output = ProcessTools.executeTestJvm(args);
+        output.shouldHaveExitValue(0);
+
+        // Use a policy that will allow attach.
+        args = new String[] {
+            "-classpath",
+            classpath,
+            "-Djava.security.manager",
+            String.format("-Djava.security.policy=%sjava.policy.allow", testSrc),
+            "PermissionTest$TestMain",
+            Integer.toString(pid),
+            "false" };
+        output = ProcessTools.executeTestJvm(args);
+        output.shouldHaveExitValue(0);
+    }
+
+    /**
+     * This is the actual test code. It will attach to the Application and verify
+     * that we get a SecurityException when that is expected.
+     */
+    public static class TestMain {
+        public static void main(String args[]) throws Exception {
+            SecurityManager sm = System.getSecurityManager();
+            if (sm == null) {
+                throw new RuntimeException("Test configuration error - no security manager set");
             }
-            System.out.println(" - attached to target VM as expected.");
-        } catch (Exception x) {
-            // AttachNotSupportedException thrown when no providers can be loaded
-            if (shouldFail && ((x instanceof AttachNotSupportedException) ||
-                (x instanceof SecurityException))) {
-                System.out.println(" - exception thrown as expected.");
-            } else {
-                throw x;
+
+            String pid = args[0];
+            boolean shouldFail = Boolean.parseBoolean(args[1]);
+
+            try {
+                VirtualMachine.attach(pid).detach();
+                if (shouldFail) {
+                    throw new RuntimeException("SecurityException should be thrown");
+                }
+                System.out.println(" - attached to target VM as expected.");
+            } catch (Exception x) {
+                // AttachNotSupportedException thrown when no providers can be loaded
+                if (shouldFail && ((x instanceof AttachNotSupportedException) ||
+                    (x instanceof SecurityException))) {
+                    System.out.println(" - exception thrown as expected.");
+                } else {
+                    throw x;
+                }
             }
         }
     }
--- a/test/com/sun/tools/attach/PermissionTests.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,72 +0,0 @@
-#!/bin/sh
-
-#
-# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute 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 6173612
-# @summary Security manager and permission tests for Attach API
-#
-# @build PermissionTest 
-# @run shell PermissionTests.sh
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-. ${TESTSRC}/CommonSetup.sh
-. ${TESTSRC}/ApplicationSetup.sh
-
-failures=0
-
-# Start target VM
-startApplication
-# pid = process-id, port = shutdown port
-
-echo "Deny test"
-# deny 
-$JAVA ${TESTVMOPTS} -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
-    -Djava.security.manager \
-    -Djava.security.policy=${TESTSRC}/java.policy.deny \
-    PermissionTest $pid true 2>&1
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-
-# allow
-echo "Allow test"
-$JAVA ${TESTVMOPTS} -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
-    -Djava.security.manager \
-    -Djava.security.policy=${TESTSRC}/java.policy.allow \
-    PermissionTest $pid false 2>&1 
-if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
-
-# Stop target VM
-stopApplication $port
-
-if [ $failures = 0 ]; 
-  then echo "All tests passed.";
-  else echo "$failures test(s) failed:"; cat ${OUTPUTFILE};
-fi
-exit $failures
--- a/test/com/sun/tools/attach/ProviderTest.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/com/sun/tools/attach/ProviderTest.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 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
@@ -21,24 +21,98 @@
  * questions.
  */
 
-/*
- *
- *
- * Unit test for Attach API. Attaches to the given VM and performs a number
- * unit tests.
- */
+import java.io.File;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.ProcessTools;
 import com.sun.tools.attach.VirtualMachine;
 import com.sun.tools.attach.spi.AttachProvider;
 
+/*
+ * @test
+ * @bug 6173612 6273707 6277253 6335921 6348630 6342019 6381757
+ * @summary Basic unit tests for the VM attach mechanism.
+ * @library /lib/testlibrary
+ * @run build SimpleProvider
+ * @run main ProviderTest
+ *
+ * The test will attach and detach to/from the running Application.
+ */
 public class ProviderTest {
-    public static void main(String args[]) throws Exception {
-        // deal with internal builds where classes are loaded from the
-        // 'classes' directory rather than rt.jar
-        ClassLoader cl = AttachProvider.class.getClassLoader();
-        if (cl != ClassLoader.getSystemClassLoader()) {
-            System.out.println("Attach API not loaded by system class loader - test skipped");
-            return;
+
+    /*
+     * The actual tests are in the nested class TestMain below.
+     * The responsibility of this class is to:
+     * 1. Build the needed jar.
+     * 2. Run tests in ProviderTest.TestMain.
+     */
+    public static void main(String args[]) throws Throwable {
+        try {
+            buildJar();
+            runTests();
+        } catch (Throwable t) {
+            System.out.println("TestProvider got unexpected exception: " + t);
+            t.printStackTrace();
+            throw t;
         }
-        VirtualMachine.attach("simple:1234").detach();
+    }
+
+    /**
+     * Runs the actual tests in the nested class TestMain.
+     * We need to run the tests in a separate process,
+     * because we need to add to the classpath.
+     */
+    private static void runTests() throws Throwable {
+        final String sep = File.separator;
+        String testClassPath = System.getProperty("test.class.path", "");
+        String testClasses = System.getProperty("test.classes", "") + sep;
+        String jdkLib = System.getProperty("test.jdk", ".") + sep + "lib" + sep;
+
+        // Need to add SimpleProvider.jar and tools.jar to classpath.
+        String classpath =
+                testClassPath + File.pathSeparator +
+                testClasses + "SimpleProvider.jar" + File.pathSeparator +
+                jdkLib + "tools.jar";
+
+        String[] args = {
+                "-classpath",
+                classpath,
+                "ProviderTest$TestMain" };
+        OutputAnalyzer output = ProcessTools.executeTestJvm(args);
+        output.shouldHaveExitValue(0);
+    }
+
+    /**
+     * Will build the SimpleProvider.jar.
+     */
+    private static void buildJar() throws Throwable {
+        final String sep = File.separator;
+        String testClasses = System.getProperty("test.classes", "?") + sep;
+        String testSrc = System.getProperty("test.src", "?") + sep;
+        String serviceDir = "META-INF" + sep + "services" + sep;
+
+        RunnerUtil.createJar(
+            "-cf", testClasses + "SimpleProvider.jar",
+            "-C", testClasses, "SimpleProvider.class",
+            "-C", testClasses, "SimpleVirtualMachine.class",
+            "-C", testSrc,
+            serviceDir + "com.sun.tools.attach.spi.AttachProvider");
+    }
+
+    /**
+     * This is the actual test code that attaches to the running Application.
+     * This class is run in a separate process.
+     */
+    public static class TestMain {
+        public static void main(String args[]) throws Exception {
+            // deal with internal builds where classes are loaded from the
+            // 'classes' directory rather than rt.jar
+            ClassLoader cl = AttachProvider.class.getClassLoader();
+            if (cl != ClassLoader.getSystemClassLoader()) {
+                System.out.println("Attach API not loaded by system class loader - test skipped");
+                return;
+            }
+            VirtualMachine.attach("simple:1234").detach();
+        }
     }
 }
--- a/test/com/sun/tools/attach/ProviderTests.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-#
-# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute 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 6173612
-# @summary AttachProvider unit tests
-#
-# @build ProviderTest SimpleProvider
-# @run shell ProviderTests.sh
-
-if [ "${TESTSRC}" = "" ]
-then
-  echo "TESTSRC not set.  Test cannot execute.  Failed."
-  exit 1
-fi
-
-. ${TESTSRC}/CommonSetup.sh
-
-echo "Creating JAR file ..."
-
-$JAR -cf ${TESTCLASSES}/SimpleProvider.jar \
-    -C ${TESTCLASSES} SimpleProvider.class \
-    -C ${TESTCLASSES} SimpleVirtualMachine.class \
-    -C "${TESTSRC}" META-INF/services/com.sun.tools.attach.spi.AttachProvider
-
-echo "Running test ..."
-
-$JAVA ${TESTVMOPTS} -classpath \
-  "${TESTCLASSES}${PS}${TESTCLASSES}/SimpleProvider.jar${PS}${TESTJAVA}/lib/tools.jar" \
-  ProviderTest
-
--- a/test/com/sun/tools/attach/RedefineAgent.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/com/sun/tools/attach/RedefineAgent.java	Thu Dec 12 20:04:31 2013 -0800
@@ -43,15 +43,15 @@
 public class RedefineAgent implements ClassFileTransformer {
 
     static byte[] classfilebytes;
-    static final String targetName = "java.math.BigInteger";
-    static final String targetNameSlashes = "java/math/BigInteger";
+    static final String targetName = "RedefineDummy";
+    static final String targetNameSlashes = "RedefineDummy";
     static boolean gotRedefineTransform = false;
 
     // test transform and capture class bytes for redefine
     public byte[] transform(ClassLoader loader,
                             String className,
                             Class<?> classBeingRedefined,
-                            ProtectionDomain    protectionDomain,
+                            ProtectionDomain  protectionDomain,
                             byte[] classfileBuffer) {
         if (className.equals(targetNameSlashes)) {
             if (classBeingRedefined == null) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/tools/attach/RedefineDummy.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,31 @@
+/*
+ * 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.
+ */
+
+/*
+ * Simple dummy class used to test class retransform.
+ */
+public class RedefineDummy {
+    public String toString() {
+        return "RedefineDummy";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/com/sun/tools/attach/RunnerUtil.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,180 @@
+/*
+ * 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.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.JDKToolLauncher;
+import jdk.testlibrary.ProcessTools;
+import jdk.testlibrary.Utils;
+import jdk.testlibrary.ProcessThread;
+
+/*
+ * Utility functions for test runners.
+ * (Test runner = class that launch a test)
+ */
+public class RunnerUtil {
+    /**
+     * The Application process must be run concurrently with our tests since
+     * the tests will attach to the Application.
+     * We will run the Application process in a separate thread.
+     *
+     * The Application must be started with flag "-Xshare:off" for the Retransform
+     * test in TestBasics to pass on all platforms.
+     *
+     * The Application will write its pid and shutdownPort in the given outFile.
+     */
+    public static ProcessThread startApplication(String outFile) throws Throwable {
+        String classpath = System.getProperty("test.class.path", ".");
+        String[] args = Utils.addTestJavaOpts(
+            "-Dattach.test=true", "-classpath", classpath, "Application", outFile);
+        ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(args);
+        ProcessThread pt = new ProcessThread("runApplication", pb);
+        pt.start();
+        return pt;
+    }
+
+    /**
+     * Will stop the running Application.
+     * First tries to shutdown nicely by connecting to the shut down port.
+     * If that fails, the process will be killed hard with stopProcess().
+     *
+     * If the nice shutdown fails, then an Exception is thrown and the test should fail.
+     *
+     * @param port The shut down port.
+     * @param processThread The process to stop.
+     */
+    public static void stopApplication(int port, ProcessThread processThread) throws Throwable {
+        if (processThread == null) {
+            System.out.println("RunnerUtil.stopApplication ignored since proc is null");
+            return;
+        }
+        try {
+            System.out.println("RunnerUtil.stopApplication waiting to for shutdown");
+            OutputAnalyzer output = ProcessTools.executeTestJvm(
+                    "-classpath",
+                    System.getProperty("test.class.path", "."),
+                    "Shutdown",
+                    Integer.toString(port));
+            // Verify that both the Shutdown command and the Application finished ok.
+            output.shouldHaveExitValue(0);
+            processThread.joinAndThrow();
+            processThread.getOutput().shouldHaveExitValue(0);
+        } catch (Throwable t) {
+            System.out.println("RunnerUtil.stopApplication failed. Will kill it hard: " + t);
+            processThread.stopProcess();
+            throw t;
+        }
+    }
+
+    /**
+     * Creates a jar file.
+     * @param args Command to the jar tool.
+     */
+    public static void createJar(String... args) {
+        System.out.println("Running: jar " + Arrays.toString(args));
+        sun.tools.jar.Main jar = new sun.tools.jar.Main(System.out, System.err, "jar");
+        if (!jar.run(args)) {
+            throw new RuntimeException("jar failed: args=" + Arrays.toString(args));
+        }
+    }
+
+    /**
+     * Read process info for the running Application.
+     * The Application writes its info to a file with this format:
+     * shutdownPort=42994
+     * pid=19597
+     * done
+     *
+     * The final "done" is used to make sure the complete file has been written
+     * before we try to read it.
+     * This function will wait until the file is available.
+     *
+     * @param filename Path to file to read.
+     * @return The ProcessInfo containing pid and shutdownPort.
+     */
+    public static ProcessInfo readProcessInfo(String filename) throws Throwable {
+        System.out.println("Reading port and pid from file: " + filename);
+        File file = new File(filename);
+        String content = null;
+
+        // Read file or wait for it to be created.
+        while (true) {
+            content = readFile(file);
+            if (content != null && content.indexOf("done") >= 0) {
+                break;
+            }
+            Thread.sleep(100);
+        }
+
+        ProcessInfo info = new ProcessInfo();
+        // search for a line with format: key=nnn
+        Pattern pattern = Pattern.compile("(\\w*)=([0-9]+)\\r?\\n");
+        Matcher matcher = pattern.matcher(content);
+        while (matcher.find()) {
+            String key = matcher.group(1);
+            int value  = Integer.parseInt(matcher.group(2));
+            if ("pid".equals(key)) {
+                info.pid = value;
+            } else if ("shutdownPort".equals(key)) {
+                info.shutdownPort = value;
+            }
+        }
+        System.out.println("processInfo.pid:" + info.pid);
+        System.out.println("processInfo.shutdownPort:" + info.shutdownPort);
+        return info;
+    }
+
+    /**
+     * Read the content of a file.
+     * @param file The file to read.
+     * @return The file content or null if file does not exists.
+     */
+    public static String readFile(File file) throws IOException {
+        if (!file.exists()) {
+            return null;
+        }
+        try {
+            byte[] bytes = Files.readAllBytes(file.toPath());
+            String content = new String(bytes);
+            return content;
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw e;
+        }
+    }
+
+    /**
+     * Helper class with info of the running Application.
+     */
+    public static class ProcessInfo {
+        public int pid = -1;
+        public int shutdownPort = -1;
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/awt/print/PrinterJob/PrintGlyphVectorTest.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,150 @@
+/*
+ * 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please 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 8029204
+ * @summary Tests GlyphVector is printed in the correct location
+ * @run main/manual=yesno PrintGlyphVectorTest
+ */
+
+import java.io.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.awt.font.*;
+import java.awt.geom.*;
+import java.awt.print.*;
+
+public class PrintGlyphVectorTest extends Component implements Printable {
+
+    public void drawGVs(Graphics g) {
+
+        String testString = "0123456789abcdefghijklm";
+        Graphics2D g2d = (Graphics2D)g;
+        g2d.setColor(Color.black);
+        Font font = new Font("SansSerif", Font.PLAIN, 30);
+        FontRenderContext frc = g2d.getFontRenderContext();
+        GlyphVector v = font.createGlyphVector(frc, testString);
+
+
+        float x = 50f,
+              y = 50f;
+
+        g2d.drawGlyphVector(v, x, y);
+        Rectangle2D r = v.getVisualBounds();
+        r.setRect(r.getX()+x, r.getY()+y, r.getWidth(), r.getHeight());
+        g2d.draw(r);
+
+        Point2D p; // .Float p = new Point2D.Float();
+        for (int i = 0; i < v.getNumGlyphs(); i++) {
+            p = v.getGlyphPosition(i);
+            p.setLocation(p.getX()+50, p.getY());
+            v.setGlyphPosition(i, p);
+        }
+
+        x = 0;
+        y+= 50;
+
+        g2d.drawGlyphVector(v, x, y);
+        r = v.getVisualBounds();
+        r.setRect(r.getX()+x, r.getY()+y, r.getWidth(), r.getHeight());
+        g2d.draw(r);
+
+
+
+    }
+
+     public void paint(Graphics g) {
+       g.setColor(Color.white);
+       g.fillRect(0,0,getSize().width, getSize().height);
+       drawGVs(g);
+     }
+
+    public Dimension getPreferredSize() {
+        return new Dimension(600,200);
+    }
+
+    public int print(Graphics g, PageFormat pf, int pageIndex) {
+
+        if (pageIndex > 0) {
+            return Printable.NO_SUCH_PAGE;
+        }
+
+        Graphics2D g2d = (Graphics2D)g;
+        g2d.translate(pf.getImageableX(), pf.getImageableY());
+        drawGVs(g2d);
+
+        return Printable.PAGE_EXISTS;
+    }
+
+
+    public static void main(String arg[]) throws Exception {
+
+       Frame f = new Frame();
+       PrintGlyphVectorTest pvt = new PrintGlyphVectorTest();
+       f.add("Center", pvt);
+       f.add("South", new PrintInstructions());
+       f.pack();
+       f.show();
+
+
+    }
+}
+
+class PrintInstructions extends Panel implements ActionListener {
+
+   static final String INSTRUCTIONS =
+       "You must have a printer installed for this test.\n" +
+       "Press the PRINT button below and OK the print dialog\n" +
+       "Retrieve the output and compare the printed and on-screen text\n" +
+       " to confirm that in both cases the text is aligned and the boxes\n" +
+       "are around the text, not offset from the text.";
+
+  PrintInstructions() {
+
+     setLayout(new GridLayout(2,1));
+     TextArea t = new TextArea(INSTRUCTIONS, 8, 80);
+     add(t);
+     Button b = new Button("PRINT");
+     b.setFont(new Font("Dialog", Font.BOLD, 30));
+     b.addActionListener(this);
+     add(b);
+  }
+
+  public void actionPerformed(ActionEvent e) {
+       PrinterJob pj = PrinterJob.getPrinterJob();
+       if (pj == null ||
+           pj.getPrintService() == null ||
+           !pj.printDialog()) {
+           return;
+       }
+
+       pj.setPrintable(new PrintGlyphVectorTest());
+       try {
+           pj.print();
+       } catch (PrinterException ex) {
+           System.err.println(ex);
+       }
+  }
+
+}
--- a/test/java/io/BufferedReader/Lines.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/io/BufferedReader/Lines.java	Thu Dec 12 20:04:31 2013 -0800
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8003258
+ * @bug 8003258 8029434
  * @run testng Lines
  */
 
@@ -38,6 +38,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
+import java.util.Spliterator;
 import java.util.stream.Stream;
 import java.util.concurrent.atomic.AtomicInteger;
 import org.testng.annotations.Test;
@@ -281,4 +282,15 @@
         // Read after EOL
         assertFalse(it.hasNext());
     }
+
+    public void testCharacteristics() {
+        try (BufferedReader br = new BufferedReader(
+                                    new StringReader(""))) {
+            Spliterator<String> instance = br.lines().spliterator();
+            assertTrue(instance.hasCharacteristics(Spliterator.NONNULL));
+            assertTrue(instance.hasCharacteristics(Spliterator.ORDERED));
+        } catch (IOException ioe) {
+            fail("Should not have any exception.");
+        }
+    }
 }
--- a/test/java/lang/ProcessBuilder/Basic.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/lang/ProcessBuilder/Basic.java	Thu Dec 12 20:04:31 2013 -0800
@@ -2239,24 +2239,33 @@
             childArgs.add("sleep");
             final Process p = new ProcessBuilder(childArgs).start();
             final long start = System.nanoTime();
-            final CountDownLatch latch = new CountDownLatch(1);
+            final CountDownLatch ready = new CountDownLatch(1);
+            final CountDownLatch done = new CountDownLatch(1);
 
             final Thread thread = new Thread() {
                 public void run() {
                     try {
+                        final boolean result;
                         try {
-                            latch.countDown();
-                            p.waitFor(30000, TimeUnit.MILLISECONDS);
+                            ready.countDown();
+                            result = p.waitFor(30000, TimeUnit.MILLISECONDS);
                         } catch (InterruptedException e) {
                             return;
                         }
-                        fail("waitFor() wasn't interrupted");
-                    } catch (Throwable t) { unexpected(t); }}};
+                        fail("waitFor() wasn't interrupted, its return value was: " + result);
+                    } catch (Throwable t) {
+                        unexpected(t);
+                    } finally {
+                        done.countDown();
+                    }
+                }
+            };
 
             thread.start();
-            latch.await();
+            ready.await();
             Thread.sleep(1000);
             thread.interrupt();
+            done.await();
             p.destroy();
         } catch (Throwable t) { unexpected(t); }
 
--- a/test/java/lang/management/GarbageCollectorMXBean/GcInfoCompositeType.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/lang/management/GarbageCollectorMXBean/GcInfoCompositeType.java	Thu Dec 12 20:04:31 2013 -0800
@@ -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,8 +26,11 @@
  * @bug     6396794
  * @summary Check that LastGcInfo contents are reasonable
  * @author  Eamonn McManus
- * @run     main/othervm GcInfoCompositeType
+ * @run     main/othervm -XX:-ExplicitGCInvokesConcurrent GcInfoCompositeType
  */
+// Passing "-XX:-ExplicitGCInvokesConcurrent" to force System.gc()
+// run on foreground when CMS is used and prevent situations when "GcInfo"
+// is missing even though System.gc() was successfuly processed.
 
 import java.util.*;
 import java.lang.management.*;
--- a/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/lang/management/MemoryMXBean/CollectionUsageThreshold.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2012, 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
@@ -31,44 +31,45 @@
  * @author  Mandy Chung
  *
  * @build CollectionUsageThreshold MemoryUtil
- * @run main/timeout=300 CollectionUsageThreshold
+ * @run main/othervm/timeout=300 -XX:+PrintGCDetails -XX:+UseSerialGC CollectionUsageThreshold
+ * @run main/othervm/timeout=300 -XX:+PrintGCDetails -XX:+UseParallelGC CollectionUsageThreshold
+ * @run main/othervm/timeout=300 -XX:+PrintGCDetails -XX:+UseG1GC CollectionUsageThreshold
+ * @run main/othervm/timeout=300 -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC CollectionUsageThreshold
  */
 
-import java.lang.Thread.*;
-import java.lang.management.*;
 import java.util.*;
 import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import javax.management.*;
 import javax.management.openmbean.CompositeData;
+import java.lang.management.*;
+import static java.lang.management.MemoryNotificationInfo.*;;
+import static java.lang.management.ManagementFactory.*;
 
 public class CollectionUsageThreshold {
-    private static MemoryMXBean mm = ManagementFactory.getMemoryMXBean();
-    private static List<MemoryPoolMXBean> pools = ManagementFactory.getMemoryPoolMXBeans();
-    private static List<MemoryManagerMXBean> managers = ManagementFactory.getMemoryManagerMXBeans();
-    private static Map<String, PoolRecord> result = new HashMap<>();
+    private static final MemoryMXBean mm = getMemoryMXBean();
+    private static final Map<String, PoolRecord> result = new HashMap<>();
     private static boolean trace = false;
-    private static boolean testFailed = false;
-    private static int numMemoryPools = 1;
+    private static volatile int numMemoryPools = 1;
     private static final int NUM_GCS = 3;
     private static final int THRESHOLD = 10;
-    private static Checker checker;
-    private static int numGCs = 0;
+    private static volatile int numGCs = 0;
 
     // semaphore to signal the arrival of a low memory notification
-    private static Semaphore signals = new Semaphore(0);
+    private static final Semaphore signals = new Semaphore(0);
     // barrier for the main thread to wait until the checker thread
     // finishes checking the low memory notification result
-    private static CyclicBarrier barrier = new CyclicBarrier(2);
+    private static final CyclicBarrier barrier = new CyclicBarrier(2);
 
     static class PoolRecord {
-        private MemoryPoolMXBean pool;
-        private int listenerInvoked = 0;
-        private long notifCount = 0;
+        private final MemoryPoolMXBean pool;
+        private final AtomicInteger listenerInvoked = new AtomicInteger(0);
+        private volatile long notifCount = 0;
         PoolRecord(MemoryPoolMXBean p) {
             this.pool = p;
         }
         int getListenerInvokedCount() {
-            return listenerInvoked;
+            return listenerInvoked.get();
         }
         long getNotifCount() {
             return notifCount;
@@ -77,18 +78,17 @@
             return pool;
         }
         void addNotification(MemoryNotificationInfo minfo) {
-            listenerInvoked++;
+            listenerInvoked.incrementAndGet();
             notifCount = minfo.getCount();
         }
     }
 
     static class SensorListener implements NotificationListener {
-        private int numNotifs = 0;
+        @Override
         public void handleNotification(Notification notif, Object handback) {
             String type = notif.getType();
-            if (type.equals(MemoryNotificationInfo.MEMORY_THRESHOLD_EXCEEDED) ||
-                type.equals(MemoryNotificationInfo.
-                    MEMORY_COLLECTION_THRESHOLD_EXCEEDED)) {
+            if (MEMORY_THRESHOLD_EXCEEDED.equals(type) ||
+                MEMORY_COLLECTION_THRESHOLD_EXCEEDED.equals(type)) {
                 MemoryNotificationInfo minfo = MemoryNotificationInfo.
                     from((CompositeData) notif.getUserData());
 
@@ -98,28 +98,26 @@
                     throw new RuntimeException("Pool " + minfo.getPoolName() +
                         " is not selected");
                 }
-                if (type != MemoryNotificationInfo.
-                        MEMORY_COLLECTION_THRESHOLD_EXCEEDED) {
+                if (!MEMORY_COLLECTION_THRESHOLD_EXCEEDED.equals(type)) {
                     throw new RuntimeException("Pool " + minfo.getPoolName() +
                         " got unexpected notification type: " +
                         type);
                 }
                 pr.addNotification(minfo);
-                synchronized (this) {
-                    System.out.println("notifying the checker thread to check result");
-                    numNotifs++;
-                    signals.release();
-                }
+                System.out.println("notifying the checker thread to check result");
+                signals.release();
             }
         }
     }
 
-    private static long newThreshold;
     public static void main(String args[]) throws Exception {
         if (args.length > 0 && args[0].equals("trace")) {
             trace = true;
         }
 
+        List<MemoryPoolMXBean> pools = getMemoryPoolMXBeans();
+        List<MemoryManagerMXBean> managers = getMemoryManagerMXBeans();
+
         if (trace) {
             MemoryUtil.printMemoryPools(pools);
             MemoryUtil.printMemoryManagers(managers);
@@ -127,7 +125,6 @@
 
         // Find the Old generation which supports low memory detection
         for (MemoryPoolMXBean p : pools) {
-            MemoryUsage u = p.getUsage();
             if (p.isUsageThresholdSupported() && p.isCollectionUsageThresholdSupported()) {
                 if (p.getName().toLowerCase().contains("perm")) {
                     // if we have a "perm gen" pool increase the number of expected
@@ -149,7 +146,7 @@
             // This test creates a checker thread responsible for checking
             // the low memory notifications.  It blocks until a permit
             // from the signals semaphore is available.
-            checker = new Checker("Checker thread");
+            Checker checker = new Checker("Checker thread");
             checker.setDaemon(true);
             checker.start();
 
@@ -182,12 +179,7 @@
                 pr.getPool().setCollectionUsageThreshold(0);
             }
         }
-
-        if (testFailed)
-            throw new RuntimeException("TEST FAILED.");
-
         System.out.println("Test passed.");
-
     }
 
 
@@ -205,20 +197,16 @@
     }
 
     static class Checker extends Thread {
-        private boolean checkerReady = false;
-        private int waiters = 0;
-        private boolean readyToCheck = false;
         Checker(String name) {
             super(name);
         };
+        @Override
         public void run() {
             while (true) {
                 try {
                     signals.acquire(numMemoryPools);
                     checkResult();
-                } catch (InterruptedException e) {
-                    throw new RuntimeException(e);
-                } catch (BrokenBarrierException e) {
+                } catch (InterruptedException | BrokenBarrierException e) {
                     throw new RuntimeException(e);
                 }
             }
--- a/test/java/lang/management/MemoryMXBean/CollectionUsageThresholdConcMarkSweepGC.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-#
-# Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute 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     4959889
-# @summary Test CollectionUsageThreshold with concurrent marksweep collector
-# @author  Mandy Chung
-#
-# @ignore  6982965
-# @run build CollectionUsageThreshold
-# @run shell/timeout=300 CollectionUsageThresholdConcMarkSweepGC.sh
-#
-
-#Set appropriate jdk
-
-if [ ! -z "${TESTJAVA}" ] ; then
-     jdk="$TESTJAVA"
-else
-     echo "--Error: TESTJAVA must be defined as the pathname of a jdk to test."
-     exit 1
-fi
-
-runOne()
-{
-   echo "runOne $@"
-   $TESTJAVA/bin/java ${TESTVMOPTS} -classpath $TESTCLASSES $@ || exit 2
-}
-
-# Test CollectionUsageThreshold with concurrent collector
-runOne -XX:+UseConcMarkSweepGC CollectionUsageThreshold
-
-exit 0
--- a/test/java/lang/management/MemoryMXBean/CollectionUsageThresholdParallelGC.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-#
-# Copyright (c) 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.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please 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     4959889
-# @summary Test CollectionUsageThreshold with parallel collector
-# @author  Mandy Chung
-#
-# @run build CollectionUsageThreshold
-# @run shell/timeout=300 CollectionUsageThresholdParallelGC.sh
-#
-
-#Set appropriate jdk
-
-if [ ! -z "${TESTJAVA}" ] ; then
-     jdk="$TESTJAVA"
-else
-     echo "--Error: TESTJAVA must be defined as the pathname of a jdk to test."
-     exit 1
-fi
-
-runOne()
-{
-   echo "runOne $@"
-   $TESTJAVA/bin/java ${TESTVMOPTS} -classpath $TESTCLASSES $@ || exit 2
-}
-
-# Test CollectionUsageThreshold with parallel collector
-runOne -XX:+UseParallelGC CollectionUsageThreshold
-
-exit 0
--- a/test/java/lang/management/MemoryMXBean/CollectionUsageThresholdSerialGC.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-#
-# Copyright (c) 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.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please 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     4959889
-# @summary Test CollectionUsageThreshold with serial collector
-# @author  Mandy Chung
-#
-# @run build CollectionUsageThreshold
-# @run shell/timeout=300 CollectionUsageThresholdSerialGC.sh
-#
-
-#Set appropriate jdk
-
-if [ ! -z "${TESTJAVA}" ] ; then
-     jdk="$TESTJAVA"
-else
-     echo "--Error: TESTJAVA must be defined as the pathname of a jdk to test."
-     exit 1
-fi
-
-runOne()
-{
-   echo "runOne $@"
-   $TESTJAVA/bin/java ${TESTVMOPTS} -classpath $TESTCLASSES $@ || exit 2
-}
-
-# Test CollectionUsageThreshold with serial collector
-runOne -XX:+UseSerialGC CollectionUsageThreshold
-
-exit 0
--- a/test/java/math/BigInteger/BigIntegerTest.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/math/BigInteger/BigIntegerTest.java	Thu Dec 12 20:04:31 2013 -0800
@@ -56,32 +56,32 @@
     // Bit large number thresholds based on the int thresholds
     // defined in BigInteger itself:
     //
-    // KARATSUBA_THRESHOLD        = 50  ints = 1600 bits
-    // TOOM_COOK_THRESHOLD        = 75  ints = 2400 bits
-    // KARATSUBA_SQUARE_THRESHOLD = 90  ints = 2880 bits
-    // TOOM_COOK_SQUARE_THRESHOLD = 140 ints = 4480 bits
+    // KARATSUBA_THRESHOLD        = 80  ints = 2560 bits
+    // TOOM_COOK_THRESHOLD        = 240 ints = 7680 bits
+    // KARATSUBA_SQUARE_THRESHOLD = 128 ints = 4096 bits
+    // TOOM_COOK_SQUARE_THRESHOLD = 216 ints = 6912 bits
     //
-    // SCHOENHAGE_BASE_CONVERSION_THRESHOLD = 8 ints = 256 bits
+    // SCHOENHAGE_BASE_CONVERSION_THRESHOLD = 20 ints = 640 bits
     //
-    // BURNIKEL_ZIEGLER_THRESHOLD = 50  ints = 1600 bits
+    // BURNIKEL_ZIEGLER_THRESHOLD = 80  ints = 2560 bits
     //
-    static final int BITS_KARATSUBA = 1600;
-    static final int BITS_TOOM_COOK = 2400;
-    static final int BITS_KARATSUBA_SQUARE = 2880;
-    static final int BITS_TOOM_COOK_SQUARE = 4480;
-    static final int BITS_SCHOENHAGE_BASE = 256;
-    static final int BITS_BURNIKEL_ZIEGLER = 1600;
+    static final int BITS_KARATSUBA = 2560;
+    static final int BITS_TOOM_COOK = 7680;
+    static final int BITS_KARATSUBA_SQUARE = 4096;
+    static final int BITS_TOOM_COOK_SQUARE = 6912;
+    static final int BITS_SCHOENHAGE_BASE = 640;
+    static final int BITS_BURNIKEL_ZIEGLER = 2560;
 
     static final int ORDER_SMALL = 60;
     static final int ORDER_MEDIUM = 100;
     // #bits for testing Karatsuba
-    static final int ORDER_KARATSUBA = 1800;
+    static final int ORDER_KARATSUBA = 2760;
     // #bits for testing Toom-Cook and Burnikel-Ziegler
-    static final int ORDER_TOOM_COOK = 4000;
+    static final int ORDER_TOOM_COOK = 8000;
     // #bits for testing Karatsuba squaring
-    static final int ORDER_KARATSUBA_SQUARE = 3200;
+    static final int ORDER_KARATSUBA_SQUARE = 4200;
     // #bits for testing Toom-Cook squaring
-    static final int ORDER_TOOM_COOK_SQUARE = 4600;
+    static final int ORDER_TOOM_COOK_SQUARE = 7000;
 
     static final int SIZE = 1000; // numbers per batch
 
--- a/test/java/net/DatagramSocket/PortUnreachable.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/net/DatagramSocket/PortUnreachable.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 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
@@ -31,20 +31,17 @@
 import java.net.InetAddress;
 import java.net.DatagramSocket;
 import java.net.DatagramPacket;
-import java.io.InterruptedIOException;
 
-public class PortUnreachable implements Runnable {
+public class PortUnreachable {
 
     DatagramSocket clientSock;
     int serverPort;
     int clientPort;
 
-    public void run() {
+    public void serverSend() {
         try {
             InetAddress addr = InetAddress.getLocalHost();
-
-            Thread.currentThread().sleep(2000);
-
+            Thread.currentThread().sleep(1000);
             // send a delayed packet which should mean a delayed icmp
             // port unreachable
             byte b[] = "A late msg".getBytes();
@@ -52,11 +49,8 @@
                                                        serverPort);
             clientSock.send(packet);
 
-            // wait before bringing the server up
-            Thread.currentThread().sleep(5000);
-
             DatagramSocket sock = new DatagramSocket(serverPort);
-            b = "Grettings from the server".getBytes();
+            b = "Greetings from the server".getBytes();
             packet = new DatagramPacket(b, b.length, addr, clientPort);
             sock.send(packet);
             sock.close();
@@ -70,10 +64,13 @@
         clientSock = new DatagramSocket();
         clientPort = clientSock.getLocalPort();
 
+    }
+
+    void execute () throws Exception{
+
         // pick a port for the server
         DatagramSocket sock2 = new DatagramSocket();
         serverPort = sock2.getLocalPort();
-        sock2.close();
 
         // send a burst of packets to the unbound port - we should get back
         // icmp port unreachable messages
@@ -82,23 +79,26 @@
         byte b[] = "Hello me".getBytes();
         DatagramPacket packet = new DatagramPacket(b, b.length, addr,
                                                    serverPort);
+        //close just before sending
+        sock2.close();
         for (int i=0; i<100; i++)
             clientSock.send(packet);
 
-        // start the server thread
-        Thread thr = new Thread(this);
-        thr.start();
-
+        serverSend();
         // try to receive
+        b = new byte[25];
+        packet = new DatagramPacket(b, b.length, addr, serverPort);
         clientSock.setSoTimeout(10000);
         clientSock.receive(packet);
+        System.out.println("client received data packet " + new String(packet.getData()));
 
         // done
         clientSock.close();
     }
 
     public static void main(String[] args) throws Exception {
-        new PortUnreachable();
+        PortUnreachable test = new PortUnreachable();
+        test.execute();
     }
 
 }
--- a/test/java/rmi/reliability/benchmark/bench/rmi/Main.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/rmi/reliability/benchmark/bench/rmi/Main.java	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2008, 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
@@ -21,8 +21,27 @@
  * questions.
  */
 
-/*
- *
+/**
+ * @test
+ * @summary The RMI benchmark test. This java class is used to run the test
+ *          under JTREG.
+ * @library ../../../../testlibrary ../../
+ * @build TestLibrary bench.BenchInfo bench.HtmlReporter bench.Util
+ * bench.Benchmark bench.Reporter bench.XmlReporter bench.ConfigFormatException
+ * bench.Harness bench.TextReporter bench.rmi.BenchServer
+ * bench.rmi.DoubleArrayCalls bench.rmi.LongCalls bench.rmi.ShortCalls
+ * bench.rmi.BenchServerImpl bench.rmi.DoubleCalls bench.rmi.Main
+ * bench.rmi.SmallObjTreeCalls bench.rmi.BooleanArrayCalls
+ * bench.rmi.ExceptionCalls bench.rmi.NullCalls bench.rmi.BooleanCalls
+ * bench.rmi.ExportObjs bench.rmi.ObjArrayCalls bench.rmi.ByteArrayCalls
+ * bench.rmi.FloatArrayCalls bench.rmi.ObjTreeCalls bench.rmi.ByteCalls
+ * bench.rmi.FloatCalls bench.rmi.ProxyArrayCalls bench.rmi.CharArrayCalls
+ * bench.rmi.IntArrayCalls bench.rmi.RemoteObjArrayCalls bench.rmi.CharCalls
+ * bench.rmi.IntCalls bench.rmi.ClassLoading bench.rmi.LongArrayCalls
+ * bench.rmi.ShortArrayCalls
+ * bench.rmi.altroot.Node
+ * @run main/othervm/policy=policy.all/timeout=1800 bench.rmi.Main -server -c config
+ * @author Mike Warres, Nigel Daley
  */
 
 package bench.rmi;
@@ -33,21 +52,27 @@
 import bench.Reporter;
 import bench.TextReporter;
 import bench.XmlReporter;
+import static bench.rmi.Main.OutputFormat.*;
+import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintStream;
+import java.rmi.AlreadyBoundException;
+import java.rmi.NotBoundException;
 import java.rmi.RemoteException;
-import java.rmi.RMISecurityManager;
 import java.rmi.registry.LocateRegistry;
 import java.rmi.registry.Registry;
 import java.rmi.server.RemoteObject;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;
 
-/*
+/**
  * RMI/Serialization benchmark tests.
  */
 public class Main {
@@ -66,19 +91,20 @@
         /**
          * Cleanup both client and server side in between each benchmark.
          */
+        @Override
         protected void cleanup() {
             System.gc();
             if (Main.runmode == CLIENT) {
                 try {
                     Main.server.gc();
-                } catch (Exception e) {
+                } catch (RemoteException e) {
                     System.err.println("Warning: server gc failed: " + e);
                 }
             }
         }
     }
 
-    static final String CONFFILE = "/bench/rmi/config";
+    static final String CONFFILE = "config";
     static final String VERSION = "1.3";
     static final String REGNAME = "server";
 
@@ -86,9 +112,32 @@
     static final int CLIENT = 1;
     static final int SERVER = 2;
 
-    static final int TEXT = 0;
-    static final int HTML = 1;
-    static final int XML = 2;
+    static enum OutputFormat {
+
+        TEXT {
+            @Override
+            Reporter getReport(String title) {
+                return new TextReporter(repstr, title);
+            }
+        },
+        HTML {
+
+            @Override
+            Reporter getReport(String title) {
+                return new HtmlReporter(repstr, title);
+            }
+        },
+        XML {
+            @Override
+            Reporter getReport(String title) {
+                return new XmlReporter(repstr, title);
+            }
+        };
+
+        abstract Reporter getReport(String title);
+    };
+
+    static final String TEST_SRC_PATH = System.getProperty("test.src") + File.separator;
 
     static boolean verbose;
     static boolean list;
@@ -96,9 +145,11 @@
     static int testDurationSeconds;
     static volatile boolean exitRequested;
     static Timer timer;
-    static int format = TEXT;
+    static OutputFormat format = TEXT;
     static int runmode;
+    static String confFile;
     static InputStream confstr;
+    static String repFile;
     static OutputStream repstr;
     static String host;
     static int port;
@@ -109,6 +160,8 @@
 
     /**
      * Returns reference to benchmark server.
+     *
+     * @return a benchmark server
      */
     public static BenchServer getBenchServer() {
         return server;
@@ -126,44 +179,29 @@
         p.println("  -l                   list configuration file");
         p.println("  -t <num hours>       repeat benchmarks for specified number of hours");
         p.println("  -o <file>            specify output file");
-        p.println("  -c <file>            specify (non-default) " +
-                "configuration file");
-        p.println("  -html                format output as html " +
-                "(default is text)");
+        p.println("  -c <file>            specify (non-default) "
+                + "configuration file");
+        p.println("  -html                format output as html "
+                + "(default is text)");
         p.println("  -xml                 format output as xml");
-        p.println("  -client <host:port>  run benchmark client using server " +
-                "on specified host/port");
-        p.println("  -server <port>       run benchmark server on given port");
+        p.println("  -server              run benchmark server ");
+        p.println("  -client <host:port>  run benchmark client using server "
+                + "on specified host/port");
     }
 
     /**
-     * Print error message and exit.
+     * Throw RuntimeException that wrap message.
+     *
+     * @param mesg a message will be wrapped in the RuntimeException.
      */
     static void die(String mesg) {
-        System.err.println(mesg);
-        System.exit(1);
-    }
-
-    /**
-     * Stop server and exit.
-     */
-    public static void exit() {
-        switch (runmode) {
-            case CLIENT:
-                if (server != null) {
-                    try {
-                        server.terminate(0);
-                    } catch (RemoteException re) {
-                        // ignore
-                    }
-                }
-            default:
-                System.exit(0);
-        }
+        throw new RuntimeException(mesg);
     }
 
     /**
      * Benchmark mainline.
+     *
+     * @param args
      */
     public static void main(String[] args) {
         setupSecurity();
@@ -173,21 +211,78 @@
             listConfig();
         } else {
             setupServer();
-            if (runmode != SERVER) {
-                setupHarness();
-                setupReporter();
-                if (exitOnTimer) {
-                    setupTimer(testDurationSeconds);
-                    while (true) {
+            switch (runmode) {
+                case SAMEVM:
+                case CLIENT:
+                    setupHarness();
+                    setupReporter();
+                    if (exitOnTimer) {
+                        setupTimer(testDurationSeconds);
+                        do {
+                            runBenchmarks();
+                        } while (!exitRequested);
+                    } else {
                         runBenchmarks();
-                        if (exitRequested) {
-                            exit();
-                        }
+                    }
+                    break;
+                case SERVER:
+                    //Setup for client mode, server will fork client process
+                    //after its initiation.
+                    List<String> clientProcessStr = new ArrayList<>();
+                    clientProcessStr.add(System.getProperty("test.jdk") +
+                            File.separator + "bin" + File.separator + "java");
+                    String classpath = System.getProperty("java.class.path");
+                    if (classpath != null) {
+                        clientProcessStr.add("-cp");
+                        clientProcessStr.add(classpath);
+                    }
+                    clientProcessStr.add("-Djava.security.policy=" + TEST_SRC_PATH + "policy.all");
+                    clientProcessStr.add("-Dtest.src=" + TEST_SRC_PATH);
+                    clientProcessStr.add("bench.rmi.Main"); //Client mode
+                    if (verbose) {
+                        clientProcessStr.add("-v");
+                    }
+                    if (list) {
+                        clientProcessStr.add("-l");
+                    }
+                    clientProcessStr.add("-client");
+                    clientProcessStr.add("localhost:" + port);
+
+                    if (exitOnTimer) {
+                        clientProcessStr.add("-t");
+                        clientProcessStr.add(String.valueOf(testDurationSeconds / 3600));
                     }
-                } else {
-                    runBenchmarks();
-                    exit();
-                }
+                    if (repFile != null) {
+                        clientProcessStr.add("-o");
+                        clientProcessStr.add(repFile);
+                    }
+                    if (confFile != null) {
+                        clientProcessStr.add("-c");
+                        clientProcessStr.add(confFile);
+                    }
+                    switch (format) {
+                        case HTML:
+                            clientProcessStr.add("-html");
+                            break;
+                        case XML:
+                            clientProcessStr.add("-xml");
+                            break;
+                    }
+
+                    try {
+                        Process client = new ProcessBuilder(clientProcessStr).
+                                inheritIO().start();
+                        client.waitFor();
+                        int exitValue = client.exitValue();
+                        if (0 != exitValue) {
+                            die("Error: error happened in client process, exitValue = " + exitValue);
+                        }
+                    } catch (IOException ex) {
+                        die("Error: Unable start client process, ex=" + ex.getMessage());
+                    } catch (InterruptedException ex) {
+                        die("Error: Error happening to client process, ex=" + ex.getMessage());
+                    }
+                    break;
             }
         }
     }
@@ -197,78 +292,107 @@
      */
     static void parseArgs(String[] args) {
         for (int i = 0; i < args.length; i++) {
-            if (args[i].equals("-h")) {
-                usage();
-                System.exit(0);
-            } else if (args[i].equals("-v")) {
-                verbose = true;
-            } else if (args[i].equals("-l")) {
-                list = true;
-            } else if (args[i].equals("-t")) {
-                if (++i >= args.length)
-                    die("Error: no timeout value specified");
-                try {
-                    exitOnTimer = true;
-                    testDurationSeconds = Integer.parseInt(args[i]) * 3600;
-                } catch (Exception e) {
-                    die("Error: unable to determine timeout value");
-                }
-            } else if (args[i].equals("-o")) {
-                if (++i >= args.length)
-                    die("Error: no output file specified");
-                try {
-                    repstr = new FileOutputStream(args[i]);
-                } catch (IOException e) {
-                    die("Error: unable to open \"" + args[i] + "\"");
-                }
-            } else if (args[i].equals("-c")) {
-                if (++i >= args.length)
-                    die("Error: no config file specified");
-                try {
-                    confstr = new FileInputStream(args[i]);
-                } catch (IOException e) {
-                    die("Error: unable to open \"" + args[i] + "\"");
-                }
-            } else if (args[i].equals("-html")) {
-                if (format != TEXT)
-                    die("Error: conflicting formats");
-                format = HTML;
-            } else if (args[i].equals("-xml")) {
-                if (format != TEXT)
-                    die("Error: conflicting formats");
-                format = XML;
-            } else if (args[i].equals("-client")) {
-                if (runmode == CLIENT)
-                    die("Error: multiple -client options");
-                if (runmode == SERVER)
-                    die("Error: -client and -server options conflict");
-                if (++i >= args.length)
-                    die("Error: -client missing host/port");
-                try {
-                    int sepi = args[i].indexOf(':');
-                    host = args[i].substring(0, sepi);
-                    port = Integer.parseInt(args[i].substring(sepi + 1));
-                } catch (Exception e) {
-                    die("Error: illegal host/port specified for -client");
-                }
-                runmode = CLIENT;
-            } else if (args[i].equals("-server")) {
-                if (runmode == CLIENT)
-                    die("Error: -client and -server options conflict");
-                if (runmode == SERVER)
-                    die("Error: multiple -server options");
-                if (++i >= args.length)
-                    die("Error: -server missing port");
-                try {
-                    port = Integer.parseInt(args[i]);
-                } catch (Exception e) {
-                    die("Error: illegal port specified for -server");
-                }
-                runmode = SERVER;
-            } else {
-                System.err.println("Illegal option: \"" + args[i] + "\"");
-                usage();
-                System.exit(1);
+            switch (args[i]) {
+                case "-h":
+                    usage();
+                    System.exit(0);
+                    break;
+                case "-v":
+                    verbose = true;
+                    break;
+                case "-l":
+                    list = true;
+                    break;
+                case "-t":
+                    if (++i >= args.length) {
+                        die("Error: no timeout value specified");
+                    }
+                    try {
+                        exitOnTimer = true;
+                        testDurationSeconds = Integer.parseInt(args[i]) * 3600;
+                    } catch (NumberFormatException e) {
+                        die("Error: unable to determine timeout value");
+                    }
+                    break;
+                case "-o":
+                    if (++i >= args.length) {
+                        die("Error: no output file specified");
+                    }
+                    try {
+                        repFile = args[i];
+                        repstr = new FileOutputStream(repFile);
+                    } catch (FileNotFoundException e) {
+                        die("Error: unable to open \"" + args[i] + "\"");
+                    }
+                    break;
+                case "-c":
+                    if (++i >= args.length) {
+                        die("Error: no config file specified");
+                    }
+                    confFile = args[i];
+                    String confFullPath = TEST_SRC_PATH + confFile;
+                    try {
+                        confstr = new FileInputStream(confFullPath);
+                    } catch (FileNotFoundException e) {
+                        die("Error: unable to open \"" + confFullPath + "\"");
+                    }
+                    break;
+                case "-html":
+                    if (format != TEXT) {
+                        die("Error: conflicting formats");
+                    }
+                    format = HTML;
+                    break;
+                case "-xml":
+                    if (format != TEXT) {
+                        die("Error: conflicting formats");
+                    }
+                    format = XML;
+                    break;
+                case "-client":
+                    if (runmode == CLIENT) {
+                        die("Error: multiple -client options");
+                    }
+                    if (runmode == SERVER) {
+                        die("Error: -client and -server options conflict");
+                    }
+                    if (++i >= args.length) {
+                        die("Error: -client missing host/port");
+                    }
+                    try {
+                        String[] hostAndPort = args[i].split(":");
+                        if (hostAndPort.length != 2) {
+                            die("Error: Invalid format host/port:" + args[i]);
+                        }
+                        host = hostAndPort[0];
+                        port = Integer.parseInt(hostAndPort[1]);
+                    } catch (NumberFormatException e) {
+                        die("Error: illegal host/port specified for -client");
+                    }
+                    runmode = CLIENT;
+                    break;
+                case "-server":
+                    if (runmode == CLIENT) {
+                        die("Error: -client and -server options conflict");
+                    }
+                    if (runmode == SERVER) {
+                        die("Error: multiple -server options");
+                    }
+                    try {
+                        //This is the hack code because named package class has
+                        //difficulty in accessing unamed package class. This
+                        //should be removed ater JDK-8003358 is finished.
+                        port = (int) Class.forName("TestLibrary")
+                                .getMethod("getUnusedRandomPort")
+                                .invoke(null);
+                    } catch (ReflectiveOperationException ex) {
+                        die("Error: can't get a free port " + ex);
+                    }
+                    runmode = SERVER;
+                    break;
+                default:
+                    usage();
+                    die("Illegal option: \"" + args[i] + "\"");
             }
         }
     }
@@ -277,27 +401,31 @@
      * Set up security manager and policy, if not set already.
      */
     static void setupSecurity() {
-        if (System.getSecurityManager() != null)
+        if (System.getSecurityManager() != null) {
             return;
+        }
 
         /* As of 1.4, it is too late to set the security policy
          * file at this point so these line have been commented out.
          */
         //System.setProperty("java.security.policy",
         //      Main.class.getResource("/bench/rmi/policy.all").toString());
-        System.setSecurityManager(new RMISecurityManager());
+        System.setSecurityManager(new SecurityManager());
     }
 
     /**
      * Set up configuration file and report streams, if not set already.
      */
     static void setupStreams() {
-        if (repstr == null)
+        if (repstr == null) {
             repstr = System.out;
-        if (confstr == null)
-            confstr = (new Main()).getClass().getResourceAsStream(CONFFILE);
-        if (confstr == null)
+        }
+        if (confstr == null) {
+            confstr = Main.class.getResourceAsStream(TEST_SRC_PATH + CONFFILE);
+        }
+        if (confstr == null) {
             die("Error: unable to find default config file");
+        }
     }
 
     /**
@@ -323,7 +451,7 @@
                 try {
                     serverImpl = new BenchServerImpl();
                     server = (BenchServer) RemoteObject.toStub(serverImpl);
-                } catch (Exception e) {
+                } catch (RemoteException e) {
                     die("Error: failed to create local server: " + e);
                 }
                 if (verbose)
@@ -334,7 +462,7 @@
                 try {
                     Registry reg = LocateRegistry.getRegistry(host, port);
                     server = (BenchServer) reg.lookup(REGNAME);
-                } catch (Exception e) {
+                } catch (NotBoundException | RemoteException e) {
                     die("Error: failed to connect to server: " + e);
                 }
                 if (server == null) {
@@ -351,7 +479,7 @@
                     Registry reg = LocateRegistry.createRegistry(port);
                     serverImpl = new BenchServerImpl();
                     reg.bind(REGNAME, serverImpl);
-                } catch (Exception e) {
+                } catch (AlreadyBoundException | RemoteException e) {
                     die("Error: failed to initialize server: " + e);
                 }
                 if (verbose) {
@@ -368,18 +496,19 @@
     /**
      * Set up the timer to end the test.
      *
-     * @param delay the amount of delay, in seconds, before requesting
-     * the process exit
+     * @param delay the amount of delay, in seconds, before requesting the
+     * process exit
      */
     static void setupTimer(int delay) {
         timer = new Timer(true);
         timer.schedule(
-            new TimerTask() {
-                public void run() {
-                    exitRequested = true;
-                }
-            },
-            delay * 1000);
+                new TimerTask() {
+                    @Override
+                    public void run() {
+                        exitRequested = true;
+                    }
+                },
+                delay * 1000);
     }
 
     /**
@@ -404,23 +533,7 @@
      * Setup benchmark reporter.
      */
     static void setupReporter() {
-        String title = "RMI Benchmark, v" + VERSION;
-        switch (format) {
-            case TEXT:
-                reporter = new TextReporter(repstr, title);
-                break;
-
-            case HTML:
-                reporter = new HtmlReporter(repstr, title);
-                break;
-
-            case XML:
-                reporter = new XmlReporter(repstr, title);
-                break;
-
-            default:
-                die("Error: unrecognized format type");
-        }
+        reporter = format.getReport("RMI Benchmark, v" + VERSION);
     }
 
     /**
--- a/test/java/rmi/reliability/benchmark/bench/serial/Main.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/rmi/reliability/benchmark/bench/serial/Main.java	Thu Dec 12 20:04:31 2013 -0800
@@ -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
@@ -22,7 +22,29 @@
  */
 
 /*
- *
+ * @test
+ * @summary The Serialization benchmark test. This java class is used to run the
+ *          test under JTREG.
+ * @library ../../
+ * @build bench.BenchInfo bench.HtmlReporter bench.Util bench.Benchmark
+ * @build bench.Reporter bench.XmlReporter bench.ConfigFormatException
+ * @build bench.Harness bench.TextReporter
+ * @build bench.serial.BooleanArrays bench.serial.Booleans
+ * @build bench.serial.ByteArrays bench.serial.Bytes bench.serial.CharArrays
+ * @build bench.serial.Chars bench.serial.ClassDesc bench.serial.Cons
+ * @build bench.serial.CustomDefaultObjTrees bench.serial.CustomObjTrees
+ * @build bench.serial.DoubleArrays bench.serial.Doubles
+ * @build bench.serial.ExternObjTrees bench.serial.FloatArrays
+ * @build bench.serial.Floats bench.serial.GetPutFieldTrees
+ * @build bench.serial.IntArrays bench.serial.Ints bench.serial.LongArrays
+ * @build bench.serial.Longs bench.serial.Main bench.serial.ObjArrays
+ * @build bench.serial.ObjTrees bench.serial.ProxyArrays
+ * @build bench.serial.ProxyClassDesc bench.serial.RepeatObjs
+ * @build bench.serial.ReplaceTrees bench.serial.ShortArrays
+ * @build bench.serial.Shorts bench.serial.SmallObjTrees
+ * @build bench.serial.StreamBuffer bench.serial.Strings
+ * @run main/othervm/timeout=1800 bench.serial.Main -c jtreg-config
+ * @author Mike Warres, Nigel Daley
  */
 
 package bench.serial;
@@ -33,7 +55,9 @@
 import bench.Reporter;
 import bench.TextReporter;
 import bench.XmlReporter;
+import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.IOException;
@@ -47,8 +71,9 @@
  */
 public class Main {
 
-    static final String CONFFILE = "/bench/serial/config";
+    static final String CONFFILE = "config";
     static final String VERSION = "1.3";
+    static final String TEST_SRC_PATH = System.getProperty("test.src") + File.separator;
 
     static final int TEXT = 0;
     static final int HTML = 1;
@@ -84,15 +109,18 @@
     }
 
     /**
-     * Print error message and exit.
+     * Throw RuntimeException that wrap message.
+     *
+     * @param mesg a message will be wrapped in the RuntimeException.
      */
     static void die(String mesg) {
-        System.err.println(mesg);
-        System.exit(1);
+        throw new RuntimeException(mesg);
     }
 
     /**
      * Mainline parses command line, then hands off to benchmark harness.
+     *
+     * @param args
      */
     public static void main(String[] args) {
         parseArgs(args);
@@ -104,15 +132,11 @@
             setupReporter();
             if (exitOnTimer) {
                 setupTimer(testDurationSeconds);
-                while (true) {
+                do {
                     runBenchmarks();
-                    if (exitRequested) {
-                        System.exit(0);
-                    }
-                }
+                } while (!exitRequested);
             } else {
                 runBenchmarks();
-                System.exit(0);
             }
         }
     }
@@ -122,50 +146,59 @@
      */
     static void parseArgs(String[] args) {
         for (int i = 0; i < args.length; i++) {
-            if (args[i].equals("-h")) {
-                usage();
-                System.exit(0);
-            } else if (args[i].equals("-v")) {
-                verbose = true;
-            } else if (args[i].equals("-l")) {
-                list = true;
-            } else if (args[i].equals("-t")) {
-                if (++i >= args.length)
-                    die("Error: no timeout value specified");
-                try {
-                    exitOnTimer = true;
-                    testDurationSeconds = Integer.parseInt(args[i]) * 3600;
-                } catch (Exception e) {
-                    die("Error: unable to determine timeout value");
-                }
-            } else if (args[i].equals("-o")) {
-                if (++i >= args.length)
-                    die("Error: no output file specified");
-                try {
-                    repstr = new FileOutputStream(args[i]);
-                } catch (IOException e) {
-                    die("Error: unable to open \"" + args[i] + "\"");
-                }
-            } else if (args[i].equals("-c")) {
-                if (++i >= args.length)
-                    die("Error: no config file specified");
-                try {
-                    confstr = new FileInputStream(args[i]);
-                } catch (IOException e) {
-                    die("Error: unable to open \"" + args[i] + "\"");
-                }
-            } else if (args[i].equals("-html")) {
-                if (format != TEXT)
-                    die("Error: conflicting formats");
-                format = HTML;
-            } else if (args[i].equals("-xml")) {
-                if (format != TEXT)
-                    die("Error: conflicting formats");
-                format = XML;
-            } else {
-                System.err.println("Illegal option: \"" + args[i] + "\"");
-                usage();
-                System.exit(1);
+            switch (args[i]) {
+                case "-h":
+                    usage();
+                    System.exit(0);
+                    break;
+                case "-v":
+                    verbose = true;
+                    break;
+                case "-l":
+                    list = true;
+                    break;
+                case "-t":
+                    if (++i >= args.length)
+                        die("Error: no timeout value specified");
+                    try {
+                        exitOnTimer = true;
+                        testDurationSeconds = Integer.parseInt(args[i]) * 3600;
+                    } catch (NumberFormatException e) {
+                        die("Error: unable to determine timeout value");
+                    }
+                    break;
+                case "-o":
+                    if (++i >= args.length)
+                        die("Error: no output file specified");
+                    try {
+                        repstr = new FileOutputStream(args[i]);
+                    } catch (FileNotFoundException e) {
+                        die("Error: unable to open \"" + args[i] + "\"");
+                    }
+                    break;
+                case "-c":
+                    if (++i >= args.length)
+                        die("Error: no config file specified");
+                    String confFileName = TEST_SRC_PATH + args[i];
+                    try {
+                        confstr = new FileInputStream(confFileName);
+                    } catch (FileNotFoundException e) {
+                        die("Error: unable to open \"" + confFileName + "\"");
+                    }
+                    break;
+                case "-html":
+                    if (format != TEXT)
+                        die("Error: conflicting formats");
+                    format = HTML;
+                    break;
+                case "-xml":
+                    if (format != TEXT)
+                        die("Error: conflicting formats");
+                    format = XML;
+                    break;
+                default:
+                    usage();
+                    die("Illegal option: \"" + args[i] + "\"");
             }
         }
     }
@@ -177,7 +210,7 @@
         if (repstr == null)
             repstr = System.out;
         if (confstr == null)
-            confstr = (new Main()).getClass().getResourceAsStream(CONFFILE);
+            confstr = Main.class.getResourceAsStream(TEST_SRC_PATH + CONFFILE);
         if (confstr == null)
             die("Error: unable to find default config file");
     }
@@ -206,6 +239,7 @@
         timer = new Timer(true);
         timer.schedule(
             new TimerTask() {
+                @Override
                 public void run() {
                     exitRequested = true;
                 }
--- a/test/java/rmi/reliability/benchmark/runRmiBench.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-#
-# 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.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please 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
-#
-# @summary The RMI benchmark test.  This script is only
-#          used to run the test under JTREG.
-#
-# @build bench.BenchInfo bench.HtmlReporter bench.Util bench.Benchmark 
-#     bench.Reporter bench.XmlReporter bench.ConfigFormatException 
-#     bench.Harness bench.TextReporter bench.rmi.BenchServer 
-#     bench.rmi.DoubleArrayCalls bench.rmi.LongCalls bench.rmi.ShortCalls
-#     bench.rmi.BenchServerImpl bench.rmi.DoubleCalls 
-#     bench.rmi.Main bench.rmi.SmallObjTreeCalls
-#     bench.rmi.BooleanArrayCalls bench.rmi.ExceptionCalls 
-#     bench.rmi.NullCalls bench.rmi.BooleanCalls bench.rmi.ExportObjs 
-#     bench.rmi.ObjArrayCalls bench.rmi.ByteArrayCalls 
-#     bench.rmi.FloatArrayCalls bench.rmi.ObjTreeCalls
-#     bench.rmi.ByteCalls bench.rmi.FloatCalls bench.rmi.ProxyArrayCalls
-#     bench.rmi.CharArrayCalls bench.rmi.IntArrayCalls 
-#     bench.rmi.RemoteObjArrayCalls bench.rmi.CharCalls bench.rmi.IntCalls
-#     bench.rmi.ClassLoading bench.rmi.LongArrayCalls 
-#     bench.rmi.ShortArrayCalls bench.rmi.altroot.Node
-#
-# @run shell/timeout=1800 runRmiBench.sh
-#
-# @author Mike Warres, Nigel Daley
-
-echo "Starting RMI benchmark server "
-
-$TESTJAVA/bin/java \
-    -server \
-    -cp $TESTCLASSES \
-    -Djava.security.policy=$TESTSRC/bench/rmi/policy.all \
-    bench.rmi.Main \
-    -server 2007 \
-    -c $TESTSRC/bench/rmi/config &
-
-sleep 10
-echo "Starting RMI benchmark client "
-
-$TESTJAVA/bin/java \
-    -client \
-    -cp $TESTCLASSES \
-    -Djava.security.policy=$TESTSRC/bench/rmi/policy.all \
-    bench.rmi.Main \
-    -client localhost:2007 \
-    -c $TESTSRC/bench/rmi/config
-
--- a/test/java/rmi/reliability/benchmark/runSerialBench.sh	Thu Dec 12 16:30:22 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-#
-# 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.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please 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
-#
-# @summary The Serialization benchmark test.  This script is only
-#          used to run the test under JTREG.
-#
-# @build bench.BenchInfo bench.HtmlReporter bench.Util bench.Benchmark 
-# @build bench.Reporter bench.XmlReporter bench.ConfigFormatException 
-# @build bench.Harness bench.TextReporter
-# @build bench.serial.BooleanArrays bench.serial.Booleans
-# @build bench.serial.ByteArrays bench.serial.Bytes bench.serial.CharArrays
-# @build bench.serial.Chars bench.serial.ClassDesc bench.serial.Cons
-# @build bench.serial.CustomDefaultObjTrees bench.serial.CustomObjTrees
-# @build bench.serial.DoubleArrays bench.serial.Doubles
-# @build bench.serial.ExternObjTrees bench.serial.FloatArrays
-# @build bench.serial.Floats bench.serial.GetPutFieldTrees
-# @build bench.serial.IntArrays bench.serial.Ints bench.serial.LongArrays
-# @build bench.serial.Longs bench.serial.Main bench.serial.ObjArrays
-# @build bench.serial.ObjTrees bench.serial.ProxyArrays
-# @build bench.serial.ProxyClassDesc bench.serial.RepeatObjs
-# @build bench.serial.ReplaceTrees bench.serial.ShortArrays
-# @build bench.serial.Shorts bench.serial.SmallObjTrees
-# @build bench.serial.StreamBuffer bench.serial.Strings
-#
-# @run shell/timeout=1800 runSerialBench.sh
-#
-# @author Mike Warres, Nigel Daley
-
-echo "Starting serialization benchmark "
-
-$TESTJAVA/bin/java \
-    ${TESTVMOPTS} \
-    -cp $TESTCLASSES \
-    bench.serial.Main \
-    -c $TESTSRC/bench/serial/jtreg-config &
-
--- a/test/java/util/Base64/Base64GetEncoderTest.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/util/Base64/Base64GetEncoderTest.java	Thu Dec 12 20:04:31 2013 -0800
@@ -51,30 +51,6 @@
 
         testWrapEncode2(encoder);
 
-        testEncodeWithByteBuffer(encoder);
-
-    }
-
-    private static void testEncodeWithByteBuffer(final Base64.Encoder encoder) {
-        System.err.println("\n\nEncoder.encode with ByteBuffer test  ");
-        final byte[] secondTestBuffer =
-                "api/java_util/Base64/index.html#GetEncoderMimeCustom[noLineSeparatorInEncodedString]"
-                .getBytes(US_ASCII);
-        String base64EncodedString;
-        ByteBuffer srcData = ByteBuffer.wrap(secondTestBuffer);
-        ByteBuffer dstData = ByteBuffer.allocate(secondTestBuffer.length * 2);
-
-        encoder.encode(srcData, dstData, 0);
-        dstData.flip();
-        if (dstData.hasArray()) {
-            System.err.println("\nByteBuffer test dstData is Base64 encoding = "
-                    + new String(dstData.array(), US_ASCII) + "\n");
-        }
-
-        base64EncodedString = new String(dstData.array(), US_ASCII);
-        if (base64EncodedString.contains("$$$")) {
-            throw new RuntimeException("Base64 encoding contains line separator after Encoder.encode ByteBuffer ... \n");
-        }
     }
 
     private static void testWrapEncode2(final Base64.Encoder encoder)
--- a/test/java/util/Base64/TestBase64.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/util/Base64/TestBase64.java	Thu Dec 12 20:04:31 2013 -0800
@@ -23,7 +23,7 @@
 
 /**
  * @test 4235519 8004212 8005394 8007298 8006295 8006315 8006530 8007379 8008925
- *       8014217 8025003 8026330
+ *       8014217 8025003 8026330 8028397
  * @summary tests java.util.Base64
  */
 
@@ -92,6 +92,9 @@
         // illegal line separator
         checkIAE(new Runnable() { public void run() { Base64.getMimeEncoder(10, new byte[]{'\r', 'N'}); }});
 
+        // malformed padding/ending
+        testMalformedPadding();
+
         // illegal base64 character
         decoded[2] = (byte)0xe0;
         checkIAE(new Runnable() {
@@ -100,34 +103,15 @@
             public void run() { Base64.getDecoder().decode(decoded, new byte[1024]); }});
         checkIAE(new Runnable() { public void run() {
             Base64.getDecoder().decode(ByteBuffer.wrap(decoded)); }});
-        checkIAE(new Runnable() { public void run() {
-            Base64.getDecoder().decode(ByteBuffer.wrap(decoded), ByteBuffer.allocate(1024)); }});
-        checkIAE(new Runnable() { public void run() {
-            Base64.getDecoder().decode(ByteBuffer.wrap(decoded), ByteBuffer.allocateDirect(1024)); }});
-
-        // illegal ending unit
-        checkIOE(new Testable() { public void test() throws IOException {
-                                     byte[] bytes = "AA=".getBytes("ASCII");
-                                     try (InputStream stream =
-                                              Base64.getDecoder().wrap(new ByteArrayInputStream(bytes))) {
-                                         while (stream.read() != -1);
-                                     }
-        }});
-
-        // test return value from decode(ByteBuffer, ByteBuffer)
-        testDecBufRet();
 
         // test single-non-base64 character for mime decoding
         testSingleNonBase64MimeDec();
 
         // test decoding of unpadded data
         testDecodeUnpadded();
+
         // test mime decoding with ignored character after padding
         testDecodeIgnoredAfterPadding();
-
-        // lenient mode for ending unit
-        testLenientPadding();
-
     }
 
     private static sun.misc.BASE64Encoder sunmisc = new sun.misc.BASE64Encoder();
@@ -202,24 +186,6 @@
                     if (encoded2 != null)
                         testDecode(dec, ByteBuffer.wrap(encoded2), orig);
 
-                    // -------- testing encode(Buffer, Buffer)--------
-                    testEncode(enc, encoded,
-                               ByteBuffer.wrap(orig),
-                               ByteBuffer.allocate(encoded.length + 10));
-
-                    testEncode(enc, encoded,
-                               ByteBuffer.wrap(orig),
-                               ByteBuffer.allocateDirect(encoded.length + 10));
-
-                    // --------testing decode(Buffer, Buffer);--------
-                    testDecode(dec, orig,
-                               ByteBuffer.wrap(encoded),
-                               ByteBuffer.allocate(orig.length + 10));
-
-                    testDecode(dec, orig,
-                               ByteBuffer.wrap(encoded),
-                               ByteBuffer.allocateDirect(orig.length + 10));
-
                     // --------testing decode.wrap(input stream)--------
                     // 1) random buf length
                     ByteArrayInputStream bais = new ByteArrayInputStream(encoded);
@@ -322,9 +288,7 @@
         checkNull(new Runnable() { public void run() { enc.encode(ba_null, new byte[10]); }});
         checkNull(new Runnable() { public void run() { enc.encode(new byte[10], ba_null); }});
         checkNull(new Runnable() { public void run() { enc.encode(bb_null); }});
-        checkNull(new Runnable() { public void run() { enc.encode(bb_null, ByteBuffer.allocate(10), 0); }});
-        checkNull(new Runnable() { public void run() { enc.encode(ByteBuffer.allocate(10), bb_null, 0); }});
-        checkNull(new Runnable() { public void run() { enc.wrap(null); }});
+        checkNull(new Runnable() { public void run() { enc.wrap((OutputStream)null); }});
     }
 
     private static void testNull(final Base64.Decoder dec) {
@@ -333,9 +297,7 @@
         checkNull(new Runnable() { public void run() { dec.decode(ba_null, new byte[10]); }});
         checkNull(new Runnable() { public void run() { dec.decode(new byte[10], ba_null); }});
         checkNull(new Runnable() { public void run() { dec.decode(bb_null); }});
-        checkNull(new Runnable() { public void run() { dec.decode(bb_null, ByteBuffer.allocate(10)); }});
-        checkNull(new Runnable() { public void run() { dec.decode(ByteBuffer.allocate(10), bb_null); }});
-        checkNull(new Runnable() { public void run() { dec.wrap(null); }});
+        checkNull(new Runnable() { public void run() { dec.wrap((InputStream)null); }});
     }
 
     private static interface Testable {
@@ -412,78 +374,63 @@
                     dec.decode(encoded);
                     throw new RuntimeException("No IAE for non-base64 char");
                 } catch (IllegalArgumentException iae) {}
-
-                // decode(ByteBuffer[], ByteBuffer[])
-                ByteBuffer encodedBB = ByteBuffer.wrap(encoded);
-                ByteBuffer decodedBB = ByteBuffer.allocate(100);
-                int ret = decM.decode(encodedBB, decodedBB);
-                byte[] buf = new byte[ret];
-                decodedBB.flip();
-                decodedBB.get(buf);
-                checkEqual(buf, src[i], "Non-base64 char is not ignored");
-                try {
-                    encodedBB.rewind();
-                    decodedBB.clear();
-                    dec.decode(encodedBB, decodedBB);
-                    throw new RuntimeException("No IAE for non-base64 char");
-                } catch (IllegalArgumentException iae) {}
-                // direct
-                encodedBB.rewind();
-                decodedBB = ByteBuffer.allocateDirect(100);
-                ret = decM.decode(encodedBB, decodedBB);
-                buf = new byte[ret];
-                decodedBB.flip();
-                decodedBB.get(buf);
-                checkEqual(buf, src[i], "Non-base64 char is not ignored");
-                try {
-                    encodedBB.rewind();
-                    decodedBB.clear();
-                    dec.decode(encodedBB, decodedBB);
-                    throw new RuntimeException("No IAE for non-base64 char");
-                } catch (IllegalArgumentException iae) {}
             }
         }
     }
 
-    private static void testLenientPadding() throws Throwable {
-        String[] data = new String[] {
-            "=",         "",        // unnecessary padding
-            "QUJD=",     "ABC",     //"ABC".encode() -> "QUJD"
+    private static void testMalformedPadding() throws Throwable {
+        Object[] data = new Object[] {
+            "$=#",       "",      0,      // illegal ending unit
+            "A",         "",      0,      // dangling single byte
+            "A=",        "",      0,
+            "A==",       "",      0,
+            "QUJDA",     "ABC",   4,
+            "QUJDA=",    "ABC",   4,
+            "QUJDA==",   "ABC",   4,
 
-            "QQ=",       "A",       // incomplete padding
-            "QQ=N",      "A",       // incorrect padding
-            "QQ=?",      "A",
-            "QUJDQQ=",   "ABCA",
-            "QUJDQQ=N",  "ABCA",
-            "QUJDQQ=?",  "ABCA",
+            "=",         "",      0,      // unnecessary padding
+            "QUJD=",     "ABC",   4,      //"ABC".encode() -> "QUJD"
 
-            "QUI=X",     "AB",      // incorrect padding
-            "QUI=?",     "AB",      // incorrect padding
+            "AA=",       "",      0,      // incomplete padding
+            "QQ=",       "",      0,
+            "QQ=N",      "",      0,      // incorrect padding
+            "QQ=?",      "",      0,
+            "QUJDQQ=",   "ABC",   4,
+            "QUJDQQ=N",  "ABC",   4,
+            "QUJDQQ=?",  "ABC",   4,
         };
-        Base64.Decoder dec = Base64.getMimeDecoder();
 
-        for (int i = 0; i < data.length; i += 2) {
-            byte[] src = data[i].getBytes("ASCII");
-            byte[] expected = data[i + 1].getBytes("ASCII");
-            // decode(byte[])
-            byte[] ret = dec.decode(src);
-            checkEqual(ret, expected, "lenient padding decoding failed!");
+        Base64.Decoder[] decs = new Base64.Decoder[] {
+            Base64.getDecoder(),
+            Base64.getUrlDecoder(),
+            Base64.getMimeDecoder()
+        };
 
-            // decode(String)
-            ret = dec.decode(data[i]);
-            checkEqual(ret, expected, "lenient padding decoding failed!");
+        for (Base64.Decoder dec : decs) {
+            for (int i = 0; i < data.length; i += 3) {
+                final String srcStr = (String)data[i];
+                final byte[] srcBytes = srcStr.getBytes("ASCII");
+                final ByteBuffer srcBB = ByteBuffer.wrap(srcBytes);
+                byte[] expected = ((String)data[i + 1]).getBytes("ASCII");
+                int pos = (Integer)data[i + 2];
 
-            // decode(ByteBuffer)
-            ByteBuffer srcBB = ByteBuffer.wrap(src);
-            ByteBuffer retBB = dec.decode(srcBB);
-            checkEqual(srcBB.remaining(), 0, "lenient padding decoding failed!");
-            checkEqual(Arrays.copyOf(retBB.array(), retBB.remaining()),
-                       expected, "lenient padding decoding failed!");
+                // decode(byte[])
+                checkIAE(new Runnable() { public void run() { dec.decode(srcBytes); }});
+
+                // decode(String)
+                checkIAE(new Runnable() { public void run() { dec.decode(srcStr); }});
+
+                // decode(ByteBuffer)
+                checkIAE(new Runnable() { public void run() { dec.decode(srcBB); }});
 
-            // wrap.decode(byte[])
-            ret = new byte[10];
-            int n = dec.wrap(new ByteArrayInputStream(src)).read(ret);
-            checkEqual(Arrays.copyOf(ret, n), expected, "lenient padding decoding failed!");
+                // wrap stream
+                checkIOE(new Testable() {
+                    public void test() throws IOException {
+                        try (InputStream is = dec.wrap(new ByteArrayInputStream(srcBytes))) {
+                            while (is.read() != -1);
+                        }
+                }});
+            }
         }
     }
 
@@ -520,51 +467,6 @@
         }
     }
 
-    private static void testDecBufRet() throws Throwable {
-        Random rnd = new java.util.Random();
-        Base64.Encoder encoder = Base64.getEncoder();
-        Base64.Decoder decoder = Base64.getDecoder();
-        //                src   pos, len  expected
-        int[][] tests = { { 6,    3,   3,   3},   // xxx xxx    -> yyyy yyyy
-                          { 6,    3,   4,   3},
-                          { 6,    3,   5,   3},
-                          { 6,    3,   6,   6},
-                          { 6,   11,   4,   3},
-                          { 6,   11,   4,   3},
-                          { 6,   11,   5,   3},
-                          { 6,   11,   6,   6},
-                          { 7,    3,   6,   6},   // xxx xxx x  -> yyyy yyyy yy==
-                          { 7,    3,   7,   7},
-                          { 7,   11,   6,   6},
-                          { 7,   11,   7,   7},
-                          { 8,    3,   6,   6},   // xxx xxx xx -> yyyy yyyy yyy=
-                          { 8,    3,   7,   6},
-                          { 8,    3,   8,   8},
-                          { 8,   13,   6,   6},
-                          { 8,   13,   7,   6},
-                          { 8,   13,   8,   8},
-
-        };
-        ByteBuffer dstBuf = ByteBuffer.allocate(100);
-        for (boolean direct : new boolean[] { false, true}) {
-            for (int[] test : tests) {
-                byte[] src = new byte[test[0]];
-                rnd.nextBytes(src);
-                ByteBuffer srcBuf = direct ? ByteBuffer.allocate(100)
-                                           : ByteBuffer.allocateDirect(100);
-                srcBuf.put(encoder.encode(src)).flip();
-                dstBuf.clear().position(test[1]).limit(test[1]+ test[2]);
-                int ret = decoder.decode(srcBuf, dstBuf);
-                if (ret != test[3]) {
-                    System.out.printf(" [%6s] src=%d, pos=%d, len=%d, expected=%d, ret=%d%n",
-                                      direct?"direct":"",
-                                      test[0], test[1], test[2], test[3], ret);
-                    throw new RuntimeException("ret != expected");
-                }
-            }
-        }
-    }
-
     private static final void testEncode(Base64.Encoder enc, ByteBuffer bin, byte[] expected)
         throws Throwable {
 
@@ -587,71 +489,6 @@
         checkEqual(buf, expected, "Base64 dec.decode(bf) failed!");
     }
 
-    private static final void testEncode(Base64.Encoder enc, byte[] expected,
-                                         ByteBuffer ibb, ByteBuffer obb)
-        throws Throwable {
-        Random rnd = new Random();
-        int bytesOut = enc.encode(ibb, obb, 0);
-        if (ibb.hasRemaining()) {
-            throw new RuntimeException(
-                "Base64 enc.encode(bf, bf) failed with wrong return!");
-        }
-        obb.flip();
-        byte[] buf = new byte[obb.remaining()];
-        obb.get(buf);
-        checkEqual(buf, expected, "Base64 enc.encode(bf, bf) failed!");
-        ibb.rewind();
-        obb.position(0);
-        obb.limit(0);
-        bytesOut = 0;
-
-        do {  // increase the "limit" incrementally & randomly
-            int n = rnd.nextInt(expected.length - obb.position());
-            if (n == 0)
-                n = 1;
-            obb.limit(obb.limit() + n);
-            //obb.limit(Math.min(obb.limit() + n, expected.length));
-            bytesOut = enc.encode(ibb, obb, bytesOut);
-        } while (ibb.hasRemaining());
-        obb.flip();
-        buf = new byte[obb.remaining()];
-        obb.get(buf);
-        checkEqual(buf, expected, "Base64 enc.encode(bf, bf) failed!");
-    }
-
-    private static final void testDecode(Base64.Decoder dec, byte[] expected,
-                                         ByteBuffer ibb, ByteBuffer obb)
-        throws Throwable {
-        Random rnd = new Random();
-
-        dec.decode(ibb, obb);
-        if (ibb.hasRemaining()) {
-            throw new RuntimeException(
-                "Base64 dec.decode(bf, bf) failed with un-decoded ibb!");
-        }
-        obb.flip();
-        byte[] buf = new byte[obb.remaining()];
-        obb.get(buf);
-        checkEqual(buf, expected, "Base64 dec.decode(bf, bf) failed!");
-
-        ibb.rewind();
-        obb.position(0);
-        obb.limit(0);
-        do {  // increase the "limit" incrementally & randomly
-            int n = rnd.nextInt(expected.length - obb.position());
-            if (n == 0)
-                n = 1;
-            obb.limit(obb.limit() + n);
-            dec.decode(ibb, obb);
-         } while (ibb.hasRemaining());
-
-
-        obb.flip();
-        buf = new byte[obb.remaining()];
-        obb.get(buf);
-        checkEqual(buf, expected, "Base64 dec.decode(bf, bf) failed!");
-    }
-
     private static final void checkEqual(int v1, int v2, String msg)
         throws Throwable {
        if (v1 != v2) {
--- a/test/java/util/Base64/TestBase64Golden.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/java/util/Base64/TestBase64Golden.java	Thu Dec 12 20:04:31 2013 -0800
@@ -55,7 +55,6 @@
         test0(Base64Type.MIME, Base64.getMimeEncoder(), Base64.getMimeDecoder(),
               "plain.txt", "mimeEncode.txt");
         test1();
-        test2();
     }
 
     public static void test0(Base64Type type, Encoder encoder, Decoder decoder,
@@ -113,28 +112,6 @@
             assertEqual(resBuf, encodedBuf);
             srcBuf.rewind(); // reset for next test
 
-            // test encode(ByteBuffer, ByteBuffer, bytesOut)
-            resBuf.clear();
-            len = encoder.encode(srcBuf, resBuf, 0);
-            assertEqual(len, encodedArr.length);
-            assertEqual(srcBuf.position(), limit);
-            assertEqual(srcBuf.limit(), limit);
-            assertEqual(resBuf.position(), len);
-            resBuf.flip();
-            assertEqual(resBuf, encodedBuf);
-            srcBuf.rewind();
-
-            // test encode(ByteBuffer, ByteBuffer, bytesOut)[direct]
-            ByteBuffer resBuf_d = ByteBuffer.allocateDirect(encodedArr.length);
-            len = encoder.encode(srcBuf, resBuf_d, 0);
-            assertEqual(len, encodedArr.length);
-            assertEqual(srcBuf.position(), limit);
-            assertEqual(srcBuf.limit(), limit);
-            assertEqual(resBuf_d.position(), len);
-            resBuf_d.flip();
-            assertEqual(resBuf_d, encodedBuf);
-            srcBuf.rewind();
-
             // test String encodeToString(byte[])
             String resEncodeStr = encoder.encodeToString(srcArr);
             assertEqual(resEncodeStr, encodedStr);
@@ -157,28 +134,6 @@
             assertEqual(resBuf, srcBuf);
             encodedBuf.rewind(); // reset for next test
 
-            // test int decode(ByteBuffer, ByteBuffer)
-            resBuf.clear();
-            len = decoder.decode(encodedBuf, resBuf);
-            assertEqual(len, srcArr.length);
-            assertEqual(encodedBuf.position(), limit);
-            assertEqual(encodedBuf.limit(), limit);
-            assertEqual(resBuf.position(), len);
-            resBuf.flip();
-            assertEqual(resBuf, srcBuf);
-            encodedBuf.rewind(); // reset for next test
-
-            // test int decode(ByteBuffer, ByteBuffer)[direct]
-            resBuf_d = ByteBuffer.allocateDirect(srcArr.length);
-            len = decoder.decode(encodedBuf, resBuf_d);
-            assertEqual(len, srcArr.length);
-            assertEqual(encodedBuf.position(), limit);
-            assertEqual(encodedBuf.limit(), limit);
-            assertEqual(resBuf_d.position(), len);
-            resBuf_d.flip();
-            assertEqual(resBuf_d, srcBuf);
-            encodedBuf.rewind(); // reset for next test
-
             // test byte[] decode(String)
             resArr = decoder.decode(encodedStr);
             assertEqual(resArr, srcArr);
@@ -197,35 +152,6 @@
     }
 
     private static void test1() throws Exception {
-        byte[] src = new byte[6];
-        new Random().nextBytes(src);
-
-        ByteBuffer srcBuf = ByteBuffer.allocate(10);
-        srcBuf.position(2);
-        srcBuf.mark();
-        srcBuf.limit(8);
-        srcBuf.put(src);
-        srcBuf.reset();
-
-        ByteBuffer dstBuf = ByteBuffer.allocate((src.length + 2) / 3 * 4);
-        Base64.getEncoder().encode(srcBuf, dstBuf, 0);
-        dstBuf.rewind();
-        byte[] dst = new byte[dstBuf.limit()];
-        dstBuf.get(dst);
-        System.out.printf("%n    src[%d]: %s%n", src.length, new String(src));
-        System.out.printf("encoded[%d]: %s%n",   dst.length, new String(dst));
-        assertEqual(src, Base64.getDecoder().decode(dst));
-
-        dstBuf = ByteBuffer.allocateDirect((src.length + 2) / 3 * 4);
-        srcBuf.reset();
-        Base64.getEncoder().encode(srcBuf, dstBuf, 0);
-        dstBuf.rewind();
-        dst = new byte[dstBuf.limit()];
-        dstBuf.get(dst);
-        assertEqual(src, Base64.getDecoder().decode(dst));
-    }
-
-    private static void test2() throws Exception {
         byte[] src = new byte[] {
             46, -97, -35, -44, 127, -60, -39, -4, -112, 34, -57, 47, -14, 67,
             40, 18, 90, -59, 68, 112, 23, 121, -91, 94, 35, 49, 104, 17, 30,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/concurrent/CompletableFuture/ThenComposeAsyncTest.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,69 @@
+/*
+ * 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.testng.Assert;
+import org.testng.annotations.Test;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CountDownLatch;
+
+
+/**
+ * @test
+ * @bug 8029164
+ * @run testng ThenComposeAsyncTest
+ * @run testng/othervm -Djava.util.concurrent.ForkJoinPool.common.parallelism=0 ThenComposeAsyncTest
+ * @summary Test that CompletableFuture.thenCompose works correctly if the
+ * composing task is complete before composition
+ */
+@Test
+public class ThenComposeAsyncTest {
+
+    public void testThenComposeAsync() throws Exception {
+        // Composing CompletableFuture is complete
+        CompletableFuture<String> cf1 = CompletableFuture.completedFuture("one");
+
+        // Composing function returns a CompletableFuture executed asynchronously
+        CountDownLatch cdl = new CountDownLatch(1);
+        CompletableFuture<String> cf2 = cf1.thenCompose(str -> CompletableFuture.supplyAsync(() -> {
+            while (true) {
+                try {
+                    cdl.await();
+                    break;
+                }
+                catch (InterruptedException e) {
+                }
+            }
+            return str + ", two";
+        }));
+
+        // Ensure returned CompletableFuture completes after call to thenCompose
+        // This guarantees that any premature internal completion will be
+        // detected
+        cdl.countDown();
+
+        String val = cf2.get();
+        Assert.assertNotNull(val);
+        Assert.assertEquals(val, "one, two");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/concurrent/ConcurrentHashMap/ConcurrentAssociateTest.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,145 @@
+/*
+ * 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.testng.annotations.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.function.BiConsumer;
+import java.util.function.Supplier;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+/**
+ * @test
+ * @bug 8028564
+ * @run testng ConcurrentAssociateTest
+ * @summary Test that association operations, such as put and compute,
+ * place entries in the map
+ */
+@Test
+public class ConcurrentAssociateTest {
+
+    // The number of entries for each thread to place in a map
+    private static final int N = Integer.getInteger("n", 128);
+    // The number of iterations of the test
+    private static final int I = Integer.getInteger("i", 256);
+
+    // Object to be placed in the concurrent map
+    static class X {
+        // Limit the hash code to trigger collisions
+        int hc = ThreadLocalRandom.current().nextInt(1, 9);
+
+        public int hashCode() { return hc; }
+    }
+
+    @Test
+    public void testPut() {
+        test("CHM.put", (m, o) -> m.put(o, o));
+    }
+
+    @Test
+    public void testCompute() {
+        test("CHM.compute", (m, o) -> m.compute(o, (k, v) -> o));
+    }
+
+    @Test
+    public void testComputeIfAbsent() {
+        test("CHM.computeIfAbsent", (m, o) -> m.computeIfAbsent(o, (k) -> o));
+    }
+
+    @Test
+    public void testMerge() {
+        test("CHM.merge", (m, o) -> m.merge(o, o, (v1, v2) -> v1));
+    }
+
+    @Test
+    public void testPutAll() {
+        test("CHM.putAll", (m, o) -> {
+            Map<Object, Object> hm = new HashMap<>();
+            hm.put(o, o);
+            m.putAll(hm);
+        });
+    }
+
+    private static void test(String desc, BiConsumer<ConcurrentMap<Object, Object>, Object> associator) {
+        for (int i = 0; i < I; i++) {
+            testOnce(desc, associator);
+        }
+    }
+
+    static class AssociationFailure extends RuntimeException {
+        AssociationFailure(String message) {
+            super(message);
+        }
+    }
+
+    private static void testOnce(String desc, BiConsumer<ConcurrentMap<Object, Object>, Object> associator) {
+        ConcurrentHashMap<Object, Object> m = new ConcurrentHashMap<>();
+        CountDownLatch s = new CountDownLatch(1);
+
+        Supplier<Runnable> sr = () -> () -> {
+            try {
+                s.await();
+            }
+            catch (InterruptedException e) {
+            }
+
+            for (int i = 0; i < N; i++) {
+                Object o = new X();
+                associator.accept(m, o);
+                if (!m.containsKey(o)) {
+                    throw new AssociationFailure(desc + " failed: entry does not exist");
+                }
+            }
+        };
+
+        int ps = Runtime.getRuntime().availableProcessors();
+        Stream<CompletableFuture> runners = IntStream.range(0, ps)
+                .mapToObj(i -> sr.get())
+                .map(CompletableFuture::runAsync);
+
+        CompletableFuture all = CompletableFuture.allOf(
+                runners.toArray(CompletableFuture[]::new));
+
+        // Trigger the runners to start associating
+        s.countDown();
+        try {
+            all.join();
+        } catch (CompletionException e) {
+            Throwable t = e.getCause();
+            if (t instanceof AssociationFailure) {
+                throw (AssociationFailure) t;
+            }
+            else {
+                throw e;
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/concurrent/ConcurrentHashMap/ConcurrentContainsKeyTest.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,137 @@
+/*
+ * 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.testng.annotations.Test;
+
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.function.Supplier;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+/**
+ * @test
+ * @bug 8028564
+ * @run testng ConcurrentContainsKeyTest
+ * @summary Test that entries are always present in the map,
+ * when entries are held within one bin that is a tree
+ */
+@Test
+public class ConcurrentContainsKeyTest {
+
+    // The number of entries for each thread to place in a map
+    // Should be > ConcurrentHashMap.TREEIFY_THRESHOLD but small
+    // enough to allow for enough iteration overlap by multiple threads
+    private static final int N = Integer.getInteger("n", 16);
+    // The number of rounds each thread performs per entry
+    private static final int R = Integer.getInteger("r", 32);
+    // The number of iterations of the test
+    private static final int I = Integer.getInteger("i", 256);
+
+    // Object to be placed in the concurrent map
+    static class X implements Comparable<X> {
+
+        private final int a;
+
+        X(int a) {
+            this.a = a;
+        }
+
+        public int compareTo(X o) {
+            return this.a - o.a;
+        }
+
+        public int hashCode() {
+            // Return the same hash code to guarantee collisions
+            return 0;
+        }
+    }
+
+    @Test
+    public void testContainsKey() {
+        X[] content = IntStream.range(0, N).mapToObj(i -> new X(i)).toArray(X[]::new);
+        // Create map with an initial size >= ConcurrentHashMap.TREEIFY_THRESHOLD
+        // ensuring tree'ification will occur for a small number of entries
+        // with the same hash code
+        ConcurrentHashMap<Object, Object> m = new ConcurrentHashMap<>(64);
+        Stream.of(content).forEach(x -> m.put(x, x));
+        test(content, m);
+    }
+
+
+    private static void test(X[] content, ConcurrentHashMap<Object, Object> m) {
+        for (int i = 0; i < I; i++) {
+            testOnce(content, m);
+        }
+    }
+
+    static class AssociationFailure extends RuntimeException {
+        AssociationFailure(String message) {
+            super(message);
+        }
+    }
+
+    private static void testOnce(Object[] content, ConcurrentHashMap<Object, Object> m) {
+        CountDownLatch s = new CountDownLatch(1);
+
+        Supplier<Runnable> sr = () -> () -> {
+            try {
+                s.await();
+            }
+            catch (InterruptedException e) {
+            }
+
+            for (int i = 0; i < R * N; i++) {
+                Object o = content[i % content.length];
+                if (!m.containsKey(o)) {
+                    throw new AssociationFailure("CHM.containsKey failed: entry does not exist");
+                }
+            }
+        };
+
+        int ps = Runtime.getRuntime().availableProcessors();
+        Stream<CompletableFuture> runners = IntStream.range(0, ps)
+                .mapToObj(i -> sr.get())
+                .map(CompletableFuture::runAsync);
+
+        CompletableFuture all = CompletableFuture.allOf(
+                runners.toArray(CompletableFuture[]::new));
+
+        // Trigger the runners to start checking key membership
+        s.countDown();
+        try {
+            all.join();
+        }
+        catch (CompletionException e) {
+            Throwable t = e.getCause();
+            if (t instanceof AssociationFailure) {
+                throw (AssociationFailure) t;
+            }
+            else {
+                throw e;
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/logging/TestLogConfigurationDeadLock.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,255 @@
+/*
+ * 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);
+                        System.err.println("Found "+ids.length+" deadlocked threads: ");
+                        for (ThreadInfo inf : infos) {
+                            System.err.println(inf.toString());
+                        }
+                        throw new RuntimeException("Found "+ids.length+" deadlocked threads");
+                    }
+                    Thread.sleep(100);
+                } catch(InterruptedException | RuntimeException x) {
+                    fail(x);
+                }
+            }
+        }
+
+    }
+
+    static final class Stopper extends Thread {
+        long start;
+        long time;
+
+        Stopper(long time) {
+            start = System.currentTimeMillis();
+            this.time = time;
+        }
+
+        @Override
+        public void run() {
+            try {
+                long rest, previous;
+                previous = time;
+                while (goOn && (rest = start - System.currentTimeMillis() + time) > 0) {
+                    if (previous == time || previous - rest >= STEP) {
+                        Logger.getLogger("remaining").info(String.valueOf(rest)+"ms remaining...");
+                        previous = rest == time ? rest -1 : rest;
+                        System.gc();
+                    }
+                    if (goOn == false) break;
+                    Thread.sleep(Math.min(rest, 100));
+                }
+                System.out.println(System.currentTimeMillis() - start
+                        + " ms elapsed ("+time+ " requested)");
+                goOn = false;
+            } catch(InterruptedException | RuntimeException x) {
+                fail(x);
+            }
+        }
+
+    }
+
+    static void fail(Exception x) {
+        x.printStackTrace();
+        if (thrown == null) {
+            thrown = x;
+        }
+        goOn = false;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/logging/TestLoggerBundleSync.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,534 @@
+/*
+ * 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.getBaseBundleName())) {
+                                throw new RuntimeException("Unexpected bundle name: "
+                                        +b.getBaseBundleName());
+                            }
+                        }
+                        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.getBaseBundleName());
+                            }
+                            if (!name.equals(hrb.getBaseBundleName())) {
+                                throw new RuntimeException("Unexpected bundle name: "
+                                        +hrb.getBaseBundleName());
+                            }
+                        }
+
+                        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();
+
+                    for (int i=0; i < LCOUNT ; i++) {
+                        if (!goOn) break;
+
+                        ResourceBundle b = ResourceBundle.getBundle(type.getName());
+                        try {
+                            l.setResourceBundle(b);
+                            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.getBaseBundleName().equals(name)) {
+                                throw new RuntimeException(this.getName()
+                                        + ": Unexpected base name: " +
+                                        b.getBaseBundleName());
+                            }
+                            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.getBaseBundleName(), rbName)) {
+                        throw new RuntimeException("Unexpected base name for "
+                            + logger.getName() + ": " + b.getBaseBundleName());
+                    }
+                } 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.getBaseBundleName().equals(name)) {
+                                throw new RuntimeException(this.getName()
+                                        + ": Unexpected base name: "
+                                        + bb.getBaseBundleName());
+                            }
+                            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;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/util/stream/TestDoubleSumAverage.java	Thu Dec 12 20:04:31 2013 -0800
@@ -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.
+ */
+
+import java.util.*;
+import java.util.function.*;
+import java.util.stream.*;
+
+/*
+ * @test
+ * @bug 8006572
+ * @summary Test for use of non-naive summation in stream-related sum and average operations.
+ */
+public class TestDoubleSumAverage {
+    public static void main(String... args) {
+        int failures = 0;
+
+        failures += testForCompenstation();
+        failures += testZeroAverageOfNonEmptyStream();
+
+        if (failures > 0) {
+            throw new RuntimeException("Found " + failures + " numerical failure(s).");
+        }
+    }
+
+    /**
+     * Compute the sum and average of a sequence of double values in
+     * various ways and report an error if naive summation is used.
+     */
+    private static int testForCompenstation() {
+        int failures = 0;
+
+        /*
+         * The exact sum of the test stream is 1 + 1e6*ulp(1.0) but a
+         * naive summation algorithm will return 1.0 since (1.0 +
+         * ulp(1.0)/2) will round to 1.0 again.
+         */
+        double base = 1.0;
+        double increment = Math.ulp(base)/2.0;
+        int count = 1_000_001;
+
+        double expectedSum = base + (increment * (count - 1));
+        double expectedAvg = expectedSum / count;
+
+        // Factory for double a stream of [base, increment, ..., increment] limited to a size of count
+        Supplier<DoubleStream> ds = () -> DoubleStream.iterate(base, e -> increment).limit(count);
+
+        DoubleSummaryStatistics stats = ds.get().collect(DoubleSummaryStatistics::new,
+                                                         DoubleSummaryStatistics::accept,
+                                                         DoubleSummaryStatistics::combine);
+
+        failures += compareUlpDifference(expectedSum, stats.getSum(), 3);
+        failures += compareUlpDifference(expectedAvg, stats.getAverage(), 3);
+
+        failures += compareUlpDifference(expectedSum,
+                                         ds.get().sum(), 3);
+        failures += compareUlpDifference(expectedAvg,
+                                         ds.get().average().getAsDouble(), 3);
+
+        failures += compareUlpDifference(expectedSum,
+                                         ds.get().boxed().collect(Collectors.summingDouble(d -> d)), 3);
+        failures += compareUlpDifference(expectedAvg,
+                                         ds.get().boxed().collect(Collectors.averagingDouble(d -> d)),3);
+        return failures;
+    }
+
+    /**
+     * Test to verify that a non-empty stream with a zero average is non-empty.
+     */
+    private static int testZeroAverageOfNonEmptyStream() {
+        Supplier<DoubleStream> ds = () -> DoubleStream.iterate(0.0, e -> 0.0).limit(10);
+
+        return  compareUlpDifference(0.0, ds.get().average().getAsDouble(), 0);
+    }
+
+    /**
+     * Compute the ulp difference of two double values and compare against an error threshold.
+     */
+    private static int compareUlpDifference(double expected, double computed, double threshold) {
+        double ulpDifference = Math.abs(expected - computed) / Math.ulp(expected);
+
+        if (ulpDifference > threshold) {
+            System.err.printf("Numerical summation error too large, %g ulps rather than %g.%n",
+                              ulpDifference, threshold);
+            return 1;
+        } else
+            return 0;
+    }
+}
--- a/test/lib/testlibrary/jdk/testlibrary/ProcessThread.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/lib/testlibrary/jdk/testlibrary/ProcessThread.java	Thu Dec 12 20:04:31 2013 -0800
@@ -37,39 +37,21 @@
     /**
      * Creates a new {@code ProcessThread} object.
      *
-     * @param cmd The list of program and its arguments to pass to {@link ProcessBuilder}
+     * @param threadName The name of thread
+     * @param cmd The string array of program and its arguments to pass to {@link ProcessBuilder}
      */
-    public ProcessThread(List<String> cmd) {
-        super(new ProcessRunnable(cmd));
+    public ProcessThread(String threadName, String... cmd) {
+        super(new ProcessRunnable(new ProcessBuilder(cmd)), threadName);
     }
 
     /**
      * Creates a new {@code ProcessThread} object.
      *
-     * @param cmd The string array of program and its arguments to pass to {@link ProcessBuilder}
-     */
-    public ProcessThread(String... cmd) {
-        super(new ProcessRunnable(cmd));
-    }
-
-    /**
-     * Creates a new {@code ProcessThread} object.
-     *
-     * @param threadName The name of thread
-     * @param cmd The list of program and its arguments to pass to {@link ProcessBuilder}
+     * @param threadName The name of thread.
+     * @param pb The ProcessBuilder to execute.
      */
-    public ProcessThread(String threadName, List<String> cmd) {
-        super(new ProcessRunnable(cmd), threadName);
-    }
-
-    /**
-     * Creates a new {@code ProcessThread} object.
-     *
-     * @param threadName The name of thread
-     * @param cmd The string array of program and its arguments to pass to {@link ProcessBuilder}
-     */
-    public ProcessThread(String threadName, String... cmd) {
-        super(new ProcessRunnable(cmd), threadName);
+    public ProcessThread(String threadName, ProcessBuilder pb) {
+        super(new ProcessRunnable(pb), threadName);
     }
 
     /**
@@ -82,6 +64,13 @@
     }
 
     /**
+     * @return The process output, or null if the process has not yet completed.
+     */
+    public OutputAnalyzer getOutput() {
+        return ((ProcessRunnable) getRunnable()).getOutput();
+    }
+
+    /**
      * {@link Runnable} interface for starting and stopping {@link Process}.
      */
     static class ProcessRunnable extends XRun {
@@ -89,26 +78,16 @@
         private final ProcessBuilder processBuilder;
         private final CountDownLatch latch;
         private volatile Process process;
+        private volatile OutputAnalyzer output;
 
         /**
          * Creates a new {@code ProcessRunnable} object.
          *
-         * @param cmd The list of program and its arguments to to pass to {@link ProcessBuilder}
+         * @param pb The {@link ProcessBuilder} to run.
          */
-        public ProcessRunnable(List<String> cmd) {
+        public ProcessRunnable(ProcessBuilder pb) {
             super();
-            this.processBuilder = new ProcessBuilder(cmd);
-            this.latch = new CountDownLatch(1);
-        }
-
-        /**
-         * Creates a new {@code ProcessRunnable} object.
-         *
-         * @param cmd The string array of program and its arguments to to pass to {@link ProcessBuilder}
-         */
-        public ProcessRunnable(String... cmd) {
-            super();
-            this.processBuilder = new ProcessBuilder(cmd);
+            this.processBuilder = pb;
             this.latch = new CountDownLatch(1);
         }
 
@@ -125,12 +104,16 @@
             latch.countDown();
 
             // Will block...
-            OutputAnalyzer output = new OutputAnalyzer(this.process);
-
-            assertTrue(output.getOutput().isEmpty(), "Should get an empty output, got: "
-                        + Utils.NEW_LINE + output.getOutput());
-            assertNotEquals(output.getExitValue(), 0,
-                    "Process exited with unexpected exit code");
+            try {
+                output = new OutputAnalyzer(this.process);
+            } catch (Throwable t) {
+                String name = Thread.currentThread().getName();
+                System.out.println(String.format("ProcessThread[%s] failed: %s", name, t.toString()));
+                throw t;
+            } finally {
+                String logMsg = ProcessTools.getProcessLog(processBuilder, output);
+                System.out.println(logMsg);
+            }
         }
 
         /**
@@ -142,10 +125,19 @@
             // Wait until process is started
             latch.await();
             if (this.process != null) {
+                System.out.println("ProcessThread.stopProcess() will kill process");
                 this.process.destroy();
             }
         }
 
+        /**
+         * Returns the OutputAnalyzer with stdout/stderr from the process.
+         * @return The process output, or null if process not completed.
+         * @throws InterruptedException
+         */
+        public OutputAnalyzer getOutput() {
+            return output;
+        }
     }
 
 }
--- a/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/lib/testlibrary/jdk/testlibrary/ProcessTools.java	Thu Dec 12 20:04:31 2013 -0800
@@ -266,4 +266,79 @@
         }
     }
 
+    /**
+     * Executes a test jvm process, waits for it to finish and returns the process output.
+     * The default jvm options from jtreg, test.vm.opts and test.java.opts, are added.
+     * The java from the test.jdk is used to execute the command.
+     *
+     * The command line will be like:
+     * {test.jdk}/bin/java {test.vm.opts} {test.java.opts} cmds
+     *
+     * @param cmds User specifed arguments.
+     * @return The output from the process.
+     */
+    public static OutputAnalyzer executeTestJvm(String... cmds) throws Throwable {
+        ProcessBuilder pb = createJavaProcessBuilder(Utils.addTestJavaOpts(cmds));
+        return executeProcess(pb);
+    }
+
+    /**
+     * Executes a process, waits for it to finish and returns the process output.
+     * @param pb The ProcessBuilder to execute.
+     * @return The output from the process.
+     */
+    public static OutputAnalyzer executeProcess(ProcessBuilder pb) throws Throwable {
+        OutputAnalyzer output = null;
+        try {
+            output = new OutputAnalyzer(pb.start());
+            return output;
+        } catch (Throwable t) {
+            System.out.println("executeProcess() failed: " + t);
+            throw t;
+        } finally {
+            System.out.println(getProcessLog(pb, output));
+        }
+    }
+
+    /**
+     * Executes a process, waits for it to finish and returns the process output.
+     * @param cmds The command line to execute.
+     * @return The output from the process.
+     */
+    public static OutputAnalyzer executeProcess(String... cmds) throws Throwable {
+        return executeProcess(new ProcessBuilder(cmds));
+    }
+
+    /**
+     * Used to log command line, stdout, stderr and exit code from an executed process.
+     * @param pb The executed process.
+     * @param output The output from the process.
+     */
+    public static String getProcessLog(ProcessBuilder pb, OutputAnalyzer output) {
+        String stderr = output == null ? "null" : output.getStderr();
+        String stdout = output == null ? "null" : output.getStdout();
+        String exitValue = output == null ? "null": Integer.toString(output.getExitValue());
+        StringBuilder logMsg = new StringBuilder();
+        final String nl = System.getProperty("line.separator");
+        logMsg.append("--- ProcessLog ---" + nl);
+        logMsg.append("cmd: " + getCommandLine(pb) + nl);
+        logMsg.append("exitvalue: " + exitValue + nl);
+        logMsg.append("stderr: " + stderr + nl);
+        logMsg.append("stdout: " + stdout + nl);
+        return logMsg.toString();
+    }
+
+    /**
+     * @return The full command line for the ProcessBuilder.
+     */
+    public static String getCommandLine(ProcessBuilder pb) {
+        if (pb == null) {
+            return "null";
+        }
+        StringBuilder cmd = new StringBuilder();
+        for (String s : pb.command()) {
+            cmd.append(s).append(" ");
+        }
+        return cmd.toString().trim();
+    }
 }
--- a/test/lib/testlibrary/jdk/testlibrary/Utils.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/lib/testlibrary/jdk/testlibrary/Utils.java	Thu Dec 12 20:04:31 2013 -0800
@@ -33,6 +33,8 @@
 import java.util.List;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
 
 /**
  * Common library for various test helper functions.
@@ -170,4 +172,61 @@
         return hostName;
     }
 
+    /**
+     * Uses "jcmd -l" to search for a jvm pid. This function will wait
+     * forever (until jtreg timeout) for the pid to be found.
+     * @param key Regular expression to search for
+     * @return The found pid.
+     */
+    public static int waitForJvmPid(String key) throws Throwable {
+        final long iterationSleepMillis = 250;
+        System.out.println("waitForJvmPid: Waiting for key '" + key + "'");
+        System.out.flush();
+        while (true) {
+            int pid = tryFindJvmPid(key);
+            if (pid >= 0) {
+                return pid;
+            }
+            Thread.sleep(iterationSleepMillis);
+        }
+    }
+
+    /**
+     * Searches for a jvm pid in the output from "jcmd -l".
+     *
+     * Example output from jcmd is:
+     * 12498 sun.tools.jcmd.JCmd -l
+     * 12254 /tmp/jdk8/tl/jdk/JTwork/classes/com/sun/tools/attach/Application.jar
+     *
+     * @param key A regular expression to search for.
+     * @return The found pid, or -1 if Enot found.
+     * @throws Exception If multiple matching jvms are found.
+     */
+    public static int tryFindJvmPid(String key) throws Throwable {
+        ProcessBuilder pb = null;
+        OutputAnalyzer output = null;
+        try {
+            JDKToolLauncher jcmdLauncher = JDKToolLauncher.create("jcmd");
+            jcmdLauncher.addToolArg("-l");
+            output = ProcessTools.executeProcess(jcmdLauncher.getCommand());
+            output.shouldHaveExitValue(0);
+
+            // Search for a line starting with numbers (pid), follwed by the key.
+            Pattern pattern = Pattern.compile("([0-9]+)\\s.*(" + key + ").*\\r?\\n");
+            Matcher matcher = pattern.matcher(output.getStdout());
+
+            int pid = -1;
+            if (matcher.find()) {
+                pid = Integer.parseInt(matcher.group(1));
+                System.out.println("findJvmPid.pid: " + pid);
+                if (matcher.find()) {
+                    throw new Exception("Found multiple JVM pids for key: " + key);
+                }
+            }
+            return pid;
+        } catch (Throwable t) {
+            System.out.println(String.format("Utils.findJvmPid(%s) failed: %s", key, t));
+            throw t;
+        }
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/net/www/protocol/http/RedirectOnPost.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,175 @@
+/*
+ * 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
+ * @compile ../../../../../com/sun/net/httpserver/SimpleSSLContext.java RedirectOnPost.java
+ * @run main/othervm RedirectOnPost
+ * @bug 8029127
+ * @summary A redirect POST request does not work and illegalStateException on HttpURLConnection.getInputStream
+ */
+
+import java.net.*;
+import java.io.*;
+import java.util.*;
+import com.sun.net.httpserver.*;
+import java.util.concurrent.*;
+import javax.net.ssl.*;
+
+public class RedirectOnPost {
+
+
+    public static void main(String[] args) throws Exception {
+            ExecutorService e= Executors.newFixedThreadPool(5);
+        String keysdir = System.getProperty("test.src")
+                  + "/../../../../../com/sun/net/httpserver/";
+        SSLContext ctx = new SimpleSSLContext(keysdir).get();
+            HttpServer httpServer = getHttpServer(e);
+            HttpsServer httpsServer = getHttpsServer(e, ctx);
+
+        try {
+            // take the keystore from elsewhere in test hierarchy
+            int port = httpServer.getAddress().getPort();
+            int sslPort = httpsServer.getAddress().getPort();
+            httpServer.start();
+            httpsServer.start();
+            runTest("http://127.0.0.1:"+port+"/test/", null);
+            runTest("https://127.0.0.1:"+sslPort+"/test/", ctx);
+            System.out.println("Main thread waiting");
+        } finally {
+            httpServer.stop(0);
+            httpsServer.stop(0);
+            e.shutdownNow();
+        }
+    }
+
+    public static void runTest(String baseURL, SSLContext ctx) throws Exception
+    {
+        byte[] buf = "Hello world".getBytes();
+        URL url = new URL(baseURL + "a");
+        HttpURLConnection con = (HttpURLConnection)url.openConnection();
+        if (con instanceof HttpsURLConnection) {
+            HttpsURLConnection ssl = (HttpsURLConnection)con;
+            ssl.setHostnameVerifier(new HostnameVerifier() {
+                public boolean verify(String host, SSLSession sess) {
+                    return true;
+                }
+            });
+            ssl.setSSLSocketFactory (ctx.getSocketFactory());
+        }
+        con.setDoOutput(true);
+        con.setDoInput(true);
+        con.setRequestMethod("POST");
+        try (OutputStream out = con.getOutputStream()) {
+            out.write(buf);
+        }
+        try (InputStream in = con.getInputStream()) {
+            byte[] newBuf = readFully(in);
+        }
+    }
+
+    private static byte[] readFully(InputStream istream) throws IOException {
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        byte[] buf = new byte[1024];
+        int num = 0;
+
+        if (istream != null) {
+            while ((num = istream.read(buf)) != -1) {
+                bout.write(buf, 0, num);
+            }
+        }
+        byte[] ret = bout.toByteArray();
+        return ret;
+    }
+
+
+    static class Handler implements HttpHandler {
+
+        String baseURL;
+
+        Handler(String baseURL) {
+            this.baseURL = baseURL;
+        }
+
+        int calls = 0;
+
+        public void handle(HttpExchange msg) {
+            try {
+                String method = msg.getRequestMethod();
+                System.out.println ("Server: " + baseURL);
+                if (calls++ == 0) {
+                    System.out.println ("Server: redirecting");
+                    InputStream is = msg.getRequestBody();
+                    byte[] buf = readFully(is);
+                    is.close();
+                    Headers h = msg.getResponseHeaders();
+                    h.add("Location", baseURL + "b");
+                    msg.sendResponseHeaders(302, -1);
+                    msg.close();
+                } else {
+                    System.out.println ("Server: second call");
+                    InputStream is = msg.getRequestBody();
+                    byte[] buf = readFully(is);
+                    is.close();
+                    msg.sendResponseHeaders(200, -1);
+                    msg.close();
+                }
+            }
+            catch(Exception e) {
+                e.printStackTrace();
+            }
+            finally {
+                msg.close();
+            }
+        }
+    }
+
+    private static HttpServer getHttpServer(ExecutorService execs)
+        throws Exception
+    {
+        InetSocketAddress inetAddress = new InetSocketAddress(0);
+        HttpServer testServer = HttpServer.create(inetAddress, 15);
+        int port = testServer.getAddress().getPort();
+        testServer.setExecutor(execs);
+        String base = "http://127.0.0.1:"+port+"/test";
+        HttpContext context = testServer.createContext("/test");
+        context.setHandler(new Handler(base));
+        return testServer;
+    }
+
+    private static HttpsServer getHttpsServer(
+        ExecutorService execs, SSLContext ctx
+    )
+        throws Exception
+    {
+        InetSocketAddress inetAddress = new InetSocketAddress(0);
+        HttpsServer testServer = HttpsServer.create(inetAddress, 15);
+        int port = testServer.getAddress().getPort();
+        testServer.setExecutor(execs);
+        testServer.setHttpsConfigurator(new HttpsConfigurator (ctx));
+        String base = "https://127.0.0.1:"+port+"/test";
+        HttpContext context = testServer.createContext("/test");
+        context.setHandler(new Handler(base));
+        return testServer;
+    }
+}
--- a/test/sun/rmi/runtime/Log/checkLogging/CheckLogging.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/rmi/runtime/Log/checkLogging/CheckLogging.java	Thu Dec 12 20:04:31 2013 -0800
@@ -76,6 +76,7 @@
 public class CheckLogging {
     private static int REGISTRY_PORT = -1;
     private static String LOCATION;
+    private static Logger logger;
 
     private static final ByteArrayOutputStream clientCallOut =
         new ByteArrayOutputStream();
@@ -89,8 +90,8 @@
             System.err.println("set default stream");
             LogStream.setDefaultStream(new PrintStream(clientCallOut));
         } else {
-            Logger.getLogger("sun.rmi.client.call").
-                addHandler(new InternalStreamHandler(clientCallOut));
+            logger = Logger.getLogger("sun.rmi.client.call");
+            logger.addHandler(new InternalStreamHandler(clientCallOut));
         }
     }
 
--- a/test/sun/security/krb5/auto/KDC.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/krb5/auto/KDC.java	Thu Dec 12 20:04:31 2013 -0800
@@ -605,7 +605,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
@@ -618,7 +618,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)) {
@@ -841,7 +841,7 @@
      * @return the response
      * @throws java.lang.Exception for various errors
      */
-    private byte[] processAsReq(byte[] in) throws Exception {
+    protected byte[] processAsReq(byte[] in) throws Exception {
         ASReq asReq = new ASReq(in);
         int[] eTypes = null;
         List<PAData> outPAs = new ArrayList<>();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/sun/security/krb5/auto/LoginNoPass.java	Thu Dec 12 20:04:31 2013 -0800
@@ -0,0 +1,73 @@
+/*
+ * 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 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
+        }
+    }
+}
--- a/test/sun/security/pkcs11/KeyStore/Basic.sh	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/pkcs11/KeyStore/Basic.sh	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2003, 2006, 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
@@ -170,7 +170,8 @@
     ${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \
 	-classpath ${TESTSRC}${FS}..${PS}${TESTSRC}${FS}loader.jar \
 	-d ${TESTCLASSES} \
-	${TESTSRC}${FS}Basic.java
+	${TESTSRC}${FS}Basic.java \
+	${TESTSRC}${FS}..${FS}PKCS11Test.java
 fi
 
 # run test
--- a/test/sun/security/pkcs11/KeyStore/ClientAuth.sh	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/pkcs11/KeyStore/ClientAuth.sh	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2003, 2012, 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
@@ -128,7 +128,8 @@
 ${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \
 	-classpath ${TESTSRC}${FS}..${PS}${TESTSRC}${FS}loader.jar \
 	-d ${TESTCLASSES} \
-	${TESTSRC}${FS}ClientAuth.java
+	${TESTSRC}${FS}ClientAuth.java \
+	${TESTSRC}${FS}..${FS}PKCS11Test.java
 
 # run test
 echo "Run ClientAuth ..."
--- a/test/sun/security/pkcs11/KeyStore/Solaris.sh	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/pkcs11/KeyStore/Solaris.sh	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2004, 2006, 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
@@ -140,7 +140,8 @@
     ${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \
 	-classpath ${TESTSRC}${FS}..${PS}${TESTSRC}${FS}loader.jar \
 	-d ${TESTCLASSES} \
-	${TESTSRC}${FS}Basic.java
+	${TESTSRC}${FS}Basic.java \
+	${TESTSRC}${FS}..${FS}PKCS11Test.java
 fi
 
 # run test
--- a/test/sun/security/pkcs11/PKCS11Test.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/pkcs11/PKCS11Test.java	Thu Dec 12 20:04:31 2013 -0800
@@ -29,6 +29,8 @@
 import java.lang.reflect.*;
 
 import java.security.*;
+import java.security.spec.ECGenParameterSpec;
+import java.security.spec.ECParameterSpec;
 
 public abstract class PKCS11Test {
 
@@ -357,6 +359,93 @@
         test.premain(p);
     }
 
+    // Generate a vector of supported elliptic curves of a given provider
+    static Vector<ECParameterSpec> getKnownCurves(Provider p) throws Exception {
+        int index;
+        int begin;
+        int end;
+        String curve;
+        KeyPair kp = null;
+
+        Vector<ECParameterSpec> results = new Vector<ECParameterSpec>();
+        // Get Curves to test from SunEC.
+        String kcProp = Security.getProvider("SunEC").
+                getProperty("AlgorithmParameters.EC SupportedCurves");
+
+        if (kcProp == null) {
+            throw new RuntimeException(
+            "\"AlgorithmParameters.EC SupportedCurves property\" not found");
+        }
+
+        System.out.println("Finding supported curves using list from SunEC\n");
+        index = 0;
+        for (;;) {
+            // Each set of curve names is enclosed with brackets.
+            begin = kcProp.indexOf('[', index);
+            end = kcProp.indexOf(']', index);
+            if (begin == -1 || end == -1) {
+                break;
+            }
+
+            /*
+             * Each name is separated by a comma.
+             * Just get the first name in the set.
+             */
+            index = end + 1;
+            begin++;
+            end = kcProp.indexOf(',', begin);
+            if (end == -1) {
+                // Only one name in the set.
+                end = index -1;
+            }
+
+            curve = kcProp.substring(begin, end);
+            ECParameterSpec e = getECParameterSpec(p, curve);
+            System.out.print("\t "+ curve + ": ");
+            try {
+                KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", p);
+                kpg.initialize(e);
+                kp = kpg.generateKeyPair();
+                results.add(e);
+                System.out.println("Supported");
+            } catch (ProviderException ex) {
+                System.out.println("Unsupported: PKCS11: " +
+                        ex.getCause().getMessage());
+            } catch (InvalidAlgorithmParameterException ex) {
+                System.out.println("Unsupported: Key Length: " +
+                        ex.getMessage());
+            }
+        }
+
+        if (results.size() == 0) {
+            throw new RuntimeException("No supported EC curves found");
+        }
+
+        return results;
+    }
+
+    private static ECParameterSpec getECParameterSpec(Provider p, String name)
+            throws Exception {
+
+        AlgorithmParameters parameters =
+            AlgorithmParameters.getInstance("EC", p);
+
+        parameters.init(new ECGenParameterSpec(name));
+
+        return parameters.getParameterSpec(ECParameterSpec.class);
+    }
+
+    // Check support for a curve with a provided Vector of EC support
+    boolean checkSupport(Vector<ECParameterSpec> supportedEC,
+            ECParameterSpec curve) {
+        boolean found = false;
+        for (ECParameterSpec ec: supportedEC) {
+            if (ec.equals(curve)) {
+                return true;
+            }
+        }
+        return false;
+    }
 
     private static final Map<String,String[]> osMap;
 
--- a/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/pkcs11/Provider/ConfigQuotedString.sh	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2004, 2012, 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
@@ -99,7 +99,8 @@
 ${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \
         -classpath ${TESTSRC}${FS}.. \
         -d ${TESTCLASSES} \
-        ${TESTSRC}${FS}ConfigQuotedString.java
+        ${TESTSRC}${FS}ConfigQuotedString.java \
+        ${TESTSRC}${FS}..${FS}PKCS11Test.java
 
 # run test
 
--- a/test/sun/security/pkcs11/Provider/Login.sh	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/pkcs11/Provider/Login.sh	Thu Dec 12 20:04:31 2013 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2004, 2012, 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
@@ -108,7 +108,8 @@
 ${COMPILEJAVA}${FS}bin${FS}javac ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} \
         -classpath ${TESTSRC}${FS}.. \
         -d ${TESTCLASSES} \
-        ${TESTSRC}${FS}Login.java
+        ${TESTSRC}${FS}Login.java \
+        ${TESTSRC}${FS}..${FS}PKCS11Test.java
 
 # run test
 
--- a/test/sun/security/pkcs11/Signature/TestDSAKeyLength.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/pkcs11/Signature/TestDSAKeyLength.java	Thu Dec 12 20:04:31 2013 -0800
@@ -22,10 +22,10 @@
  */
 /*
  * @test
- * @bug 7200306
- * @run main/othervm/timeout=250 TestDSAKeyLength
+ * @bug 7200306 8029158
  * @summary verify that P11Signature impl will error out when initialized
  * with unsupported key sizes
+ * @library ..
  */
 
 
@@ -40,6 +40,11 @@
     }
 
     public void main(Provider provider) throws Exception {
+        if (isNSS(provider) && getNSSVersion() >= 3.14) {
+            System.out.println("Skip testing NSS " + getNSSVersion());
+            return;
+        }
+
         KeyPairGenerator kpg = KeyPairGenerator.getInstance("DSA", "SUN");
         kpg.initialize(2048, new SecureRandom());
         KeyPair pair = kpg.generateKeyPair();
--- a/test/sun/security/pkcs11/ec/ReadCertificates.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/pkcs11/ec/ReadCertificates.java	Thu Dec 12 20:04:31 2013 -0800
@@ -37,6 +37,7 @@
 import java.security.cert.*;
 import java.security.*;
 import java.security.interfaces.*;
+import java.security.spec.ECParameterSpec;
 
 import javax.security.auth.x500.X500Principal;
 
@@ -101,33 +102,44 @@
         }
         System.out.println("OK: " + certs.size() + " certificates.");
 
+        // Get supported curves
+        Vector<ECParameterSpec> supportedEC = getKnownCurves(p);
+
+        System.out.println("Test Certs:\n");
         for (X509Certificate cert : certs.values()) {
             X509Certificate issuer = certs.get(cert.getIssuerX500Principal());
-            System.out.println("Verifying " + cert.getSubjectX500Principal() + "...");
+            System.out.print("Verifying " + cert.getSubjectX500Principal() +
+                    "...  ");
             PublicKey key = issuer.getPublicKey();
-            // First try the provider under test (if it does not support the
-            // necessary algorithm then try any registered provider).
-            try {
-                cert.verify(key, p.getName());
-            } catch (NoSuchAlgorithmException e) {
-                System.out.println("Warning: " + e.getMessage() +
-                ". Trying another provider...");
-                cert.verify(key);
-            } catch (InvalidKeyException e) {
-                // The root cause of the exception might be NSS not having
-                // "ECC Extended" support curves.  If so, we can ignore it.
-                Throwable t = e;
-                while (t.getCause() != null) {
-                    t = t.getCause();
-                }
-                if (t instanceof sun.security.pkcs11.wrapper.PKCS11Exception &&
-                        t.getMessage().equals("CKR_DOMAIN_PARAMS_INVALID") &&
-                        isNSS(p) && getNSSECC() == ECCState.Basic) {
-                    System.out.println("Failed as expected. NSS Basic ECC.");
+            // Check if curve is supported
+            if (issuer.getPublicKey() instanceof ECPublicKey) {
+                if (!checkSupport(supportedEC,
+                        ((ECPublicKey)key).getParams())) {
+                    System.out.println("Curve not found. Skipped.");
                     continue;
                 }
-                throw e;
             }
+
+           try {
+               cert.verify(key, p.getName());
+               System.out.println("Pass.");
+           } catch (NoSuchAlgorithmException e) {
+               System.out.println("Warning: " + e.getMessage() +
+                   ". Trying another provider...");
+               cert.verify(key);
+           } catch (Exception e) {
+               System.out.println(e.getMessage());
+               if (key instanceof ECPublicKey) {
+                   System.out.println("Failed.\n\tCurve: " +
+                           ((ECPublicKey)key).getParams() +
+                           "\n\tSignature Alg: " + cert.getSigAlgName());
+               } else {
+                   System.out.println("Key: "+key.toString());
+               }
+
+               System.err.println("Verifying " + cert.getSubjectX500Principal());
+               e.printStackTrace();
+           }
         }
 
         // try some random invalid signatures to make sure we get the correct
--- a/test/sun/security/pkcs11/ec/TestCurves.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/pkcs11/ec/TestCurves.java	Thu Dec 12 20:04:31 2013 -0800
@@ -56,47 +56,49 @@
             return;
         }
 
+        // Check if this is sparc for later failure avoidance.
+        boolean sparc = false;
+        if (System.getProperty("os.arch").equals("sparcv9")) {
+            sparc = true;
+            System.out.println("This is a sparcv9");
+        }
+
         Random random = new Random();
         byte[] data = new byte[2048];
         random.nextBytes(data);
 
         Vector<ECParameterSpec> curves = getKnownCurves(p);
-
         for (ECParameterSpec params : curves) {
             System.out.println("Testing " + params + "...");
             KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", p);
             kpg.initialize(params);
             KeyPair kp1, kp2;
 
-            try {
-                kp1 = kpg.generateKeyPair();
-                kp2 = kpg.generateKeyPair();
-            } catch (Exception e) {
-                // The root cause of the exception might be NSS not having
-                // "ECC Extended" support curves.  If so, we can ignore it.
-                if (e instanceof java.security.ProviderException) {
-                    Throwable t = e.getCause();
-                    if (t instanceof
-                            sun.security.pkcs11.wrapper.PKCS11Exception &&
-                            t.getMessage().equals("CKR_DOMAIN_PARAMS_INVALID") &&
-                            isNSS(p) && (getNSSECC() == ECCState.Basic) &&
-                            (!params.toString().startsWith("secp256r1") &&
-                            !params.toString().startsWith("secp384r1") &&
-                            !params.toString().startsWith("secp521r1"))) {
-                        System.out.println("NSS Basic ECC.  Failure expected");
-                        continue;
-                    }
-                }
-
-                throw e;
-            }
+            kp1 = kpg.generateKeyPair();
+            kp2 = kpg.generateKeyPair();
 
             testSigning(p, "SHA1withECDSA", data, kp1, kp2);
-            testSigning(p, "SHA224withECDSA", data, kp1, kp2);
-            testSigning(p, "SHA256withECDSA", data, kp1, kp2);
-            testSigning(p, "SHA384withECDSA", data, kp1, kp2);
-            testSigning(p, "SHA512withECDSA", data, kp1, kp2);
-            // System.out.println();
+            // Check because Solaris ncp driver does not support these but
+            // Solaris metaslot causes them to be run.
+            try {
+                testSigning(p, "SHA224withECDSA", data, kp1, kp2);
+                testSigning(p, "SHA256withECDSA", data, kp1, kp2);
+                testSigning(p, "SHA384withECDSA", data, kp1, kp2);
+                testSigning(p, "SHA512withECDSA", data, kp1, kp2);
+            } catch (ProviderException e) {
+                if (sparc) {
+                    Throwable t = e.getCause();
+                    if (t instanceof sun.security.pkcs11.wrapper.PKCS11Exception &&
+                        t.getMessage().equals("CKR_ATTRIBUTE_VALUE_INVALID")) {
+                        System.out.print("-Failure not uncommon.  Probably pre-T4.");
+                    } else {
+                        throw e;
+                    }
+                } else {
+                    throw e;
+                }
+            }
+            System.out.println();
 
             KeyAgreement ka1 = KeyAgreement.getInstance("ECDH", p);
             ka1.init(kp1.getPrivate());
@@ -116,70 +118,9 @@
         System.out.println("OK");
     }
 
-    private static Vector<ECParameterSpec>
-            getKnownCurves(Provider p) throws Exception {
-
-        int index;
-        int begin;
-        int end;
-        String curve;
-        Vector<ECParameterSpec> results = new Vector<ECParameterSpec>();
-        // Get Curves to test from SunEC.
-        String kcProp = Security.getProvider("SunEC").
-                getProperty("AlgorithmParameters.EC SupportedCurves");
-
-        if (kcProp == null) {
-            throw new RuntimeException(
-            "\"AlgorithmParameters.EC SupportedCurves property\" not found");
-        }
-
-        index = 0;
-        for (;;) {
-            // Each set of curve names is enclosed with brackets.
-            begin = kcProp.indexOf('[', index);
-            end = kcProp.indexOf(']', index);
-            if (begin == -1 || end == -1) {
-                break;
-            }
-
-            /*
-             * Each name is separated by a comma.
-             * Just get the first name in the set.
-             */
-            index = end + 1;
-            begin++;
-            end = kcProp.indexOf(',', begin);
-            if (end == -1) {
-                // Only one name in the set.
-                end = index -1;
-            }
-
-            curve = kcProp.substring(begin, end);
-
-            results.add(getECParameterSpec(p, curve));
-        }
-
-        if (results.size() == 0) {
-            throw new RuntimeException("No supported EC curves found");
-        }
-
-        return results;
-    }
-
-    private static ECParameterSpec getECParameterSpec(Provider p, String name)
-            throws Exception {
-
-        AlgorithmParameters parameters =
-            AlgorithmParameters.getInstance("EC", p);
-
-        parameters.init(new ECGenParameterSpec(name));
-
-        return parameters.getParameterSpec(ECParameterSpec.class);
-    }
-
     private static void testSigning(Provider p, String algorithm,
             byte[] data, KeyPair kp1, KeyPair kp2) throws Exception {
-        // System.out.print("  " + algorithm);
+        System.out.print("  " + algorithm);
         Signature s = Signature.getInstance(algorithm, p);
         s.initSign(kp1.getPrivate());
         s.update(data);
--- a/test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java	Thu Dec 12 20:04:31 2013 -0800
@@ -206,7 +206,9 @@
     private void runTest(boolean direct) throws Exception {
         boolean serverClose = direct;
 
-        serverSocket = new ServerSocket(0);
+        serverSocket = new ServerSocket();
+        serverSocket.setReuseAddress(false);
+        serverSocket.bind(null);
         int port = serverSocket.getLocalPort();
         Thread thread = createClientThread(port, serverClose);
 
--- a/test/sun/tools/jstatd/JstatdTest.java	Thu Dec 12 16:30:22 2013 +0400
+++ b/test/sun/tools/jstatd/JstatdTest.java	Thu Dec 12 20:04:31 2013 -0800
@@ -353,6 +353,14 @@
         } finally {
             cleanUpThread(jstatdThread);
         }
+
+        // Verify output from jstatd
+        OutputAnalyzer output = jstatdThread.getOutput();
+        assertTrue(output.getOutput().isEmpty(),
+                "jstatd should get an empty output, got: "
+                + Utils.NEW_LINE + output.getOutput());
+        assertNotEquals(output.getExitValue(), 0,
+                "jstatd process exited with unexpected exit code");
     }
 
 }