8216541: CompiledICHolders of VM locked unloaded nmethods are released too late
Erik Österlund
erik.osterlund at oracle.com
Wed Jan 30 08:54:10 UTC 2019
Hi Kozlov,
Thanks for the review.
/Erik
On 2019-01-29 23:31, Vladimir Kozlov wrote:
> Looks good to me too.
>
> Thanks,
> Vladimir
>
> On 1/29/19 2:40 AM, Tobias Hartmann wrote:
>> Hi Erik,
>>
>> okay, got it. Thanks for the details, your fix looks good to me!
>>
>> Best regards,
>> Tobias
>>
>> On 29.01.19 11:38, Erik Österlund wrote:
>>> Hi Tobias,
>>>
>>> Thanks for having a look at this.
>>>
>>> On 2019-01-29 09:16, Tobias Hartmann wrote:
>>>> Hi Erik,
>>>>
>>>> very nice analysis, thanks a lot for investigating!
>>>>
>>>> On 28.01.19 14:56, Erik Österlund wrote:
>>>>> http://cr.openjdk.java.net/~eosterlund/8216541/webrev.00/
>>>>
>>>> Why did you remove the call to
>>>> thread->set_scanned_compiled_method(NULL) in sweeper.cpp?
>>>
>>> Because the CompiledMethodMarker destructor already nulls this out,
>>> and redundantly nulling it out
>>> again offers no extra protection.
>>>
>>> The idea of nulling it out before calling flush seems to have been to
>>> prevent the GC scanning from
>>> seeing this flushed nmethod in a safepoint, accidentally resurrecting
>>> it from the dead. But that is
>>> already impossible, because flush() is called with a never safepoint
>>> checking lock (which guarantees
>>> we don't have any and can't add any safepoint checks while holding
>>> that lock or we will deadlock
>>> badly). Therefore such safepoints will happen strictly after the
>>> processing of the compiled method
>>> is finished, and it is already cleared the normal way.
>>>
>>> By removing that pointless clearing, I could get rid of the
>>> release_compiled_method() function and
>>> just call flush directly instead. I get confused by there being two
>>> "destroy" functions, one in the
>>> sweeper and one in the nmethod, so I wanted it gone.
>>>
>>>>
>>>>> The proposed change has survived 200 rounds of kitchensink,
>>>>> hs-tier1-3 and hs-precheckin-comp.
>>>>
>>>> In the meanwhile, could you please run some more 100x iterations of
>>>> kitchensink?
>>>
>>> Sure, running some more as we speak.
>>>
>>> Thanks,
>>> /Erik
>>>
>>>>
>>>> Thanks,
>>>> Tobias
>>>>
More information about the hotspot-dev
mailing list