Skip to content

8322215: [win] OS events that close the stage can cause Glass to reference freed memory #1309

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from

Conversation

beldenfox
Copy link
Contributor

@beldenfox beldenfox commented Dec 20, 2023

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.


Progress

  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue
  • Change must be properly reviewed (2 reviews required, with at least 1 Reviewer, 1 Author)

Issue

  • JDK-8322215: [win] OS events that close the stage can cause Glass to reference freed memory (Bug - P3)

Reviewers

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/jfx.git pull/1309/head:pull/1309
$ git checkout pull/1309

Update a local copy of the PR:
$ git checkout pull/1309
$ git pull https://git.openjdk.org/jfx.git pull/1309/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 1309

View PR using the GUI difftool:
$ git pr show -t 1309

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/jfx/pull/1309.diff

Webrev

Link to Webrev Comment

@bridgekeeper
Copy link

bridgekeeper bot commented Dec 20, 2023

👋 Welcome back mfox! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk openjdk bot added the rfr Ready for review label Dec 20, 2023
@mlbridge
Copy link

mlbridge bot commented Dec 20, 2023

Webrevs

@kevinrushforth kevinrushforth self-requested a review December 21, 2023 15:08
@kevinrushforth
Copy link
Member

/reviewers 2

@openjdk
Copy link

openjdk bot commented Dec 21, 2023

@kevinrushforth
The total number of required reviews for this PR (including the jcheck configuration and the last /reviewers command) is now set to 2 (with at least 1 Reviewer, 1 Author).

Copy link
Collaborator

@mstr2 mstr2 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good! I've left a comment inline.

@@ -78,6 +84,10 @@ class BaseWnd {
ATOM m_wndClassAtom;
bool m_isCommonDialogOwner;
HCURSOR m_hCursor;

LONG m_message_count;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor: the naming scheme in this class would be m_messageCount.

Copy link
Member

@kevinrushforth kevinrushforth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code changes look good.

I tested it, and confirm that with a debug build the test crashes without the fix and passes with the fix.

@openjdk
Copy link

openjdk bot commented Jan 22, 2024

@beldenfox This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8322215: [win] OS events that close the stage can cause Glass to reference freed memory

Reviewed-by: mstrauss, kcr

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 26 new commits pushed to the master branch:

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

➡️ To integrate this PR with the above commit message to the master branch, type /integrate in a new comment.

@openjdk openjdk bot added the ready Ready to be integrated label Jan 22, 2024
@beldenfox
Copy link
Contributor Author

/integrate

@openjdk
Copy link

openjdk bot commented Jan 22, 2024

Going to push as commit c1c52e5.
Since your change was applied there have been 26 commits pushed to the master branch:

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot added the integrated Pull request has been integrated label Jan 22, 2024
@openjdk openjdk bot closed this Jan 22, 2024
@openjdk openjdk bot removed ready Ready to be integrated rfr Ready for review labels Jan 22, 2024
@openjdk
Copy link

openjdk bot commented Jan 22, 2024

@beldenfox Pushed as commit c1c52e5.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

@beldenfox
Copy link
Contributor Author

/backport jfx jfx22

@openjdk
Copy link

openjdk bot commented Jan 23, 2024

@beldenfox the backport was successfully created on the branch backport-beldenfox-c1c52e5a in my personal fork of openjdk/jfx. To create a pull request with this backport targeting openjdk/jfx:jfx22, just click the following link:

➡️ Create pull request

The title of the pull request is automatically filled in correctly and below you find a suggestion for the pull request body:

Hi all,

This pull request contains a backport of commit c1c52e5a from the openjdk/jfx repository.

The commit being backported was authored by Martin Fox on 22 Jan 2024 and was reviewed by Michael Strauß and Kevin Rushforth.

Thanks!

If you need to update the source branch of the pull then run the following commands in a local clone of your personal fork of openjdk/jfx:

$ git fetch https://github.com/openjdk-bots/jfx.git backport-beldenfox-c1c52e5a:backport-beldenfox-c1c52e5a
$ git checkout backport-beldenfox-c1c52e5a
# make changes
$ git add paths/to/changed/files
$ git commit --message 'Describe additional changes made'
$ git push https://github.com/openjdk-bots/jfx.git backport-beldenfox-c1c52e5a

⚠️ @beldenfox You are not yet a collaborator in my fork openjdk-bots/jfx. An invite will be sent out and you need to accept it before you can proceed.

@beldenfox beldenfox deleted the wineventcrash branch October 4, 2024 21:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
integrated Pull request has been integrated
Development

Successfully merging this pull request may close these issues.

3 participants