RFR: 8322215: [win] OS events that close the stage can cause Glass to reference freed memory [v2]
Martin Fox
mfox at openjdk.org
Wed Jan 17 16:43:23 UTC 2024
> When a Stage is closed while processing an OS message the glass peer object is deleted immediately even if it's still executing member functions. As glass unwinds the stack and executes cleanup code it's referencing freed memory.
>
> There are cases where glass generates JavaFX events back-to-back. For example, when handling the Delete key glass sends a PRESSED and TYPED event in the same routine. If the Stage is closed during the PRESSED event the code that sends the TYPED event is running inside an object that has already been deleted.
>
> When the Stage is closed glass calls the OS routine ::DestroyWindow on the HWND causing a WM_NCDESTROY message to be sent. Currently the BaseWnd object is deleted when processing this message. This PR defers the destruction until all messages have been processed. This is the same approach used in the Linux code.
Martin Fox has updated the pull request incrementally with one additional commit since the last revision:
Updated to match existing naming conventions
-------------
Changes:
- all: https://git.openjdk.org/jfx/pull/1309/files
- new: https://git.openjdk.org/jfx/pull/1309/files/0eb0f985..eaae9963
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jfx&pr=1309&range=01
- incr: https://webrevs.openjdk.org/?repo=jfx&pr=1309&range=00-01
Stats: 9 lines in 2 files changed: 0 ins; 0 del; 9 mod
Patch: https://git.openjdk.org/jfx/pull/1309.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/1309/head:pull/1309
PR: https://git.openjdk.org/jfx/pull/1309
More information about the openjfx-dev
mailing list