src/share/vm/runtime/thread.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/runtime

src/share/vm/runtime/thread.cpp

Print this page
rev 7390 : 8064669: compiler/whitebox/AllocationCodeBlobTest.java crashes / asserts
Reviewed-by: kvn, anoll


1098   instanceKlassHandle klass (THREAD, k);
1099 
1100   // setProperty arguments
1101   Handle key_str    = java_lang_String::create_from_str("java.vm.info", CHECK);
1102   Handle value_str  = java_lang_String::create_from_str(vm_info, CHECK);
1103 
1104   // return value
1105   JavaValue r(T_OBJECT);
1106 
1107   // public static String setProperty(String key, String value);
1108   JavaCalls::call_static(&r,
1109                          klass,
1110                          vmSymbols::setProperty_name(),
1111                          vmSymbols::string_string_string_signature(),
1112                          key_str,
1113                          value_str,
1114                          CHECK);
1115 }
1116 
1117 
1118 void JavaThread::allocate_threadObj(Handle thread_group, char* thread_name,
1119                                     bool daemon, TRAPS) {
1120   assert(thread_group.not_null(), "thread group should be specified");
1121   assert(threadObj() == NULL, "should only create Java thread object once");
1122 
1123   Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK);
1124   instanceKlassHandle klass (THREAD, k);
1125   instanceHandle thread_oop = klass->allocate_instance_handle(CHECK);
1126 
1127   java_lang_Thread::set_thread(thread_oop(), this);
1128   java_lang_Thread::set_priority(thread_oop(), NormPriority);
1129   set_threadObj(thread_oop());
1130 
1131   JavaValue result(T_VOID);
1132   if (thread_name != NULL) {
1133     Handle name = java_lang_String::create_from_str(thread_name, CHECK);
1134     // Thread gets assigned specified name and null target
1135     JavaCalls::call_special(&result,
1136                             thread_oop,
1137                             klass,
1138                             vmSymbols::object_initializer_name(),


1145     // (java.lang.Thread doesn't have a constructor taking only a ThreadGroup argument)
1146     JavaCalls::call_special(&result,
1147                             thread_oop,
1148                             klass,
1149                             vmSymbols::object_initializer_name(),
1150                             vmSymbols::threadgroup_runnable_void_signature(),
1151                             thread_group, // Argument 1
1152                             Handle(),     // Argument 2
1153                             THREAD);
1154   }
1155 
1156 
1157   if (daemon) {
1158     java_lang_Thread::set_daemon(thread_oop());
1159   }
1160 
1161   if (HAS_PENDING_EXCEPTION) {
1162     return;
1163   }
1164 
1165   KlassHandle group(this, SystemDictionary::ThreadGroup_klass());
1166   Handle threadObj(this, this->threadObj());
1167 
1168   JavaCalls::call_special(&result,
1169                           thread_group,
1170                           group,
1171                           vmSymbols::add_method_name(),
1172                           vmSymbols::thread_void_signature(),
1173                           threadObj,          // Arg 1
1174                           THREAD);
1175 
1176 
1177 }
1178 
1179 // NamedThread --  non-JavaThread subclasses with multiple
1180 // uniquely named instances should derive from this.
1181 NamedThread::NamedThread() : Thread() {
1182   _name = NULL;
1183   _processed_thread = NULL;
1184 }
1185 
1186 NamedThread::~NamedThread() {
1187   if (_name != NULL) {
1188     FREE_C_HEAP_ARRAY(char, _name, mtThread);
1189     _name = NULL;
1190   }
1191 }
1192 
1193 void NamedThread::set_name(const char* format, ...) {
1194   guarantee(_name == NULL, "Only get to set name once.");
1195   _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread);
1196   guarantee(_name != NULL, "alloc failure");




1098   instanceKlassHandle klass (THREAD, k);
1099 
1100   // setProperty arguments
1101   Handle key_str    = java_lang_String::create_from_str("java.vm.info", CHECK);
1102   Handle value_str  = java_lang_String::create_from_str(vm_info, CHECK);
1103 
1104   // return value
1105   JavaValue r(T_OBJECT);
1106 
1107   // public static String setProperty(String key, String value);
1108   JavaCalls::call_static(&r,
1109                          klass,
1110                          vmSymbols::setProperty_name(),
1111                          vmSymbols::string_string_string_signature(),
1112                          key_str,
1113                          value_str,
1114                          CHECK);
1115 }
1116 
1117 
1118 void JavaThread::allocate_threadObj(Handle thread_group, const char* thread_name,
1119                                     bool daemon, TRAPS) {
1120   assert(thread_group.not_null(), "thread group should be specified");
1121   assert(threadObj() == NULL, "should only create Java thread object once");
1122 
1123   Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK);
1124   instanceKlassHandle klass (THREAD, k);
1125   instanceHandle thread_oop = klass->allocate_instance_handle(CHECK);
1126 
1127   java_lang_Thread::set_thread(thread_oop(), this);
1128   java_lang_Thread::set_priority(thread_oop(), NormPriority);
1129   set_threadObj(thread_oop());
1130 
1131   JavaValue result(T_VOID);
1132   if (thread_name != NULL) {
1133     Handle name = java_lang_String::create_from_str(thread_name, CHECK);
1134     // Thread gets assigned specified name and null target
1135     JavaCalls::call_special(&result,
1136                             thread_oop,
1137                             klass,
1138                             vmSymbols::object_initializer_name(),


1145     // (java.lang.Thread doesn't have a constructor taking only a ThreadGroup argument)
1146     JavaCalls::call_special(&result,
1147                             thread_oop,
1148                             klass,
1149                             vmSymbols::object_initializer_name(),
1150                             vmSymbols::threadgroup_runnable_void_signature(),
1151                             thread_group, // Argument 1
1152                             Handle(),     // Argument 2
1153                             THREAD);
1154   }
1155 
1156 
1157   if (daemon) {
1158     java_lang_Thread::set_daemon(thread_oop());
1159   }
1160 
1161   if (HAS_PENDING_EXCEPTION) {
1162     return;
1163   }
1164 
1165   KlassHandle group(THREAD, SystemDictionary::ThreadGroup_klass());
1166   Handle threadObj(THREAD, this->threadObj());
1167 
1168   JavaCalls::call_special(&result,
1169                           thread_group,
1170                           group,
1171                           vmSymbols::add_method_name(),
1172                           vmSymbols::thread_void_signature(),
1173                           threadObj,          // Arg 1
1174                           THREAD);


1175 }
1176 
1177 // NamedThread --  non-JavaThread subclasses with multiple
1178 // uniquely named instances should derive from this.
1179 NamedThread::NamedThread() : Thread() {
1180   _name = NULL;
1181   _processed_thread = NULL;
1182 }
1183 
1184 NamedThread::~NamedThread() {
1185   if (_name != NULL) {
1186     FREE_C_HEAP_ARRAY(char, _name, mtThread);
1187     _name = NULL;
1188   }
1189 }
1190 
1191 void NamedThread::set_name(const char* format, ...) {
1192   guarantee(_name == NULL, "Only get to set name once.");
1193   _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread);
1194   guarantee(_name != NULL, "alloc failure");


src/share/vm/runtime/thread.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File