< prev index next >

src/share/vm/prims/jvmtiEnv.cpp

Print this page




 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;


< prev index next >