Mon, 29 Apr 2013 16:36:17 -0400
Merge
1.1 --- a/src/share/vm/classfile/javaClasses.cpp Fri Apr 26 07:34:02 2013 -0400 1.2 +++ b/src/share/vm/classfile/javaClasses.cpp Mon Apr 29 16:36:17 2013 -0400 1.3 @@ -315,14 +315,18 @@ 1.4 return string; 1.5 } 1.6 1.7 -jchar* java_lang_String::as_unicode_string(oop java_string, int& length) { 1.8 +jchar* java_lang_String::as_unicode_string(oop java_string, int& length, TRAPS) { 1.9 typeArrayOop value = java_lang_String::value(java_string); 1.10 int offset = java_lang_String::offset(java_string); 1.11 length = java_lang_String::length(java_string); 1.12 1.13 - jchar* result = NEW_RESOURCE_ARRAY(jchar, length); 1.14 - for (int index = 0; index < length; index++) { 1.15 - result[index] = value->char_at(index + offset); 1.16 + jchar* result = NEW_RESOURCE_ARRAY_RETURN_NULL(jchar, length); 1.17 + if (result != NULL) { 1.18 + for (int index = 0; index < length; index++) { 1.19 + result[index] = value->char_at(index + offset); 1.20 + } 1.21 + } else { 1.22 + THROW_MSG_0(vmSymbols::java_lang_OutOfMemoryError(), "could not allocate Unicode string"); 1.23 } 1.24 return result; 1.25 }
2.1 --- a/src/share/vm/classfile/javaClasses.hpp Fri Apr 26 07:34:02 2013 -0400 2.2 +++ b/src/share/vm/classfile/javaClasses.hpp Mon Apr 29 16:36:17 2013 -0400 2.3 @@ -153,7 +153,7 @@ 2.4 static char* as_utf8_string(oop java_string, char* buf, int buflen); 2.5 static char* as_utf8_string(oop java_string, int start, int len); 2.6 static char* as_platform_dependent_str(Handle java_string, TRAPS); 2.7 - static jchar* as_unicode_string(oop java_string, int& length); 2.8 + static jchar* as_unicode_string(oop java_string, int& length, TRAPS); 2.9 // produce an ascii string with all other values quoted using \u#### 2.10 static char* as_quoted_ascii(oop java_string); 2.11
3.1 --- a/src/share/vm/classfile/symbolTable.cpp Fri Apr 26 07:34:02 2013 -0400 3.2 +++ b/src/share/vm/classfile/symbolTable.cpp Mon Apr 29 16:36:17 2013 -0400 3.3 @@ -735,7 +735,7 @@ 3.4 ResourceMark rm(THREAD); 3.5 int length; 3.6 Handle h_string (THREAD, string); 3.7 - jchar* chars = java_lang_String::as_unicode_string(string, length); 3.8 + jchar* chars = java_lang_String::as_unicode_string(string, length, CHECK_NULL); 3.9 oop result = intern(h_string, chars, length, CHECK_NULL); 3.10 return result; 3.11 }
4.1 --- a/src/share/vm/memory/allocation.hpp Fri Apr 26 07:34:02 2013 -0400 4.2 +++ b/src/share/vm/memory/allocation.hpp Mon Apr 29 16:36:17 2013 -0400 4.3 @@ -539,6 +539,9 @@ 4.4 #define NEW_RESOURCE_ARRAY(type, size)\ 4.5 (type*) resource_allocate_bytes((size) * sizeof(type)) 4.6 4.7 +#define NEW_RESOURCE_ARRAY_RETURN_NULL(type, size)\ 4.8 + (type*) resource_allocate_bytes((size) * sizeof(type), AllocFailStrategy::RETURN_NULL) 4.9 + 4.10 #define NEW_RESOURCE_ARRAY_IN_THREAD(thread, type, size)\ 4.11 (type*) resource_allocate_bytes(thread, (size) * sizeof(type)) 4.12
5.1 --- a/src/share/vm/oops/oop.cpp Fri Apr 26 07:34:02 2013 -0400 5.2 +++ b/src/share/vm/oops/oop.cpp Mon Apr 29 16:36:17 2013 -0400 5.3 @@ -1,5 +1,5 @@ 5.4 /* 5.5 - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. 5.6 + * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. 5.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5.8 * 5.9 * This code is free software; you can redistribute it and/or modify it 5.10 @@ -103,11 +103,17 @@ 5.11 5.12 // When String table needs to rehash 5.13 unsigned int oopDesc::new_hash(jint seed) { 5.14 + EXCEPTION_MARK; 5.15 ResourceMark rm; 5.16 int length; 5.17 - jchar* chars = java_lang_String::as_unicode_string(this, length); 5.18 - // Use alternate hashing algorithm on the string 5.19 - return AltHashing::murmur3_32(seed, chars, length); 5.20 + jchar* chars = java_lang_String::as_unicode_string(this, length, THREAD); 5.21 + if (chars != NULL) { 5.22 + // Use alternate hashing algorithm on the string 5.23 + return AltHashing::murmur3_32(seed, chars, length); 5.24 + } else { 5.25 + vm_exit_out_of_memory(length, "unable to create Unicode strings for String table rehash"); 5.26 + return 0; 5.27 + } 5.28 } 5.29 5.30 VerifyOopClosure VerifyOopClosure::verify_oop;
6.1 --- a/src/share/vm/prims/whitebox.cpp Fri Apr 26 07:34:02 2013 -0400 6.2 +++ b/src/share/vm/prims/whitebox.cpp Mon Apr 29 16:36:17 2013 -0400 6.3 @@ -1,5 +1,5 @@ 6.4 /* 6.5 - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. 6.6 + * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 6.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 6.8 * 6.9 * This code is free software; you can redistribute it and/or modify it 6.10 @@ -310,12 +310,8 @@ 6.11 WB_ENTRY(jboolean, WB_IsInStringTable(JNIEnv* env, jobject o, jstring javaString)) 6.12 ResourceMark rm(THREAD); 6.13 int len; 6.14 - jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len); 6.15 - oop found_string = StringTable::the_table()->lookup(name, len); 6.16 - if (found_string == NULL) { 6.17 - return false; 6.18 - } 6.19 - return true; 6.20 + jchar* name = java_lang_String::as_unicode_string(JNIHandles::resolve(javaString), len, CHECK_false); 6.21 + return (StringTable::lookup(name, len) != NULL); 6.22 WB_END 6.23 6.24