RFR (XXS): 8132728: Memory leak in MethodHandles::verify_ref_kind function(fastdebug build)
Dmitry Dmitriev
dmitry.dmitriev at oracle.com
Wed Aug 5 21:41:55 UTC 2015
Hello Vladimir,
Thank you for review and explanation!
I looked at the code and see that code does not return from STOP and
this block executed only when ref kind not equal to expected. But it is
possible that debug64 will not be called and execution continues? For
example at VM start-up? Here a call chain which I see:
JVM_RegisterMethodHandleMethods->MethodHandles::generate_adapters->MethodHandlesAdapterGenerator::generate->MethodHandles::generate_method_handle_interpreter_entry->MethodHandles::verify_ref_kind
For quick experiment I add tty->print_cr() to the
MethodHandles::verify_ref_kind, MacroAssembler::stop and
MacroAssembler::debug64 and see that block with memory allocation is
executed in this case, stop method is called, but debug64 is not
executed and stop successfully finished. So, it explains why I see
memory leak... Correct me if I am wrong. Thanks!
Dmitry
On 05.08.2015 20:54, Vladimir Kozlov wrote:
> Looks good.
>
> Note, it is not real memory leak - code does not return from STOP
> call. It either produce assert and exit or wait to attach debugger
> (ShowMessageBoxOnError). See MacroAssembler::debug64() for example.
>
> Thanks,
> Vladimir
>
> On 8/5/15 9:55 AM, Dmitry Dmitriev wrote:
>> Hello,
>>
>> Please review this fix which remove small memory leak in debug build.
>> Also, I need a sponsor for this fix, who can push it.
>>
>> MethodHandles::verify_ref_kind contains memory leak. Memory for 'buf'
>> is allocated by NEW_C_HEAP_ARRAY but not freed
>> after '__ STOP(buf);'.
>>
>> Webrev: http://cr.openjdk.java.net/~ddmitriev/8132728/webrev.00/
>> JBS: https://bugs.openjdk.java.net/browse/JDK-8132728
>> Tested: JPRT(hotspot test set), hotspot all, vm.quick
>>
>> Thanks,
>> Dmitry
More information about the hotspot-compiler-dev
mailing list