summaryrefslogtreecommitdiff
path: root/external/ikvm/openjdk/java/lang/Thread.java
diff options
context:
space:
mode:
Diffstat (limited to 'external/ikvm/openjdk/java/lang/Thread.java')
-rw-r--r--external/ikvm/openjdk/java/lang/Thread.java37
1 files changed, 14 insertions, 23 deletions
diff --git a/external/ikvm/openjdk/java/lang/Thread.java b/external/ikvm/openjdk/java/lang/Thread.java
index 3de50ff741..e8f57d065a 100644
--- a/external/ikvm/openjdk/java/lang/Thread.java
+++ b/external/ikvm/openjdk/java/lang/Thread.java
@@ -37,6 +37,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.locks.LockSupport;
import sun.nio.ch.Interruptible;
+import sun.reflect.CallerSensitive;
+import sun.reflect.Reflection;
import sun.security.util.SecurityConstants;
@@ -169,7 +171,7 @@ class Thread implements Runnable {
private cli.System.Threading.Thread nativeThread;
private Throwable stillborn;
private boolean running; // used only for coordination with stop0(), is never set to false
- private boolean interruptPending;
+ private volatile boolean interruptPending;
private volatile boolean nativeInterruptPending;
private volatile boolean interruptableWait;
private boolean timedWait;
@@ -1228,7 +1230,12 @@ class Thread implements Runnable {
* @revised 6.0
*/
public static boolean interrupted() {
- return currentThread().isInterrupted(true);
+ Thread current = currentThread();
+ if (!current.interruptPending) {
+ return false;
+ }
+ current.interruptPending = false;
+ return true;
}
/**
@@ -1245,22 +1252,7 @@ class Thread implements Runnable {
* @revised 6.0
*/
public boolean isInterrupted() {
- return isInterrupted(false);
- }
-
- /**
- * Tests if some Thread has been interrupted. The interrupted state
- * is reset or not based on the value of ClearInterrupted that is
- * passed.
- */
- private boolean isInterrupted(boolean ClearInterrupted) {
- synchronized (lock) {
- boolean b = interruptPending;
- if (ClearInterrupted) {
- interruptPending = false;
- }
- return b;
- }
+ return interruptPending;
}
/**
@@ -1723,19 +1715,18 @@ class Thread implements Runnable {
*
* @since 1.2
*/
+ @CallerSensitive
public ClassLoader getContextClassLoader() {
if (contextClassLoader == ClassLoader.DUMMY) {
contextClassLoader = ClassLoader.getSystemClassLoader();
}
if (contextClassLoader == null)
return null;
+
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
- ClassLoader ccl = ClassLoader.getCallerClassLoader();
- if (ccl != null && ccl != contextClassLoader &&
- !contextClassLoader.isAncestor(ccl)) {
- sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
- }
+ ClassLoader.checkClassLoaderPermission(contextClassLoader,
+ Reflection.getCallerClass());
}
return contextClassLoader;
}