hotspot/src/share/vm/runtime/thread.cpp
changeset 18025 b7bcf7497f93
parent 17116 1d824e119bd2
child 18432 037577e626b1
child 22810 3a4dae5224c7
equal deleted inserted replaced
18024:f9e300086063 18025:b7bcf7497f93
    75 #include "runtime/vm_operations.hpp"
    75 #include "runtime/vm_operations.hpp"
    76 #include "services/attachListener.hpp"
    76 #include "services/attachListener.hpp"
    77 #include "services/management.hpp"
    77 #include "services/management.hpp"
    78 #include "services/memTracker.hpp"
    78 #include "services/memTracker.hpp"
    79 #include "services/threadService.hpp"
    79 #include "services/threadService.hpp"
    80 #include "trace/traceEventTypes.hpp"
    80 #include "trace/tracing.hpp"
       
    81 #include "trace/traceMacros.hpp"
    81 #include "utilities/defaultStream.hpp"
    82 #include "utilities/defaultStream.hpp"
    82 #include "utilities/dtrace.hpp"
    83 #include "utilities/dtrace.hpp"
    83 #include "utilities/events.hpp"
    84 #include "utilities/events.hpp"
    84 #include "utilities/preserveException.hpp"
    85 #include "utilities/preserveException.hpp"
    85 #include "utilities/macros.hpp"
    86 #include "utilities/macros.hpp"
   236   NOT_PRODUCT(_allow_safepoint_count = 0;)
   237   NOT_PRODUCT(_allow_safepoint_count = 0;)
   237   NOT_PRODUCT(_skip_gcalot = false;)
   238   NOT_PRODUCT(_skip_gcalot = false;)
   238   CHECK_UNHANDLED_OOPS_ONLY(_gc_locked_out_count = 0;)
   239   CHECK_UNHANDLED_OOPS_ONLY(_gc_locked_out_count = 0;)
   239   _jvmti_env_iteration_count = 0;
   240   _jvmti_env_iteration_count = 0;
   240   set_allocated_bytes(0);
   241   set_allocated_bytes(0);
   241   set_trace_buffer(NULL);
       
   242   _vm_operation_started_count = 0;
   242   _vm_operation_started_count = 0;
   243   _vm_operation_completed_count = 0;
   243   _vm_operation_completed_count = 0;
   244   _current_pending_monitor = NULL;
   244   _current_pending_monitor = NULL;
   245   _current_pending_monitor_is_from_java = true;
   245   _current_pending_monitor_is_from_java = true;
   246   _current_waiting_monitor = NULL;
   246   _current_waiting_monitor = NULL;
  1657 
  1657 
  1658   if (JvmtiExport::should_post_thread_life()) {
  1658   if (JvmtiExport::should_post_thread_life()) {
  1659     JvmtiExport::post_thread_start(this);
  1659     JvmtiExport::post_thread_start(this);
  1660   }
  1660   }
  1661 
  1661 
  1662   EVENT_BEGIN(TraceEventThreadStart, event);
  1662   EventThreadStart event;
  1663   EVENT_COMMIT(event,
  1663   if (event.should_commit()) {
  1664      EVENT_SET(event, javalangthread, java_lang_Thread::thread_id(this->threadObj())));
  1664      event.set_javalangthread(java_lang_Thread::thread_id(this->threadObj()));
       
  1665      event.commit();
       
  1666   }
  1665 
  1667 
  1666   // We call another function to do the rest so we are sure that the stack addresses used
  1668   // We call another function to do the rest so we are sure that the stack addresses used
  1667   // from there will be lower than the stack base just computed
  1669   // from there will be lower than the stack base just computed
  1668   thread_main_inner();
  1670   thread_main_inner();
  1669 
  1671 
  1789       }
  1791       }
  1790     }
  1792     }
  1791 
  1793 
  1792     // Called before the java thread exit since we want to read info
  1794     // Called before the java thread exit since we want to read info
  1793     // from java_lang_Thread object
  1795     // from java_lang_Thread object
  1794     EVENT_BEGIN(TraceEventThreadEnd, event);
  1796     EventThreadEnd event;
  1795     EVENT_COMMIT(event,
  1797     if (event.should_commit()) {
  1796         EVENT_SET(event, javalangthread, java_lang_Thread::thread_id(this->threadObj())));
  1798         event.set_javalangthread(java_lang_Thread::thread_id(this->threadObj()));
       
  1799         event.commit();
       
  1800     }
  1797 
  1801 
  1798     // Call after last event on thread
  1802     // Call after last event on thread
  1799     EVENT_THREAD_EXIT(this);
  1803     EVENT_THREAD_EXIT(this);
  1800 
  1804 
  1801     // Call Thread.exit(). We try 3 times in case we got another Thread.stop during
  1805     // Call Thread.exit(). We try 3 times in case we got another Thread.stop during
  3646   }
  3650   }
  3647 
  3651 
  3648   // Notify JVMTI agents that VM initialization is complete - nop if no agents.
  3652   // Notify JVMTI agents that VM initialization is complete - nop if no agents.
  3649   JvmtiExport::post_vm_initialized();
  3653   JvmtiExport::post_vm_initialized();
  3650 
  3654 
  3651   if (!TRACE_START()) {
  3655   if (TRACE_START() != JNI_OK) {
  3652     vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION));
  3656     vm_exit_during_initialization("Failed to start tracing backend.");
  3653   }
  3657   }
  3654 
  3658 
  3655   if (CleanChunkPoolAsync) {
  3659   if (CleanChunkPoolAsync) {
  3656     Chunk::start_chunk_pool_cleaner_task();
  3660     Chunk::start_chunk_pool_cleaner_task();
  3657   }
  3661   }