diff options
Diffstat (limited to 'external/ikvm/openjdk/java/lang/Thread.java')
-rw-r--r-- | external/ikvm/openjdk/java/lang/Thread.java | 37 |
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; } |