On Tue, 22 Jun 2021 20:42:48 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. This pull request has now been integrated. Changeset: 6403d674 Author: Kevin Rushforth <k...@openjdk.org> URL: https://git.openjdk.java.net/jfx/commit/6403d6745578887b7f2ccc10ac02e7cdd04d09c1 Stats: 208 lines in 7 files changed: 204 ins; 0 del; 4 mod 8231558: [macos] Platform.exit causes assertion error on macOS 10.15 or later Reviewed-by: pbansal, aghaisas ------------- PR: https://git.openjdk.java.net/jfx/pull/540