RFR(s): 8055239: assert(_thread == Thread::current()->osthread()) failed: The PromotionFailedInfo should be thread local.

Sangheon Kim sangheon.kim at oracle.com
Fri Nov 21 05:35:01 UTC 2014


Hi all,

Please review this change to reset PromotionFailedInfo before use:
https://bugs.openjdk.java.net/browse/JDK-8055239

Webrev:
http://cr.openjdk.java.net/~sangheki/8055239/webrev.00/

Summary:
This issue happens only with ParallelRefProcEnabled.
And this assert happens as the current thread (when second promotion 
failure happened) is different from saved thread (when first promotion 
failure happened).
 From ParNewGeneration::collect(), there are two mt processing, for live 
object processing (by ParNewGenTask) and reference processing (by 
ParNewRefEnqueueTaskProxy). When first promotion failure happened from 
ParNewGenTask, thread pointer will be stored by 
PromotionFailedInfo::register_copy_failure(). And at second failure, 
assert happens as thread pointer is not guaranteed to be same.
As the thread counts increase, its frequency become higher.

Fix:
Added ParScanThreadStateSet::trace_promotion_failed() to trace and reset 
promotion failure information instance.

Test:
- jprt

Thanks,
Sangheon


More information about the hotspot-gc-dev mailing list