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

Reply via email to