RFR: Assert that Shenandoah does not trip JDK-8211926
Roman Kennke
rkennke at redhat.com
Tue Oct 9 14:54:08 UTC 2018
Ok. WTF bug.
Roman
> So I discovered this beautiful upstream bug:
> https://bugs.openjdk.java.net/browse/JDK-8211926
>
> Trying to reproduce that with Shenandoah had failed. As far as I understand, that never happens with
> Shenandoah because our "beg" is always region->bottom() or heap base, which is perfectly aligned.
> The upstream bug seems to happen when misaligned "beg" gets aligned up to the next bitmap word.
>
> Nevertheless, I want us to be extra protected from this, by putting the asserts inside BitMap, while
> I am working on the fix upstream. This would then be backported as Shenandoah fix, and once upstream
> fix propagates, we would remove these asserts from Shenandoah backports too.
>
> Asserts:
>
> diff -r dcf5cdd06200 src/hotspot/share/utilities/bitMap.inline.hpp
> --- a/src/hotspot/share/utilities/bitMap.inline.hpp Tue Oct 09 15:58:37 2018 +0200
> +++ b/src/hotspot/share/utilities/bitMap.inline.hpp Tue Oct 09 16:47:05 2018 +0200
> @@ -302,14 +302,16 @@
> }
> return mask;
> }
>
> inline void BitMap::set_large_range_of_words(idx_t beg, idx_t end) {
> + assert(!UseShenandoahGC || (beg <= end), "underflow"); // Make sure Shenandoah does not blow up
> on JDK-8211926
> memset(_map + beg, ~(unsigned char)0, (end - beg) * sizeof(bm_word_t));
> }
>
> inline void BitMap::clear_large_range_of_words(idx_t beg, idx_t end) {
> + assert(!UseShenandoahGC || (beg <= end), "underflow"); // Make sure Shenandoah does not blow up
> on JDK-8211926
> memset(_map + beg, 0, (end - beg) * sizeof(bm_word_t));
> }
>
> inline BitMap::idx_t BitMap::word_index_round_up(idx_t bit) const {
> idx_t bit_rounded_up = bit + (BitsPerWord - 1);
>
> Testing: tier3_gc_shenandoah
>
> Thanks,
> -Aleksey
>
More information about the shenandoah-dev
mailing list