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.

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

Commit messages:
 - 8231558: [macos] Platform.exit causes assertion error on macOS 10.15 or later

Changes: https://git.openjdk.java.net/jfx/pull/540/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=540&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8231558
  Stats: 208 lines in 7 files changed: 204 ins; 0 del; 4 mod
  Patch: https://git.openjdk.java.net/jfx/pull/540.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/540/head:pull/540

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

Reply via email to