changeset 3199:d9bd9c11a6bc

Add backports and bug fixes scheduled for 1.13.7. S6584008, PR2195, RH1173326: jvmtiStringPrimitiveCallback should not be invoked when string value is null S7199862, PR2198: Make sure that a connection is still alive when retrieved from KeepAliveCache in certain cases S8074312, PR2255: Enable hotspot builds on Linux 4.x PR2197: jhat man page has broken URL PR2201: Support giflib 5.1.0 PR2211: DGifCloseFile call should check the return value, not the error code, for failure PR2226: giflib 5.1 conditional excludes 6.0, 7.0, etc. 2015-04-03 Andrew John Hughes <gnu.andrew@redhat.com> * Makefile.am: (ICEDTEA_PATCHES): Add new patches. * NEWS: Updated. * patches/openjdk/6584008-pr2195-jvmtistringprimitivecallback_null_string.patch, * patches/openjdk/7199862-pr2198-ensure_cache_connection_still_alive.patch, * patches/openjdk/8074312-pr2255-support_linux_4.patch, * patches/pr2197-jhat_man_page_url.patch, * patches/pr2201-support_giflib_5.1.patch, * patches/pr2211-check_dgifclosefile_return.patch, * patches/pr2226-support_future_giflib_6_and_up.patch: Add new backports and bug fixes.
author Andrew John Hughes <gnu.andrew@redhat.com>
date Thu, 09 Apr 2015 17:12:59 +0100
parents c2b52092a6a7
children 93b80a863f3d
files ChangeLog Makefile.am NEWS patches/openjdk/6584008-pr2195-jvmtistringprimitivecallback_null_string.patch patches/openjdk/7199862-pr2198-ensure_cache_connection_still_alive.patch patches/openjdk/8074312-pr2255-support_linux_4.patch patches/pr2197-jhat_man_page_url.patch patches/pr2201-support_giflib_5.1.patch patches/pr2211-check_dgifclosefile_return.patch patches/pr2226-support_future_giflib_6_and_up.patch
diffstat 10 files changed, 369 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Tue Jan 27 02:18:51 2015 +0000
+++ b/ChangeLog	Thu Apr 09 17:12:59 2015 +0100
@@ -1,3 +1,17 @@
+2015-04-03  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Add new patches.
+	* NEWS: Updated.
+	* patches/openjdk/6584008-pr2195-jvmtistringprimitivecallback_null_string.patch,
+	* patches/openjdk/7199862-pr2198-ensure_cache_connection_still_alive.patch,
+	* patches/openjdk/8074312-pr2255-support_linux_4.patch,
+	* patches/pr2197-jhat_man_page_url.patch,
+	* patches/pr2201-support_giflib_5.1.patch,
+	* patches/pr2211-check_dgifclosefile_return.patch,
+	* patches/pr2226-support_future_giflib_6_and_up.patch:
+	Add new backports and bug fixes.
+
 2015-01-27  Andrew John Hughes  <gnu.andrew@redhat.com>
 
 	* NEWS: Add 1.13.7 section.
--- a/Makefile.am	Tue Jan 27 02:18:51 2015 +0000
+++ b/Makefile.am	Thu Apr 09 17:12:59 2015 +0100
@@ -607,7 +607,14 @@
 	patches/openjdk/7031830-pr2183-bad_record_mac_failure.patch \
 	patches/openjdk/oj52-pr2185-no_serbia_montenegro.patch \
 	patches/openjdk/oj53-pr2181-strict_aliasing_on_ppc32.patch \
-	patches/openjdk/oj54-pr2182-6911104_reintroduces_test_fragment.patch
+	patches/openjdk/oj54-pr2182-6911104_reintroduces_test_fragment.patch \
+	patches/openjdk/6584008-pr2195-jvmtistringprimitivecallback_null_string.patch \
+	patches/openjdk/7199862-pr2198-ensure_cache_connection_still_alive.patch \
+	patches/openjdk/8074312-pr2255-support_linux_4.patch \
+	patches/pr2197-jhat_man_page_url.patch \
+	patches/pr2201-support_giflib_5.1.patch \
+	patches/pr2211-check_dgifclosefile_return.patch \
+	patches/pr2226-support_future_giflib_6_and_up.patch
 
 if WITH_RHINO
 ICEDTEA_PATCHES += \
