From 77c3c0f24b50453078a16c91a2a49e9d4f9483a4 Mon Sep 17 00:00:00 2001 From: bae Date: Tue, 20 Apr 2010 11:06:47 +0400 Subject: 6936389: FontManager.fileCloser may cause memory leak in applets Reviewed-by: igor, prr, ant --- src/windows/classes/sun/awt/windows/WToolkit.java | 36 ++++++++++------------ .../sun/java2d/d3d/D3DScreenUpdateManager.java | 18 +++++------ 2 files changed, 25 insertions(+), 29 deletions(-) (limited to 'src/windows') diff --git a/src/windows/classes/sun/awt/windows/WToolkit.java b/src/windows/classes/sun/awt/windows/WToolkit.java index b822cf654..002da43e7 100644 --- a/src/windows/classes/sun/awt/windows/WToolkit.java +++ b/src/windows/classes/sun/awt/windows/WToolkit.java @@ -266,27 +266,25 @@ public class WToolkit extends SunToolkit implements Runnable { boolean startPump = init(); if (startPump) { - ThreadGroup mainTG = (ThreadGroup)AccessController.doPrivileged( - new PrivilegedAction() { - public Object run() { - ThreadGroup currentTG = - Thread.currentThread().getThreadGroup(); - ThreadGroup parentTG = currentTG.getParent(); - while (parentTG != null) { - currentTG = parentTG; - parentTG = currentTG.getParent(); - } - return currentTG; + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + ThreadGroup currentTG = + Thread.currentThread().getThreadGroup(); + ThreadGroup parentTG = currentTG.getParent(); + while (parentTG != null) { + currentTG = parentTG; + parentTG = currentTG.getParent(); } + Thread shutdown = new Thread(currentTG, new Runnable() { + public void run() { + shutdown(); + } + }); + shutdown.setContextClassLoader(null); + Runtime.getRuntime().addShutdownHook(shutdown); + return null; + } }); - - Runtime.getRuntime().addShutdownHook( - new Thread(mainTG, new Runnable() { - public void run() { - shutdown(); - } - }) - ); } synchronized(this) { diff --git a/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java b/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java index 53ae895dd..db506b49d 100644 --- a/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java +++ b/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java @@ -101,17 +101,15 @@ public class D3DScreenUpdateManager extends ScreenUpdateManager currentTG = parentTG; parentTG = currentTG.getParent(); } + Thread shutdown = new Thread(currentTG, new Runnable() { + public void run() { + done = true; + wakeUpUpdateThread(); + } + }); + shutdown.setContextClassLoader(null); try { - Runtime.getRuntime().addShutdownHook( - new Thread(currentTG, - new Runnable() { - public void run() { - done = true; - wakeUpUpdateThread(); - } - } - ) - ); + Runtime.getRuntime().addShutdownHook(shutdown); } catch (Exception e) { done = true; } -- cgit v1.2.3