RFR: 8244551: Shenandoah: Fix racy update of update_watermark
Aleksey Shipilev
shade at redhat.com
Thu May 7 11:37:56 UTC 2020
On 5/7/20 1:37 PM, 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
Looks fine. As long as it compiles and passes the tests :)
--
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list