hotspot/src/share/vm/runtime/thread.cpp
changeset 11480 1bf714e8adb4
parent 11174 fccee5238e70
child 11636 3c07b54482a5
equal deleted inserted replaced
11441:a89f443814cd 11480:1bf714e8adb4
    71 #include "runtime/vmThread.hpp"
    71 #include "runtime/vmThread.hpp"
    72 #include "runtime/vm_operations.hpp"
    72 #include "runtime/vm_operations.hpp"
    73 #include "services/attachListener.hpp"
    73 #include "services/attachListener.hpp"
    74 #include "services/management.hpp"
    74 #include "services/management.hpp"
    75 #include "services/threadService.hpp"
    75 #include "services/threadService.hpp"
       
    76 #include "trace/traceEventTypes.hpp"
    76 #include "utilities/defaultStream.hpp"
    77 #include "utilities/defaultStream.hpp"
    77 #include "utilities/dtrace.hpp"
    78 #include "utilities/dtrace.hpp"
    78 #include "utilities/events.hpp"
    79 #include "utilities/events.hpp"
    79 #include "utilities/preserveException.hpp"
    80 #include "utilities/preserveException.hpp"
    80 #ifdef TARGET_OS_FAMILY_linux
    81 #ifdef TARGET_OS_FAMILY_linux
   230   NOT_PRODUCT(_allow_safepoint_count = 0;)
   231   NOT_PRODUCT(_allow_safepoint_count = 0;)
   231   NOT_PRODUCT(_skip_gcalot = false;)
   232   NOT_PRODUCT(_skip_gcalot = false;)
   232   CHECK_UNHANDLED_OOPS_ONLY(_gc_locked_out_count = 0;)
   233   CHECK_UNHANDLED_OOPS_ONLY(_gc_locked_out_count = 0;)
   233   _jvmti_env_iteration_count = 0;
   234   _jvmti_env_iteration_count = 0;
   234   set_allocated_bytes(0);
   235   set_allocated_bytes(0);
       
   236   set_trace_buffer(NULL);
   235   _vm_operation_started_count = 0;
   237   _vm_operation_started_count = 0;
   236   _vm_operation_completed_count = 0;
   238   _vm_operation_completed_count = 0;
   237   _current_pending_monitor = NULL;
   239   _current_pending_monitor = NULL;
   238   _current_pending_monitor_is_from_java = true;
   240   _current_pending_monitor_is_from_java = true;
   239   _current_waiting_monitor = NULL;
   241   _current_waiting_monitor = NULL;
  1509   this->set_active_handles(JNIHandleBlock::allocate_block());
  1511   this->set_active_handles(JNIHandleBlock::allocate_block());
  1510 
  1512 
  1511   if (JvmtiExport::should_post_thread_life()) {
  1513   if (JvmtiExport::should_post_thread_life()) {
  1512     JvmtiExport::post_thread_start(this);
  1514     JvmtiExport::post_thread_start(this);
  1513   }
  1515   }
       
  1516 
       
  1517   EVENT_BEGIN(TraceEventThreadStart, event);
       
  1518   EVENT_COMMIT(event,
       
  1519      EVENT_SET(event, javalangthread, java_lang_Thread::thread_id(this->threadObj())));
  1514 
  1520 
  1515   // We call another function to do the rest so we are sure that the stack addresses used
  1521   // We call another function to do the rest so we are sure that the stack addresses used
  1516   // from there will be lower than the stack base just computed
  1522   // from there will be lower than the stack base just computed
  1517   thread_main_inner();
  1523   thread_main_inner();
  1518 
  1524 
  1639           CLEAR_PENDING_EXCEPTION;
  1645           CLEAR_PENDING_EXCEPTION;
  1640         }
  1646         }
  1641       }
  1647       }
  1642     }
  1648     }
  1643 
  1649 
       
  1650     // Called before the java thread exit since we want to read info
       
  1651     // from java_lang_Thread object
       
  1652     EVENT_BEGIN(TraceEventThreadEnd, event);
       
  1653     EVENT_COMMIT(event,
       
  1654         EVENT_SET(event, javalangthread, java_lang_Thread::thread_id(this->threadObj())));
       
  1655 
       
  1656     // Call after last event on thread
       
  1657     EVENT_THREAD_EXIT(this);
       
  1658 
  1644     // Call Thread.exit(). We try 3 times in case we got another Thread.stop during
  1659     // Call Thread.exit(). We try 3 times in case we got another Thread.stop during
  1645     // the execution of the method. If that is not enough, then we don't really care. Thread.stop
  1660     // the execution of the method. If that is not enough, then we don't really care. Thread.stop
  1646     // is deprecated anyhow.
  1661     // is deprecated anyhow.
  1647     { int count = 3;
  1662     { int count = 3;
  1648       while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) {
  1663       while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) {
  3184     delete main_thread;
  3199     delete main_thread;
  3185     *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
  3200     *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
  3186     return status;
  3201     return status;
  3187   }
  3202   }
  3188 
  3203 
       
  3204   // Must be run after init_ft which initializes ft_enabled
       
  3205   if (TRACE_INITIALIZE() != JNI_OK) {
       
  3206     vm_exit_during_initialization("Failed to initialize tracing backend");
       
  3207   }
       
  3208 
  3189   // Should be done after the heap is fully created
  3209   // Should be done after the heap is fully created
  3190   main_thread->cache_global_variables();
  3210   main_thread->cache_global_variables();
  3191 
  3211 
  3192   HandleMark hm;
  3212   HandleMark hm;
  3193 
  3213 
  3419   // Launch -Xrun agents
  3439   // Launch -Xrun agents
  3420   // Must be done in the JVMTI live phase so that for backward compatibility the JDWP
  3440   // Must be done in the JVMTI live phase so that for backward compatibility the JDWP
  3421   // back-end can launch with -Xdebug -Xrunjdwp.
  3441   // back-end can launch with -Xdebug -Xrunjdwp.
  3422   if (!EagerXrunInit && Arguments::init_libraries_at_startup()) {
  3442   if (!EagerXrunInit && Arguments::init_libraries_at_startup()) {
  3423     create_vm_init_libraries();
  3443     create_vm_init_libraries();
       
  3444   }
       
  3445 
       
  3446   if (!TRACE_START()) {
       
  3447     vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION));
  3424   }
  3448   }
  3425 
  3449 
  3426   // Notify JVMTI agents that VM initialization is complete - nop if no agents.
  3450   // Notify JVMTI agents that VM initialization is complete - nop if no agents.
  3427   JvmtiExport::post_vm_initialized();
  3451   JvmtiExport::post_vm_initialized();
  3428 
  3452