RFR: 8269907 memory leak - Dirty Nodes / Parent removed [v7]
Florian Kirmaier
fkirmaier at openjdk.org
Wed Feb 1 10:24:11 UTC 2023
On Fri, 27 Jan 2023 13:30:59 GMT, John Hendrikx <jhendrikx at openjdk.org> wrote:
>> Florian Kirmaier has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains eight commits:
>>
>> - JDK-8269907
>> Added missing changes after merge
>> - Merge remote-tracking branch 'origjfx/master' into JDK-8269907-dirty-and-removed
>>
>> # Conflicts:
>> # modules/javafx.graphics/src/main/java/com/sun/javafx/tk/Toolkit.java
>> # modules/javafx.graphics/src/main/java/javafx/scene/Scene.java
>> - Merge remote-tracking branch 'origin/master'
>> - JDK-8269907
>> Removed the sync methods for the scene, because they don't work when peer is null, and they are not necessary.
>> - JDK-8269907
>> Fixed rare bug, causing bounds to be out of sync.
>> - JDK-8269907
>> We now require the rendering lock when cleaning up dirty nodes. To do so, we moved some code required for snapshot into a reusable method.
>> - JDK-8269907
>> The bug is now fixed in a new way. Toolkit now supports registering CleanupListeners, which can clean up the dirty nodes, avoiding memoryleaks.
>> - JDK-8269907
>> Fixing dirty nodes and parent removed, when a window is no longer showing. This typically happens with context menus.
>
> modules/javafx.graphics/src/main/java/javafx/scene/Scene.java line 746:
>
>> 744: if(!cleanupAdded) {
>> 745: if((window.get() == null || !window.get().isShowing()) && dirtyNodesSize > 0) {
>> 746: Toolkit.getToolkit().addCleanupListener(cleanupListener);
>
> This adds a listener to be run on the next pulse, yet no pulse is being requested. Probably something else will request a pulse, but seems like you may not want to rely on that. Specifically, `addToDirtyList` won't request a pulse if the stage is already closed (peer is `null`), and only then do you remove some nodes. It still works though in that case, probably because something else in JavaFX is requesting a pulse (nothing in `Scene` does though when peer is `null`).
I assume that these methods are just called all the time - independent of whether there is an open window.
I would like to leave it like this - unless there is an issue and an idea on how to do it differently.
-------------
PR: https://git.openjdk.org/jfx/pull/584
More information about the openjfx-dev
mailing list