Integrated: 8342782: AWTEventMulticaster throws StackOverflowError using AquaButtonUI

Jeremy duke at openjdk.org
Wed Dec 18 09:32:48 UTC 2024


On Thu, 7 Nov 2024 17:49:29 GMT, Jeremy <duke at openjdk.org> wrote:

> The AWTEventMulticaster is a tree node with 2 children. This PR proposes rebalancing that tree after ~~500~~ 100 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.

This pull request has now been integrated.

Changeset: 5b703c70
Author:    jeremy <jeremy.wood at mac.com>
URL:       https://git.openjdk.org/jdk/commit/5b703c702323bc50452d3f6fd27b165b74006c3e
Stats:     157 lines in 2 files changed: 156 ins; 0 del; 1 mod

8342782: AWTEventMulticaster throws StackOverflowError using AquaButtonUI

Reviewed-by: kizune, prr, lbourges

-------------

PR: https://git.openjdk.org/jdk/pull/21962


More information about the client-libs-dev mailing list