aboutsummaryrefslogtreecommitdiff
path: root/src/solaris/classes/sun/awt/X11/XToolkit.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/solaris/classes/sun/awt/X11/XToolkit.java')
-rw-r--r--src/solaris/classes/sun/awt/X11/XToolkit.java41
1 files changed, 27 insertions, 14 deletions
diff --git a/src/solaris/classes/sun/awt/X11/XToolkit.java b/src/solaris/classes/sun/awt/X11/XToolkit.java
index 8676c6aff..710d8ac8a 100644
--- a/src/solaris/classes/sun/awt/X11/XToolkit.java
+++ b/src/solaris/classes/sun/awt/X11/XToolkit.java
@@ -307,22 +307,35 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
} finally {
awtUnlock();
}
-
- Runtime.getRuntime().addShutdownHook(new Thread() {
- public void run() {
- XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance();
- if (peer != null) {
- peer.dispose();
- }
- if (xs != null) {
- ((XAWTXSettings)xs).dispose();
- }
- freeXKB();
- if (log.isLoggable(PlatformLogger.FINE)) {
- dumpPeers();
+ 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();
}
+ Thread shutdownThread = new Thread(mainTG, "XToolkt-Shutdown-Thread") {
+ public void run() {
+ XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance();
+ if (peer != null) {
+ peer.dispose();
+ }
+ if (xs != null) {
+ ((XAWTXSettings)xs).dispose();
+ }
+ freeXKB();
+ if (log.isLoggable(PlatformLogger.FINE)) {
+ dumpPeers();
+ }
+ }
+ };
+ shutdownThread.setContextClassLoader(null);
+ Runtime.getRuntime().addShutdownHook(shutdownThread);
+ return null;
}
- });
+ };
+ AccessController.doPrivileged(a);
}
static String getCorrectXIDString(String val) {