RFR: 8242621: TabPane: Memory leak when switching skin [v3]
Jeanette Winzenburg
fastegal at openjdk.java.net
Wed Jan 6 14:28:27 UTC 2021
On Wed, 6 Jan 2021 12:22:17 GMT, Ambarish Rapte <arapte at openjdk.org> wrote:
>> modules/javafx.controls/src/test/java/test/javafx/scene/control/skin/SkinCleanupTest.java line 289:
>>
>>> 287: assertNull(tabPane.getSkin());
>>> 288: assertEquals(0, tabPane.getChildrenUnmodifiable().size());
>>> 289: }
>>
>> Same as above: what's the reason to actually show?
>>
>> And just curious: why is this passing already before the fix?
>
> Corrected to use installDefaultSkin().
> It works without this fix is because the children are cleared([here](https://github.com/openjdk/jfx/blob/e74f679fda6f03ee8449836147815fdaafb5d626/modules/javafx.controls/src/main/java/javafx/scene/control/Control.java#L300)) in Control class when the skin is set to null.
thanks for the info :)
>> modules/javafx.controls/src/main/java/javafx/scene/control/skin/TabPaneSkin.java line 1577:
>>
>>> 1575: listener.dispose();
>>> 1576: inner.getChildren().clear();
>>> 1577: getChildren().clear();
>>
>> I'm aware this is internal and old api but .. could we consider cleaning it up a bit?
>>
>> - its task is to cleanup itself, doing whatever it deems is needed (here: removing listeners and children), so removeListeners is a misnomer as it describes only part of it. A (well-established) name for the task would be dispose
>> - passing in the tab is .. strange, as can be seen in its usage in TabHeaderArea.dispose: `header.removeListeners(header.getTab())` Actually, it would be an error to call the method with a `tab != header.getTab()`
>
> +1, passing `tab` is unnecessary here. I have removed the parameter and the method is now renamed as `dispose()`.
> Also it is not required to clear the children of `TabHeaderSkin`, so have removed
> `inner.getChildren().clear();` and `getChildren().clear();` calls from this method.
good catch :)
-------------
PR: https://git.openjdk.java.net/jfx/pull/318
More information about the openjfx-dev
mailing list