RFR: 8329665: fatal error: memory leak: allocating without ResourceMark [v2]
Thomas Stuefe
stuefe at openjdk.org
Thu Jun 27 13:59:17 UTC 2024
On Mon, 15 Apr 2024 14:53:12 GMT, Patricio Chilano Mateo <pchilanomate at openjdk.org> wrote:
>> There are two places in Loom code that call f.oops_interpreted_do() to process oops in the stackChunk. Although not obvious this method seem to require to have a ResourceMark on scope and there are several contexts where these two are call where we don't have one. The reason why a ResourceMark is needed is because OopMapCache::compute_one_oop_map() might allocate from the resource area if _mask_size is > 4 * BitsPerWord, which depends on the amount of locals + expression stack of the corresponding method. But ~InterpreterOopMap already checks if the _bit_mask was allocated in the resource area and in that case it will free it. So the ResourceMark is not strictly needed except that in debug mode we will actually hit the assert if there is not one in scope when trying to allocate the _bit_mask.
>>
>> Thanks,
>> Patricio
>
> Patricio Chilano Mateo has updated the pull request incrementally with one additional commit since the last revision:
>
> take ResourceMark out of debug only
I am a bit concerned about this fix. Introducing an RM into `frame::oops_interpreted_do` means we cannot assemble anything in RA in the closure code and keep the memory across the RM. But closure code is opaque to the iteration site. Do we have any safeguards against OopClosure using and retaining RA memory? (Because even if no closure does this today, this could sneak in easily)
-------------
PR Comment: https://git.openjdk.org/jdk/pull/18632#issuecomment-2194755025
More information about the hotspot-dev
mailing list