aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author"Anton Tarasov ext:(%22) <anton.tarasov@jetbrains.com>2016-01-21 12:33:08 +0300
committer"Anton Tarasov ext:(%22) <anton.tarasov@jetbrains.com>2016-01-21 12:33:08 +0300
commit02f9a5fbb4924ff67c8a04c15e490acfcc750003 (patch)
tree0023128d574e316a2c3f5062fe6acc7e78191d0f
parentdeb73834b9cd6402dddc6c1eb984bc41113c66b4 (diff)
downloadjdk8u_jdk-02f9a5fbb4924ff67c8a04c15e490acfcc750003.tar.gz
IDEA-148854: AppCode crashes randomly every 15 mins or so
--HG-- branch : 8u40-verified-fixes
-rw-r--r--src/macosx/classes/sun/lwawt/macosx/CAccessibility.java21
-rw-r--r--src/macosx/classes/sun/lwawt/macosx/CAccessible.java2
-rw-r--r--src/macosx/native/sun/awt/JavaComponentAccessibility.m7
3 files changed, 20 insertions, 10 deletions
diff --git a/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java b/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java
index d3ab6a651d..c58a7a6dd2 100644
--- a/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java
+++ b/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java
@@ -82,6 +82,15 @@ class CAccessibility implements PropertyChangeListener {
return null;
}
+ static <T> T invokeAndWait(final Callable<T> callable, final Component c, final T defValue) {
+ T value = null;
+ try {
+ value = LWCToolkit.invokeAndWait(callable, c);
+ } catch (final Exception e) { e.printStackTrace(); }
+
+ return value != null ? value : defValue;
+ }
+
static void invokeLater(final Runnable runnable, final Component c) {
try {
LWCToolkit.invokeLater(runnable, c);
@@ -177,7 +186,7 @@ class CAccessibility implements PropertyChangeListener {
return new Boolean(as.isAccessibleChildSelected(index));
}
- }, c);
+ }, c, false);
}
public static AccessibleStateSet getAccessibleStateSet(final AccessibleContext ac, final Component c) {
@@ -199,7 +208,7 @@ class CAccessibility implements PropertyChangeListener {
if (ass == null) return null;
return ass.contains(as);
}
- }, c);
+ }, c, false);
}
static Field getAccessibleBundleKeyFieldWithReflection() {
@@ -265,7 +274,7 @@ class CAccessibility implements PropertyChangeListener {
public Integer call() throws Exception {
return at.getCharCount();
}
- }, c);
+ }, c, 0);
}
// Accessibility Threadsafety for JavaComponentAccessibility.m
@@ -290,7 +299,7 @@ class CAccessibility implements PropertyChangeListener {
if (ac == null) return null;
return ac.getAccessibleIndexInParent();
}
- }, c);
+ }, c, -1);
}
public static AccessibleComponent getAccessibleComponent(final Accessible a, final Component c) {
@@ -386,7 +395,7 @@ class CAccessibility implements PropertyChangeListener {
return aComp.isFocusTraversable();
}
- }, c);
+ }, c, false);
}
public static Accessible accessibilityHitTest(final Container parent, final float hitPointX, final float hitPointY) {
@@ -443,7 +452,7 @@ class CAccessibility implements PropertyChangeListener {
return aComp.isEnabled();
}
- }, c);
+ }, c, false);
}
// KCH - can we make this a postEvent instead?
diff --git a/src/macosx/classes/sun/lwawt/macosx/CAccessible.java b/src/macosx/classes/sun/lwawt/macosx/CAccessible.java
index c5611c4d45..8c89b1d99f 100644
--- a/src/macosx/classes/sun/lwawt/macosx/CAccessible.java
+++ b/src/macosx/classes/sun/lwawt/macosx/CAccessible.java
@@ -96,7 +96,7 @@ class CAccessible extends CFRetainedResource implements Accessible {
@Override
public AccessibleContext getAccessibleContext() {
- return accessible.getAccessibleContext();
+ return accessible != null ? accessible.getAccessibleContext() : null;
}
// currently only supports text components
diff --git a/src/macosx/native/sun/awt/JavaComponentAccessibility.m b/src/macosx/native/sun/awt/JavaComponentAccessibility.m
index ffea40f72f..c00731f097 100644
--- a/src/macosx/native/sun/awt/JavaComponentAccessibility.m
+++ b/src/macosx/native/sun/awt/JavaComponentAccessibility.m
@@ -323,8 +323,9 @@ static NSObject *sAttributeNamesLOCK = nil;
{
jobject jcomponent = [(AWTView *)view awtComponent:env];
jint index = JNFCallStaticIntMethod(env, sjm_getAccessibleIndexInParent, jaccessible, jcomponent);
- NSString *javaRole = getJavaRole(env, jaccessible, jcomponent);
+ if (index < 0) return nil;
+ NSString *javaRole = getJavaRole(env, jaccessible, jcomponent);
return [self createWithAccessible:jaccessible role:javaRole index:index withEnv:env withView:view];
}
@@ -663,8 +664,8 @@ static NSObject *sAttributeNamesLOCK = nil;
if (![[self accessibilityRoleAttribute] isEqualToString:NSAccessibilityListRole]) {
return [super accessibilityIndexOfChild:child];
}
-
- return JNFCallStaticIntMethod([ThreadUtilities getJNIEnv], sjm_getAccessibleIndexInParent, ((JavaComponentAccessibility *)child)->fAccessible, ((JavaComponentAccessibility *)child)->fComponent);
+ jint index = JNFCallStaticIntMethod([ThreadUtilities getJNIEnv], sjm_getAccessibleIndexInParent, ((JavaComponentAccessibility *)child)->fAccessible, ((JavaComponentAccessibility *)child)->fComponent);
+ return index >= 0 ? index : 0;
}
// Without this optimization accessibilityChildrenAttribute is called in order to get the entire array of children.