From: jfclere Date: Thu, 20 May 2010 15:25:13 +0000 (+0000) Subject: Prevent core due to wrong synchronisation. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=a77b7bb3729725b9f3632989bf783582c9752bfe;p=tomcat7.0 Prevent core due to wrong synchronisation. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@946671 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/core/AprLifecycleListener.java b/java/org/apache/catalina/core/AprLifecycleListener.java index 2b31153c8..daa5a7d85 100644 --- a/java/org/apache/catalina/core/AprLifecycleListener.java +++ b/java/org/apache/catalina/core/AprLifecycleListener.java @@ -72,9 +72,15 @@ public class AprLifecycleListener protected static boolean sslAvailable = false; protected static boolean aprAvailable = false; + protected static String lock = ""; + public static boolean isAprAvailable() { //https://issues.apache.org/bugzilla/show_bug.cgi?id=48613 - if (instanceCreated) init(); + if (instanceCreated) { + synchronized (lock) { + init(); + } + } return aprAvailable; } @@ -92,28 +98,32 @@ public class AprLifecycleListener public void lifecycleEvent(LifecycleEvent event) { if (Lifecycle.INIT_EVENT.equals(event.getType())) { - init(); - if (aprAvailable) { - try { - initializeSSL(); - } catch (Throwable t) { - log.info(sm.getString("aprListener.sslInit")); + synchronized (lock) { + init(); + if (aprAvailable) { + try { + initializeSSL(); + } catch (Throwable t) { + log.info(sm.getString("aprListener.sslInit")); + } } } } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) { - if (!aprAvailable) { - return; - } - try { - terminateAPR(); - } catch (Throwable t) { - log.info(sm.getString("aprListener.aprDestroy")); + synchronized (lock) { + if (!aprAvailable) { + return; + } + try { + terminateAPR(); + } catch (Throwable t) { + log.info(sm.getString("aprListener.aprDestroy")); + } } } } - private static synchronized void terminateAPR() + private static void terminateAPR() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException { @@ -121,6 +131,8 @@ public class AprLifecycleListener Method method = Class.forName("org.apache.tomcat.jni.Library") .getMethod(methodName, (Class [])null); method.invoke(null, (Object []) null); + aprAvailable = false; + aprInitialized = false; } private static void init() @@ -188,7 +200,7 @@ public class AprLifecycleListener aprAvailable = true; } - private static synchronized void initializeSSL() + private static void initializeSSL() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {