RFR(XXS) 8249087 Symbol constructor unnecessarily initializes _body[0]

Florian Weimer fweimer at redhat.com
Tue Jul 21 06:12:41 UTC 2020


* Ioi Lam:

> Hi please review this very simple fix:
>
> diff -r 19f26d72a8d0 src/hotspot/share/oops/symbol.cpp
> --- a/src/hotspot/share/oops/symbol.cpp    Mon Jul 20 14:24:19 2020 -0700
> +++ b/src/hotspot/share/oops/symbol.cpp    Mon Jul 20 17:11:57 2020 -0700
> @@ -51,8 +51,11 @@
>  Symbol::Symbol(const u1* name, int length, int refcount) {
>    _hash_and_refcount = pack_hash_and_refcount((short)os::random(),
> refcount);
>    _length = length;
> -  _body[0] = 0;  // in case length == 0
>    memcpy(_body, name, length);
> +  // For symbols of length 0 and 1: _body[0] (and _body[1]) are
> uninitialized and may
> +  // contain random values, which will only be read by
> Symbol::identity_hash(),
> +  // which would tolerate such randomness. These values never change
> during the lifetime
> +  // of the Symbol.
>  }

Won't this still trip memory debuggers?  Symbol::identity_hash() implies
that the result is eventually used in a conditional operation (a hash
comparison perhaps).  If it's possible one day to run Hotspot under
valgrind, this would result in false positives.

Thanks,
Florian



More information about the hotspot-runtime-dev mailing list