Shenandoah: Question about asserts

Per Liden per.liden at oracle.com
Thu Sep 9 17:07:51 UTC 2021


Ok, thanks Zhengyu! I'll update my PR to include the removal of the asserts.

cheers,
Per


On 9/9/21 4:22 PM, Zhengyu Gu wrote:
> Hi Per,
> 
> Shenandoah heap dump was designed to be single-threaded. It looks like 
> that JDK-8237354 breaks that.
> 
> Feel free to remove the assertions to unblock your work. I will file a 
> bug to fix Shenandoah heap dump.
> 
> Thanks,
> 
> -Zhengyu
> 
> On 9/9/21 5:48 AM, Per Liden wrote:
>> Hi Shenandoah-folks,
>>
>> When doing some random testing of 
>> https://github.com/openjdk/jdk/pull/5410 I noticed that Shenandoah ran 
>> into a few asserts during heap dumping. The asserts check that we're 
>> executing in the VM thread. However, I wonder if these asserts might 
>> be a bit too aggressive, or if there's a reason these functions must 
>> only be executed by the VM thread? I couldn't see any obvious reason, 
>> so I simply removed the offending asserts (see patch below) and 
>> nothing obvious seems to break (heap dumping tests now pass, etc).
>>
>> So, would you mind if I remove these asserts, or are they really 
>> needed for some reason I've missed?
>>
>> cheers,
>> Per
>>
>>
>> diff --git a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp 
>> b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp
>> index ca9afd7ad4f..623ca9574a2 100644
>> --- a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp
>> +++ b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp
>> @@ -355,7 +355,6 @@ 
>> ShenandoahCodeRootsIterator::ShenandoahCodeRootsIterator() :
>>           _par_iterator(CodeCache::heaps()),
>>           _table_snapshot(NULL) {
>>     assert(SafepointSynchronize::is_at_safepoint(), "Must be at 
>> safepoint");
>> -  assert(!Thread::current()->is_Worker_thread(), "Should not be 
>> acquired by workers");
>>     CodeCache_lock->lock_without_safepoint_check();
>>     _table_snapshot = 
>> ShenandoahCodeRoots::table()->snapshot_for_iteration();
>>   }
>> diff --git 
>> a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp 
>> b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp
>> index c0469a71d7b..261920a9d7a 100644
>> --- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp
>> +++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.cpp
>> @@ -258,7 +258,6 @@ 
>> ShenandoahHeapIterationRootScanner::ShenandoahHeapIterationRootScanner() 
>> :
>>    }
>>
>>    void ShenandoahHeapIterationRootScanner::roots_do(OopClosure* oops) {
>> -   assert(Thread::current()->is_VM_thread(), "Only by VM thread");
>>      // Must use _claim_none to avoid interfering with concurrent CLDG 
>> iteration
>>      CLDToOopClosure clds(oops, ClassLoaderData::_claim_none);
>>      MarkingCodeBlobClosure code(oops, 
>> !CodeBlobToOopClosure::FixRelocations);
>> diff --git 
>> a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp 
>> b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp
>> index 3f614d1e208..b2897d380aa 100644
>> --- a/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp
>> +++ b/src/hotspot/share/gc/shenandoah/shenandoahRootProcessor.inline.hpp
>> @@ -86,9 +86,8 @@ ShenandoahClassLoaderDataRoots<CONCURRENT, 
>> SINGLE_THREADED>::ShenandoahClassLoad
>>       ClassLoaderDataGraph_lock->lock();
>>     }
>>
>> -  // Non-concurrent mode only runs at safepoints by VM thread
>> +  // Non-concurrent mode only runs at safepoints
>>     assert(CONCURRENT || SafepointSynchronize::is_at_safepoint(), 
>> "Must be at a safepoint");
>> -  assert(CONCURRENT || Thread::current()->is_VM_thread(), "Can only 
>> be done by VM thread");
>>   }
>>
>>   template <bool CONCURRENT, bool SINGLE_THREADED>
>>
> 



More information about the hotspot-gc-dev mailing list