Repository: activemq-6
Updated Branches:
  refs/heads/master 28ca327b8 -> e419feb88


HORNETQ-1381 create new threads under AccessControlContext of the creator of 
ActiveMQThreadFactory


Project: http://git-wip-us.apache.org/repos/asf/activemq-6/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-6/commit/ff9052b8
Tree: http://git-wip-us.apache.org/repos/asf/activemq-6/tree/ff9052b8
Diff: http://git-wip-us.apache.org/repos/asf/activemq-6/diff/ff9052b8

Branch: refs/heads/master
Commit: ff9052b83b9ae9e4982d089eb2147f78bce6526d
Parents: b61747d
Author: Ivo Studensky <istud...@redhat.com>
Authored: Fri Dec 5 12:23:48 2014 +0100
Committer: Ivo Studensky <istud...@redhat.com>
Committed: Fri Dec 5 12:23:48 2014 +0100

----------------------------------------------------------------------
 .../activemq/utils/ActiveMQThreadFactory.java   | 51 +++++++++++++++-----
 1 file changed, 38 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-6/blob/ff9052b8/activemq-commons/src/main/java/org/apache/activemq/utils/ActiveMQThreadFactory.java
----------------------------------------------------------------------
diff --git 
a/activemq-commons/src/main/java/org/apache/activemq/utils/ActiveMQThreadFactory.java
 
b/activemq-commons/src/main/java/org/apache/activemq/utils/ActiveMQThreadFactory.java
index 5c76120..b857825 100644
--- 
a/activemq-commons/src/main/java/org/apache/activemq/utils/ActiveMQThreadFactory.java
+++ 
b/activemq-commons/src/main/java/org/apache/activemq/utils/ActiveMQThreadFactory.java
@@ -16,6 +16,7 @@
  */
 package org.apache.activemq.utils;
 
+import java.security.AccessControlContext;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.concurrent.ThreadFactory;
@@ -40,6 +41,8 @@ public final class ActiveMQThreadFactory implements 
ThreadFactory
 
    private final ClassLoader tccl;
 
+   private final AccessControlContext acc;
+
    public ActiveMQThreadFactory(final String groupName, final boolean daemon, 
final ClassLoader tccl)
    {
       group = new ThreadGroup(groupName + "-" + System.identityHashCode(this));
@@ -49,24 +52,46 @@ public final class ActiveMQThreadFactory implements 
ThreadFactory
       this.tccl = tccl;
 
       this.daemon = daemon;
+
+      this.acc = (System.getSecurityManager() == null) ? null : 
AccessController.getContext();
    }
 
    public Thread newThread(final Runnable command)
    {
-      // always create a thread in a privileged block.
-      return AccessController.doPrivileged(new PrivilegedAction<Thread>()
+      // create a thread in a privileged block if running with Security Manager
+      if (acc != null && System.getSecurityManager() != null)
+      {
+         return AccessController.doPrivileged(new ThreadCreateAction(command), 
acc);
+      }
+      else
+      {
+         return createThread(command);
+      }
+   }
+
+   private final class ThreadCreateAction implements PrivilegedAction<Thread>
+   {
+      private final Runnable target;
+
+      private ThreadCreateAction(final Runnable target)
+      {
+         this.target = target;
+      }
+
+      public Thread run()
       {
-         @Override
-         public Thread run()
-         {
-            final Thread t = new Thread(group, command, "Thread-" + 
threadCount.getAndIncrement() + " (" + group.getName() + ")");
-            t.setDaemon(daemon);
-            t.setPriority(threadPriority);
-            t.setContextClassLoader(tccl);
-
-            return t;
-         }
-      });
+         return createThread(target);
+      }
+   }
+
+   private Thread createThread(final Runnable command)
+   {
+      final Thread t = new Thread(group, command, "Thread-" + 
threadCount.getAndIncrement() + " (" + group.getName() + ")");
+      t.setDaemon(daemon);
+      t.setPriority(threadPriority);
+      t.setContextClassLoader(tccl);
+
+      return t;
    }
 
 }

Reply via email to