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

Reply via email to