On 20/05/2010 16:25, [email protected] wrote:
> Author: jfclere
> Date: Thu May 20 15:25:13 2010
> New Revision: 946671
>
> URL: http://svn.apache.org/viewvc?rev=946671&view=rev
> Log:
> Prevent core due to wrong synchronisation.
>
> Modified:
> tomcat/trunk/java/org/apache/catalina/core/AprLifecycleListener.java
>
> Modified: tomcat/trunk/java/org/apache/catalina/core/AprLifecycleListener.java
> URL:
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/AprLifecycleListener.java?rev=946671&r1=946670&r2=946671&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/catalina/core/AprLifecycleListener.java
> (original)
> +++ tomcat/trunk/java/org/apache/catalina/core/AprLifecycleListener.java Thu
> May 20 15:25:13 2010
> @@ -72,9 +72,15 @@ public class AprLifecycleListener
> protected static boolean sslAvailable = false;
> protected static boolean aprAvailable = false;
>
> + protected static String lock = "";
> +
Better as:
protected static Object lock = new Object();
Mark
> 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
> {
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]