Fix memory leaks by adding an NSAutoreleasePool when creating a windows and draining it on window destroy

This commit is contained in:
kappa1 2012-11-01 22:39:22 +00:00
parent 2c811ac289
commit 460b6f05dd
1 changed files with 20 additions and 15 deletions

View File

@ -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;