On Mon, 28 Jun 2021 12:27:34 GMT, Kevin Rushforth <k...@openjdk.org> wrote:

>> This is a fix for the assertion error message that is printed to the console 
>> on macOS 10.15 or later when an application calls `Platform.exit` while a 
>> `Stage` is showing.
>> 
>> The root cause is a latent bug in the JavaFX glass code that was revealed by 
>> an apparent change of behavior in macOS. A few of the object deallocation 
>> methods, which are called by the Objective C auto-release mechanism, use the 
>> standard `GET_MAIN_JENV` macro to get the JNI environment. The macro will 
>> print an assertion warning if Java has been detached. I instrumented the 
>> code and can see that `GlassViewDelegate::dealloc` is now called after the 
>> `GlassApplication` main loop has detached Java. Since we don't control when 
>> the dealloc method is called, it is not correct to do the assertion check in 
>> those cases. Some of the dealloc methods already skip this assertion check 
>> by grabbing the jEnv pointer directly, so we need to fix the others. I added 
>> a new variant of the macro called `GET_MAIN_JENV_NOWARN` with a comment 
>> indicating that is suitable for use by the dealloc methods.
>> 
>> In addition to verifying that the test program attached to JBS now exits 
>> cleanly with no assertion failure message, I added an automated system test 
>> that fails on macOS before the fix and passes after the fix. On other 
>> platforms it passes already.
>
> Kevin Rushforth has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Fix value of ERROR_TIMEOUT constant per code review

Marked as reviewed by aghaisas (Reviewer).

The fix is fine. I tested on macOS 10.15.7.

-------------

PR: https://git.openjdk.java.net/jfx/pull/540

Reply via email to