949 ThreadPriority priority;
950 Handle thread_group;
951 Handle context_class_loader;
952 bool is_daemon;
953
954 { MutexLocker mu(Threads_lock);
955
956 name = Handle(current_thread, java_lang_Thread::name(thread_obj()));
957 priority = java_lang_Thread::priority(thread_obj());
958 thread_group = Handle(current_thread, java_lang_Thread::threadGroup(thread_obj()));
959 is_daemon = java_lang_Thread::is_daemon(thread_obj());
960
961 oop loader = java_lang_Thread::context_class_loader(thread_obj());
962 context_class_loader = Handle(current_thread, loader);
963 }
964 { const char *n;
965
966 if (name() != NULL) {
967 n = java_lang_String::as_utf8_string(name());
968 } else {
969 n = UNICODE::as_utf8(NULL, 0);
970 }
971
972 info_ptr->name = (char *) jvmtiMalloc(strlen(n)+1);
973 if (info_ptr->name == NULL)
974 return JVMTI_ERROR_OUT_OF_MEMORY;
975
976 strcpy(info_ptr->name, n);
977 }
978 info_ptr->is_daemon = is_daemon;
979 info_ptr->priority = priority;
980
981 info_ptr->context_class_loader = (context_class_loader.is_null()) ? NULL :
982 jni_reference(context_class_loader);
983 info_ptr->thread_group = jni_reference(thread_group);
984
985 return JVMTI_ERROR_NONE;
986 } /* end GetThreadInfo */
987
988
989 // Threads_lock NOT held, java_thread not protected by lock
1170 HandleMark hm(current_thread);
1171 Handle system_thread_group(current_thread, Universe::system_thread_group());
1172 *groups_ptr[0] = jni_reference(system_thread_group);
1173 }
1174
1175 return JVMTI_ERROR_NONE;
1176 } /* end GetTopThreadGroups */
1177
1178
1179 // info_ptr - pre-checked for NULL
1180 jvmtiError
1181 JvmtiEnv::GetThreadGroupInfo(jthreadGroup group, jvmtiThreadGroupInfo* info_ptr) {
1182 ResourceMark rm;
1183 HandleMark hm;
1184
1185 JavaThread* current_thread = JavaThread::current();
1186
1187 Handle group_obj (current_thread, JNIHandles::resolve_external_guard(group));
1188 NULL_CHECK(group_obj(), JVMTI_ERROR_INVALID_THREAD_GROUP);
1189
1190 typeArrayHandle name;
1191 Handle parent_group;
1192 bool is_daemon;
1193 ThreadPriority max_priority;
1194
1195 { MutexLocker mu(Threads_lock);
1196
1197 name = typeArrayHandle(current_thread,
1198 java_lang_ThreadGroup::name(group_obj()));
1199 parent_group = Handle(current_thread, java_lang_ThreadGroup::parent(group_obj()));
1200 is_daemon = java_lang_ThreadGroup::is_daemon(group_obj());
1201 max_priority = java_lang_ThreadGroup::maxPriority(group_obj());
1202 }
1203
1204 info_ptr->is_daemon = is_daemon;
1205 info_ptr->max_priority = max_priority;
1206 info_ptr->parent = jni_reference(parent_group);
1207
1208 if (name() != NULL) {
1209 const char* n = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length());
1210 info_ptr->name = (char *)jvmtiMalloc(strlen(n)+1);
1211 NULL_CHECK(info_ptr->name, JVMTI_ERROR_OUT_OF_MEMORY);
1212 strcpy(info_ptr->name, n);
1213 } else {
1214 info_ptr->name = NULL;
1215 }
1216
1217 return JVMTI_ERROR_NONE;
1218 } /* end GetThreadGroupInfo */
1219
1220
1221 // thread_count_ptr - pre-checked for NULL
1222 // threads_ptr - pre-checked for NULL
1223 // group_count_ptr - pre-checked for NULL
1224 // groups_ptr - pre-checked for NULL
1225 jvmtiError
1226 JvmtiEnv::GetThreadGroupChildren(jthreadGroup group, jint* thread_count_ptr, jthread** threads_ptr, jint* group_count_ptr, jthreadGroup** groups_ptr) {
1227 JavaThread* current_thread = JavaThread::current();
1228 oop group_obj = (oop) JNIHandles::resolve_external_guard(group);
1229 NULL_CHECK(group_obj, JVMTI_ERROR_INVALID_THREAD_GROUP);
1230
1231 Handle *thread_objs = NULL;
1232 Handle *group_objs = NULL;
|
949 ThreadPriority priority;
950 Handle thread_group;
951 Handle context_class_loader;
952 bool is_daemon;
953
954 { MutexLocker mu(Threads_lock);
955
956 name = Handle(current_thread, java_lang_Thread::name(thread_obj()));
957 priority = java_lang_Thread::priority(thread_obj());
958 thread_group = Handle(current_thread, java_lang_Thread::threadGroup(thread_obj()));
959 is_daemon = java_lang_Thread::is_daemon(thread_obj());
960
961 oop loader = java_lang_Thread::context_class_loader(thread_obj());
962 context_class_loader = Handle(current_thread, loader);
963 }
964 { const char *n;
965
966 if (name() != NULL) {
967 n = java_lang_String::as_utf8_string(name());
968 } else {
969 n = UNICODE::as_utf8((jchar*) NULL, 0);
970 }
971
972 info_ptr->name = (char *) jvmtiMalloc(strlen(n)+1);
973 if (info_ptr->name == NULL)
974 return JVMTI_ERROR_OUT_OF_MEMORY;
975
976 strcpy(info_ptr->name, n);
977 }
978 info_ptr->is_daemon = is_daemon;
979 info_ptr->priority = priority;
980
981 info_ptr->context_class_loader = (context_class_loader.is_null()) ? NULL :
982 jni_reference(context_class_loader);
983 info_ptr->thread_group = jni_reference(thread_group);
984
985 return JVMTI_ERROR_NONE;
986 } /* end GetThreadInfo */
987
988
989 // Threads_lock NOT held, java_thread not protected by lock
1170 HandleMark hm(current_thread);
1171 Handle system_thread_group(current_thread, Universe::system_thread_group());
1172 *groups_ptr[0] = jni_reference(system_thread_group);
1173 }
1174
1175 return JVMTI_ERROR_NONE;
1176 } /* end GetTopThreadGroups */
1177
1178
1179 // info_ptr - pre-checked for NULL
1180 jvmtiError
1181 JvmtiEnv::GetThreadGroupInfo(jthreadGroup group, jvmtiThreadGroupInfo* info_ptr) {
1182 ResourceMark rm;
1183 HandleMark hm;
1184
1185 JavaThread* current_thread = JavaThread::current();
1186
1187 Handle group_obj (current_thread, JNIHandles::resolve_external_guard(group));
1188 NULL_CHECK(group_obj(), JVMTI_ERROR_INVALID_THREAD_GROUP);
1189
1190 const char* name;
1191 Handle parent_group;
1192 bool is_daemon;
1193 ThreadPriority max_priority;
1194
1195 { MutexLocker mu(Threads_lock);
1196
1197 name = java_lang_ThreadGroup::name(group_obj());
1198 parent_group = Handle(current_thread, java_lang_ThreadGroup::parent(group_obj()));
1199 is_daemon = java_lang_ThreadGroup::is_daemon(group_obj());
1200 max_priority = java_lang_ThreadGroup::maxPriority(group_obj());
1201 }
1202
1203 info_ptr->is_daemon = is_daemon;
1204 info_ptr->max_priority = max_priority;
1205 info_ptr->parent = jni_reference(parent_group);
1206
1207 if (name != NULL) {
1208 info_ptr->name = (char*)jvmtiMalloc(strlen(name)+1);
1209 NULL_CHECK(info_ptr->name, JVMTI_ERROR_OUT_OF_MEMORY);
1210 strcpy(info_ptr->name, name);
1211 } else {
1212 info_ptr->name = NULL;
1213 }
1214
1215 return JVMTI_ERROR_NONE;
1216 } /* end GetThreadGroupInfo */
1217
1218
1219 // thread_count_ptr - pre-checked for NULL
1220 // threads_ptr - pre-checked for NULL
1221 // group_count_ptr - pre-checked for NULL
1222 // groups_ptr - pre-checked for NULL
1223 jvmtiError
1224 JvmtiEnv::GetThreadGroupChildren(jthreadGroup group, jint* thread_count_ptr, jthread** threads_ptr, jint* group_count_ptr, jthreadGroup** groups_ptr) {
1225 JavaThread* current_thread = JavaThread::current();
1226 oop group_obj = (oop) JNIHandles::resolve_external_guard(group);
1227 NULL_CHECK(group_obj, JVMTI_ERROR_INVALID_THREAD_GROUP);
1228
1229 Handle *thread_objs = NULL;
1230 Handle *group_objs = NULL;
|