< prev index next >

src/hotspot/share/runtime/init.cpp

Print this page
*** 63,10 ***
--- 63,11 ---
  void codeCache_init();
  void VM_Version_init();
  void stubRoutines_init1();
  jint universe_init();          // depends on codeCache_init and stubRoutines_init
  // depends on universe_init, must be before interpreter_init (currently only on SPARC)
+ TSAN_ONLY(jint tsan_init();)
  void gc_barrier_stubs_init();
  void interpreter_init();       // before any methods loaded
  void invocationCounter_init(); // before any methods loaded
  void accessFlags_init();
  void templateTable_init();

*** 90,10 ***
--- 91,11 ---
  // Do not disable thread-local-storage, as it is important for some
  // JNI/JVM/JVMTI functions and signal handlers to work properly
  // during VM shutdown
  void perfMemory_exit();
  void ostream_exit();
+ TSAN_ONLY(void tsan_exit();)
  
  void vm_init_globals() {
    check_ThreadShadow();
    basic_types_init();
    eventlog_init();

*** 102,11 ***
    chunkpool_init();
    perfMemory_init();
    SuspendibleThreadSet_init();
  }
  
- 
  jint init_globals() {
    HandleMark hm;
    management_init();
    bytecodes_init();
    classLoader_init1();
--- 104,10 ---

*** 117,10 ***
--- 118,17 ---
    jint status = universe_init();  // dependent on codeCache_init and
                                    // stubRoutines_init1 and metaspace_init.
    if (status != JNI_OK)
      return status;
  
+   TSAN_RUNTIME_ONLY(
+     status = tsan_init();
+     if (status != JNI_OK) {
+       return status;
+     }
+   );
+ 
    gc_barrier_stubs_init();   // depends on universe_init, must be before interpreter_init
    interpreter_init();        // before any methods loaded
    invocationCounter_init();  // before any methods loaded
    accessFlags_init();
    templateTable_init();

*** 173,10 ***
--- 181,13 ---
  
  void exit_globals() {
    static bool destructorsCalled = false;
    if (!destructorsCalled) {
      destructorsCalled = true;
+ 
+     TSAN_RUNTIME_ONLY(tsan_exit());
+ 
      if (log_is_enabled(Info, monitorinflation)) {
        // The ObjectMonitor subsystem uses perf counters so
        // do this before perfMemory_exit().
        // ObjectSynchronizer::finish_deflate_idle_monitors()'s call
        // to audit_and_print_stats() is done at the Debug level.
< prev index next >