RFR: 8285893: Hiding dialog and showing new one causes dialog to be frozen [v2]
Martin Fox
mfox at openjdk.org
Mon Jul 22 22:22:19 UTC 2024
> This PR is based on a discussion that happened over in PR #1324. Some of this explanation is copied from that thread.
>
> When `exitNestedEventLoop` is called on the innermost loop the invokeLaterDispatcher suspends operation until the loop finishes. But if you immediately start a new event loop the previous one won't finish and the dispatcher will jam up and stop dispatching indefinitely.
>
> When the invokeLaterDispatcher is told that the innermost loop is exiting it sets `leavingNestedEventLoop` to true expecting it to be set to false when the loop actually exits. When the dispatcher is told that a new event loop has started it is not clearing `leavingNestedEventLoop` which is causing the jam. Basically it should follow the same logic used in glass; leaving the innermost loop updates a boolean indicating that the loop should exit but if a new loop is started the boolean is set back to a running state since it now applies to the new loop, not the previous one.
>
> I suspect the invokeLaterDispatcher exists in part to deal with the specifics of how deferred runnables are handled on the Mac. I investigated this a bit and wrote up some comments in the Mac glass code.
Martin Fox has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:
- Linux leaveNestedEventLoop now behaves like Mac and Windows
- Merge remote-tracking branch 'upstream/master' into eventloopjam
- Merge remote-tracking branch 'upstream/master' into eventloopjam
- Background information on how Mac Glass handles invokeLater runnables
- Unblock invokeLater runnables when entering new loop just after exiting current one
-------------
Changes:
- all: https://git.openjdk.org/jfx/pull/1449/files
- new: https://git.openjdk.org/jfx/pull/1449/files/12267ce2..7f7574a4
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jfx&pr=1449&range=01
- incr: https://webrevs.openjdk.org/?repo=jfx&pr=1449&range=00-01
Stats: 431796 lines in 7768 files changed: 237877 ins; 122608 del; 71311 mod
Patch: https://git.openjdk.org/jfx/pull/1449.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/1449/head:pull/1449
PR: https://git.openjdk.org/jfx/pull/1449
More information about the openjfx-dev
mailing list