Skip to content

Commit c388455

Browse files
author
Roger Riggs
committed
8344197: SM cleanup in java.util.concurrent
Reviewed-by: alanb, dl
1 parent c5b6ed8 commit c388455

12 files changed

+40
-270
lines changed

src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListSet.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -527,20 +527,11 @@ public Spliterator<E> spliterator() {
527527

528528
/** Initializes map field; for use in clone. */
529529
private void setMap(ConcurrentNavigableMap<E,Object> map) {
530-
@SuppressWarnings("removal")
531-
Field mapField = java.security.AccessController.doPrivileged(
532-
(java.security.PrivilegedAction<Field>) () -> {
533-
try {
534-
Field f = ConcurrentSkipListSet.class
535-
.getDeclaredField("m");
536-
f.setAccessible(true);
537-
return f;
538-
} catch (ReflectiveOperationException e) {
539-
throw new Error(e);
540-
}});
541530
try {
531+
Field mapField = ConcurrentSkipListSet.class.getDeclaredField("m");
532+
mapField.setAccessible(true);
542533
mapField.set(this, map);
543-
} catch (IllegalAccessException e) {
534+
} catch (IllegalAccessException | NoSuchFieldException e) {
544535
throw new Error(e);
545536
}
546537
}

src/java.base/share/classes/java/util/concurrent/CopyOnWriteArrayList.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2096,20 +2096,11 @@ public List<E> reversed() {
20962096

20972097
/** Initializes the lock; for use when deserializing or cloning. */
20982098
private void resetLock() {
2099-
@SuppressWarnings("removal")
2100-
Field lockField = java.security.AccessController.doPrivileged(
2101-
(java.security.PrivilegedAction<Field>) () -> {
2102-
try {
2103-
Field f = CopyOnWriteArrayList.class
2104-
.getDeclaredField("lock");
2105-
f.setAccessible(true);
2106-
return f;
2107-
} catch (ReflectiveOperationException e) {
2108-
throw new Error(e);
2109-
}});
21102099
try {
2100+
Field lockField = CopyOnWriteArrayList.class.getDeclaredField("lock");
2101+
lockField.setAccessible(true);
21112102
lockField.set(this, new Object());
2112-
} catch (IllegalAccessException e) {
2103+
} catch (IllegalAccessException | NoSuchFieldException e) {
21132104
throw new Error(e);
21142105
}
21152106
}

src/java.base/share/classes/java/util/concurrent/Executors.java

Lines changed: 17 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,12 @@
3737

3838
import static java.lang.ref.Reference.reachabilityFence;
3939
import java.lang.ref.Cleaner.Cleanable;
40-
import java.security.AccessControlContext;
41-
import java.security.AccessController;
4240
import java.security.PrivilegedAction;
43-
import java.security.PrivilegedActionException;
4441
import java.security.PrivilegedExceptionAction;
4542
import java.util.Collection;
4643
import java.util.List;
4744
import java.util.concurrent.atomic.AtomicInteger;
4845
import jdk.internal.ref.CleanerFactory;
49-
import sun.security.util.SecurityConstants;
5046

5147
/**
5248
* Factory and utility methods for {@link Executor}, {@link
@@ -559,27 +555,13 @@ public String toString() {
559555
*/
560556
private static final class PrivilegedCallable<T> implements Callable<T> {
561557
final Callable<T> task;
562-
@SuppressWarnings("removal")
563-
final AccessControlContext acc;
564558

565-
@SuppressWarnings("removal")
566559
PrivilegedCallable(Callable<T> task) {
567560
this.task = task;
568-
this.acc = AccessController.getContext();
569561
}
570562

571-
@SuppressWarnings("removal")
572563
public T call() throws Exception {
573-
try {
574-
return AccessController.doPrivileged(
575-
new PrivilegedExceptionAction<T>() {
576-
public T run() throws Exception {
577-
return task.call();
578-
}
579-
}, acc);
580-
} catch (PrivilegedActionException e) {
581-
throw e.getException();
582-
}
564+
return task.call();
583565
}
584566

585567
public String toString() {
@@ -595,49 +577,26 @@ private static final class PrivilegedCallableUsingCurrentClassLoader<T>
595577
implements Callable<T> {
596578
final Callable<T> task;
597579
@SuppressWarnings("removal")
598-
final AccessControlContext acc;
599580
final ClassLoader ccl;
600581

601582
@SuppressWarnings("removal")
602583
PrivilegedCallableUsingCurrentClassLoader(Callable<T> task) {
603-
SecurityManager sm = System.getSecurityManager();
604-
if (sm != null) {
605-
// Calls to getContextClassLoader from this class
606-
// never trigger a security check, but we check
607-
// whether our callers have this permission anyways.
608-
sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
609-
610-
// Whether setContextClassLoader turns out to be necessary
611-
// or not, we fail fast if permission is not available.
612-
sm.checkPermission(new RuntimePermission("setContextClassLoader"));
613-
}
614584
this.task = task;
615-
this.acc = AccessController.getContext();
616585
this.ccl = Thread.currentThread().getContextClassLoader();
617586
}
618587

619-
@SuppressWarnings("removal")
620588
public T call() throws Exception {
621-
try {
622-
return AccessController.doPrivileged(
623-
new PrivilegedExceptionAction<T>() {
624-
public T run() throws Exception {
625-
Thread t = Thread.currentThread();
626-
ClassLoader cl = t.getContextClassLoader();
627-
if (ccl == cl) {
628-
return task.call();
629-
} else {
630-
t.setContextClassLoader(ccl);
631-
try {
632-
return task.call();
633-
} finally {
634-
t.setContextClassLoader(cl);
635-
}
636-
}
637-
}
638-
}, acc);
639-
} catch (PrivilegedActionException e) {
640-
throw e.getException();
589+
Thread t = Thread.currentThread();
590+
ClassLoader cl = t.getContextClassLoader();
591+
if (ccl == cl) {
592+
return task.call();
593+
} else {
594+
t.setContextClassLoader(ccl);
595+
try {
596+
return task.call();
597+
} finally {
598+
t.setContextClassLoader(cl);
599+
}
641600
}
642601
}
643602

@@ -656,10 +615,7 @@ private static class DefaultThreadFactory implements ThreadFactory {
656615
private final String namePrefix;
657616

658617
DefaultThreadFactory() {
659-
@SuppressWarnings("removal")
660-
SecurityManager s = System.getSecurityManager();
661-
group = (s != null) ? s.getThreadGroup() :
662-
Thread.currentThread().getThreadGroup();
618+
group = Thread.currentThread().getThreadGroup();
663619
namePrefix = "pool-" +
664620
poolNumber.getAndIncrement() +
665621
"-thread-";
@@ -678,41 +634,23 @@ public Thread newThread(Runnable r) {
678634
}
679635

680636
/**
681-
* Thread factory capturing access control context and class loader.
637+
* Thread factory capturing the current class loader.
682638
*/
683639
private static class PrivilegedThreadFactory extends DefaultThreadFactory {
684640
@SuppressWarnings("removal")
685-
final AccessControlContext acc;
686641
final ClassLoader ccl;
687642

688-
@SuppressWarnings("removal")
689643
PrivilegedThreadFactory() {
690644
super();
691-
SecurityManager sm = System.getSecurityManager();
692-
if (sm != null) {
693-
// Calls to getContextClassLoader from this class
694-
// never trigger a security check, but we check
695-
// whether our callers have this permission anyways.
696-
sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
697-
698-
// Fail fast
699-
sm.checkPermission(new RuntimePermission("setContextClassLoader"));
700-
}
701-
this.acc = AccessController.getContext();
702645
this.ccl = Thread.currentThread().getContextClassLoader();
703646
}
704647

705648
public Thread newThread(final Runnable r) {
706649
return super.newThread(new Runnable() {
707650
@SuppressWarnings("removal")
708651
public void run() {
709-
AccessController.doPrivileged(new PrivilegedAction<>() {
710-
public Void run() {
711-
Thread.currentThread().setContextClassLoader(ccl);
712-
r.run();
713-
return null;
714-
}
715-
}, acc);
652+
Thread.currentThread().setContextClassLoader(ccl);
653+
r.run();
716654
}
717655
});
718656
}
@@ -811,9 +749,7 @@ private static class AutoShutdownDelegatedExecutorService
811749
super(executor);
812750
Runnable action = () -> {
813751
if (!executor.isShutdown()) {
814-
PrivilegedAction<Void> pa = () -> { executor.shutdown(); return null; };
815-
@SuppressWarnings("removal")
816-
var ignore = AccessController.doPrivileged(pa);
752+
executor.shutdown();
817753
}
818754
};
819755
cleanable = CleanerFactory.cleaner().register(this, action);

src/java.base/share/classes/java/util/concurrent/StructuredTaskScope.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626

2727
import java.lang.invoke.MethodHandles;
2828
import java.lang.invoke.VarHandle;
29-
import java.security.AccessController;
30-
import java.security.PrivilegedAction;
3129
import java.time.Duration;
3230
import java.time.Instant;
3331
import java.util.Objects;
@@ -688,7 +686,7 @@ public StructuredTaskScope<T> joinUntil(Instant deadline)
688686
/**
689687
* Interrupt all unfinished threads.
690688
*/
691-
private void implInterruptAll() {
689+
private void interruptAll() {
692690
flock.threads()
693691
.filter(t -> t != Thread.currentThread())
694692
.forEach(t -> {
@@ -698,19 +696,6 @@ private void implInterruptAll() {
698696
});
699697
}
700698

701-
@SuppressWarnings("removal")
702-
private void interruptAll() {
703-
if (System.getSecurityManager() == null) {
704-
implInterruptAll();
705-
} else {
706-
PrivilegedAction<Void> pa = () -> {
707-
implInterruptAll();
708-
return null;
709-
};
710-
AccessController.doPrivileged(pa);
711-
}
712-
}
713-
714699
/**
715700
* Shutdown the task scope if not already shutdown. Return true if this method
716701
* shutdowns the task scope, false if already shutdown.

src/java.base/share/classes/java/util/concurrent/ThreadLocalRandom.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
package java.util.concurrent;
4040

4141
import java.io.ObjectStreamField;
42-
import java.security.AccessControlContext;
4342
import java.util.Random;
4443
import java.util.concurrent.atomic.AtomicInteger;
4544
import java.util.concurrent.atomic.AtomicLong;

src/java.base/share/classes/java/util/concurrent/ThreadPerTaskExecutor.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
import java.lang.invoke.MethodHandles;
2828
import java.lang.invoke.VarHandle;
29-
import java.security.Permission;
3029
import java.util.ArrayList;
3130
import java.util.Collection;
3231
import java.util.Iterator;
@@ -48,7 +47,6 @@
4847
*/
4948
class ThreadPerTaskExecutor extends ThreadContainer implements ExecutorService {
5049
private static final JavaLangAccess JLA = SharedSecrets.getJavaLangAccess();
51-
private static final Permission MODIFY_THREAD = new RuntimePermission("modifyThread");
5250
private static final VarHandle STATE = MhUtil.findVarHandle(
5351
MethodHandles.lookup(), "state", int.class);
5452

@@ -80,18 +78,6 @@ static ThreadPerTaskExecutor create(ThreadFactory factory) {
8078
return executor;
8179
}
8280

83-
/**
84-
* Throws SecurityException if there is a security manager set and it denies
85-
* RuntimePermission("modifyThread").
86-
*/
87-
@SuppressWarnings("removal")
88-
private void checkPermission() {
89-
SecurityManager sm = System.getSecurityManager();
90-
if (sm != null) {
91-
sm.checkPermission(MODIFY_THREAD);
92-
}
93-
}
94-
9581
/**
9682
* Throws RejectedExecutionException if the executor has been shutdown.
9783
*/
@@ -143,14 +129,12 @@ public long threadCount() {
143129

144130
@Override
145131
public void shutdown() {
146-
checkPermission();
147132
if (!isShutdown())
148133
tryShutdownAndTerminate(false);
149134
}
150135

151136
@Override
152137
public List<Runnable> shutdownNow() {
153-
checkPermission();
154138
if (!isTerminated())
155139
tryShutdownAndTerminate(true);
156140
return List.of();
@@ -202,7 +186,6 @@ private void awaitTermination() {
202186

203187
@Override
204188
public void close() {
205-
checkPermission();
206189
awaitTermination();
207190
}
208191

0 commit comments

Comments
 (0)