RFR: 8035648: Don't use Handle in java_lang_String::print
Stefan Karlsson
stefan.karlsson at oracle.com
Mon Feb 24 05:08:41 PST 2014
On 2014-02-24 13:11, David Holmes wrote:
> Stefan,
>
> On 24/02/2014 7:44 PM, Stefan Karlsson wrote:
>> Hi all,
>>
>> Please, review this change to let java_lang_String::print take a raw
>> String oop instead of a Handle to a String oop. This change makes
>> java_lang_String::print callable from code that has no HandleMark setup.
>
> I don't think you can do that. The printing code can encounter a
> safepoint and block thus allowing a raw oop to be exposed over a
> potential GC point.
If that's the case, then the code was already buggy before my change:
1) Before the patch the first thing we did was to convert the Handle to
a raw oop. IMHO, there's no difference in safepoint safeness here.
void java_lang_String::print(Handle java_string, outputStream* st) {
oop obj = java_string();
2) the 'value' object would also be susceptible to this kind of bug:
for (int index = 0; index < length; index++) {
st->print("%c", value->char_at(index + offset));
}
Do you know of an implementation of outputStream that allows us to block
for a safepoint? If not, would you be fine with the change if I add a
No_Safepoint_Verifier?
thanks,
StefanK
>
>
> David
>
>> E.g. when calling from a debugger.
>>
>> Webrev:
>> http://cr.openjdk.java.net/~stefank/8035648/webrev.00/
>>
>> RFE:
>> https://bugs.openjdk.java.net/browse/JDK-8035648
>>
>> thanks,
>> StefanK
More information about the hotspot-dev
mailing list