/hg/icedtea6: 2 new changesets
andrew at icedtea.classpath.org
andrew at icedtea.classpath.org
Mon Jun 2 13:49:00 UTC 2014
changeset 1da0a61f16a1 in /hg/icedtea6
details: http://icedtea.classpath.org/hg/icedtea6?cmd=changeset;node=1da0a61f16a1
author: Andrew John Hughes <gnu.andrew at redhat.com>
date: Fri May 23 02:08:32 2014 +0100
S7027300, RH1098399: Unsynchronized HashMap access causes endless loop
2014-05-22 Andrew John Hughes <gnu.andrew at redhat.com>
* Makefile.am:
(ICEDTEA_PATCHES): Add new patch.
* NEWS: Updated.
* patches/openjdk/7027300-unsync_hashmap_causes_endless_loop.patch:
Backport fix to replace HashMap usage with ConcurrentHashMap,
avoiding deadlock.
changeset 93a1398d268f in /hg/icedtea6
details: http://icedtea.classpath.org/hg/icedtea6?cmd=changeset;node=93a1398d268f
author: Andrew John Hughes <gnu.andrew at redhat.com>
date: Mon Jun 02 14:48:27 2014 +0100
S6611637: NullPointerException in sun.font.GlyphLayout$EngineRecord.init
S6727719: Performance of TextLayout.getBounds()
S6745225: Memory leak while drawing Attributed String
S6904962: GlyphVector.getVisualBounds should not be affected by leading or trailing white space.
S7183251: Netbeans editor renders text wrong on JDK 7u6 build
2014-05-28 Andrew John Hughes <gnu.andrew at redhat.com>
* Makefile.am:
(ICEDTEA_PATCHES): Add new patches.
* NEWS: Updated.
* patches/openjdk/6611637-npe_in_glyphlayout.patch,
* patches/openjdk/6727719-performance_of_textlayout_getbounds.patch,
* patches/openjdk/6745225-memory_leak_in_attributed_string.patch,
* patches/openjdk/6904962-getvisualbounds_affected_by_white_space.patch,
* patches/openjdk/7183251-netbeans_renders_text_wrong.patch:
Backport text layout fixes.
diffstat:
ChangeLog | 21 +
Makefile.am | 8 +-
NEWS | 6 +
patches/openjdk/6611637-npe_in_glyphlayout.patch | 21 +
patches/openjdk/6727719-performance_of_textlayout_getbounds.patch | 36 ++
patches/openjdk/6745225-memory_leak_in_attributed_string.patch | 160 ++++++++++
patches/openjdk/6904962-getvisualbounds_affected_by_white_space.patch | 129 ++++++++
patches/openjdk/7027300-unsync_hashmap_causes_endless_loop.patch | 33 ++
patches/openjdk/7183251-netbeans_renders_text_wrong.patch | 24 +
9 files changed, 437 insertions(+), 1 deletions(-)
diffs (490 lines):
diff -r 29d6e0e0c2d2 -r 93a1398d268f ChangeLog
--- a/ChangeLog Fri May 09 13:28:18 2014 +0200
+++ b/ChangeLog Mon Jun 02 14:48:27 2014 +0100
@@ -1,3 +1,24 @@
+2014-05-28 Andrew John Hughes <gnu.andrew at redhat.com>
+
+ * Makefile.am:
+ (ICEDTEA_PATCHES): Add new patches.
+ * NEWS: Updated.
+ * patches/openjdk/6611637-npe_in_glyphlayout.patch,
+ * patches/openjdk/6727719-performance_of_textlayout_getbounds.patch,
+ * patches/openjdk/6745225-memory_leak_in_attributed_string.patch,
+ * patches/openjdk/6904962-getvisualbounds_affected_by_white_space.patch,
+ * patches/openjdk/7183251-netbeans_renders_text_wrong.patch:
+ Backport text layout fixes.
+
+2014-05-22 Andrew John Hughes <gnu.andrew at redhat.com>
+
+ * Makefile.am:
+ (ICEDTEA_PATCHES): Add new patch.
+ * NEWS: Updated.
+ * patches/openjdk/7027300-unsync_hashmap_causes_endless_loop.patch:
+ Backport fix to replace HashMap usage with ConcurrentHashMap,
+ avoiding deadlock.
+
2014-05-09 Jiri Vanek <jvanek at redhat.com>
* Makefile.am: (add-nss-debug.stamp): fixed ECJ_BUILD_OUTPUT_DIR
diff -r 29d6e0e0c2d2 -r 93a1398d268f Makefile.am
--- a/Makefile.am Fri May 09 13:28:18 2014 +0200
+++ b/Makefile.am Mon Jun 02 14:48:27 2014 +0100
@@ -614,7 +614,13 @@
patches/shark-drop_compile_method_arg_following_7083786.patch \
patches/openjdk/7151089-numa_should_not_free_shm_large_pages.patch \
patches/openjdk/8013057-detect_mmap_commit_failures.patch \
- patches/openjdk/8026887-make_large_page_allocations_easier_to_debug.patch
+ patches/openjdk/8026887-make_large_page_allocations_easier_to_debug.patch \
+ patches/openjdk/7027300-unsync_hashmap_causes_endless_loop.patch \
+ patches/openjdk/7183251-netbeans_renders_text_wrong.patch \
+ patches/openjdk/6904962-getvisualbounds_affected_by_white_space.patch \
+ patches/openjdk/6611637-npe_in_glyphlayout.patch \
+ patches/openjdk/6727719-performance_of_textlayout_getbounds.patch \
+ patches/openjdk/6745225-memory_leak_in_attributed_string.patch
if WITH_RHINO
ICEDTEA_PATCHES += \
diff -r 29d6e0e0c2d2 -r 93a1398d268f NEWS
--- a/NEWS Fri May 09 13:28:18 2014 +0200
+++ b/NEWS Mon Jun 02 14:48:27 2014 +0100
@@ -15,7 +15,13 @@
New in release 1.14.0 (201X-XX-XX):
* Backports
+ - S6611637: NullPointerException in sun.font.GlyphLayout$EngineRecord.init
+ - S6727719: Performance of TextLayout.getBounds()
+ - S6745225: Memory leak while drawing Attributed String
+ - S6904962: GlyphVector.getVisualBounds should not be affected by leading or trailing white space.
+ - S7027300, RH1098399: Unsynchronized HashMap access causes endless loop
- S7151089: PS NUMA: NUMA allocator should not attempt to free pages when using SHM large pages
+ - S7183251: Netbeans editor renders text wrong on JDK 7u6 build
- S8013057: Detect mmap() commit failures in Linux and Solaris os::commit_memory() impls and call vm_exit_out_of_memory()
- S8026887: Make issues due to failed large pages allocations easier to debug
diff -r 29d6e0e0c2d2 -r 93a1398d268f patches/openjdk/6611637-npe_in_glyphlayout.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/6611637-npe_in_glyphlayout.patch Mon Jun 02 14:48:27 2014 +0100
@@ -0,0 +1,21 @@
+# HG changeset patch
+# User prr
+# Date 1211221532 25200
+# Mon May 19 11:25:32 2008 -0700
+# Node ID 075152aa892eda98de7530b761bb347e44a58ba6
+# Parent bf2c66511d1bf7c2a4d04b3f8bda635466abae44
+6611637: NullPointerException in sun.font.GlyphLayout$EngineRecord.init
+Reviewed-by: tdv, jgodinez
+
+diff -r bf2c66511d1b -r 075152aa892e src/share/classes/sun/font/GlyphLayout.java
+--- openjdk/jdk/src/share/classes/sun/font/GlyphLayout.java Fri May 16 03:10:58 2008 +0400
++++ openjdk/jdk/src/share/classes/sun/font/GlyphLayout.java Mon May 19 11:25:32 2008 -0700
+@@ -85,7 +85,7 @@
+ private GVData _gvdata;
+
+ // cached glyph layout data for reuse
+- private static GlyphLayout cache; // reusable
++ private static volatile GlyphLayout cache; // reusable
+
+ private LayoutEngineFactory _lef; // set when get is called, unset when done is called
+ private TextRecord _textRecord; // the text we're working on, used by iterators
diff -r 29d6e0e0c2d2 -r 93a1398d268f patches/openjdk/6727719-performance_of_textlayout_getbounds.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/6727719-performance_of_textlayout_getbounds.patch Mon Jun 02 14:48:27 2014 +0100
@@ -0,0 +1,36 @@
+# HG changeset patch
+# User prr
+# Date 1236884509 25200
+# Thu Mar 12 12:01:49 2009 -0700
+# Node ID 59696dfd545508d75e1cb89446fb7074fd50fdab
+# Parent 8d5144dfc642e4da0e5b91bd28b7fa1e4e5e133b
+6727719: Performance of TextLayout.getBounds()
+Reviewed-by: jgodinez, dougfelt
+
+diff -r 8d5144dfc642 -r 59696dfd5455 src/share/classes/sun/font/FileFontStrike.java
+--- openjdk/jdk/src/share/classes/sun/font/FileFontStrike.java Thu Mar 05 10:56:06 2009 -0800
++++ openjdk/jdk/src/share/classes/sun/font/FileFontStrike.java Thu Mar 12 12:01:49 2009 -0700
+@@ -842,8 +842,22 @@
+ return fileFont.getGlyphOutlineBounds(pScalerContext, glyphCode);
+ }
+
++ private ConcurrentHashMap<Integer, GeneralPath> outlineMap;
++
+ GeneralPath getGlyphOutline(int glyphCode, float x, float y) {
+- return fileFont.getGlyphOutline(pScalerContext, glyphCode, x, y);
++ if (outlineMap == null) {
++ outlineMap = new ConcurrentHashMap<Integer, GeneralPath>();
++ }
++ GeneralPath gp = (GeneralPath)outlineMap.get(glyphCode);
++ if (gp == null) {
++ gp = fileFont.getGlyphOutline(pScalerContext, glyphCode, 0, 0);
++ outlineMap.put(glyphCode, gp);
++ }
++ gp = (GeneralPath)gp.clone(); // mutable!
++ if (x != 0f || y != 0f) {
++ gp.transform(AffineTransform.getTranslateInstance(x, y));
++ }
++ return gp;
+ }
+
+ GeneralPath getGlyphVectorOutline(int[] glyphs, float x, float y) {
diff -r 29d6e0e0c2d2 -r 93a1398d268f patches/openjdk/6745225-memory_leak_in_attributed_string.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/6745225-memory_leak_in_attributed_string.patch Mon Jun 02 14:48:27 2014 +0100
@@ -0,0 +1,160 @@
+# HG changeset patch
+# User prr
+# Date 1237830054 25200
+# Mon Mar 23 10:40:54 2009 -0700
+# Node ID e43ea83ca69672b961ed71d85ba78e112ce63877
+# Parent 467e4f25965c37adf1fbdeb93b494bd05449dbc3
+6745225: Memory leak while drawing Attributed String
+Reviewed-by: jgodinez, dougfelt
+
+diff -r 467e4f25965c -r e43ea83ca696 src/share/classes/sun/font/FileFontStrike.java
+--- openjdk/jdk/src/share/classes/sun/font/FileFontStrike.java Fri Mar 20 20:05:22 2009 +0300
++++ openjdk/jdk/src/share/classes/sun/font/FileFontStrike.java Mon Mar 23 10:40:54 2009 -0700
+@@ -26,6 +26,7 @@
+ package sun.font;
+
+ import java.lang.ref.SoftReference;
++import java.lang.ref.WeakReference;
+ import java.awt.Font;
+ import java.awt.GraphicsEnvironment;
+ import java.awt.Rectangle;
+@@ -842,15 +843,29 @@
+ return fileFont.getGlyphOutlineBounds(pScalerContext, glyphCode);
+ }
+
+- private ConcurrentHashMap<Integer, GeneralPath> outlineMap;
++ private
++ WeakReference<ConcurrentHashMap<Integer,GeneralPath>> outlineMapRef;
+
+ GeneralPath getGlyphOutline(int glyphCode, float x, float y) {
+- if (outlineMap == null) {
+- outlineMap = new ConcurrentHashMap<Integer, GeneralPath>();
++
++ GeneralPath gp = null;
++ ConcurrentHashMap<Integer, GeneralPath> outlineMap = null;
++
++ if (outlineMapRef != null) {
++ outlineMap = outlineMapRef.get();
++ if (outlineMap != null) {
++ gp = (GeneralPath)outlineMap.get(glyphCode);
++ }
+ }
+- GeneralPath gp = (GeneralPath)outlineMap.get(glyphCode);
++
+ if (gp == null) {
+ gp = fileFont.getGlyphOutline(pScalerContext, glyphCode, 0, 0);
++ if (outlineMap == null) {
++ outlineMap = new ConcurrentHashMap<Integer, GeneralPath>();
++ outlineMapRef =
++ new WeakReference
++ <ConcurrentHashMap<Integer,GeneralPath>>(outlineMap);
++ }
+ outlineMap.put(glyphCode, gp);
+ }
+ gp = (GeneralPath)gp.clone(); // mutable!
+diff -r 467e4f25965c -r e43ea83ca696 src/share/classes/sun/font/GlyphLayout.java
+--- openjdk/jdk/src/share/classes/sun/font/GlyphLayout.java Fri Mar 20 20:05:22 2009 +0300
++++ openjdk/jdk/src/share/classes/sun/font/GlyphLayout.java Mon Mar 23 10:40:54 2009 -0700
+@@ -338,6 +338,8 @@
+ cache = new ConcurrentHashMap<SDKey, SDCache>(10);
+ cacheRef = new
+ SoftReference<ConcurrentHashMap<SDKey, SDCache>>(cache);
++ } else if (cache.size() >= 512) {
++ cache.clear();
+ }
+ cache.put(key, res);
+ }
+diff -r 467e4f25965c -r e43ea83ca696 test/java/awt/font/LineBreakMeasurer/FRCTest.java
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ openjdk/jdk/test/java/awt/font/LineBreakMeasurer/FRCTest.java Mon Mar 23 10:40:54 2009 -0700
+@@ -0,0 +1,90 @@
++/*
++ * Copyright 2008-9 Sun Microsystems, Inc. All Rights Reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
++ * CA 95054 USA or visit www.sun.com if you need additional information or
++ * have any questions.
++ */
++
++/*
++ * @test
++ * @bug 6448405 6519513 6745225
++ * @summary static HashMap cache in LineBreakMeasurer can grow wihout bounds
++ * @run main/othervm/timeout=600 -client -Xms16m -Xmx16m FRCTest
++ */
++import java.awt.*;
++import java.awt.image.*;
++import java.awt.font.*;
++import java.awt.geom.*;
++import java.text.*;
++import java.util.Hashtable;
++
++public class FRCTest {
++
++ static AttributedString vanGogh = new AttributedString(
++ "Many people believe that Vincent van Gogh painted his best works " +
++ "during the two-year period he spent in Provence. Here is where he " +
++ "painted The Starry Night--which some consider to be his greatest " +
++ "work of all. However, as his artistic brilliance reached new " +
++ "heights in Provence, his physical and mental health plummeted. ",
++ new Hashtable());
++
++ public static void main(String[] args) {
++
++ // First test the behaviour of Graphics2D.getFontRenderContext();
++ BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
++ Graphics2D g2d = bi.createGraphics();
++ AffineTransform g2dTx = new AffineTransform(2,0,2,0,1,1);
++ g2d.setTransform(g2dTx);
++ AffineTransform frcTx = g2d.getFontRenderContext().getTransform();
++ AffineTransform frcExpected = new AffineTransform(2,0,2,0,0,0);
++ if (!frcTx.equals(frcExpected)) {
++ throw new RuntimeException("FRC Tx may have translate?");
++ }
++
++ // Now test that using different translates with LBM is OK
++ // This test doesn't prove a lot since showing a leak really
++ // requires a basher test that can run for a long time.
++ for (int x=0;x<100;x++) {
++ for (int y=0;y<100;y++) {
++ AttributedCharacterIterator aci = vanGogh.getIterator();
++ AffineTransform tx = AffineTransform.getTranslateInstance(x, y);
++ FontRenderContext frc = new FontRenderContext(tx, false, false);
++ LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc);
++ lbm.setPosition(aci.getBeginIndex());
++ while (lbm.getPosition() < aci.getEndIndex()) {
++ lbm.nextLayout(100f);
++ }
++ }
++ }
++
++ for (int x=0;x<25;x++) {
++ for (int y=0;y<25;y++) {
++ AttributedCharacterIterator aci = vanGogh.getIterator();
++ double rot = Math.random()*.4*Math.PI - .2*Math.PI;
++ AffineTransform tx = AffineTransform.getRotateInstance(rot);
++ FontRenderContext frc = new FontRenderContext(tx, false, false);
++ LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc);
++ lbm.setPosition(aci.getBeginIndex());
++ while (lbm.getPosition() < aci.getEndIndex()) {
++ lbm.nextLayout(100f);
++ }
++ }
++ }
++ }
++}
diff -r 29d6e0e0c2d2 -r 93a1398d268f patches/openjdk/6904962-getvisualbounds_affected_by_white_space.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/6904962-getvisualbounds_affected_by_white_space.patch Mon Jun 02 14:48:27 2014 +0100
@@ -0,0 +1,129 @@
+# HG changeset patch
+# User prr
+# Date 1259620775 28800
+# Mon Nov 30 14:39:35 2009 -0800
+# Node ID 479c14bec7f18baa769a9f8598c1b17884487f7a
+# Parent ba01efbf7c70428f8791ee577d98283123fc0c8a
+6904962: GlyphVector.getVisualBounds should not be affected by leading or trailing white space.
+Reviewed-by: igor, dougfelt
+
+diff -r ba01efbf7c70 -r 479c14bec7f1 src/share/classes/sun/font/StandardGlyphVector.java
+--- openjdk/jdk/src/share/classes/sun/font/StandardGlyphVector.java Mon Nov 09 14:23:49 2009 -0800
++++ openjdk/jdk/src/share/classes/sun/font/StandardGlyphVector.java Mon Nov 30 14:39:35 2009 -0800
+@@ -396,12 +396,19 @@
+
+ // !!! not cached, assume TextLayout will cache if necessary
+ public Rectangle2D getVisualBounds() {
+- if (glyphs.length == 0) {
+- return new Rectangle2D.Float(0, 0, 0, 0);
++ Rectangle2D result = null;
++ for (int i = 0; i < glyphs.length; ++i) {
++ Rectangle2D glyphVB = getGlyphVisualBounds(i).getBounds2D();
++ if (!glyphVB.isEmpty()) {
++ if (result == null) {
++ result = glyphVB;
++ } else {
++ Rectangle2D.union(result, glyphVB, result);
++ }
++ }
+ }
+- Rectangle2D result = getGlyphVisualBounds(0).getBounds2D();
+- for (int i = 1; i < glyphs.length; ++i) {
+- Rectangle2D.union(result, getGlyphVisualBounds(i).getBounds2D(), result);
++ if (result == null) {
++ result = new Rectangle2D.Float(0, 0, 0, 0);
+ }
+ return result;
+ }
+@@ -1787,8 +1794,19 @@
+ gp.transform(sgv.invdtx);
+ result = gp.getBounds2D();
+ }
+- result.setRect(result.getMinX() + x + dx, result.getMinY() + y + dy,
+- result.getWidth(), result.getHeight());
++ /* Since x is the logical advance of the glyph to this point.
++ * Because of the way that Rectangle.union is specified, this
++ * means that subsequent unioning of a rect including that
++ * will be affected, even if the glyph is empty. So skip such
++ * cases. This alone isn't a complete solution since x==0
++ * may also not be what is wanted. The code that does the
++ * unioning also needs to be aware to ignore empty glyphs.
++ */
++ if (!result.isEmpty()) {
++ result.setRect(result.getMinX() + x + dx,
++ result.getMinY() + y + dy,
++ result.getWidth(), result.getHeight());
++ }
+ return result;
+ }
+
+diff -r ba01efbf7c70 -r 479c14bec7f1 test/java/awt/font/GlyphVector/VisualBounds.java
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ openjdk/jdk/test/java/awt/font/GlyphVector/VisualBounds.java Mon Nov 30 14:39:35 2009 -0800
+@@ -0,0 +1,66 @@
++/*
++ * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
++ * CA 95054 USA or visit www.sun.com if you need additional information or
++ * have any questions.
++ */
++
++/* @test
++ * @summary leading and trailing spaces must not affect visual bounds
++ * @bug 6904962
++ */
++
++
++import java.awt.*;
++import java.awt.font.*;
++import java.awt.geom.*;
++
++public class VisualBounds {
++
++ public static void main(String args[]) {
++
++ String s1 = "a";
++ String s2 = s1+" ";
++ String s3 = " "+s1;
++ Font f = new Font("Dialog", Font.PLAIN, 12);
++ FontRenderContext frc = new FontRenderContext(null, false, false);
++ GlyphVector gv1 = f.createGlyphVector(frc, s1);
++ GlyphVector gv2 = f.createGlyphVector(frc, s2);
++ GlyphVector gv3 = f.createGlyphVector(frc, s3);
++ Rectangle2D bds1 = gv1.getVisualBounds();
++ Rectangle2D bds2 = gv2.getVisualBounds();
++ Rectangle2D bds3 = gv3.getVisualBounds();
++ GlyphVector gv4 = f.createGlyphVector(frc, " ");
++ Rectangle2D bds4 = gv4.getVisualBounds();
++ System.out.println(bds1);
++ System.out.println(bds2);
++ System.out.println(bds3);
++ System.out.println(bds4);
++
++ if (!bds1.equals(bds2)) {
++ throw new RuntimeException("Trailing space: Visual bounds differ");
++ }
++ if (bds2.getWidth() != bds3.getWidth()) {
++ throw new RuntimeException("Leading space: Visual widths differ");
++ }
++ if (!bds4.isEmpty()) {
++ throw new RuntimeException("Non empty bounds for space");
++ }
++ }
++}
diff -r 29d6e0e0c2d2 -r 93a1398d268f patches/openjdk/7027300-unsync_hashmap_causes_endless_loop.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7027300-unsync_hashmap_causes_endless_loop.patch Mon Jun 02 14:48:27 2014 +0100
@@ -0,0 +1,33 @@
+# HG changeset patch
+# User vkarnauk
+# Date 1340286118 -14400
+# Thu Jun 21 17:41:58 2012 +0400
+# Node ID f71b6117fd7bbb13ed4c1f68ace873695edd49cb
+# Parent 762ae4a20c8b115e5cb486c5204d8bdee747ee59
+7027300: Unsynchronized HashMap access causes endless loop
+Reviewed-by: bae, prr
+
+diff -r 762ae4a20c8b -r f71b6117fd7b src/share/classes/sun/font/SunLayoutEngine.java
+--- openjdk/jdk/src/share/classes/sun/font/SunLayoutEngine.java Thu Jun 21 14:19:12 2012 +0400
++++ openjdk/jdk/src/share/classes/sun/font/SunLayoutEngine.java Thu Jun 21 17:41:58 2012 +0400
+@@ -33,7 +33,7 @@
+ import sun.font.GlyphLayout.*;
+ import java.awt.geom.Point2D;
+ import java.lang.ref.SoftReference;
+-import java.util.HashMap;
++import java.util.concurrent.ConcurrentHashMap;
+ import java.util.Locale;
+
+ /*
+@@ -129,9 +129,9 @@
+
+ // !!! don't need this unless we have more than one sun layout engine...
+ public LayoutEngine getEngine(LayoutEngineKey key) {
+- HashMap cache = (HashMap)cacheref.get();
++ ConcurrentHashMap cache = (ConcurrentHashMap)cacheref.get();
+ if (cache == null) {
+- cache = new HashMap();
++ cache = new ConcurrentHashMap();
+ cacheref = new SoftReference(cache);
+ }
+
diff -r 29d6e0e0c2d2 -r 93a1398d268f patches/openjdk/7183251-netbeans_renders_text_wrong.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/openjdk/7183251-netbeans_renders_text_wrong.patch Mon Jun 02 14:48:27 2014 +0100
@@ -0,0 +1,24 @@
+# HG changeset patch
+# User prr
+# Date 1342804653 25200
+# Fri Jul 20 10:17:33 2012 -0700
+# Node ID 84d5cdbe7bce2caf907ec842ac7b4fa2097fb295
+# Parent bf5bf37108c14d1d01b8a1043f9e3ff0e3727869
+7183251: Netbeans editor renders text wrong on JDK 7u6 build
+Reviewed-by: igor, jgodinez
+
+diff -r bf5bf37108c1 -r 84d5cdbe7bce src/share/classes/sun/font/SunLayoutEngine.java
+--- openjdk/jdk/src/share/classes/sun/font/SunLayoutEngine.java Fri Jul 20 13:58:52 2012 +0400
++++ openjdk/jdk/src/share/classes/sun/font/SunLayoutEngine.java Fri Jul 20 10:17:33 2012 -0700
+@@ -137,8 +137,9 @@
+
+ LayoutEngine e = (LayoutEngine)cache.get(key);
+ if (e == null) {
+- e = new SunLayoutEngine(key.copy());
+- cache.put(key, e);
++ LayoutEngineKey copy = key.copy();
++ e = new SunLayoutEngine(copy);
++ cache.put(copy, e);
+ }
+ return e;
+ }
More information about the distro-pkg-dev
mailing list