RFR: 8244551: Shenandoah: Fix racy update of update_watermark
Zhengyu Gu
zgu at redhat.com
Thu May 7 12:44:32 UTC 2020
So, the patch fixes the ordering of _top and _update_watermark to avoid
assertion failure, but adds unnecessary penalty to production build?
-Zhengyu
On 5/7/20 7:37 AM, Roman Kennke wrote:
>>>> *) What's the point of this cast?
>>>>
>>>> 133 *const_cast<HeapWord**>(&_update_watermark) = w;
>>>
>>> Make access non-volatile. You think it's too much?
>>
>> I don't think that is relevant. As long as it is not the atomic store (with fences), we are fine.
>
> Ok. I will push the fix with this additional change then:
>
> diff -r 7910475d5001
> src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.inline.hpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.inline.hpp
> Thu May 07 07:03:25 2020 -0400
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.inline.hpp
> Thu May 07 07:36:26 2020 -0400
> @@ -128,9 +128,8 @@
> // Fast version that avoids synchronization, only to be used at safepoints.
> inline void
> ShenandoahHeapRegion::set_update_watermark_at_safepoint(HeapWord* w) {
> assert(bottom() <= w && w <= top(), "within bounds");
> - assert(SafepointSynchronize::is_at_safepoint(),
> - "only call set_update_watermark_at_safepoint at safepoint");
> - *const_cast<HeapWord**>(&_update_watermark) = w;
> + assert(SafepointSynchronize::is_at_safepoint(), "Should be at
> Shenandoah safepoint");
> + _update_watermark = w;
> }
>
> #endif // SHARE_GC_SHENANDOAH_SHENANDOAHHEAPREGION_INLINE_HPP
>
>
> Thanks for reviewing!
> Roman
>
More information about the shenandoah-dev
mailing list