From owner-svn-ports-head@FreeBSD.ORG Thu Apr 25 20:03:57 2013 Return-Path: Delivered-To: svn-ports-head@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id A7D0C88A; Thu, 25 Apr 2013 20:03:57 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 9801B174F; Thu, 25 Apr 2013 20:03:57 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r3PK3v7X012781; Thu, 25 Apr 2013 20:03:57 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r3PK3uZq012773; Thu, 25 Apr 2013 20:03:56 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201304252003.r3PK3uZq012773@svn.freebsd.org> From: Jung-uk Kim Date: Thu, 25 Apr 2013 20:03:56 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r316529 - in head/java/openjdk6: . files files/icedtea files/icedtea/openjdk files/icedtea/security/20130201 files/icedtea/security/20130416 X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Apr 2013 20:03:57 -0000 Author: jkim Date: Thu Apr 25 20:03:56 2013 New Revision: 316529 URL: http://svnweb.freebsd.org/changeset/ports/316529 Log: Add multiple security patches from IcedTea6 1.12.5. http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2013-April/022985.html Obtained from: IcedTea Project Added: head/java/openjdk6/files/icedtea/jaxp.patch (contents, props changed) head/java/openjdk6/files/icedtea/jaxws.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/ head/java/openjdk6/files/icedtea/openjdk/5102804-memory_leak.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/6501644-icu_sync.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/6669869-queries_per_appcontext.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/6886358-layout_update.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/6963811-deadlock_fix.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/7017324-kerning_crash.patch (contents, props changed) - copied unchanged from r316483, head/java/openjdk6/files/icedtea/7032388-work_without_cmov_instruction.patch head/java/openjdk6/files/icedtea/openjdk/7036559-concurrenthashmap_improvements.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/7064279-fixup.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/7064279-resource_release.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/7133220-factory_finder_parser_transform_useBSClassLoader.patch (contents, props changed) head/java/openjdk6/files/icedtea/openjdk/8004302-soap_test_failure.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/ head/java/openjdk6/files/icedtea/security/20130416/6657673-factory_finder.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/6657673-fixup.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/6657673.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/7200507.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8000724.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8001031.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8001040.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8001322.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8001329.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8003335.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8003445.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8003543.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8004261.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8004336.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8004986.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8005432.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8005943.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8006309.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8006435.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8006790.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8006795.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8007406.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8007617.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8007667.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8007918.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8009063.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8009305.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8009699.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8009814.patch (contents, props changed) head/java/openjdk6/files/icedtea/security/20130416/8009857.patch (contents, props changed) Directory Properties: head/java/openjdk6/files/icedtea/openjdk/7032388-work_without_cmov_instruction.patch (props changed) Deleted: head/java/openjdk6/files/icedtea/7032388-work_without_cmov_instruction.patch head/java/openjdk6/files/icedtea/security/20130201/8001235.patch Modified: head/java/openjdk6/Makefile head/java/openjdk6/distinfo head/java/openjdk6/files/patch-set Directory Properties: head/java/openjdk6/files/icedtea/applet_hole.patch (props changed) head/java/openjdk6/files/icedtea/jpegclasses.patch (props changed) Modified: head/java/openjdk6/Makefile ============================================================================== --- head/java/openjdk6/Makefile Thu Apr 25 19:44:59 2013 (r316528) +++ head/java/openjdk6/Makefile Thu Apr 25 20:03:56 2013 (r316529) @@ -3,7 +3,7 @@ PORTNAME= openjdk6 PORTVERSION= b27 -PORTREVISION?= 2 +PORTREVISION?= 3 CATEGORIES= java devel MASTER_SITES= http://download.java.net/openjdk/jdk6/promoted/${PORTVERSION}/ \ http://download.java.net/jaxp/openjdk/jdk6/:jaxp \ @@ -39,7 +39,9 @@ RUN_DEPENDS= javavm:${PORTSDIR}/java/jav OPENJDK_BUILDDATE= 26_oct_2012 -EXTRA_PATCHES= ${FILESDIR}/icedtea/security/20120830/7182135-impossible_to_use_some_editors_directly.patch \ +EXTRA_PATCHES= ${FILESDIR}/icedtea/jaxp.patch \ + ${FILESDIR}/icedtea/jaxws.patch \ + ${FILESDIR}/icedtea/security/20120830/7182135-impossible_to_use_some_editors_directly.patch \ ${FILESDIR}/icedtea/security/20130201/7201068.patch \ ${FILESDIR}/icedtea/security/20130201/6563318.patch \ ${FILESDIR}/icedtea/security/20130201/6664509.patch \ @@ -68,12 +70,52 @@ EXTRA_PATCHES= ${FILESDIR}/icedtea/secur ${FILESDIR}/icedtea/security/20130201/8001307.patch \ ${FILESDIR}/icedtea/security/20130201/8001972.patch \ ${FILESDIR}/icedtea/security/20130201/8002325.patch \ - ${FILESDIR}/icedtea/security/20130201/8001235.patch \ ${FILESDIR}/icedtea/security/20130219/8006446.patch \ ${FILESDIR}/icedtea/security/20130219/8006777.patch \ ${FILESDIR}/icedtea/security/20130219/8007688.patch \ ${FILESDIR}/icedtea/security/20130304/8007014.patch \ - ${FILESDIR}/icedtea/security/20130304/8007675.patch + ${FILESDIR}/icedtea/security/20130304/8007675.patch \ + ${FILESDIR}/icedtea/openjdk/7036559-concurrenthashmap_improvements.patch \ + ${FILESDIR}/icedtea/security/20130416/8009063.patch \ + ${FILESDIR}/icedtea/openjdk/8004302-soap_test_failure.patch \ + ${FILESDIR}/icedtea/security/20130416/6657673.patch \ + ${FILESDIR}/icedtea/security/20130416/6657673-fixup.patch \ + ${FILESDIR}/icedtea/openjdk/7133220-factory_finder_parser_transform_useBSClassLoader.patch \ + ${FILESDIR}/icedtea/security/20130416/6657673-factory_finder.patch \ + ${FILESDIR}/icedtea/openjdk/6669869-queries_per_appcontext.patch \ + ${FILESDIR}/icedtea/openjdk/5102804-memory_leak.patch \ + ${FILESDIR}/icedtea/openjdk/6963811-deadlock_fix.patch \ + ${FILESDIR}/icedtea/openjdk/7064279-resource_release.patch \ + ${FILESDIR}/icedtea/openjdk/7064279-fixup.patch \ + ${FILESDIR}/icedtea/security/20130416/7200507.patch \ + ${FILESDIR}/icedtea/security/20130416/8000724.patch \ + ${FILESDIR}/icedtea/security/20130416/8004986.patch \ + ${FILESDIR}/icedtea/openjdk/6501644-icu_sync.patch \ + ${FILESDIR}/icedtea/openjdk/6886358-layout_update.patch \ + ${FILESDIR}/icedtea/security/20130416/8001031.patch \ + ${FILESDIR}/icedtea/openjdk/7017324-kerning_crash.patch \ + ${FILESDIR}/icedtea/security/20130416/8001040.patch \ + ${FILESDIR}/icedtea/security/20130416/8001322.patch \ + ${FILESDIR}/icedtea/security/20130416/8001329.patch \ + ${FILESDIR}/icedtea/security/20130416/8003335.patch \ + ${FILESDIR}/icedtea/security/20130416/8003445.patch \ + ${FILESDIR}/icedtea/security/20130416/8003543.patch \ + ${FILESDIR}/icedtea/security/20130416/8004261.patch \ + ${FILESDIR}/icedtea/security/20130416/8004336.patch \ + ${FILESDIR}/icedtea/security/20130416/8005432.patch \ + ${FILESDIR}/icedtea/security/20130416/8005943.patch \ + ${FILESDIR}/icedtea/security/20130416/8006309.patch \ + ${FILESDIR}/icedtea/security/20130416/8006435.patch \ + ${FILESDIR}/icedtea/security/20130416/8006790.patch \ + ${FILESDIR}/icedtea/security/20130416/8006795.patch \ + ${FILESDIR}/icedtea/security/20130416/8007406.patch \ + ${FILESDIR}/icedtea/security/20130416/8007617.patch \ + ${FILESDIR}/icedtea/security/20130416/8007667.patch \ + ${FILESDIR}/icedtea/security/20130416/8007918.patch \ + ${FILESDIR}/icedtea/security/20130416/8009305.patch \ + ${FILESDIR}/icedtea/security/20130416/8009699.patch \ + ${FILESDIR}/icedtea/security/20130416/8009814.patch \ + ${FILESDIR}/icedtea/security/20130416/8009857.patch OPTIONS_DEFINE= ICEDTEA IPV6 POLICY SOUND TZUPDATE OPTIONS_DEFAULT=ICEDTEA IPV6 TZUPDATE @@ -98,7 +140,7 @@ USE_GMAKE= yes USE_MOTIF= yes USE_XORG= x11 xext xi xt xtst -JAXP_BUILD= 144_04 +JAXP_BUILD= 144_05 JAXPFILE= jaxp${JAXP_BUILD}.zip JAXWS_BUILD= 2_1_6-2011_06_13 JAXWSFILE= jdk6-jaxws${JAXWS_BUILD}.zip @@ -148,6 +190,7 @@ BOOTSTRAPJDKDIR?= ${LOCALBASE}/bootstrap BUILD_DEPENDS+= ${BOOTSTRAPJDKDIR}/bin/javac:${PORTSDIR}/java/bootstrap-openjdk .endif +FETCH_ARGS= -Fpr MAKE_ENV= LANG=C LC_ALL=C OS= \ ALT_JDK_IMPORT_PATH=${BOOTSTRAPJDKDIR} \ ALT_BOOTDIR=${BOOTSTRAPJDKDIR} \ @@ -198,7 +241,7 @@ MAKE_ENV+= SKIP_FASTDEBUG_BUILD=true .endif .if ${PORT_OPTIONS:MICEDTEA} -EXTRA_PATCHES+= ${FILESDIR}/icedtea/7032388-work_without_cmov_instruction.patch \ +EXTRA_PATCHES+= ${FILESDIR}/icedtea/openjdk/7032388-work_without_cmov_instruction.patch \ ${FILESDIR}/icedtea/applet_hole.patch \ ${FILESDIR}/icedtea/jpegclasses.patch .endif Modified: head/java/openjdk6/distinfo ============================================================================== --- head/java/openjdk6/distinfo Thu Apr 25 19:44:59 2013 (r316528) +++ head/java/openjdk6/distinfo Thu Apr 25 20:03:56 2013 (r316529) @@ -1,7 +1,7 @@ SHA256 (openjdk-6-src-b27-26_oct_2012.tar.gz) = 044c3877b15940ff04f8aa817337f2878a00cc89674854557f1a02f15b1802a0 SIZE (openjdk-6-src-b27-26_oct_2012.tar.gz) = 45789350 -SHA256 (jaxp144_04.zip) = 490f696218c1fed9cb180680af883fe309b414fec232e9cec19645e12ad0b43c -SIZE (jaxp144_04.zip) = 5976385 +SHA256 (jaxp144_05.zip) = c1a8a5a219fa55ecbf2ad43b66514335a3e96ccad40bd2ec9165a821343b2bff +SIZE (jaxp144_05.zip) = 5976387 SHA256 (jdk6-jaxws2_1_6-2011_06_13.zip) = 229040544e791f44906e8e7b6f6faf503c730a5d854275135f3925490d5c3be3 SIZE (jdk6-jaxws2_1_6-2011_06_13.zip) = 5512710 SHA256 (jdk6-jaf-b20.zip) = 78c7b5c9d6271e88ee46abadd018a61f1e9645f8936cc8df1617e5f4f5074012 Added: head/java/openjdk6/files/icedtea/jaxp.patch ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/java/openjdk6/files/icedtea/jaxp.patch Thu Apr 25 20:03:56 2013 (r316529) @@ -0,0 +1,15 @@ +--- jaxp/build.properties.orig 2012-10-26 14:23:11.000000000 -0400 ++++ jaxp/build.properties 2013-04-25 14:25:15.000000000 -0400 +@@ -77,6 +77,12 @@ + # Where patches to drop bundle sources live + patches.dir=patches + ++# Patches to apply ++jaxp_src.patch.list=6657673.patch \ ++ 6657673-fixup.patch \ ++ 7133220-factory_finder_parser_transform_useBSClassLoader.patch \ ++ 6657673-factory_finder.patch ++ + # Sanity information + sanity.info= Sanity Settings:${line.separator}\ + ant.home=${ant.home}${line.separator}\ Added: head/java/openjdk6/files/icedtea/jaxws.patch ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/java/openjdk6/files/icedtea/jaxws.patch Thu Apr 25 20:03:56 2013 (r316529) @@ -0,0 +1,13 @@ +--- jaxws/build.properties.orig 2012-10-26 14:23:24.000000000 -0400 ++++ jaxws/build.properties 2013-04-25 15:06:29.000000000 -0400 +@@ -77,6 +77,10 @@ + # Where patches to drop bundle sources live + patches.dir=patches + ++# Patches to apply ++jaxws_src.patch.list=8003543.patch \ ++ 8005432.patch ++ + # Sanity information + sanity.info= Sanity Settings:${line.separator}\ + ant.home=${ant.home}${line.separator}\ Added: head/java/openjdk6/files/icedtea/openjdk/5102804-memory_leak.patch ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/java/openjdk6/files/icedtea/openjdk/5102804-memory_leak.patch Thu Apr 25 20:03:56 2013 (r316529) @@ -0,0 +1,429 @@ +# HG changeset patch +# User andrew +# Date 1365704033 -3600 +# Node ID 06255d9f82761abc74c30f31fda00968ffef4bc3 +# Parent a939f541de9af5ccb78225c27cd46cd7dc6bcf87 +5102804: Memory leak in Introspector.getBeanInfo(Class) for custom BeanInfo: Class param (includes WeakCache from 6397609) +Reviewed-by: peterz + +diff --git a/src/share/classes/com/sun/beans/WeakCache.java b/src/share/classes/com/sun/beans/WeakCache.java +new file mode 100644 +--- /dev/null ++++ jdk/src/share/classes/com/sun/beans/WeakCache.java +@@ -0,0 +1,91 @@ ++/* ++ * Copyright 2008 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. Sun designates this ++ * particular file as subject to the "Classpath" exception as provided ++ * by Sun in the LICENSE file that accompanied this code. ++ * ++ * This code is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ++ * version 2 for more details (a copy is included in the LICENSE file that ++ * accompanied this code). ++ * ++ * You should have received a copy of the GNU General Public License version ++ * 2 along with this work; if not, write to the Free Software Foundation, ++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ++ * ++ * Please contact 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. ++ */ ++package com.sun.beans; ++ ++import java.lang.ref.Reference; ++import java.lang.ref.WeakReference; ++ ++import java.util.Map; ++import java.util.WeakHashMap; ++ ++/** ++ * A hashtable-based cache with weak keys and weak values. ++ * An entry in the map will be automatically removed ++ * when its key is no longer in the ordinary use. ++ * A value will be automatically removed as well ++ * when it is no longer in the ordinary use. ++ * ++ * @since 1.7 ++ * ++ * @author Sergey A. Malenkov ++ */ ++public final class WeakCache { ++ private final Map> map = new WeakHashMap>(); ++ ++ /** ++ * Returns a value to which the specified {@code key} is mapped, ++ * or {@code null} if this map contains no mapping for the {@code key}. ++ * ++ * @param key the key whose associated value is returned ++ * @return a value to which the specified {@code key} is mapped ++ */ ++ public V get(K key) { ++ Reference reference = this.map.get(key); ++ if (reference == null) { ++ return null; ++ } ++ V value = reference.get(); ++ if (value == null) { ++ this.map.remove(key); ++ } ++ return value; ++ } ++ ++ /** ++ * Associates the specified {@code value} with the specified {@code key}. ++ * Removes the mapping for the specified {@code key} from this cache ++ * if it is present and the specified {@code value} is {@code null}. ++ * If the cache previously contained a mapping for the {@code key}, ++ * the old value is replaced by the specified {@code value}. ++ * ++ * @param key the key with which the specified value is associated ++ * @param value the value to be associated with the specified key ++ */ ++ public void put(K key, V value) { ++ if (value != null) { ++ this.map.put(key, new WeakReference(value)); ++ } ++ else { ++ this.map.remove(key); ++ } ++ } ++ ++ /** ++ * Removes all of the mappings from this cache. ++ */ ++ public void clear() { ++ this.map.clear(); ++ } ++} +diff --git a/src/share/classes/java/beans/Introspector.java b/src/share/classes/java/beans/Introspector.java +--- jdk/src/share/classes/java/beans/Introspector.java ++++ jdk/src/share/classes/java/beans/Introspector.java +@@ -25,25 +25,18 @@ + + package java.beans; + ++import com.sun.beans.WeakCache; + import com.sun.beans.finder.ClassFinder; + +-import java.lang.ref.Reference; +-import java.lang.ref.SoftReference; +- + import java.lang.reflect.Method; + import java.lang.reflect.Modifier; + +-import java.security.AccessController; +-import java.security.PrivilegedAction; +- +-import java.util.Collections; + import java.util.Map; + import java.util.ArrayList; + import java.util.HashMap; + import java.util.Iterator; + import java.util.EventListener; + import java.util.List; +-import java.util.WeakHashMap; + import java.util.TreeMap; + import sun.awt.AppContext; + import sun.reflect.misc.ReflectUtil; +@@ -110,8 +103,8 @@ + public final static int IGNORE_ALL_BEANINFO = 3; + + // Static Caches to speed up introspection. +- private static Map declaredMethodCache = +- Collections.synchronizedMap(new WeakHashMap()); ++ private static WeakCache, Method[]> declaredMethodCache = ++ new WeakCache, Method[]>(); + + private static final Object BEANINFO_CACHE = new Object(); + +@@ -177,20 +170,21 @@ + if (!ReflectUtil.isPackageAccessible(beanClass)) { + return (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo(); + } +- Map, BeanInfo> map; + synchronized (BEANINFO_CACHE) { +- map = (Map, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE); +- if (map == null) { +- map = Collections.synchronizedMap(new WeakHashMap, BeanInfo>()); +- AppContext.getAppContext().put(BEANINFO_CACHE, map); ++ WeakCache, BeanInfo> beanInfoCache = ++ (WeakCache, BeanInfo>) AppContext.getAppContext().get(BEANINFO_CACHE); ++ ++ if (beanInfoCache == null) { ++ beanInfoCache = new WeakCache, BeanInfo>(); ++ AppContext.getAppContext().put(BEANINFO_CACHE, beanInfoCache); + } ++ BeanInfo beanInfo = beanInfoCache.get(beanClass); ++ if (beanInfo == null) { ++ beanInfo = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo(); ++ beanInfoCache.put(beanClass, beanInfo); ++ } ++ return beanInfo; + } +- BeanInfo bi = map.get(beanClass); +- if (bi == null) { +- bi = (new Introspector(beanClass, null, USE_ALL_BEANINFO)).getBeanInfo(); +- map.put(beanClass, bi); +- } +- return bi; + } + + /** +@@ -337,11 +331,13 @@ + */ + + public static void flushCaches() { +- Map map = (Map) AppContext.getAppContext().get(BEANINFO_CACHE); +- if (map != null) { +- map.clear(); ++ synchronized (BEANINFO_CACHE) { ++ WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE); ++ if (beanInfoCache != null) { ++ beanInfoCache.clear(); ++ } ++ declaredMethodCache.clear(); + } +- declaredMethodCache.clear(); + } + + /** +@@ -363,11 +359,13 @@ + if (clz == null) { + throw new NullPointerException(); + } +- Map map = (Map) AppContext.getAppContext().get(BEANINFO_CACHE); +- if (map != null) { +- map.remove(clz); ++ synchronized (BEANINFO_CACHE) { ++ WeakCache beanInfoCache = (WeakCache) AppContext.getAppContext().get(BEANINFO_CACHE); ++ if (beanInfoCache != null) { ++ beanInfoCache.put(clz, null); ++ } ++ declaredMethodCache.put(clz, null); + } +- declaredMethodCache.remove(clz); + } + + //====================================================================== +@@ -1306,41 +1304,26 @@ + /* + * Internal method to return *public* methods within a class. + */ +- private static synchronized Method[] getPublicDeclaredMethods(Class clz) { ++ private static Method[] getPublicDeclaredMethods(Class clz) { + // Looking up Class.getDeclaredMethods is relatively expensive, + // so we cache the results. +- Method[] result = null; + if (!ReflectUtil.isPackageAccessible(clz)) { + return new Method[0]; + } +- final Class fclz = clz; +- Reference ref = (Reference)declaredMethodCache.get(fclz); +- if (ref != null) { +- result = (Method[])ref.get(); +- if (result != null) { +- return result; ++ synchronized (BEANINFO_CACHE) { ++ Method[] result = declaredMethodCache.get(clz); ++ if (result == null) { ++ result = clz.getMethods(); ++ for (int i = 0; i < result.length; i++) { ++ Method method = result[i]; ++ if (!method.getDeclaringClass().equals(clz)) { ++ result[i] = null; ++ } ++ } ++ declaredMethodCache.put(clz, result); + } ++ return result; + } +- +- // We have to raise privilege for getDeclaredMethods +- result = (Method[]) AccessController.doPrivileged(new PrivilegedAction() { +- public Object run() { +- return fclz.getDeclaredMethods(); +- } +- }); +- +- +- // Null out any non-public methods. +- for (int i = 0; i < result.length; i++) { +- Method method = result[i]; +- int mods = method.getModifiers(); +- if (!Modifier.isPublic(mods)) { +- result[i] = null; +- } +- } +- // Add it to the cache. +- declaredMethodCache.put(fclz, new SoftReference(result)); +- return result; + } + + //====================================================================== +diff --git a/test/java/beans/Introspector/Test5102804.java b/test/java/beans/Introspector/Test5102804.java +new file mode 100644 +--- /dev/null ++++ jdk/test/java/beans/Introspector/Test5102804.java +@@ -0,0 +1,155 @@ ++/* ++ * 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 ++ * @bug 5102804 ++ * @summary Tests memory leak ++ * @author Sergey Malenkov ++ */ ++ ++import java.beans.BeanInfo; ++import java.beans.IntrospectionException; ++import java.beans.Introspector; ++import java.beans.PropertyDescriptor; ++import java.beans.SimpleBeanInfo; ++import java.lang.ref.Reference; ++import java.lang.ref.WeakReference; ++import java.net.URL; ++import java.net.URLClassLoader; ++ ++public class Test5102804 { ++ private static final String BEAN_NAME = "Test5102804$Example"; ++ private static final String BEAN_INFO_NAME = BEAN_NAME + "BeanInfo"; ++ ++ public static void main(String[] args) { ++ if (!isCollectible(getReference())) ++ throw new Error("Reference is not collected"); ++ } ++ ++ private static Reference getReference() { ++ try { ++ ClassLoader loader = new Loader(); ++ Class type = Class.forName(BEAN_NAME, true, loader); ++ if (!type.getClassLoader().equals(loader)) { ++ throw new Error("Wrong class loader"); ++ } ++ BeanInfo info = Introspector.getBeanInfo(type); ++ if (0 != info.getDefaultPropertyIndex()) { ++ throw new Error("Wrong bean info found"); ++ } ++ return new WeakReference(type); ++ } ++ catch (IntrospectionException exception) { ++ throw new Error("Introspection Error", exception); ++ } ++ catch (ClassNotFoundException exception) { ++ throw new Error("Class Not Found", exception); ++ } ++ } ++ ++ private static boolean isCollectible(Reference reference) { ++ int[] array = new int[10]; ++ while (true) { ++ try { ++ array = new int[array.length + array.length / 3]; ++ } ++ catch (OutOfMemoryError error) { ++ return null == reference.get(); ++ } ++ } ++ } ++ ++ /** ++ * Custom class loader to load the Example class by itself. ++ * Could also load it from a different code source, but this is easier to set up. ++ */ ++ private static final class Loader extends URLClassLoader { ++ Loader() { ++ super(new URL[] { ++ Test5102804.class.getProtectionDomain().getCodeSource().getLocation() ++ }); ++ } ++ ++ @Override ++ protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { ++ Class c = findLoadedClass(name); ++ if (c == null) { ++ if (BEAN_NAME.equals(name) || BEAN_INFO_NAME.equals(name)) { ++ c = findClass(name); ++ } ++ else try { ++ c = getParent().loadClass(name); ++ } ++ catch (ClassNotFoundException exception) { ++ c = findClass(name); ++ } ++ } ++ if (resolve) { ++ resolveClass(c); ++ } ++ return c; ++ } ++ } ++ ++ /** ++ * A simple bean to load from the Loader class, not main class loader. ++ */ ++ public static final class Example { ++ private int value; ++ ++ public int getValue() { ++ return value; ++ } ++ ++ public void setValue(int value) { ++ this.value = value; ++ } ++ } ++ ++ /** ++ * The BeanInfo for the Example class. ++ * It is also loaded from the Loader class. ++ */ ++ public static final class ExampleBeanInfo extends SimpleBeanInfo { ++ @Override ++ public int getDefaultPropertyIndex() { ++ return 0; ++ } ++ ++ @Override ++ public PropertyDescriptor[] getPropertyDescriptors() { ++ try { ++ return new PropertyDescriptor[] { ++ new PropertyDescriptor("value", Class.forName(BEAN_NAME)) ++ }; ++ } ++ catch (ClassNotFoundException exception) { ++ return null; ++ } ++ catch (IntrospectionException exception) { ++ return null; ++ } ++ } ++ } ++} Added: head/java/openjdk6/files/icedtea/openjdk/6501644-icu_sync.patch ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/java/openjdk6/files/icedtea/openjdk/6501644-icu_sync.patch Thu Apr 25 20:03:56 2013 (r316529) @@ -0,0 +1,8066 @@ +# HG changeset patch +# User andrew +# Date 1365739093 -3600 +# Node ID e8ed86062291305172267be90dcec2acef7c15a8 +# Parent c7ddbf756d7f35d6e782eb91b86ce2938de44fb8 +6501644: sync LayoutEngine *code* structure to match ICU +Reviewed-by: prr + +diff --git a/make/sun/font/Makefile b/make/sun/font/Makefile +--- jdk/make/sun/font/Makefile ++++ jdk/make/sun/font/Makefile +@@ -209,3 +209,7 @@ + -I$(PLATFORM_SRC)/native/sun/java2d/d3d + endif + ++# Make the Layout Engine build standalone ++CPPFLAGS += -DLE_STANDALONE ++ ++ +diff --git a/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp b/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp +--- jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp ++++ jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.cpp +@@ -37,6 +37,8 @@ + #include "GlyphIterator.h" + #include "LESwaps.h" + ++U_NAMESPACE_BEGIN ++ + le_uint32 AlternateSubstitutionSubtable::process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter) const + { + // NOTE: For now, we'll just pick the first alternative... +@@ -64,3 +66,5 @@ + + return 0; + } ++ ++U_NAMESPACE_END +diff --git a/src/share/native/sun/font/layout/AlternateSubstSubtables.h b/src/share/native/sun/font/layout/AlternateSubstSubtables.h +--- jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.h ++++ jdk/src/share/native/sun/font/layout/AlternateSubstSubtables.h +@@ -32,12 +32,19 @@ + #ifndef __ALTERNATESUBSTITUTIONSUBTABLES_H + #define __ALTERNATESUBSTITUTIONSUBTABLES_H + ++/** ++ * \file ++ * \internal ++ */ ++ + #include "LETypes.h" + #include "LEGlyphFilter.h" + #include "OpenTypeTables.h" + #include "GlyphSubstitutionTables.h" + #include "GlyphIterator.h" + ++U_NAMESPACE_BEGIN ++ + struct AlternateSetTable + { + le_uint16 glyphCount; +@@ -52,4 +59,5 @@ + le_uint32 process(GlyphIterator *glyphIterator, const LEGlyphFilter *filter = NULL) const; + }; + ++U_NAMESPACE_END + #endif +diff --git a/src/share/native/sun/font/layout/AnchorTables.cpp b/src/share/native/sun/font/layout/AnchorTables.cpp +--- jdk/src/share/native/sun/font/layout/AnchorTables.cpp ++++ jdk/src/share/native/sun/font/layout/AnchorTables.cpp +@@ -35,6 +35,8 @@ + #include "AnchorTables.h" + #include "LESwaps.h" + ++U_NAMESPACE_BEGIN ++ + void AnchorTable::getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance, + LEPoint &anchor) const + { +@@ -124,3 +126,6 @@ + + fontInstance->pixelsToUnits(pixels, anchor); + } ++ ++U_NAMESPACE_END ++ +diff --git a/src/share/native/sun/font/layout/AnchorTables.h b/src/share/native/sun/font/layout/AnchorTables.h +--- jdk/src/share/native/sun/font/layout/AnchorTables.h ++++ jdk/src/share/native/sun/font/layout/AnchorTables.h +@@ -32,10 +32,17 @@ + #ifndef __ANCHORTABLES_H + #define __ANCHORTABLES_H + ++/** ++ * \file ++ * \internal ++ */ ++ + #include "LETypes.h" + #include "LEFontInstance.h" + #include "OpenTypeTables.h" + ++U_NAMESPACE_BEGIN ++ + struct AnchorTable + { + le_uint16 anchorFormat; +@@ -66,5 +73,7 @@ + void getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const; + }; + ++U_NAMESPACE_END ++#endif + +-#endif ++ +diff --git a/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp b/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp +--- jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp ++++ jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.cpp +@@ -49,23 +49,25 @@ + #include "ArabicShaping.h" + #include "CanonShaping.h" + ++U_NAMESPACE_BEGIN ++ + le_bool CharSubstitutionFilter::accept(LEGlyphID glyph) const + { + return fFontInstance->canDisplay((LEUnicode) glyph); + } + +-ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine( +- const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, +- le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) ++UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ArabicOpenTypeLayoutEngine) ++ ++ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, ++ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable) + { + fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount); + fFeatureOrder = TRUE; + } + +-ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine( +- const LEFontInstance *fontInstance, +- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) ++ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, ++ le_int32 typoFlags) + : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags) + { + fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount); +@@ -86,9 +88,8 @@ + // Input: characters + // Output: characters, char indices, tags + // Returns: output character count +-le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], +- le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, +- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success) ++le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, ++ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success) + { + if (LE_FAILURE(success)) { + return 0; +@@ -124,8 +125,8 @@ + return count; + } + +-void ArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, +- le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success) ++void ArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, ++ LEGlyphStorage &glyphStorage, LEErrorCode &success) + { + if (LE_FAILURE(success)) { + return; +@@ -137,24 +138,20 @@ + } + + if (fGPOSTable != NULL) { +- OpenTypeLayoutEngine::adjustGlyphPositions(chars, offset, count, +- reverse, glyphStorage, success); ++ OpenTypeLayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success); + } else if (fGDEFTable != NULL) { + GDEFMarkFilter filter(fGDEFTable); + + adjustMarkGlyphs(glyphStorage, &filter, success); + } else { +- GlyphDefinitionTableHeader *gdefTable = +- (GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable; ++ GlyphDefinitionTableHeader *gdefTable = (GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable; + GDEFMarkFilter filter(gdefTable); + + adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success); + } + } + +-UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine( +- const LEFontInstance *fontInstance, +- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) ++UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags) + : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags | LE_CHAR_FILTER_FEATURE_FLAG) + { + fGSUBTable = (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable; +@@ -168,8 +165,7 @@ + } + + // "glyphs", "indices" -> glyphs, indices +-le_int32 UnicodeArabicOpenTypeLayoutEngine::glyphPostProcessing( +- LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success) ++le_int32 UnicodeArabicOpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success) + { + if (LE_FAILURE(success)) { + return 0; +@@ -192,17 +188,14 @@ + + glyphStorage.adoptCharIndicesArray(tempGlyphStorage); + +- ArabicOpenTypeLayoutEngine::mapCharsToGlyphs(tempChars, 0, tempGlyphCount, FALSE, +- TRUE, glyphStorage, success); ++ ArabicOpenTypeLayoutEngine::mapCharsToGlyphs(tempChars, 0, tempGlyphCount, FALSE, TRUE, glyphStorage, success); + + LE_DELETE_ARRAY(tempChars); + + return tempGlyphCount; + } + +-void UnicodeArabicOpenTypeLayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], +- le_int32 offset, le_int32 count, le_bool reverse, le_bool /*mirror*/, +- LEGlyphStorage &glyphStorage, LEErrorCode &success) ++void UnicodeArabicOpenTypeLayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool /*mirror*/, LEGlyphStorage &glyphStorage, LEErrorCode &success) + { + if (LE_FAILURE(success)) { + return; +@@ -227,9 +220,8 @@ + } + } + +-void UnicodeArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], +- le_int32 offset, le_int32 count, le_bool reverse, +- LEGlyphStorage &glyphStorage, LEErrorCode &success) ++void UnicodeArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, ++ LEGlyphStorage &glyphStorage, LEErrorCode &success) + { + if (LE_FAILURE(success)) { + return; +@@ -244,3 +236,6 @@ + + adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success); + } ++ ++U_NAMESPACE_END ++ +diff --git a/src/share/native/sun/font/layout/ArabicLayoutEngine.h b/src/share/native/sun/font/layout/ArabicLayoutEngine.h +--- jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.h ++++ jdk/src/share/native/sun/font/layout/ArabicLayoutEngine.h +@@ -43,6 +43,8 @@ + #include "GlyphDefinitionTables.h" + #include "GlyphPositioningTables.h" + ++U_NAMESPACE_BEGIN ++ + /** + * This class implements OpenType layout for Arabic fonts. It overrides + * the characerProcessing method to assign the correct OpenType feature +@@ -71,8 +73,8 @@ + * + * @internal + */ +- ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, +- le_int32 languageCode, le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable); ++ ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, ++ le_int32 typoFlags, const GlyphSubstitutionTableHeader *gsubTable); + + /** + * This constructor is used when the font requires a "canned" GSUB table which can't be known +@@ -87,8 +89,8 @@ + * + * @internal + */ +- ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, +- le_int32 languageCode, le_int32 typoFlags); ++ ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, ++ le_int32 typoFlags); + + /** + * The destructor, virtual for correct polymorphic invocation. +@@ -97,6 +99,20 @@ + */ + virtual ~ArabicOpenTypeLayoutEngine(); + ++ /** ++ * ICU "poor man's RTTI", returns a UClassID for the actual class. ++ * ++ * @stable ICU 2.8 ++ */ ++ virtual UClassID getDynamicClassID() const; ++ ++ /** ++ * ICU "poor man's RTTI", returns a UClassID for this class. ++ * ++ * @stable ICU 2.8 ++ */ ++ static UClassID getStaticClassID(); ++ + protected: + + /** +@@ -108,8 +124,7 @@ + * @param offset - the index of the first character to process + * @param count - the number of characters to process + * @param max - the number of characters in the input context +- * @param rightToLeft - TRUE if the characters are in a +- * right to left directional run ++ * @param rightToLeft - TRUE if the characters are in a right to left directional run + * + * Output parameters: + * @param outChars - the output character arrayt +@@ -121,9 +136,8 @@ + * + * @internal + */ +- virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, +- le_int32 count, le_int32 max, le_bool rightToLeft, +- LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success); ++ virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, ++ LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success); + + /** + * This method applies the GPOS table if it is present, otherwise it ensures that all vowel +@@ -142,11 +156,9 @@ + * + * @internal + */ +- virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, +- le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success); ++ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success); + +- // static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, +- // le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success); ++ // static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success); + + }; + +@@ -178,8 +190,8 @@ + * + * @internal + */ +- UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, +- le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags); ++ UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, ++ le_int32 typoFlags); + + /** + * The destructor, virtual for correct polymorphic invocation. +@@ -208,8 +220,7 @@ + * + * @internal + */ +- virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, +- LEGlyphStorage &glyphStorage, LEErrorCode &success); ++ virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success); + + /** + * This method copies the input characters into the output glyph index array, +@@ -227,8 +238,7 @@ + * + * @internal + */ +- virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, +- le_int32 count, le_bool reverse, le_bool mirror, ++ virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, + LEGlyphStorage &glyphStorage, LEErrorCode &success); + + /** +@@ -245,8 +255,9 @@ + * + * @internal + */ +- virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, +- le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success); ++ virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success); + }; + ++U_NAMESPACE_END + #endif ++ +diff --git a/src/share/native/sun/font/layout/ArabicShaping.cpp b/src/share/native/sun/font/layout/ArabicShaping.cpp +--- jdk/src/share/native/sun/font/layout/ArabicShaping.cpp ++++ jdk/src/share/native/sun/font/layout/ArabicShaping.cpp +@@ -35,6 +35,8 @@ + #include "LEGlyphStorage.h" + #include "ClassDefinitionTables.h" + ++U_NAMESPACE_BEGIN ++ + // This table maps Unicode joining types to + // ShapeTypes. + const ArabicShaping::ShapeType ArabicShaping::shapeTypes[] = +@@ -102,9 +104,7 @@ + #define markFeatureMask 0x00040000UL + #define mkmkFeatureMask 0x00020000UL + +-#define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | \ +- markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | \ +- dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask) ++#define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask) + + #define SHAPE_MASK 0xF0000000UL + +@@ -226,3 +226,5 @@ + adjustTags(erout, 2, glyphStorage); + } + } ++ ++U_NAMESPACE_END +diff --git a/src/share/native/sun/font/layout/ArabicShaping.h b/src/share/native/sun/font/layout/ArabicShaping.h +--- jdk/src/share/native/sun/font/layout/ArabicShaping.h ++++ jdk/src/share/native/sun/font/layout/ArabicShaping.h *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***