On Sat, 31 Dec 2022 04:18:09 GMT, Michael Strauß <mstra...@openjdk.org> wrote:
>> This PR fixes the leak in the mac system menu bar. >> >> Inside the native code, NewGlobalRef is called for the callable. >> Which makes it into a "GC-Root" until DeleteGlobalRef is called. >> >> The DeleteGlobalRef is never called for the MenuEntry, if it's removed from >> the menu without removing it's callable. >> This PR adds logic, whether the Menu is inserted. If it's not inserted in a >> Menu anymore, then DeleteGlobalRef is called, by calling `_setCallback` with >> the callable "null". >> >> The unit test verifies, that this bug happened without this change, but no >> longer happens with this change. > > Have you considered storing a weak global reference to the callback instead > of a strong global reference? > That might also solve the problem without keeping track of the callback in > `MacMenuDelegate`. @mstr2 Thank you, this sounds interesting. I didn't know about it. I guess this might allow me to remove these slightly complicated changes I've made. I found it in the documentation here: https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html#weak_global_references I will try it out beginning next week. ------------- PR: https://git.openjdk.org/jfx/pull/987