--- a/NEWS	Tue Jan 27 02:18:51 2015 +0000
+++ b/NEWS	Thu Apr 09 17:12:59 2015 +0100
@@ -14,6 +14,16 @@
 
 New in release 1.13.7 (2015-04-XX):
 
+ * Backports
+  - S6584008, PR2195, RH1173326: jvmtiStringPrimitiveCallback should not be invoked when string value is null
+  - S7199862, PR2198: Make sure that a connection is still alive when retrieved from KeepAliveCache in certain cases
+  - S8074312, PR2255: Enable hotspot builds on Linux 4.x
+ * Bug fixes
+  - PR2197: jhat man page has broken URL
+  - PR2201: Support giflib 5.1.0
+  - PR2211: DGifCloseFile call should check the return value, not the error code, for failure
+  - PR2226: giflib 5.1 conditional excludes 6.0, 7.0, etc.
+
 New in release 1.13.6 (2015-01-23):
 
 * Security fixes
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/6584008-pr2195-jvmtistringprimitivecallback_null_string.patch	Thu Apr 09 17:12:59 2015 +0100
@@ -0,0 +1,30 @@
+# HG changeset patch
+# User aph
+# Date 1421396122 -3600
+#      Fri Jan 16 09:15:22 2015 +0100
+# Node ID 9686a796c829bf0d5a4303947474a97e0fd5826c
+# Parent  1830156c6b7ee6ccc6ee21113fb537df507d2974
+6584008: jvmtiStringPrimitiveCallback should not be invoked when string value is null
+Reviewed-by: sla, sspitsyn
+
+diff -r 1830156c6b7e -r 9686a796c829 src/share/vm/prims/jvmtiTagMap.cpp
+--- openjdk/hotspot/src/share/vm/prims/jvmtiTagMap.cpp	Wed Feb 04 04:31:38 2015 -0500
++++ openjdk/hotspot/src/share/vm/prims/jvmtiTagMap.cpp	Fri Jan 16 09:15:22 2015 +0100
+@@ -1045,10 +1045,16 @@
+ {
+   assert(str->klass() == SystemDictionary::String_klass(), "not a string");
+ 
++  typeArrayOop s_value = java_lang_String::value(str);
++
++  // JDK-6584008: the value field may be null if a String instance is
++  // partially constructed.
++  if (s_value == NULL) {
++    return 0;
++  }
+   // get the string value and length
+   // (string value may be offset from the base)
+   int s_len = java_lang_String::length(str);
+-  typeArrayOop s_value = java_lang_String::value(str);
+   int s_offset = java_lang_String::offset(str);
+   jchar* value;
+   if (s_len > 0) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7199862-pr2198-ensure_cache_connection_still_alive.patch	Thu Apr 09 17:12:59 2015 +0100
@@ -0,0 +1,165 @@
+diff -r c4ed64237075 src/share/classes/sun/net/www/http/HttpClient.java
+--- openjdk/jdk/src/share/classes/sun/net/www/http/HttpClient.java	Wed Apr 01 00:13:50 2015 +0100
++++ openjdk/jdk/src/share/classes/sun/net/www/http/HttpClient.java	Thu Apr 02 18:21:08 2015 +0100
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright (c) 1994, 2007, Oracle and/or its affiliates. All rights reserved.
++ * Copyright (c) 1994, 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
+@@ -251,16 +251,17 @@
+      */
+     public static HttpClient New(URL url)
+     throws IOException {
+-        return HttpClient.New(url, Proxy.NO_PROXY, -1, true);
++        return HttpClient.New(url, Proxy.NO_PROXY, -1, true, null);
+     }
+ 
+     public static HttpClient New(URL url, boolean useCache)
+         throws IOException {
+-        return HttpClient.New(url, Proxy.NO_PROXY, -1, useCache);
++        return HttpClient.New(url, Proxy.NO_PROXY, -1, useCache, null);
+     }
+ 
+-    public static HttpClient New(URL url, Proxy p, int to, boolean useCache)
+-        throws IOException {
++    public static HttpClient New(URL url, Proxy p, int to, boolean useCache,
++        HttpURLConnection httpuc) throws IOException
++    {
+         if (p == null) {
+             p = Proxy.NO_PROXY;
+         }
+@@ -268,6 +269,12 @@
+         /* see if one's already around */
+         if (useCache) {
+             ret = (HttpClient) kac.get(url, null);
++            if (ret != null && httpuc != null &&
++                httpuc.streaming() &&
++                httpuc.getRequestMethod() == "POST") {
++                if (!ret.available())
++                    ret = null;
++            }
+             if (ret != null) {
+                 if ((ret.proxy != null && ret.proxy.equals(p)) ||
+                     (ret.proxy == null && p == null)) {
+@@ -306,20 +313,25 @@
+         return ret;
+     }
+ 
+-    public static HttpClient New(URL url, Proxy p, int to) throws IOException {
+-        return New(url, p, to, true);
++    public static HttpClient New(URL url, Proxy p, int to,
++        HttpURLConnection httpuc) throws IOException
++    {
++        return New(url, p, to, true, httpuc);
+     }
+ 
+     public static HttpClient New(URL url, String proxyHost, int proxyPort,
+                                  boolean useCache)
+         throws IOException {
+-        return New(url, newHttpProxy(proxyHost, proxyPort, "http"), -1, useCache);
++        return New(url, newHttpProxy(proxyHost, proxyPort, "http"),
++            -1, useCache, null);
+     }
+ 
+     public static HttpClient New(URL url, String proxyHost, int proxyPort,
+-                                 boolean useCache, int to)
++                                 boolean useCache, int to,
++                                 HttpURLConnection httpuc)
+         throws IOException {
+-        return New(url, newHttpProxy(proxyHost, proxyPort, "http"), to, useCache);
++        return New(url, newHttpProxy(proxyHost, proxyPort, "http"),
++            to, useCache, httpuc);
+     }
+ 
+     /* return it to the cache as still usable, if:
+@@ -348,6 +360,33 @@
+         }
+     }
+ 
++    protected synchronized boolean available() throws IOException {
++        boolean available = true;
++        int old = serverSocket.getSoTimeout();
++        serverSocket.setSoTimeout(1);
++        BufferedInputStream tmpbuf =
++            new BufferedInputStream(serverSocket.getInputStream());
++
++        try {
++            int r = tmpbuf.read();
++            if (r == -1) {
++                if (HttpCapture.isLoggable("FINEST")) {
++                    HttpCapture.finest("HttpClient.available(): " +
++                        "read returned -1: not available");
++                }
++                available = false;
++            }
++        } catch (SocketTimeoutException e) {
++            if (HttpCapture.isLoggable("FINEST")) {
++                HttpCapture.finest("HttpClient.available(): " +
++                    "SocketTimeout: its available");
++            }
++        } finally {
++            serverSocket.setSoTimeout(old);
++        }
++        return available;
++    }
++
+     protected synchronized void putInKeepAliveCache() {
+         if (inCache) {
+             assert false : "Duplicate put to keep alive cache";
+diff -r c4ed64237075 src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java
+--- openjdk/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Wed Apr 01 00:13:50 2015 +0100
++++ openjdk/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Thu Apr 02 18:21:08 2015 +0100
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved.
++ * Copyright (c) 1995, 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
+@@ -619,7 +619,7 @@
+      */
+     protected void setNewClient (URL url, boolean useCache)
+         throws IOException {
+-        http = HttpClient.New(url, null, -1, useCache, connectTimeout);
++        http = HttpClient.New(url, null, -1, useCache, connectTimeout, this);
+         http.setReadTimeout(readTimeout);
+     }
+ 
+@@ -660,7 +660,8 @@
+                                            String proxyHost, int proxyPort,
+                                            boolean useCache)
+         throws IOException {
+-        http = HttpClient.New (url, proxyHost, proxyPort, useCache, connectTimeout);
++        http = HttpClient.New (url, proxyHost, proxyPort, useCache,
++            connectTimeout, this);
+         http.setReadTimeout(readTimeout);
+     }
+ 
+@@ -951,14 +952,14 @@
+     // subclass HttpsClient will overwrite & return an instance of HttpsClient
+     protected HttpClient getNewHttpClient(URL url, Proxy p, int connectTimeout)
+         throws IOException {
+-        return HttpClient.New(url, p, connectTimeout);
++        return HttpClient.New(url, p, connectTimeout, this);
+     }
+ 
+     // subclass HttpsClient will overwrite & return an instance of HttpsClient
+     protected HttpClient getNewHttpClient(URL url, Proxy p,
+                                           int connectTimeout, boolean useCache)
+         throws IOException {
+-        return HttpClient.New(url, p, connectTimeout, useCache);
++        return HttpClient.New(url, p, connectTimeout, useCache, this);
+     }
+ 
+     private void expect100Continue() throws IOException {
+@@ -1095,7 +1096,7 @@
+         }
+     }
+ 
+-    private boolean streaming () {
++    public boolean streaming () {
+         return (fixedContentLength != -1) || (chunkLength != -1);
+     }
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/8074312-pr2255-support_linux_4.patch	Thu Apr 09 17:12:59 2015 +0100
@@ -0,0 +1,19 @@
+diff -Nru openjdk.orig/hotspot/make/linux/Makefile openjdk/hotspot/make/linux/Makefile
+--- openjdk.orig/hotspot/make/linux/Makefile	2015-01-20 02:17:59.000000000 +0000
++++ openjdk/hotspot/make/linux/Makefile	2015-04-01 15:56:23.145797203 +0100
+@@ -1,5 +1,5 @@
+ #
+-# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
++# Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
+ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ #
+ # This code is free software; you can redistribute it and/or modify it
+@@ -231,7 +231,7 @@
+ # Solaris 2.5.1, 2.6).
+ # Disable this check by setting DISABLE_HOTSPOT_OS_VERSION_CHECK=ok.
+ 
+-SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3%
++SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%
+ OS_VERSION := $(shell uname -r)
+ EMPTY_IF_NOT_SUPPORTED = $(filter $(SUPPORTED_OS_VERSION),$(OS_VERSION))
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/pr2197-jhat_man_page_url.patch	Thu Apr 09 17:12:59 2015 +0100
@@ -0,0 +1,52 @@
+# HG changeset patch
+# User andrew
+# Date 1423073807 0
+#      Wed Feb 04 18:16:47 2015 +0000
+# Node ID a7b145722afff8d0677f991b43b35d1e6ec9d23a
+# Parent  6e761a451703610814e2099ba709dc22725e10d0
+PR2196, RH1164762: jhat man page has broken URL
+Summary: Fix link to HPROF web page to point to version for Oracle JDK 7
+Contributed-by: jvanek@redhat.com
+
+diff -r 6e761a451703 -r a7b145722aff src/linux/doc/man/jhat.1
+--- openjdk/jdk/src/linux/doc/man/jhat.1	Wed Feb 04 16:52:13 2015 +0000
++++ openjdk/jdk/src/linux/doc/man/jhat.1	Wed Feb 04 18:16:47 2015 +0000
+@@ -77,7 +77,7 @@
+ .na
+ \f2hprof\fP @
+ .fi
+-http://java.sun.com/developer/technicalArticles/Programming/HPROF.html. 
++https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html.
+ .RE
+ 
+ .LP
+@@ -134,7 +134,7 @@
+ .na
+ \f2hprof \- Heap and CPU profiling tool\fP @
+ .fi
+-http://java.sun.com/developer/technicalArticles/Programming/HPROF.html 
++https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html.
+ .RE
+ 
+ .LP
+diff -r 6e761a451703 -r a7b145722aff src/solaris/doc/sun/man/man1/jhat.1
+--- openjdk/jdk/src/solaris/doc/sun/man/man1/jhat.1	Wed Feb 04 16:52:13 2015 +0000
++++ openjdk/jdk/src/solaris/doc/sun/man/man1/jhat.1	Wed Feb 04 18:16:47 2015 +0000
+@@ -77,7 +77,7 @@
+ .na
+ \f2hprof\fP @
+ .fi
+-http://java.sun.com/developer/technicalArticles/Programming/HPROF.html. 
++https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html.
+ .RE
+ 
+ .LP
+@@ -134,7 +134,7 @@
+ .na
+ \f2hprof \- Heap and CPU profiling tool\fP @
+ .fi
+-http://java.sun.com/developer/technicalArticles/Programming/HPROF.html 
++https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html.
+ .RE
+ 
+ .LP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/pr2201-support_giflib_5.1.patch	Thu Apr 09 17:12:59 2015 +0100
@@ -0,0 +1,27 @@
+# HG changeset patch
+# User andrew
+# Date 1423074043 0
+#      Wed Feb 04 18:20:43 2015 +0000
+# Node ID 1d647255f65b9561d9821b30b2eb6fd18fad6bad
+# Parent  a7b145722afff8d0677f991b43b35d1e6ec9d23a
+PR2200: Support giflib 5.1.0
+Contributed-by: fridrich.strba@suse.com
+
+diff -r a7b145722aff -r 1d647255f65b src/share/native/sun/awt/splashscreen/splashscreen_gif.c
+--- openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c	Wed Feb 04 18:16:47 2015 +0000
++++ openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c	Wed Feb 04 18:20:43 2015 +0000
+@@ -310,7 +310,14 @@
+     free(pBitmapBits);
+     free(pOldBitmapBits);
+ 
++#if GIFLIB_MAJOR >= 5 && GIFLIB_MINOR >= 1
++    int error = 0;
++    DGifCloseFile(gif, &error);
++    if (error)
++        return 0;
++#else
+     DGifCloseFile(gif);
++#endif
+ 
+     return 1;
+ }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/pr2211-check_dgifclosefile_return.patch	Thu Apr 09 17:12:59 2015 +0100
@@ -0,0 +1,23 @@
+# HG changeset patch
+# User andrew
+# Date 1423101914 0
+#      Thu Feb 05 02:05:14 2015 +0000
+# Node ID 3b9f3d7c767ec8d2e8d65c7b819aa135cf9af21e
+# Parent  1d647255f65b9561d9821b30b2eb6fd18fad6bad
+PR2210: DGifCloseFile call should check the return value, not the error code, for failure
+Summary: Avoid passing in an integer reference at all and just use the return value.
+
+diff -r 1d647255f65b -r 3b9f3d7c767e src/share/native/sun/awt/splashscreen/splashscreen_gif.c
+--- openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c	Wed Feb 04 18:20:43 2015 +0000
++++ openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c	Thu Feb 05 02:05:14 2015 +0000
+@@ -311,9 +311,7 @@
+     free(pOldBitmapBits);
+ 
+ #if GIFLIB_MAJOR >= 5 && GIFLIB_MINOR >= 1
+-    int error = 0;
+-    DGifCloseFile(gif, &error);
+-    if (error)
++    if (DGifCloseFile(gif, NULL) == GIF_ERROR)
+         return 0;
+ #else
+     DGifCloseFile(gif);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/pr2226-support_future_giflib_6_and_up.patch	Thu Apr 09 17:12:59 2015 +0100
@@ -0,0 +1,21 @@
+# HG changeset patch
+# User andrew
+# Date 1423585468 0
+#      Tue Feb 10 16:24:28 2015 +0000
+# Node ID 8e740701950bbfd435a8bbe1a39694bf8096d96e
+# Parent  f8795ed79ba60e5ae655b74ebc27228597419b71
+PR2225: giflib 5.1 conditional excludes 6.0, 7.0, etc.
+Summary: Future-proof the giflib 5.1 support
+
+diff -r f8795ed79ba6 -r 8e740701950b src/share/native/sun/awt/splashscreen/splashscreen_gif.c
+--- openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c	Thu Feb 05 16:11:10 2015 +0000
++++ openjdk/jdk/src/share/native/sun/awt/splashscreen/splashscreen_gif.c	Tue Feb 10 16:24:28 2015 +0000
+@@ -310,7 +310,7 @@
+     free(pBitmapBits);
+     free(pOldBitmapBits);
+ 
+-#if GIFLIB_MAJOR >= 5 && GIFLIB_MINOR >= 1
++#if GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1)
+     if (DGifCloseFile(gif, NULL) == GIF_ERROR)
+         return 0;
+ #else