You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2018/04/27 17:34:06 UTC

[cxf] 03/05: no need of instantiating so much objects when security manager is null, let's keep the runtime fast

This is an automated email from the ASF dual-hosted git repository.

dkulp pushed a commit to branch 3.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 6c45abc4d057811b01f5aaf88f0d5ef617a5b7e9
Author: Romain Manni-Bucau <rm...@gmail.com>
AuthorDate: Fri Apr 27 15:09:12 2018 +0200

    no need of instantiating so much objects when security manager is null, let's keep the runtime fast
---
 .../cxf/common/classloader/ClassLoaderUtils.java   | 34 +++++++++++++++++-----
 1 file changed, 27 insertions(+), 7 deletions(-)

diff --git a/core/src/main/java/org/apache/cxf/common/classloader/ClassLoaderUtils.java b/core/src/main/java/org/apache/cxf/common/classloader/ClassLoaderUtils.java
index 90b0626..7aa6aef 100644
--- a/core/src/main/java/org/apache/cxf/common/classloader/ClassLoaderUtils.java
+++ b/core/src/main/java/org/apache/cxf/common/classloader/ClassLoaderUtils.java
@@ -36,26 +36,46 @@ import java.util.List;
  * verify any change on 6 different application servers.
  */
 public final class ClassLoaderUtils {
-    
+    private static final boolean SKIP_SM = System.getSecurityManager() == null;
+
     private ClassLoaderUtils() {
     }
     
     public static class ClassLoaderHolder {
         ClassLoader loader;
-        ClassLoaderHolder(ClassLoader c) {
-            loader = c;
+        Thread thread;
+
+        ClassLoaderHolder(final ClassLoader c, final Thread thread) {
+            this.loader = c;
+            this.thread = thread;
         }
         
         public void reset() {
-            ClassLoaderUtils.setThreadContextClassloader(loader);
+            if (SKIP_SM) {
+                thread.setContextClassLoader(loader);
+            } else {
+                AccessController.doPrivileged(new PrivilegedAction<Void>() {
+                    public Void run() {
+                        thread.setContextClassLoader(loader);
+                        return null;
+                    }
+                });
+            }
         }
     }
     public static ClassLoaderHolder setThreadContextClassloader(final ClassLoader newLoader) {
+        if (SKIP_SM) {
+            final Thread thread = Thread.currentThread();
+            final ClassLoader l = thread.getContextClassLoader();
+            thread.setContextClassLoader(newLoader);
+            return new ClassLoaderHolder(l, thread);
+        }
         return AccessController.doPrivileged(new PrivilegedAction<ClassLoaderHolder>() {
             public ClassLoaderHolder run() {
-                ClassLoader l = Thread.currentThread().getContextClassLoader();
-                Thread.currentThread().setContextClassLoader(newLoader);
-                return new ClassLoaderHolder(l);
+                final Thread thread = Thread.currentThread();
+                final ClassLoader l = thread.getContextClassLoader();
+                thread.setContextClassLoader(newLoader);
+                return new ClassLoaderHolder(l, thread);
             }
         });
     }

-- 
To stop receiving notification emails like this one, please contact
dkulp@apache.org.