changeset 9766:d20d3e26955d

8034870: Regression: On Mac, fx app can't be launched if setting a javaagent for it Reviewed-by: serb, art, anthony
author pchelko
date Wed, 19 Feb 2014 22:20:07 +0400
parents 32639f1b7880
children 959cf9cf99cc d1c211d4996d
files src/macosx/native/sun/awt/LWCToolkit.m src/macosx/native/sun/awt/awt.m src/macosx/native/sun/osxapp/ThreadUtilities.h src/macosx/native/sun/osxapp/ThreadUtilities.m
diffstat 4 files changed, 21 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/macosx/native/sun/awt/LWCToolkit.m	Tue Feb 18 14:21:42 2014 -0800
+++ b/src/macosx/native/sun/awt/LWCToolkit.m	Wed Feb 19 22:20:07 2014 +0400
@@ -188,14 +188,15 @@
 Java_sun_lwawt_macosx_LWCToolkit_initIDs
 (JNIEnv *env, jclass klass) {
     // set thread names
-    dispatch_async(dispatch_get_main_queue(), ^(void){
-        [[NSThread currentThread] setName:@"AppKit Thread"];
-
-        JNIEnv *env = [ThreadUtilities getJNIEnv];
-        static JNF_CLASS_CACHE(jc_LWCToolkit, "sun/lwawt/macosx/LWCToolkit");
-        static JNF_STATIC_MEMBER_CACHE(jsm_installToolkitThreadInJava, jc_LWCToolkit, "installToolkitThreadInJava", "()V");
-        JNFCallStaticVoidMethod(env, jsm_installToolkitThreadInJava);
-    });
+    if (![ThreadUtilities isAWTEmbedded]) {
+        dispatch_async(dispatch_get_main_queue(), ^(void){
+            [[NSThread currentThread] setName:@"AppKit Thread"];
+            JNIEnv *env = [ThreadUtilities getJNIEnv];
+            static JNF_CLASS_CACHE(jc_LWCToolkit, "sun/lwawt/macosx/LWCToolkit");
+            static JNF_STATIC_MEMBER_CACHE(jsm_installToolkitThreadInJava, jc_LWCToolkit, "installToolkitThreadInJava", "()V");
+            JNFCallStaticVoidMethod(env, jsm_installToolkitThreadInJava);
+        });
+    }
     
     gNumberOfButtons = sun_lwawt_macosx_LWCToolkit_BUTTONS;
 
--- a/src/macosx/native/sun/awt/awt.m	Tue Feb 18 14:21:42 2014 -0800
+++ b/src/macosx/native/sun/awt/awt.m	Wed Feb 19 22:20:07 2014 +0400
@@ -363,6 +363,7 @@
     //  AppKit Application.
     NSApplication *app = [NSApplicationAWT sharedApplication];
     isEmbedded = ![NSApp isKindOfClass:[NSApplicationAWT class]];
+    [ThreadUtilities setAWTEmbedded:isEmbedded];
 
     if (!isEmbedded) {
         // Install run loop observers and set the AppKit Java thread name
--- a/src/macosx/native/sun/osxapp/ThreadUtilities.h	Tue Feb 18 14:21:42 2014 -0800
+++ b/src/macosx/native/sun/osxapp/ThreadUtilities.h	Wed Feb 19 22:20:07 2014 +0400
@@ -129,6 +129,8 @@
 + (JNIEnv*)getJNIEnvUncached;
 + (void)detachCurrentThread;
 + (void)setAppkitThreadGroup:(jobject)group;
++ (void)setAWTEmbedded:(BOOL)embedded;
++ (BOOL)isAWTEmbedded;
 
 //Wrappers for the corresponding JNFRunLoop methods with a check for main thread
 + (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block;
--- a/src/macosx/native/sun/osxapp/ThreadUtilities.m	Tue Feb 18 14:21:42 2014 -0800
+++ b/src/macosx/native/sun/osxapp/ThreadUtilities.m	Wed Feb 19 22:20:07 2014 +0400
@@ -34,6 +34,7 @@
 JavaVM *jvm = NULL;
 static JNIEnv *appKitEnv = NULL;
 static jobject appkitThreadGroup = NULL;
+static BOOL awtEmbedded = NO;
 
 inline void attachCurrentThread(void** env) {
     if ([NSThread isMainThread]) {
@@ -87,6 +88,14 @@
     }
 }
 
++ (void)setAWTEmbedded:(BOOL)embedded {
+    awtEmbedded = embedded;
+}
+
++ (BOOL)isAWTEmbedded {
+    return awtEmbedded;
+}
+
 @end