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