On Fri, 15 Dec 2023 20:57:01 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`. > > Martin Fox has updated the pull request incrementally with one additional > commit since the last revision: > > Debugging code turned off by default. Empty line removed. LGTM now. I did ask one question and will reapprove if you make the change. modules/javafx.graphics/src/main/native-glass/gtk/DeletedMemDebug.h line 46: > 44: static void operator delete[](void* ptr, std::size_t sz) > 45: { > 46: ::memset(ptr, 0xcc, sz); Should this use `FILL` instead of hard-coded `0xcc`? ------------- Marked as reviewed by kcr (Lead). PR Review: https://git.openjdk.org/jfx/pull/1307#pullrequestreview-1786885134 PR Review Comment: https://git.openjdk.org/jfx/pull/1307#discussion_r1430137769