diff --git a/mozilla/js/rhino/org/mozilla/javascript/JavaMembers.java b/mozilla/js/rhino/org/mozilla/javascript/JavaMembers.java index b443866f550..0355b5de9b1 100644 --- a/mozilla/js/rhino/org/mozilla/javascript/JavaMembers.java +++ b/mozilla/js/rhino/org/mozilla/javascript/JavaMembers.java @@ -474,7 +474,8 @@ class JavaMembers { Class staticType) { Class cl = dynamicType; - JavaMembers members = (JavaMembers) classTable.get(cl); + Hashtable ct = classTable; // use local reference to avoid synchronize + JavaMembers members = (JavaMembers) ct.get(cl); if (members != null) return members; if (staticType != null && staticType != dynamicType && @@ -483,26 +484,21 @@ class JavaMembers { { cl = staticType; } - synchronized (classTable) { - members = (JavaMembers) classTable.get(cl); - if (members != null) - return members; - try { - members = new JavaMembers(scope, cl); - } catch (SecurityException e) { - // Reflection may fail for objects that are in a restricted - // access package (e.g. sun.*). If we get a security - // exception, try again with the static type. Otherwise, - // rethrow the exception. - if (cl != staticType) - members = new JavaMembers(scope, staticType); - else - throw e; - } - if (Context.isCachingEnabled) - classTable.put(cl, members); - return members; + try { + members = new JavaMembers(scope, cl); + } catch (SecurityException e) { + // Reflection may fail for objects that are in a restricted + // access package (e.g. sun.*). If we get a security + // exception, try again with the static type. Otherwise, + // rethrow the exception. + if (cl != staticType) + members = new JavaMembers(scope, staticType); + else + throw e; } + if (Context.isCachingEnabled) + ct.put(cl, members); + return members; } RuntimeException reportMemberNotFound(String memberName) { diff --git a/mozilla/js/rhino/src/org/mozilla/javascript/JavaMembers.java b/mozilla/js/rhino/src/org/mozilla/javascript/JavaMembers.java index b443866f550..0355b5de9b1 100644 --- a/mozilla/js/rhino/src/org/mozilla/javascript/JavaMembers.java +++ b/mozilla/js/rhino/src/org/mozilla/javascript/JavaMembers.java @@ -474,7 +474,8 @@ class JavaMembers { Class staticType) { Class cl = dynamicType; - JavaMembers members = (JavaMembers) classTable.get(cl); + Hashtable ct = classTable; // use local reference to avoid synchronize + JavaMembers members = (JavaMembers) ct.get(cl); if (members != null) return members; if (staticType != null && staticType != dynamicType && @@ -483,26 +484,21 @@ class JavaMembers { { cl = staticType; } - synchronized (classTable) { - members = (JavaMembers) classTable.get(cl); - if (members != null) - return members; - try { - members = new JavaMembers(scope, cl); - } catch (SecurityException e) { - // Reflection may fail for objects that are in a restricted - // access package (e.g. sun.*). If we get a security - // exception, try again with the static type. Otherwise, - // rethrow the exception. - if (cl != staticType) - members = new JavaMembers(scope, staticType); - else - throw e; - } - if (Context.isCachingEnabled) - classTable.put(cl, members); - return members; + try { + members = new JavaMembers(scope, cl); + } catch (SecurityException e) { + // Reflection may fail for objects that are in a restricted + // access package (e.g. sun.*). If we get a security + // exception, try again with the static type. Otherwise, + // rethrow the exception. + if (cl != staticType) + members = new JavaMembers(scope, staticType); + else + throw e; } + if (Context.isCachingEnabled) + ct.put(cl, members); + return members; } RuntimeException reportMemberNotFound(String memberName) {