8216541: CompiledICHolders of VM locked unloaded nmethods are released too late
Tobias Hartmann
tobias.hartmann at oracle.com
Tue Jan 29 10:40:34 UTC 2019
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