Author: markt
Date: Thu Jan 23 12:15:56 2014
New Revision: 1560654

URL: http://svn.apache.org/r1560654
Log:
Migrate AsyncContext to use Context bind()/unbind()

Modified:
    tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
    tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java

Modified: tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java?rev=1560654&r1=1560653&r2=1560654&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/AsyncContextImpl.java Thu Jan 23 
12:15:56 2014
@@ -18,8 +18,6 @@ package org.apache.catalina.core;
 
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -99,22 +97,8 @@ public class AsyncContextImpl implements
         List<AsyncListenerWrapper> listenersCopy = new ArrayList<>();
         listenersCopy.addAll(listeners);
 
-        ClassLoader oldCL;
-        if (Globals.IS_SECURITY_ENABLED) {
-            PrivilegedAction<ClassLoader> pa = new PrivilegedGetTccl();
-            oldCL = AccessController.doPrivileged(pa);
-        } else {
-            oldCL = Thread.currentThread().getContextClassLoader();
-        }
-        ClassLoader newCL = context.getLoader().getClassLoader();
-
+        ClassLoader oldCL = context.bind(Globals.IS_SECURITY_ENABLED, null);
         try {
-            if (Globals.IS_SECURITY_ENABLED) {
-                PrivilegedAction<Void> pa = new PrivilegedSetTccl(newCL);
-                AccessController.doPrivileged(pa);
-            } else {
-                Thread.currentThread().setContextClassLoader(newCL);
-            }
             for (AsyncListenerWrapper listener : listenersCopy) {
                 try {
                     listener.fireOnComplete(event);
@@ -125,12 +109,7 @@ public class AsyncContextImpl implements
                 }
             }
         } finally {
-            if (Globals.IS_SECURITY_ENABLED) {
-                PrivilegedAction<Void> pa = new PrivilegedSetTccl(oldCL);
-                AccessController.doPrivileged(pa);
-            } else {
-                Thread.currentThread().setContextClassLoader(oldCL);
-            }
+            context.unbind(Globals.IS_SECURITY_ENABLED, oldCL);
         }
     }
 
@@ -139,11 +118,8 @@ public class AsyncContextImpl implements
         request.getCoyoteRequest().action(ActionCode.ASYNC_TIMEOUT, result);
 
         if (result.get()) {
-
-            ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
-            ClassLoader newCL = 
request.getContext().getLoader().getClassLoader();
+            ClassLoader oldCL = context.bind(false, null);
             try {
-                Thread.currentThread().setContextClassLoader(newCL);
                 List<AsyncListenerWrapper> listenersCopy = new ArrayList<>();
                 listenersCopy.addAll(listeners);
                 for (AsyncListenerWrapper listener : listenersCopy) {
@@ -157,12 +133,11 @@ public class AsyncContextImpl implements
                 }
                 request.getCoyoteRequest().action(
                         ActionCode.ASYNC_IS_TIMINGOUT, result);
-                return !result.get();
             } finally {
-                Thread.currentThread().setContextClassLoader(oldCL);
+                context.unbind(false, oldCL);
             }
         }
-        return true;
+        return !result.get();
     }
 
     @Override
@@ -552,32 +527,11 @@ public class AsyncContextImpl implements
 
         @Override
         public void run() {
-            ClassLoader oldCL;
-            if (Globals.IS_SECURITY_ENABLED) {
-                PrivilegedAction<ClassLoader> pa = new PrivilegedGetTccl();
-                oldCL = AccessController.doPrivileged(pa);
-            } else {
-                oldCL = Thread.currentThread().getContextClassLoader();
-            }
-
+            ClassLoader oldCL = context.bind(Globals.IS_SECURITY_ENABLED, 
null);
             try {
-                if (Globals.IS_SECURITY_ENABLED) {
-                    PrivilegedAction<Void> pa = new PrivilegedSetTccl(
-                            context.getLoader().getClassLoader());
-                    AccessController.doPrivileged(pa);
-                } else {
-                    Thread.currentThread().setContextClassLoader
-                            (context.getLoader().getClassLoader());
-                }
                 wrapped.run();
             } finally {
-                if (Globals.IS_SECURITY_ENABLED) {
-                    PrivilegedAction<Void> pa = new PrivilegedSetTccl(
-                            oldCL);
-                    AccessController.doPrivileged(pa);
-                } else {
-                    Thread.currentThread().setContextClassLoader(oldCL);
-                }
+                context.unbind(Globals.IS_SECURITY_ENABLED, oldCL);
             }
 
             // Since this runnable is not executing as a result of a socket
@@ -586,30 +540,4 @@ public class AsyncContextImpl implements
             coyoteRequest.action(ActionCode.DISPATCH_EXECUTE, null);
         }
     }
-
-
-    private static class PrivilegedSetTccl implements PrivilegedAction<Void> {
-
-        private ClassLoader cl;
-
-        PrivilegedSetTccl(ClassLoader cl) {
-            this.cl = cl;
-        }
-
-        @Override
-        public Void run() {
-            Thread.currentThread().setContextClassLoader(cl);
-            return null;
-        }
-    }
-
-    private static class PrivilegedGetTccl
-            implements PrivilegedAction<ClassLoader> {
-
-        @Override
-        public ClassLoader run() {
-            return Thread.currentThread().getContextClassLoader();
-        }
-    }
-
 }

Modified: tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java?rev=1560654&r1=1560653&r2=1560654&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java Thu 
Jan 23 12:15:56 2014
@@ -81,12 +81,6 @@ public final class SecurityClassLoad {
             "AsyncContextImpl$1");
         loader.loadClass
             (basePackage +
-            "AsyncContextImpl$PrivilegedGetTccl");
-        loader.loadClass
-            (basePackage +
-            "AsyncContextImpl$PrivilegedSetTccl");
-        loader.loadClass
-            (basePackage +
             "AsyncListenerWrapper");
         loader.loadClass
             (basePackage +
@@ -109,6 +103,12 @@ public final class SecurityClassLoad {
         loader.loadClass
             (basePackage +
              "ApplicationHttpRequest$AttributeNamesEnumerator");
+        loader.loadClass
+            (basePackage +
+             "StandardContext$PrivilegedGetTccl");
+        loader.loadClass
+            (basePackage +
+             "StandardContext$PrivilegedSetTccl");
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to