RFR: 8342782: AWTEventMulticaster throws StackOverflowError using AquaButtonUI [v2]

Jeremy duke at openjdk.org
Sun Nov 24 08:14:00 UTC 2024


On Thu, 7 Nov 2024 21:21:57 GMT, Phil Race <prr at openjdk.org> wrote:

>> 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
>
> src/java.desktop/share/classes/java/awt/AWTEventMulticaster.java line 960:
> 
>> 958:      * Occasionally (after approximately 500 invocations) the root
>> 959:      * AWTEventMulticaster is rebalanced.
>> 960:      *
> 
> I am not sure this comment is needed. If you think it is needed then it would need a CSR, and the comment should be tagged @implNote

I removed that comment.

> src/java.desktop/share/classes/java/awt/AWTEventMulticaster.java line 985:
> 
>> 983:      * <p>
>> 984:      * The first time this method is invoked it will convert a tree that has a degree
>> 985:      * of approximately 500 to a tree with a degree of approximately 10.
> 
> where does it do that ? I just see it deciding if there's a need to rebalance.

I removed this sentence. It confusingly conflated this method with the method that actually did the rebalancing.

> src/java.desktop/share/classes/java/awt/AWTEventMulticaster.java line 991:
> 
>> 989:         while (true) {
>> 990:             if (++level > 500)
>> 991:                 return true;
> 
> our coding standards require that you always include the body in { .. }

@prrace : I added { .. }

@bourgesl : I'm struggling to define this as a constant in a helpful way. Is there an example of a similar constant somewhere in the codebase you could refer me to for comparison?

I think part of my challenge here is the AWTEventMulticaster doesn't promise to be any particular kind of tree. (For example: if it promised it was a self-balancing tree, then we'd know what our obligations were to meet that expectation.)

This PR's implementation is intended to be a fast heuristic/educated guess, but it does not scan the entire height of the left or right node. This makes it ... hard for me to name.

(Relatedly: the value 500 is arbitrary, and I'm happy to change it if someone would rather it be closer to 50 or 1000.)

> src/java.desktop/share/classes/java/awt/AWTEventMulticaster.java line 1018:
> 
>> 1016:      */
>> 1017:     private static EventListener rebalance(EventListener[] array, int index0, int index1) {
>> 1018:         if (index0 == index1)
> 
> { .. } again

I added { .. }

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21962#discussion_r1855390611
PR Review Comment: https://git.openjdk.org/jdk/pull/21962#discussion_r1855390855
PR Review Comment: https://git.openjdk.org/jdk/pull/21962#discussion_r1855390839
PR Review Comment: https://git.openjdk.org/jdk/pull/21962#discussion_r1855390868


More information about the client-libs-dev mailing list