From 460b6f05dd36e301ed1ea9538e2e1c440dfcd118 Mon Sep 17 00:00:00 2001 From: kappa1 Date: Thu, 1 Nov 2012 22:39:22 +0000 Subject: [PATCH] Fix memory leaks by adding an NSAutoreleasePool when creating a windows and draining it on window destroy --- src/native/macosx/org_lwjgl_opengl_Display.m | 35 +++++++++++--------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/native/macosx/org_lwjgl_opengl_Display.m b/src/native/macosx/org_lwjgl_opengl_Display.m index 058ce4c8..e121110b 100644 --- a/src/native/macosx/org_lwjgl_opengl_Display.m +++ b/src/native/macosx/org_lwjgl_opengl_Display.m @@ -53,6 +53,8 @@ static NSOpenGLPixelFormat *default_format = nil; +static NSAutoreleasePool *pool; + @implementation MacOSXKeyableWindow - (BOOL)canBecomeKeyWindow; { @@ -390,21 +392,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXDisplay_nSetResizable(JNIEnv [window_info->window setStyleMask:style_mask]; } -JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXDisplay_nDestroyWindow(JNIEnv *env, jobject this, jobject window_handle) { - MacOSXWindowInfo *window_info = (MacOSXWindowInfo *)(*env)->GetDirectBufferAddress(env, window_handle); - - if (window_info->window != nil) { - [window_info->window close]; - } - window_info->window = nil; - - if (window_info->view != nil) { - [window_info->view release]; - } - window_info->view = nil; - //[window_info->window release]; -} - JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXDisplay_nSetTitle(JNIEnv *env, jobject this, jobject window_handle, jobject title_buffer) { MacOSXWindowInfo *window_info = (MacOSXWindowInfo *)(*env)->GetDirectBufferAddress(env, window_handle); const char *title_cstr = (const char *)(*env)->GetDirectBufferAddress(env, title_buffer); @@ -421,6 +408,8 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXDisplay_nCreateWindow(JNIE return NULL; } } + + pool = [[NSAutoreleasePool alloc] init]; MacOSXWindowInfo *window_info = (MacOSXWindowInfo *)(*env)->GetDirectBufferAddress(env, window_handle); MacOSXPeerInfo *peer_info = (MacOSXPeerInfo *)(*env)->GetDirectBufferAddress(env, peer_info_handle); @@ -467,6 +456,22 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_opengl_MacOSXDisplay_nCreateWindow(JNIE return window_handle; } +JNIEXPORT void JNICALL Java_org_lwjgl_opengl_MacOSXDisplay_nDestroyWindow(JNIEnv *env, jobject this, jobject window_handle) { + MacOSXWindowInfo *window_info = (MacOSXWindowInfo *)(*env)->GetDirectBufferAddress(env, window_handle); + + if (window_info->window != nil) { + [window_info->window close]; + } + window_info->window = nil; + + if (window_info->view != nil) { + [window_info->view release]; + } + window_info->view = nil; + //[window_info->window release]; + [pool drain]; +} + JNIEXPORT jint JNICALL Java_org_lwjgl_DefaultSysImplementation_getJNIVersion (JNIEnv *env, jobject ignored) { return org_lwjgl_MacOSXSysImplementation_JNI_VERSION;