RFR: 8342782: AWTEventMulticaster throws StackOverflowError using AquaButtonUI [v2]
Jeremy
duke at openjdk.org
Sun Nov 24 08:14:00 UTC 2024
> The AWTEventMulticaster is a tree node with 2 children. This PR proposes rebalancing that tree after 500 additions to avoid potential StackOverflowErrors when trying to interact with a large AWTEventMulticaster.
>
> In the original headful test:
> We added 8,000 checkboxes, and when their parent panel was hidden the stack needed to grow to 24,000 lines. It took 8,000 lines to recursively call `java.awt.AWTEventMulticaster.componentHidden`, and then 16,000 additional lines to call two recursive methods to remove a listener:
>
> java.desktop/java.awt.AWTEventMulticaster.removeInternal()
> java.desktop/java.awt.AWTEventMulticaster.remove()
>
>
> With this current PR the max stack size reaches 1,267 instead. (If we rebalanced at EVERY addition, then that same scenario would reach a max stack size of 71.)
>
> JDK-8342782 included a headful test case, but I think the main problem it demonstrated can be represented by the headless test case attached to this PR.
>
> Depending on how this PR is received I may submit a separate ticket & PR to modify AquaButtonUI so it doesn't always attach an AncestorListener. (That is: if my GUI includes 8,000 checkboxes then I don't need 8,000 AncestorListeners.) But JDK-8342782's test case is currently written in a way that should reproduce across all L&F's, so that can be discussed separately.
Jeremy has updated the pull request incrementally with three additional commits since the last revision:
- 8342782: Removing confusing javadoc
This is in response to this PR comment:
https://github.com/openjdk/jdk/pull/21962#discussion_r1833401410
- 8342782: adding curly brackets
This is in response to these PR comments:
https://github.com/openjdk/jdk/pull/21962#discussion_r1833399928
https://github.com/openjdk/jdk/pull/21962#discussion_r1833413838
- 8342782: removing new comment in javadoc
This is in response to this PR comment:
https://github.com/openjdk/jdk/pull/21962#pullrequestreview-2422181991
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/21962/files
- new: https://git.openjdk.org/jdk/pull/21962/files/d3c7d785..179378d6
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=21962&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=21962&range=00-01
Stats: 12 lines in 1 file changed: 3 ins; 6 del; 3 mod
Patch: https://git.openjdk.org/jdk/pull/21962.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/21962/head:pull/21962
PR: https://git.openjdk.org/jdk/pull/21962
More information about the client-libs-dev
mailing list