On Thu, 14 Dec 2023 00:58:56 GMT, Martin Fox <m...@openjdk.org> wrote:
> While processing a key down event the Glass GTK code sends out PRESSED and > TYPED KeyEvents back to back. If the stage is closed during the PRESSED event > the code will end up referencing freed memory while sending out the TYPED > event. This can lead to intermittent crashes. > > In GlassApplication.cpp the EventCounterHelper object ensures the > WindowContext isn't deleted while processing an event. Currently the helper > object is being created *after* IME handling instead of before. If the IME is > enabled it's possible for the WindowContext to be deleted in the middle of > executing a number of keyboard-related events. > > The fix is simple; instantiate the EventCounterHelper object earlier. There > isn't always a WindowContext so I tweaked the EventCounterHelper to do > nothing if the context is null. > > To make the crash more reproducible I altered the WindowContext such that > when it's deleted the freed memory is filled with 0xCC. This made the crash > more reproducible and allowed me to test the fix. I did the same with > GlassView since that's the only other Glass GTK class that's instantiated > with `new` and discarded with `delete`. This pull request has now been integrated. Changeset: 2493a23e Author: Martin Fox <m...@openjdk.org> URL: https://git.openjdk.org/jfx/commit/2493a23e2dc5ff8694ab4a1bed06fe73466edaf9 Stats: 201 lines in 5 files changed: 192 ins; 2 del; 7 mod 8301219: JavaFX crash when closing with the escape key 8087368: java runtime environment error when trying to execute showAndWait() function Reviewed-by: kcr, tsayao ------------- PR: https://git.openjdk.org/jfx/pull/1307