< prev index next >

src/hotspot/share/prims/jvmtiEventController.cpp

Print this page
rev 47287 : Port 09.17.Thread_SMR_logging_update from JDK9 to JDK10
rev 47289 : eosterlund, stefank CR - refactor code into threadSMR.cpp and threadSMR.hpp
rev 47290 : eosterlund CR - need more inline fixes.
rev 47291 : eosterlund, stefank CR - more inline and style cleanups
rev 47292 : stefank, coleenp CR - refactor most JavaThreadIterator usage to use JavaThreadIteratorWithHandle.


 564   assert(Threads::number_of_threads() == 0 || JvmtiThreadState_lock->is_locked(), "sanity check");
 565 
 566   // event enabled for any thread in any environment
 567   julong was_any_env_thread_enabled = JvmtiEventController::_universal_global_event_enabled.get_bits();
 568   julong any_env_thread_enabled = 0;
 569 
 570   EC_TRACE(("[-] # recompute enabled - before " JULONG_FORMAT_X, was_any_env_thread_enabled));
 571 
 572   // compute non-thread-filters events.
 573   // This must be done separately from thread-filtered events, since some
 574   // events can occur before any threads exist.
 575   JvmtiEnvIterator it;
 576   for (JvmtiEnvBase* env = it.first(); env != NULL; env = it.next(env)) {
 577     any_env_thread_enabled |= recompute_env_enabled(env);
 578   }
 579 
 580   // We need to create any missing jvmti_thread_state if there are globally set thread
 581   // filtered events and there weren't last time
 582   if (    (any_env_thread_enabled & THREAD_FILTERED_EVENT_BITS) != 0 &&
 583       (was_any_env_thread_enabled & THREAD_FILTERED_EVENT_BITS) == 0) {
 584     ThreadsListHandle tlh;
 585     JavaThreadIterator jti(tlh.list());
 586     for (JavaThread *tp = jti.first(); tp != NULL; tp = jti.next()) {
 587       // state_for_while_locked() makes tp->is_exiting() check
 588       JvmtiThreadState::state_for_while_locked(tp);  // create the thread state if missing
 589     }
 590   }
 591 
 592   // compute and set thread-filtered events
 593   for (JvmtiThreadState *state = JvmtiThreadState::first(); state != NULL; state = state->next()) {
 594     any_env_thread_enabled |= recompute_thread_enabled(state);
 595   }
 596 
 597   // set universal state (across all envs and threads)
 598   jlong delta = any_env_thread_enabled ^ was_any_env_thread_enabled;
 599   if (delta != 0) {
 600     JvmtiExport::set_should_post_field_access((any_env_thread_enabled & FIELD_ACCESS_BIT) != 0);
 601     JvmtiExport::set_should_post_field_modification((any_env_thread_enabled & FIELD_MODIFICATION_BIT) != 0);
 602     JvmtiExport::set_should_post_class_load((any_env_thread_enabled & CLASS_LOAD_BIT) != 0);
 603     JvmtiExport::set_should_post_class_file_load_hook((any_env_thread_enabled & CLASS_FILE_LOAD_HOOK_BIT) != 0);
 604     JvmtiExport::set_should_post_native_method_bind((any_env_thread_enabled & NATIVE_METHOD_BIND_BIT) != 0);
 605     JvmtiExport::set_should_post_dynamic_code_generated((any_env_thread_enabled & DYNAMIC_CODE_GENERATED_BIT) != 0);
 606     JvmtiExport::set_should_post_data_dump((any_env_thread_enabled & DATA_DUMP_BIT) != 0);




 564   assert(Threads::number_of_threads() == 0 || JvmtiThreadState_lock->is_locked(), "sanity check");
 565 
 566   // event enabled for any thread in any environment
 567   julong was_any_env_thread_enabled = JvmtiEventController::_universal_global_event_enabled.get_bits();
 568   julong any_env_thread_enabled = 0;
 569 
 570   EC_TRACE(("[-] # recompute enabled - before " JULONG_FORMAT_X, was_any_env_thread_enabled));
 571 
 572   // compute non-thread-filters events.
 573   // This must be done separately from thread-filtered events, since some
 574   // events can occur before any threads exist.
 575   JvmtiEnvIterator it;
 576   for (JvmtiEnvBase* env = it.first(); env != NULL; env = it.next(env)) {
 577     any_env_thread_enabled |= recompute_env_enabled(env);
 578   }
 579 
 580   // We need to create any missing jvmti_thread_state if there are globally set thread
 581   // filtered events and there weren't last time
 582   if (    (any_env_thread_enabled & THREAD_FILTERED_EVENT_BITS) != 0 &&
 583       (was_any_env_thread_enabled & THREAD_FILTERED_EVENT_BITS) == 0) {
 584     for (JavaThreadIteratorWithHandle jtiwh; JavaThread *tp = jtiwh.next(); ) {


 585       // state_for_while_locked() makes tp->is_exiting() check
 586       JvmtiThreadState::state_for_while_locked(tp);  // create the thread state if missing
 587     }
 588   }
 589 
 590   // compute and set thread-filtered events
 591   for (JvmtiThreadState *state = JvmtiThreadState::first(); state != NULL; state = state->next()) {
 592     any_env_thread_enabled |= recompute_thread_enabled(state);
 593   }
 594 
 595   // set universal state (across all envs and threads)
 596   jlong delta = any_env_thread_enabled ^ was_any_env_thread_enabled;
 597   if (delta != 0) {
 598     JvmtiExport::set_should_post_field_access((any_env_thread_enabled & FIELD_ACCESS_BIT) != 0);
 599     JvmtiExport::set_should_post_field_modification((any_env_thread_enabled & FIELD_MODIFICATION_BIT) != 0);
 600     JvmtiExport::set_should_post_class_load((any_env_thread_enabled & CLASS_LOAD_BIT) != 0);
 601     JvmtiExport::set_should_post_class_file_load_hook((any_env_thread_enabled & CLASS_FILE_LOAD_HOOK_BIT) != 0);
 602     JvmtiExport::set_should_post_native_method_bind((any_env_thread_enabled & NATIVE_METHOD_BIND_BIT) != 0);
 603     JvmtiExport::set_should_post_dynamic_code_generated((any_env_thread_enabled & DYNAMIC_CODE_GENERATED_BIT) != 0);
 604     JvmtiExport::set_should_post_data_dump((any_env_thread_enabled & DATA_DUMP_BIT) != 0);


< prev index next >