“ffd8ddca533fd2ec5e11f4823205ed3989e74630”上不存在“en/application-dev/media/camera-recording-case.md”
提交 a984c3dd 编写于 作者: S son

6616095: AWT's WindowDisposerRecord keeps AppContext alive too long

Summary: WindowDisposerRecord should not keep strong reference to AppContext.
Reviewed-by: art
上级 4296a9f2
/* /*
* Copyright 1995-2007 Sun Microsystems, Inc. All Rights Reserved. * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
*/ */
package java.awt; package java.awt;
import java.applet.Applet;
import java.awt.event.*; import java.awt.event.*;
import java.awt.im.InputContext; import java.awt.im.InputContext;
import java.awt.image.BufferStrategy; import java.awt.image.BufferStrategy;
...@@ -355,18 +354,21 @@ public class Window extends Container implements Accessible { ...@@ -355,18 +354,21 @@ public class Window extends Container implements Accessible {
static class WindowDisposerRecord implements sun.java2d.DisposerRecord { static class WindowDisposerRecord implements sun.java2d.DisposerRecord {
final WeakReference<Window> owner; final WeakReference<Window> owner;
final WeakReference weakThis; final WeakReference weakThis;
final AppContext context; final WeakReference<AppContext> context;
WindowDisposerRecord(AppContext context, Window victim) { WindowDisposerRecord(AppContext context, Window victim) {
owner = new WeakReference<Window>(victim.getOwner()); owner = new WeakReference<Window>(victim.getOwner());
weakThis = victim.weakThis; weakThis = victim.weakThis;
this.context = context; this.context = new WeakReference<AppContext>(context);
} }
public void dispose() { public void dispose() {
Window parent = owner.get(); Window parent = owner.get();
if (parent != null) { if (parent != null) {
parent.removeOwnedWindow(weakThis); parent.removeOwnedWindow(weakThis);
} }
Window.removeFromWindowList(context, weakThis); AppContext ac = context.get();
if (null != ac) {
Window.removeFromWindowList(ac, weakThis);
}
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册