diff options
author | Sven Gothel <[email protected]> | 2011-10-13 17:37:05 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2011-10-13 17:37:05 +0200 |
commit | 2dd78164a756691d23c14faf6eb466d182f23a3c (patch) | |
tree | 62259915ac286900ea0789fc42b87075c749ac25 /src | |
parent | d186f6e945fd157b219231fb3861b3b0ce10ee75 (diff) |
OSX: Avoid invoking JNI or performSelectorOnMainThread in JNI if already mainThread
Diffstat (limited to 'src')
-rw-r--r-- | src/jogl/native/macosx/MacOSXWindowSystemInterface.m | 2 | ||||
-rw-r--r-- | src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java | 6 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/jogl/native/macosx/MacOSXWindowSystemInterface.m b/src/jogl/native/macosx/MacOSXWindowSystemInterface.m index 1eb3da96c..188d6d593 100644 --- a/src/jogl/native/macosx/MacOSXWindowSystemInterface.m +++ b/src/jogl/native/macosx/MacOSXWindowSystemInterface.m @@ -590,7 +590,7 @@ Bool deleteContext(void* nsJContext, Bool releaseOnMainThread) { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; [nsContext clearDrawable]; - if(releaseOnMainThread) { + if(releaseOnMainThread && NO == [NSThread isMainThread]) { [nsContext performSelectorOnMainThread:@selector(release:) withObject:nil waitUntilDone:YES]; } else { // would hangs for ~10s for 1 of the shared context, set releaseOnMainThread=true ! diff --git a/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java b/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java index ca303e6bc..cd558c05d 100644 --- a/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java +++ b/src/nativewindow/classes/jogamp/nativewindow/macosx/OSXUtil.java @@ -35,7 +35,11 @@ public class OSXUtil { } public static void RunOnMainThread(boolean waitUntilDone, Runnable runnable) { - RunOnMainThread0(waitUntilDone, runnable); + if(IsMainThread0()) { + runnable.run(); // don't leave the JVM + } else { + RunOnMainThread0(waitUntilDone, runnable); + } } public static boolean IsMainThread() { |