On Sun, 11 Oct 2020 21:26:06 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:
> Fix for various memory leaks in Nimbus and Motif L&Fs, see comments inline. src/java.desktop/share/classes/javax/swing/plaf/synth/SynthDesktopIconUI.java line 113: > 111: if (iconPane instanceof JToggleButton) { > 112: ((JToggleButton)iconPane).removeActionListener(handler); > 113: frame.removePropertyChangeListener(this); This code is never executed, the iconPane is null here, it is moved above to the uninstallComponents() src/java.desktop/share/classes/javax/swing/plaf/synth/SynthComboBoxUI.java line 757: > 755: > 756: public void unregister() { > 757: comboBox.removePropertyChangeListener("editor", this); The listener is added as "comboBox.addPropertyChangeListener("editor",this);" and should be removed by the pair API. src/java.desktop/share/classes/com/sun/java/swing/plaf/motif/MotifComboBoxUI.java line 71: > 69: }; > 70: > 71: SwingUtilities.invokeLater( initCode ); This code was added in 1998, the intention was to postpone the initialization of the editor's background till everything in the combo box will be initialized, but: - Since then we have a special method configureEditor() which called every time the editor is changed and sets the correct background (see below in this file) - If the L&F will be changed to something else the posted event will "poison" the background of the editor by the "motif color". test/jdk/javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java line 94: > 92: for (LookAndFeelInfo laf : getInstalledLookAndFeels()) { > 93: String name = laf.getName(); > 94: if (name.contains("OS X") || name.contains("Metal")) { The test was checked on all platforms via mach5 ------------- PR: https://git.openjdk.java.net/jdk/pull/595