<AWT Dev> Review request for 8165829: Android Studio 2.x crashes with NPE at sun.lwawt.macosx.CAccessibility.getAccessibleIndexInParent

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Thu Sep 15 10:28:05 UTC 2016


Why not all methods in CAccessibility are updated? For example what is 
the difference between	getAccessibleIndexInParent and 
getAccessibleParent? I think that it will be strange if 
getLocationOnScreen() will return null? Probably the old 
invokeAndWait(Callable,Component)  should be updated to use this def value?

On 15.09.16 12:45, Anton Tarasov wrote:
> Hello,
>
> Please review the fix:
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8165829
> webrev: http://cr.openjdk.java.net/~ant/JDK-8165829/jdk9/webrev.0
>
> (The bug is currently closed as “not an issue”, which is not quite true.
> So once and if the fix is approved I can take the ownership of the bug).
>
> The problem is this. Sometimes when a frame is closed there may appear a
> race condition:
>
> - removeNotify() is called on the frame on EDT and it removes all the
> events associated with the frame from the event queue.
>
> - The frame is requested by accessibility via the CAccessibility static
> methods (like CAccessibility.getAccessibleIndexInParent). Those methods
> are called from native on AppKit thread and they perform via
> invokeAndWait. The latter is wrapped with an InvocationEvent whose
> source is set to the frame. But, once the event is put on the event
> queue, it's purged by the removeNotify() call. As the result,
> invokeAndWait returns null. Then, in some of the mentioned methods
> 'null' is unboxed to a primitive 'int' or 'boolean' which results in NPE
> propagated to native. On the native side, the NPE is not properly
> handled and is just re-thrown.
>
> I don't have a simple and safe solution for the race. So, I suggest to
> fix the NPE/crash at least.
>
> Thanks,
> Anton.
>
>


-- 
Best regards, Sergey.


More information about the awt-dev mailing list