From: markt Date: Mon, 19 Sep 2011 16:30:36 +0000 (+0000) Subject: Fix threading issue with changing visibility of methods and fields X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=b5401869792008bb4e7cd9620f79d5746bfc215d;p=tomcat7.0 Fix threading issue with changing visibility of methods and fields git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1172689 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/core/DefaultInstanceManager.java b/java/org/apache/catalina/core/DefaultInstanceManager.java index 537606d57..cb383cb1b 100644 --- a/java/org/apache/catalina/core/DefaultInstanceManager.java +++ b/java/org/apache/catalina/core/DefaultInstanceManager.java @@ -187,9 +187,11 @@ public class DefaultInstanceManager implements InstanceManager { if (entry.getType() == AnnotationCacheEntryType.POST_CONSTRUCT) { Method postConstruct = (Method) entry.getAccessibleObject(); boolean accessibility = postConstruct.isAccessible(); - postConstruct.setAccessible(true); - postConstruct.invoke(instance); - postConstruct.setAccessible(accessibility); + synchronized (postConstruct) { + postConstruct.setAccessible(true); + postConstruct.invoke(instance); + postConstruct.setAccessible(accessibility); + } } } } @@ -229,9 +231,11 @@ public class DefaultInstanceManager implements InstanceManager { if (entry.getType() == AnnotationCacheEntryType.PRE_DESTROY) { Method preDestroy = (Method) entry.getAccessibleObject(); boolean accessibility = preDestroy.isAccessible(); - preDestroy.setAccessible(true); - preDestroy.invoke(instance); - preDestroy.setAccessible(accessibility); + synchronized (preDestroy) { + preDestroy.setAccessible(true); + preDestroy.invoke(instance); + preDestroy.setAccessible(accessibility); + } } } } @@ -572,9 +576,11 @@ public class DefaultInstanceManager implements InstanceManager { } accessibility = field.isAccessible(); - field.setAccessible(true); - field.set(instance, lookedupResource); - field.setAccessible(accessibility); + synchronized (field) { + field.setAccessible(true); + field.set(instance, lookedupResource); + field.setAccessible(accessibility); + } } /** @@ -614,9 +620,11 @@ public class DefaultInstanceManager implements InstanceManager { } accessibility = method.isAccessible(); - method.setAccessible(true); - method.invoke(instance, lookedupResource); - method.setAccessible(accessibility); + synchronized (method) { + method.setAccessible(true); + method.invoke(instance, lookedupResource); + method.setAccessible(accessibility); + } } public static String getName(Method setter) {