[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Integrated: 8283551: ControlAcceleratorSupport menu items listener causes memory leak
From:       Dean Wookey <dwookey () openjdk ! org>
Date:       2023-06-28 7:01:15
Message-ID: aOA7lxcay_svyYH1k23z8Tq43gmYYmUqT22YhaMmw2Q=.83d0c80f-d168-4a5b-b537-e36e514911f0 () github ! com
[Download RAW message or body]

On Thu, 16 Feb 2023 15:15:11 GMT, Dean Wookey <dwookey@openjdk.org> wrote:

> Each time a menu would change scenes, a new set of ListChangeListeners would be \
> added to the items in the menu. The bigger problem however is that these list \
> change listeners have a strong reference to the scene which is potentially a much \
> bigger leak. 
> The first commit was more straightforward, but there are 2 things that might be of \
> concern: 
> 1. The method removeAcceleratorsFromScene takes in a scene parameter, but it'll \
> remove all the ListChangeListeners attached to it, regardless of which scene was \
> passed in. Something similar happens with changeListenerMap already, so I think \
> it's fine. 2. I made the remove method public so that external calls from skins to \
> remove the accelerators would remove the ListChangeListener and also because all \
> the remove methods are public.  
> After I wrote more tests I realised using the ObservableLists as keys in the \
> WeakHashMaps was a bad idea. If Java had a WeakIdentityHashMap the fix would be \
> simple. The fix is in the second commit. 
> There are still more issues that stem from the fact that for each anchor there \
> could be multiple menus and the current code doesn't account for that. For example, \
> swapping context menus on a tab doesn't register change listeners on the new \
> context menu because the TabPane itself had a scene change listener already. These \
> other issues could relate to JDK-8268374 \
> https://bugs.openjdk.org/browse/JDK-8268374 and JDK-8283449 \
> https://bugs.openjdk.org/browse/JDK-8283449. One of the issues is related to the \
> fact that there's no logic to remove listeners when Tab/TableColumn's are removed \
> from their associated control (TabPane, TableView, TreeTableView). 
> I'm looking at these issues, but I think they're dependent on this fix. Either I \
> can add to this PR or I can wait to see what comes out of this and fix them \
> subsequently.

This pull request has now been integrated.

Changeset: 8fd2943c
Author:    Dean Wookey <dwookey@openjdk.org>
Committer: Ambarish Rapte <arapte@openjdk.org>
URL:       https://git.openjdk.org/jfx/commit/8fd2943c52cb47ec247ce0e6657afdc9bdc725ae
                
Stats:     426 lines in 4 files changed: 406 ins; 1 del; 19 mod

8283551: ControlAcceleratorSupport menu items listener causes memory leak

Reviewed-by: angorya, mstrauss

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

PR: https://git.openjdk.org/jfx/pull/1037


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic