ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/concurrent/ForkJoinWorkerThread.java
(Generate patch)

Comparing jsr166/src/main/java/util/concurrent/ForkJoinWorkerThread.java (file contents):
Revision 1.73 by jsr166, Sun Jan 29 04:34:59 2017 UTC vs.
Revision 1.74 by jsr166, Tue Jan 31 01:44:39 2017 UTC

# Line 7 | Line 7
7   package java.util.concurrent;
8  
9   import java.security.AccessControlContext;
10 + import java.security.AccessController;
11 + import java.security.PrivilegedAction;
12   import java.security.ProtectionDomain;
13  
14   /**
# Line 59 | Line 61 | public class ForkJoinWorkerThread extend
61      }
62  
63      /**
64 +     * Version for use by the default pool.  Supports setting the
65 +     * context class loader.  This is a separate constructor to avoid
66 +     * affecting the protected constructor.
67 +     */
68 +    ForkJoinWorkerThread(ForkJoinPool pool, ClassLoader ccl) {
69 +        super("aForkJoinWorkerThread");
70 +        super.setContextClassLoader(ccl);
71 +        this.pool = pool;
72 +        this.workQueue = pool.registerWorker(this);
73 +    }
74 +
75 +    /**
76       * Version for InnocuousForkJoinWorkerThread.
77       */
78 <    ForkJoinWorkerThread(ForkJoinPool pool, ThreadGroup threadGroup,
78 >    ForkJoinWorkerThread(ForkJoinPool pool,
79 >                         ClassLoader ccl,
80 >                         ThreadGroup threadGroup,
81                           AccessControlContext acc) {
82          super(threadGroup, null, "aForkJoinWorkerThread");
83 +        super.setContextClassLoader(ccl);
84          ThreadLocalRandom.setInheritedAccessControlContext(this, acc);
85          ThreadLocalRandom.eraseThreadLocals(this); // clear before registering
86          this.pool = pool;
# Line 150 | Line 167 | public class ForkJoinWorkerThread extend
167  
168      /**
169       * A worker thread that has no permissions, is not a member of any
170 <     * user-defined ThreadGroup, and erases all ThreadLocals after
170 >     * user-defined ThreadGroup, uses the system class loader as
171 >     * thread context class loader, and erases all ThreadLocals after
172       * running each top-level task.
173       */
174      static final class InnocuousForkJoinWorkerThread extends ForkJoinWorkerThread {
175          /** The ThreadGroup for all InnocuousForkJoinWorkerThreads */
176          private static final ThreadGroup innocuousThreadGroup =
177 <                java.security.AccessController.doPrivileged(
178 <                    new java.security.PrivilegedAction<>() {
179 <                        public ThreadGroup run() {
180 <                            ThreadGroup group = Thread.currentThread().getThreadGroup();
181 <                            for (ThreadGroup p; (p = group.getParent()) != null; )
182 <                                group = p;
183 <                            return new ThreadGroup(group, "InnocuousForkJoinWorkerThreadGroup");
184 <                        }});
177 >            java.security.AccessController.doPrivileged(
178 >                new java.security.PrivilegedAction<>() {
179 >                    public ThreadGroup run() {
180 >                        ThreadGroup group = Thread.currentThread().getThreadGroup();
181 >                        for (ThreadGroup p; (p = group.getParent()) != null; )
182 >                            group = p;
183 >                        return new ThreadGroup(group, "InnocuousForkJoinWorkerThreadGroup");
184 >                    }});
185  
186          /** An AccessControlContext supporting no privileges */
187          private static final AccessControlContext INNOCUOUS_ACC =
# Line 173 | Line 191 | public class ForkJoinWorkerThread extend
191                  });
192  
193          InnocuousForkJoinWorkerThread(ForkJoinPool pool) {
194 <            super(pool, innocuousThreadGroup, INNOCUOUS_ACC);
194 >            super(pool,
195 >                  ClassLoader.getSystemClassLoader(),
196 >                  innocuousThreadGroup,
197 >                  INNOCUOUS_ACC);
198          }
199  
200          @Override // to erase ThreadLocals
# Line 181 | Line 202 | public class ForkJoinWorkerThread extend
202              ThreadLocalRandom.eraseThreadLocals(this);
203          }
204  
184        @Override // to always report system loader
185        public ClassLoader getContextClassLoader() {
186            return ClassLoader.getSystemClassLoader();
187        }
188
205          @Override // to silently fail
206          public void setUncaughtExceptionHandler(UncaughtExceptionHandler x) { }
207  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines