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

Reply via email to