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");
|