diff options
Diffstat (limited to 'src/solaris/classes/sun/awt/X11GraphicsDevice.java')
-rw-r--r-- | src/solaris/classes/sun/awt/X11GraphicsDevice.java | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/src/solaris/classes/sun/awt/X11GraphicsDevice.java b/src/solaris/classes/sun/awt/X11GraphicsDevice.java index 115320bb0..cd4763033 100644 --- a/src/solaris/classes/sun/awt/X11GraphicsDevice.java +++ b/src/solaris/classes/sun/awt/X11GraphicsDevice.java @@ -32,6 +32,8 @@ import java.awt.GraphicsDevice; import java.awt.GraphicsConfiguration; import java.awt.Rectangle; import java.awt.Window; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.HashSet; import java.util.HashMap; @@ -402,17 +404,30 @@ public class X11GraphicsDevice // is already in the original DisplayMode at that time, this // hook will have no effect) shutdownHookRegistered = true; - Runnable r = new Runnable() { - public void run() { - Window old = getFullScreenWindow(); - if (old != null) { - exitFullScreenExclusive(old); - setDisplayMode(origDisplayMode); + PrivilegedAction<Void> a = new PrivilegedAction<Void>() { + public Void run() { + ThreadGroup mainTG = Thread.currentThread().getThreadGroup(); + ThreadGroup parentTG = mainTG.getParent(); + while (parentTG != null) { + mainTG = parentTG; + parentTG = mainTG.getParent(); } + Runnable r = new Runnable() { + public void run() { + Window old = getFullScreenWindow(); + if (old != null) { + exitFullScreenExclusive(old); + setDisplayMode(origDisplayMode); + } + } + }; + Thread t = new Thread(mainTG, r,"Display-Change-Shutdown-Thread-"+screen); + t.setContextClassLoader(null); + Runtime.getRuntime().addShutdownHook(t); + return null; } }; - Thread t = new Thread(r,"Display-Change-Shutdown-Thread-"+screen); - Runtime.getRuntime().addShutdownHook(t); + AccessController.doPrivileged(a); } // switch to the new DisplayMode |