提交 f6e98e4a 编写于 作者: A anthony

7174718: [macosx] Regression in 7u6 b12: PopupFactory leaks DefaultFrames.

Summary: Fix memory management
Reviewed-by: art, serb
上级 47965642
......@@ -63,6 +63,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
private static native void nativeSetNSWindowSecurityWarningPositioning(long nsWindowPtr, double x, double y, float biasX, float biasY);
private static native void nativeSetEnabled(long nsWindowPtr, boolean isEnabled);
private static native void nativeSynthesizeMouseEnteredExitedEvents(long nsWindowPtr);
private static native void nativeDispose(long nsWindowPtr);
private static native int nativeGetNSWindowDisplayID_AppKitThread(long nsWindowPtr);
......@@ -423,6 +424,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
EventQueue.invokeLater(new Runnable() {
public void run() {
contentView.dispose();
nativeDispose(getNSWindowPtr());
CPlatformWindow.super.dispose();
}
});
......
......@@ -228,6 +228,7 @@ AWT_ASSERT_APPKIT_THREAD;
}
if (self.nsWindow == nil) return nil; // no hope either
[self.nsWindow release]; // the property retains the object already
self.isEnabled = YES;
self.javaPlatformWindow = platformWindow;
......@@ -677,9 +678,9 @@ AWT_ASSERT_NOT_APPKIT_THREAD;
styleBits:styleBits
frameRect:frameRect
contentView:contentView];
// the window is released is CPlatformWindow.nativeDispose()
if (window) CFRetain(window);
[window release]; // GC
if (window) CFRetain(window.nsWindow);
}];
JNF_COCOA_EXIT(env);
......@@ -1160,3 +1161,24 @@ JNF_COCOA_ENTER(env);
JNF_COCOA_EXIT(env);
}
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeDispose
(JNIEnv *env, jclass clazz, jlong windowPtr)
{
JNF_COCOA_ENTER(env);
NSWindow *nsWindow = OBJC(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
AWTWindow *window = (AWTWindow*)[nsWindow delegate];
// AWTWindow holds a reference to the NSWindow in its nsWindow
// property. Unsetting the delegate allows it to be deallocated
// which releases the reference. This, in turn, allows the window
// itself be deallocated.
[nsWindow setDelegate: nil];
[window release];
}];
JNF_COCOA_EXIT(env);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册