mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 14:54:52 +02:00
8019835: Strings interned in different threads equal but does not ==
Add -XX:+VerifyStringTableAtExit option and code to verify StringTable invariants. Reviewed-by: rdurbin, sspitsyn, coleenp
This commit is contained in:
parent
876967ae1f
commit
41bce440a4
6 changed files with 218 additions and 0 deletions
|
@ -438,6 +438,29 @@ bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool java_lang_String::equals(oop str1, oop str2) {
|
||||
assert(str1->klass() == SystemDictionary::String_klass(),
|
||||
"must be java String");
|
||||
assert(str2->klass() == SystemDictionary::String_klass(),
|
||||
"must be java String");
|
||||
typeArrayOop value1 = java_lang_String::value(str1);
|
||||
int offset1 = java_lang_String::offset(str1);
|
||||
int length1 = java_lang_String::length(str1);
|
||||
typeArrayOop value2 = java_lang_String::value(str2);
|
||||
int offset2 = java_lang_String::offset(str2);
|
||||
int length2 = java_lang_String::length(str2);
|
||||
|
||||
if (length1 != length2) {
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < length1; i++) {
|
||||
if (value1->char_at(i + offset1) != value2->char_at(i + offset2)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void java_lang_String::print(Handle java_string, outputStream* st) {
|
||||
oop obj = java_string();
|
||||
assert(obj->klass() == SystemDictionary::String_klass(), "must be java_string");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue