On Fri, 23 Aug 2024 23:47:12 GMT, Kevin Rushforth <k...@openjdk.org> wrote:
> I'm also not sure that this is the right fix. It seems like it will fix one > specific place where AWT could do an upcall on the AppKit thread after FX has > detached without addressing the problem as a whole. > > Another possible fix would be to have AWT not use the cached JNI Env when it > is not the NSApplication owner. I don't know how viable this fix would be, or > whether it is the right fix, but it would prevent the crash in all possible > places. That sounds like lots of places would need to be updated to do this. > > > Also : does AWT detach the AppKit thread from the VM on shutdown ? > > I doubt it, since there isn't AFAIK an explicit toolkit shutdown in AWT like > there is in FX. > > > IF not why does FX have to do it ? If it does, then could FX also crash if > > FX is embedded in an AWT app. > > FX only detaches the AppKit thread when it is the NSApplication owner, and > thus attached the thread in the first place. In the case of FX embedded in an > AWT app, it won't detach the thread. I didn't expect it to, but I was trying to understand why an AWT exit doesn't cause FX to crash. System.exit() is the AWT equivalent and AWT *could* have a shutdown hook to do the same. It just happens not to. > > We could explore what it would take for FX to not detach the AppKit thread > from Java. At a minimum, it would require attaching the AppKit thread as a > daemon (which AWT already does), and then creating a non-daemon Java thread > that we would then terminate at FX toolkit shutdown. This would need to be > tested carefully, but might be the cleanest solution. I would like to see that explored. What does SWT do ? > > One thing to note is that anything we do here will be about avoiding a crash > in AWT, not about having the UI remain functional. In this case FX is the > "owner" of the native Window system event loop (and NSApplication on macOS). > Applications should not shutdown the FX toolkit (meaning, not call > `Platform.exit`) and expect AWT to continue to work. I guess Platform.exit for FX embedded inside AWT is a no-op ? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/20688#discussion_r1729619888