On Wed, 20 Dec 2023 17:31:57 GMT, Martin Fox <m...@openjdk.org> wrote:
> 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. This pull request has now been integrated. Changeset: c1c52e5a Author: Martin Fox <m...@openjdk.org> URL: https://git.openjdk.org/jfx/commit/c1c52e5a42f9a4319487aa9db8e8fcbcf1ba02c8 Stats: 32 lines in 2 files changed: 30 ins; 0 del; 2 mod 8322215: [win] OS events that close the stage can cause Glass to reference freed memory Reviewed-by: mstrauss, kcr ------------- PR: https://git.openjdk.org/jfx/pull/1309