diff options
author | Sven Gothel <[email protected]> | 2012-04-21 21:11:35 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-04-21 21:11:35 +0200 |
commit | 6bcfe5e3b60782c4bb047117c12579ff15c961a1 (patch) | |
tree | 667e51830a2d622b23769a9eb0f4c5f257beadc2 /src/newt/native/NewtMacWindow.m | |
parent | 89304ecb034b2c2778f09423cb6d66d084074e11 (diff) |
Newt/OSX(native): close0() shall not release NewtMacWindow (NSWindow) in case it's already in destruction (destroyNotifySend via windowWillClose())
This fixes the double release crash of the NSWindow, at the end of an application.
Tested on OSX 10.6.8 and 10.7.3.
Diffstat (limited to 'src/newt/native/NewtMacWindow.m')
-rw-r--r-- | src/newt/native/NewtMacWindow.m | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/src/newt/native/NewtMacWindow.m b/src/newt/native/NewtMacWindow.m index 402389e71..187aec7fb 100644 --- a/src/newt/native/NewtMacWindow.m +++ b/src/newt/native/NewtMacWindow.m @@ -119,12 +119,25 @@ static jmethodID windowRepaintID = NULL; return [super initWithFrame:frameRect]; } +- (void) release +{ +#ifdef VERBOSE_ON + NSLog(@"NewtView::release\n"); + NSLog(@"%@",[NSThread callStackSymbols]); +#endif + [super release]; +} + - (void) dealloc { if(softLocked) { NSLog(@"NewtView::dealloc: softLock still hold @ dealloc!\n"); } pthread_mutex_destroy(&softLockSync); +#ifdef VERBOSE_ON + NSLog(@"NewtView::dealloc\n"); + NSLog(@"%@",[NSThread callStackSymbols]); +#endif [super dealloc]; } @@ -362,6 +375,24 @@ static jmethodID windowRepaintID = NULL; return res; } +- (void) release +{ +#ifdef VERBOSE_ON + NSLog(@"NewtWindow::release\n"); + NSLog(@"%@",[NSThread callStackSymbols]); +#endif + [super release]; +} + +- (void) dealloc +{ +#ifdef VERBOSE_ON + NSLog(@"NewtWindow::dealloc\n"); + NSLog(@"%@",[NSThread callStackSymbols]); +#endif + [super dealloc]; +} + - (void) updateInsets: (JNIEnv*) env { NSView* nsview = [self contentView]; @@ -940,11 +971,6 @@ static jint mods2JavaMods(NSUInteger mods) [view setDestroyNotifySent: true]; (*env)->CallVoidMethod(env, javaWindowObject, windowDestroyNotifyID); - // Can't issue call here - locked window state, done from Java method - - // EOL .. - (*env)->DeleteGlobalRef(env, javaWindowObject); - [view setJavaWindowObject: NULL]; if (shallBeDetached) { (*jvmHandle)->DetachCurrentThread(jvmHandle); |