thread.cpp revision 8413:92457dfb91bd
1156956Sume/*
2156956Sume * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
3156956Sume * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4262722Smarcel *
5156956Sume * This code is free software; you can redistribute it and/or modify it
6156956Sume * under the terms of the GNU General Public License version 2 only, as
7156956Sume * published by the Free Software Foundation.
8156956Sume *
9156956Sume * This code is distributed in the hope that it will be useful, but WITHOUT
10157049Sdes * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11262722Smarcel * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#include "precompiled.hpp"
26#include "classfile/classLoader.hpp"
27#include "classfile/javaClasses.hpp"
28#include "classfile/systemDictionary.hpp"
29#include "classfile/vmSymbols.hpp"
30#include "code/codeCache.hpp"
31#include "code/scopeDesc.hpp"
32#include "compiler/compileBroker.hpp"
33#include "gc/shared/gcLocker.inline.hpp"
34#include "gc/shared/workgroup.hpp"
35#include "interpreter/interpreter.hpp"
36#include "interpreter/linkResolver.hpp"
37#include "interpreter/oopMapCache.hpp"
38#include "jvmtifiles/jvmtiEnv.hpp"
39#include "memory/metaspaceShared.hpp"
40#include "memory/oopFactory.hpp"
41#include "memory/universe.inline.hpp"
42#include "oops/instanceKlass.hpp"
43#include "oops/objArrayOop.hpp"
44#include "oops/oop.inline.hpp"
45#include "oops/symbol.hpp"
46#include "oops/verifyOopClosure.hpp"
47#include "prims/jvm_misc.hpp"
48#include "prims/jvmtiExport.hpp"
49#include "prims/jvmtiThreadState.hpp"
50#include "prims/privilegedStack.hpp"
51#include "runtime/arguments.hpp"
52#include "runtime/atomic.inline.hpp"
53#include "runtime/biasedLocking.hpp"
54#include "runtime/deoptimization.hpp"
55#include "runtime/fprofiler.hpp"
56#include "runtime/frame.inline.hpp"
57#include "runtime/init.hpp"
58#include "runtime/interfaceSupport.hpp"
59#include "runtime/java.hpp"
60#include "runtime/javaCalls.hpp"
61#include "runtime/jniPeriodicChecker.hpp"
62#include "runtime/memprofiler.hpp"
63#include "runtime/mutexLocker.hpp"
64#include "runtime/objectMonitor.hpp"
65#include "runtime/orderAccess.inline.hpp"
66#include "runtime/osThread.hpp"
67#include "runtime/safepoint.hpp"
68#include "runtime/sharedRuntime.hpp"
69#include "runtime/statSampler.hpp"
70#include "runtime/stubRoutines.hpp"
71#include "runtime/sweeper.hpp"
72#include "runtime/task.hpp"
73#include "runtime/thread.inline.hpp"
74#include "runtime/threadCritical.hpp"
75#include "runtime/threadLocalStorage.hpp"
76#include "runtime/vframe.hpp"
77#include "runtime/vframeArray.hpp"
78#include "runtime/vframe_hp.hpp"
79#include "runtime/vmThread.hpp"
80#include "runtime/vm_operations.hpp"
81#include "runtime/vm_version.hpp"
82#include "services/attachListener.hpp"
83#include "services/management.hpp"
84#include "services/memTracker.hpp"
85#include "services/threadService.hpp"
86#include "trace/traceMacros.hpp"
87#include "trace/tracing.hpp"
88#include "utilities/defaultStream.hpp"
89#include "utilities/dtrace.hpp"
90#include "utilities/events.hpp"
91#include "utilities/macros.hpp"
92#include "utilities/preserveException.hpp"
93#if INCLUDE_ALL_GCS
94#include "gc/cms/concurrentMarkSweepThread.hpp"
95#include "gc/g1/concurrentMarkThread.inline.hpp"
96#include "gc/parallel/pcTasks.hpp"
97#endif // INCLUDE_ALL_GCS
98#ifdef COMPILER1
99#include "c1/c1_Compiler.hpp"
100#endif
101#ifdef COMPILER2
102#include "opto/c2compiler.hpp"
103#include "opto/idealGraphPrinter.hpp"
104#endif
105#if INCLUDE_RTM_OPT
106#include "runtime/rtmLocking.hpp"
107#endif
108
109PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
110
111#ifdef DTRACE_ENABLED
112
113// Only bother with this argument setup if dtrace is available
114
115  #define HOTSPOT_THREAD_PROBE_start HOTSPOT_THREAD_START
116  #define HOTSPOT_THREAD_PROBE_stop HOTSPOT_THREAD_STOP
117
118  #define DTRACE_THREAD_PROBE(probe, javathread)                           \
119    {                                                                      \
120      ResourceMark rm(this);                                               \
121      int len = 0;                                                         \
122      const char* name = (javathread)->get_thread_name();                  \
123      len = strlen(name);                                                  \
124      HOTSPOT_THREAD_PROBE_##probe(/* probe = start, stop */               \
125        (char *) name, len,                                                \
126        java_lang_Thread::thread_id((javathread)->threadObj()),            \
127        (uintptr_t) (javathread)->osthread()->thread_id(),                 \
128        java_lang_Thread::is_daemon((javathread)->threadObj()));           \
129    }
130
131#else //  ndef DTRACE_ENABLED
132
133  #define DTRACE_THREAD_PROBE(probe, javathread)
134
135#endif // ndef DTRACE_ENABLED
136
137
138// Class hierarchy
139// - Thread
140//   - VMThread
141//   - WatcherThread
142//   - ConcurrentMarkSweepThread
143//   - JavaThread
144//     - CompilerThread
145
146// ======= Thread ========
147// Support for forcing alignment of thread objects for biased locking
148void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) {
149  if (UseBiasedLocking) {
150    const int alignment = markOopDesc::biased_lock_alignment;
151    size_t aligned_size = size + (alignment - sizeof(intptr_t));
152    void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC)
153                                          : AllocateHeap(aligned_size, flags, CURRENT_PC,
154                                                         AllocFailStrategy::RETURN_NULL);
155    void* aligned_addr     = (void*) align_size_up((intptr_t) real_malloc_addr, alignment);
156    assert(((uintptr_t) aligned_addr + (uintptr_t) size) <=
157           ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size),
158           "JavaThread alignment code overflowed allocated storage");
159    if (TraceBiasedLocking) {
160      if (aligned_addr != real_malloc_addr) {
161        tty->print_cr("Aligned thread " INTPTR_FORMAT " to " INTPTR_FORMAT,
162                      real_malloc_addr, aligned_addr);
163      }
164    }
165    ((Thread*) aligned_addr)->_real_malloc_address = real_malloc_addr;
166    return aligned_addr;
167  } else {
168    return throw_excpt? AllocateHeap(size, flags, CURRENT_PC)
169                       : AllocateHeap(size, flags, CURRENT_PC, AllocFailStrategy::RETURN_NULL);
170  }
171}
172
173void Thread::operator delete(void* p) {
174  if (UseBiasedLocking) {
175    void* real_malloc_addr = ((Thread*) p)->_real_malloc_address;
176    FreeHeap(real_malloc_addr);
177  } else {
178    FreeHeap(p);
179  }
180}
181
182
183// Base class for all threads: VMThread, WatcherThread, ConcurrentMarkSweepThread,
184// JavaThread
185
186
187Thread::Thread() {
188  // stack and get_thread
189  set_stack_base(NULL);
190  set_stack_size(0);
191  set_self_raw_id(0);
192  set_lgrp_id(-1);
193  DEBUG_ONLY(clear_suspendible_thread();)
194
195  // allocated data structures
196  set_osthread(NULL);
197  set_resource_area(new (mtThread)ResourceArea());
198  DEBUG_ONLY(_current_resource_mark = NULL;)
199  set_handle_area(new (mtThread) HandleArea(NULL));
200  set_metadata_handles(new (ResourceObj::C_HEAP, mtClass) GrowableArray<Metadata*>(30, true));
201  set_active_handles(NULL);
202  set_free_handle_block(NULL);
203  set_last_handle_mark(NULL);
204
205  // This initial value ==> never claimed.
206  _oops_do_parity = 0;
207
208  // the handle mark links itself to last_handle_mark
209  new HandleMark(this);
210
211  // plain initialization
212  debug_only(_owned_locks = NULL;)
213  debug_only(_allow_allocation_count = 0;)
214  NOT_PRODUCT(_allow_safepoint_count = 0;)
215  NOT_PRODUCT(_skip_gcalot = false;)
216  _jvmti_env_iteration_count = 0;
217  set_allocated_bytes(0);
218  _vm_operation_started_count = 0;
219  _vm_operation_completed_count = 0;
220  _current_pending_monitor = NULL;
221  _current_pending_monitor_is_from_java = true;
222  _current_waiting_monitor = NULL;
223  _num_nested_signal = 0;
224  omFreeList = NULL;
225  omFreeCount = 0;
226  omFreeProvision = 32;
227  omInUseList = NULL;
228  omInUseCount = 0;
229
230#ifdef ASSERT
231  _visited_for_critical_count = false;
232#endif
233
234  _SR_lock = new Monitor(Mutex::suspend_resume, "SR_lock", true,
235                         Monitor::_safepoint_check_sometimes);
236  _suspend_flags = 0;
237
238  // thread-specific hashCode stream generator state - Marsaglia shift-xor form
239  _hashStateX = os::random();
240  _hashStateY = 842502087;
241  _hashStateZ = 0x8767;    // (int)(3579807591LL & 0xffff) ;
242  _hashStateW = 273326509;
243
244  _OnTrap   = 0;
245  _schedctl = NULL;
246  _Stalled  = 0;
247  _TypeTag  = 0x2BAD;
248
249  // Many of the following fields are effectively final - immutable
250  // Note that nascent threads can't use the Native Monitor-Mutex
251  // construct until the _MutexEvent is initialized ...
252  // CONSIDER: instead of using a fixed set of purpose-dedicated ParkEvents
253  // we might instead use a stack of ParkEvents that we could provision on-demand.
254  // The stack would act as a cache to avoid calls to ParkEvent::Allocate()
255  // and ::Release()
256  _ParkEvent   = ParkEvent::Allocate(this);
257  _SleepEvent  = ParkEvent::Allocate(this);
258  _MutexEvent  = ParkEvent::Allocate(this);
259  _MuxEvent    = ParkEvent::Allocate(this);
260
261#ifdef CHECK_UNHANDLED_OOPS
262  if (CheckUnhandledOops) {
263    _unhandled_oops = new UnhandledOops(this);
264  }
265#endif // CHECK_UNHANDLED_OOPS
266#ifdef ASSERT
267  if (UseBiasedLocking) {
268    assert((((uintptr_t) this) & (markOopDesc::biased_lock_alignment - 1)) == 0, "forced alignment of thread object failed");
269    assert(this == _real_malloc_address ||
270           this == (void*) align_size_up((intptr_t) _real_malloc_address, markOopDesc::biased_lock_alignment),
271           "bug in forced alignment of thread objects");
272  }
273#endif // ASSERT
274}
275
276// Non-inlined version to be used where thread.inline.hpp shouldn't be included.
277Thread* Thread::current_noinline() {
278  return Thread::current();
279}
280
281void Thread::initialize_thread_local_storage() {
282  // Note: Make sure this method only calls
283  // non-blocking operations. Otherwise, it might not work
284  // with the thread-startup/safepoint interaction.
285
286  // During Java thread startup, safepoint code should allow this
287  // method to complete because it may need to allocate memory to
288  // store information for the new thread.
289
290  // initialize structure dependent on thread local storage
291  ThreadLocalStorage::set_thread(this);
292}
293
294void Thread::record_stack_base_and_size() {
295  set_stack_base(os::current_stack_base());
296  set_stack_size(os::current_stack_size());
297  if (is_Java_thread()) {
298    ((JavaThread*) this)->set_stack_overflow_limit();
299  }
300  // CR 7190089: on Solaris, primordial thread's stack is adjusted
301  // in initialize_thread(). Without the adjustment, stack size is
302  // incorrect if stack is set to unlimited (ulimit -s unlimited).
303  // So far, only Solaris has real implementation of initialize_thread().
304  //
305  // set up any platform-specific state.
306  os::initialize_thread(this);
307
308#if INCLUDE_NMT
309  // record thread's native stack, stack grows downward
310  address stack_low_addr = stack_base() - stack_size();
311  MemTracker::record_thread_stack(stack_low_addr, stack_size());
312#endif // INCLUDE_NMT
313}
314
315
316Thread::~Thread() {
317  // Reclaim the objectmonitors from the omFreeList of the moribund thread.
318  ObjectSynchronizer::omFlush(this);
319
320  EVENT_THREAD_DESTRUCT(this);
321
322  // stack_base can be NULL if the thread is never started or exited before
323  // record_stack_base_and_size called. Although, we would like to ensure
324  // that all started threads do call record_stack_base_and_size(), there is
325  // not proper way to enforce that.
326#if INCLUDE_NMT
327  if (_stack_base != NULL) {
328    address low_stack_addr = stack_base() - stack_size();
329    MemTracker::release_thread_stack(low_stack_addr, stack_size());
330#ifdef ASSERT
331    set_stack_base(NULL);
332#endif
333  }
334#endif // INCLUDE_NMT
335
336  // deallocate data structures
337  delete resource_area();
338  // since the handle marks are using the handle area, we have to deallocated the root
339  // handle mark before deallocating the thread's handle area,
340  assert(last_handle_mark() != NULL, "check we have an element");
341  delete last_handle_mark();
342  assert(last_handle_mark() == NULL, "check we have reached the end");
343
344  // It's possible we can encounter a null _ParkEvent, etc., in stillborn threads.
345  // We NULL out the fields for good hygiene.
346  ParkEvent::Release(_ParkEvent); _ParkEvent   = NULL;
347  ParkEvent::Release(_SleepEvent); _SleepEvent  = NULL;
348  ParkEvent::Release(_MutexEvent); _MutexEvent  = NULL;
349  ParkEvent::Release(_MuxEvent); _MuxEvent    = NULL;
350
351  delete handle_area();
352  delete metadata_handles();
353
354  // osthread() can be NULL, if creation of thread failed.
355  if (osthread() != NULL) os::free_thread(osthread());
356
357  delete _SR_lock;
358
359  // clear thread local storage if the Thread is deleting itself
360  if (this == Thread::current()) {
361    ThreadLocalStorage::set_thread(NULL);
362  } else {
363    // In the case where we're not the current thread, invalidate all the
364    // caches in case some code tries to get the current thread or the
365    // thread that was destroyed, and gets stale information.
366    ThreadLocalStorage::invalidate_all();
367  }
368  CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) delete unhandled_oops();)
369}
370
371// NOTE: dummy function for assertion purpose.
372void Thread::run() {
373  ShouldNotReachHere();
374}
375
376#ifdef ASSERT
377// Private method to check for dangling thread pointer
378void check_for_dangling_thread_pointer(Thread *thread) {
379  assert(!thread->is_Java_thread() || Thread::current() == thread || Threads_lock->owned_by_self(),
380         "possibility of dangling Thread pointer");
381}
382#endif
383
384ThreadPriority Thread::get_priority(const Thread* const thread) {
385  ThreadPriority priority;
386  // Can return an error!
387  (void)os::get_priority(thread, priority);
388  assert(MinPriority <= priority && priority <= MaxPriority, "non-Java priority found");
389  return priority;
390}
391
392void Thread::set_priority(Thread* thread, ThreadPriority priority) {
393  debug_only(check_for_dangling_thread_pointer(thread);)
394  // Can return an error!
395  (void)os::set_priority(thread, priority);
396}
397
398
399void Thread::start(Thread* thread) {
400  // Start is different from resume in that its safety is guaranteed by context or
401  // being called from a Java method synchronized on the Thread object.
402  if (!DisableStartThread) {
403    if (thread->is_Java_thread()) {
404      // Initialize the thread state to RUNNABLE before starting this thread.
405      // Can not set it after the thread started because we do not know the
406      // exact thread state at that time. It could be in MONITOR_WAIT or
407      // in SLEEPING or some other state.
408      java_lang_Thread::set_thread_status(((JavaThread*)thread)->threadObj(),
409                                          java_lang_Thread::RUNNABLE);
410    }
411    os::start_thread(thread);
412  }
413}
414
415// Enqueue a VM_Operation to do the job for us - sometime later
416void Thread::send_async_exception(oop java_thread, oop java_throwable) {
417  VM_ThreadStop* vm_stop = new VM_ThreadStop(java_thread, java_throwable);
418  VMThread::execute(vm_stop);
419}
420
421
422// Check if an external suspend request has completed (or has been
423// cancelled). Returns true if the thread is externally suspended and
424// false otherwise.
425//
426// The bits parameter returns information about the code path through
427// the routine. Useful for debugging:
428//
429// set in is_ext_suspend_completed():
430// 0x00000001 - routine was entered
431// 0x00000010 - routine return false at end
432// 0x00000100 - thread exited (return false)
433// 0x00000200 - suspend request cancelled (return false)
434// 0x00000400 - thread suspended (return true)
435// 0x00001000 - thread is in a suspend equivalent state (return true)
436// 0x00002000 - thread is native and walkable (return true)
437// 0x00004000 - thread is native_trans and walkable (needed retry)
438//
439// set in wait_for_ext_suspend_completion():
440// 0x00010000 - routine was entered
441// 0x00020000 - suspend request cancelled before loop (return false)
442// 0x00040000 - thread suspended before loop (return true)
443// 0x00080000 - suspend request cancelled in loop (return false)
444// 0x00100000 - thread suspended in loop (return true)
445// 0x00200000 - suspend not completed during retry loop (return false)
446
447// Helper class for tracing suspend wait debug bits.
448//
449// 0x00000100 indicates that the target thread exited before it could
450// self-suspend which is not a wait failure. 0x00000200, 0x00020000 and
451// 0x00080000 each indicate a cancelled suspend request so they don't
452// count as wait failures either.
453#define DEBUG_FALSE_BITS (0x00000010 | 0x00200000)
454
455class TraceSuspendDebugBits : public StackObj {
456 private:
457  JavaThread * jt;
458  bool         is_wait;
459  bool         called_by_wait;  // meaningful when !is_wait
460  uint32_t *   bits;
461
462 public:
463  TraceSuspendDebugBits(JavaThread *_jt, bool _is_wait, bool _called_by_wait,
464                        uint32_t *_bits) {
465    jt             = _jt;
466    is_wait        = _is_wait;
467    called_by_wait = _called_by_wait;
468    bits           = _bits;
469  }
470
471  ~TraceSuspendDebugBits() {
472    if (!is_wait) {
473#if 1
474      // By default, don't trace bits for is_ext_suspend_completed() calls.
475      // That trace is very chatty.
476      return;
477#else
478      if (!called_by_wait) {
479        // If tracing for is_ext_suspend_completed() is enabled, then only
480        // trace calls to it from wait_for_ext_suspend_completion()
481        return;
482      }
483#endif
484    }
485
486    if (AssertOnSuspendWaitFailure || TraceSuspendWaitFailures) {
487      if (bits != NULL && (*bits & DEBUG_FALSE_BITS) != 0) {
488        MutexLocker ml(Threads_lock);  // needed for get_thread_name()
489        ResourceMark rm;
490
491        tty->print_cr(
492                      "Failed wait_for_ext_suspend_completion(thread=%s, debug_bits=%x)",
493                      jt->get_thread_name(), *bits);
494
495        guarantee(!AssertOnSuspendWaitFailure, "external suspend wait failed");
496      }
497    }
498  }
499};
500#undef DEBUG_FALSE_BITS
501
502
503bool JavaThread::is_ext_suspend_completed(bool called_by_wait, int delay,
504                                          uint32_t *bits) {
505  TraceSuspendDebugBits tsdb(this, false /* !is_wait */, called_by_wait, bits);
506
507  bool did_trans_retry = false;  // only do thread_in_native_trans retry once
508  bool do_trans_retry;           // flag to force the retry
509
510  *bits |= 0x00000001;
511
512  do {
513    do_trans_retry = false;
514
515    if (is_exiting()) {
516      // Thread is in the process of exiting. This is always checked
517      // first to reduce the risk of dereferencing a freed JavaThread.
518      *bits |= 0x00000100;
519      return false;
520    }
521
522    if (!is_external_suspend()) {
523      // Suspend request is cancelled. This is always checked before
524      // is_ext_suspended() to reduce the risk of a rogue resume
525      // confusing the thread that made the suspend request.
526      *bits |= 0x00000200;
527      return false;
528    }
529
530    if (is_ext_suspended()) {
531      // thread is suspended
532      *bits |= 0x00000400;
533      return true;
534    }
535
536    // Now that we no longer do hard suspends of threads running
537    // native code, the target thread can be changing thread state
538    // while we are in this routine:
539    //
540    //   _thread_in_native -> _thread_in_native_trans -> _thread_blocked
541    //
542    // We save a copy of the thread state as observed at this moment
543    // and make our decision about suspend completeness based on the
544    // copy. This closes the race where the thread state is seen as
545    // _thread_in_native_trans in the if-thread_blocked check, but is
546    // seen as _thread_blocked in if-thread_in_native_trans check.
547    JavaThreadState save_state = thread_state();
548
549    if (save_state == _thread_blocked && is_suspend_equivalent()) {
550      // If the thread's state is _thread_blocked and this blocking
551      // condition is known to be equivalent to a suspend, then we can
552      // consider the thread to be externally suspended. This means that
553      // the code that sets _thread_blocked has been modified to do
554      // self-suspension if the blocking condition releases. We also
555      // used to check for CONDVAR_WAIT here, but that is now covered by
556      // the _thread_blocked with self-suspension check.
557      //
558      // Return true since we wouldn't be here unless there was still an
559      // external suspend request.
560      *bits |= 0x00001000;
561      return true;
562    } else if (save_state == _thread_in_native && frame_anchor()->walkable()) {
563      // Threads running native code will self-suspend on native==>VM/Java
564      // transitions. If its stack is walkable (should always be the case
565      // unless this function is called before the actual java_suspend()
566      // call), then the wait is done.
567      *bits |= 0x00002000;
568      return true;
569    } else if (!called_by_wait && !did_trans_retry &&
570               save_state == _thread_in_native_trans &&
571               frame_anchor()->walkable()) {
572      // The thread is transitioning from thread_in_native to another
573      // thread state. check_safepoint_and_suspend_for_native_trans()
574      // will force the thread to self-suspend. If it hasn't gotten
575      // there yet we may have caught the thread in-between the native
576      // code check above and the self-suspend. Lucky us. If we were
577      // called by wait_for_ext_suspend_completion(), then it
578      // will be doing the retries so we don't have to.
579      //
580      // Since we use the saved thread state in the if-statement above,
581      // there is a chance that the thread has already transitioned to
582      // _thread_blocked by the time we get here. In that case, we will
583      // make a single unnecessary pass through the logic below. This
584      // doesn't hurt anything since we still do the trans retry.
585
586      *bits |= 0x00004000;
587
588      // Once the thread leaves thread_in_native_trans for another
589      // thread state, we break out of this retry loop. We shouldn't
590      // need this flag to prevent us from getting back here, but
591      // sometimes paranoia is good.
592      did_trans_retry = true;
593
594      // We wait for the thread to transition to a more usable state.
595      for (int i = 1; i <= SuspendRetryCount; i++) {
596        // We used to do an "os::yield_all(i)" call here with the intention
597        // that yielding would increase on each retry. However, the parameter
598        // is ignored on Linux which means the yield didn't scale up. Waiting
599        // on the SR_lock below provides a much more predictable scale up for
600        // the delay. It also provides a simple/direct point to check for any
601        // safepoint requests from the VMThread
602
603        // temporarily drops SR_lock while doing wait with safepoint check
604        // (if we're a JavaThread - the WatcherThread can also call this)
605        // and increase delay with each retry
606        SR_lock()->wait(!Thread::current()->is_Java_thread(), i * delay);
607
608        // check the actual thread state instead of what we saved above
609        if (thread_state() != _thread_in_native_trans) {
610          // the thread has transitioned to another thread state so
611          // try all the checks (except this one) one more time.
612          do_trans_retry = true;
613          break;
614        }
615      } // end retry loop
616
617
618    }
619  } while (do_trans_retry);
620
621  *bits |= 0x00000010;
622  return false;
623}
624
625// Wait for an external suspend request to complete (or be cancelled).
626// Returns true if the thread is externally suspended and false otherwise.
627//
628bool JavaThread::wait_for_ext_suspend_completion(int retries, int delay,
629                                                 uint32_t *bits) {
630  TraceSuspendDebugBits tsdb(this, true /* is_wait */,
631                             false /* !called_by_wait */, bits);
632
633  // local flag copies to minimize SR_lock hold time
634  bool is_suspended;
635  bool pending;
636  uint32_t reset_bits;
637
638  // set a marker so is_ext_suspend_completed() knows we are the caller
639  *bits |= 0x00010000;
640
641  // We use reset_bits to reinitialize the bits value at the top of
642  // each retry loop. This allows the caller to make use of any
643  // unused bits for their own marking purposes.
644  reset_bits = *bits;
645
646  {
647    MutexLockerEx ml(SR_lock(), Mutex::_no_safepoint_check_flag);
648    is_suspended = is_ext_suspend_completed(true /* called_by_wait */,
649                                            delay, bits);
650    pending = is_external_suspend();
651  }
652  // must release SR_lock to allow suspension to complete
653
654  if (!pending) {
655    // A cancelled suspend request is the only false return from
656    // is_ext_suspend_completed() that keeps us from entering the
657    // retry loop.
658    *bits |= 0x00020000;
659    return false;
660  }
661
662  if (is_suspended) {
663    *bits |= 0x00040000;
664    return true;
665  }
666
667  for (int i = 1; i <= retries; i++) {
668    *bits = reset_bits;  // reinit to only track last retry
669
670    // We used to do an "os::yield_all(i)" call here with the intention
671    // that yielding would increase on each retry. However, the parameter
672    // is ignored on Linux which means the yield didn't scale up. Waiting
673    // on the SR_lock below provides a much more predictable scale up for
674    // the delay. It also provides a simple/direct point to check for any
675    // safepoint requests from the VMThread
676
677    {
678      MutexLocker ml(SR_lock());
679      // wait with safepoint check (if we're a JavaThread - the WatcherThread
680      // can also call this)  and increase delay with each retry
681      SR_lock()->wait(!Thread::current()->is_Java_thread(), i * delay);
682
683      is_suspended = is_ext_suspend_completed(true /* called_by_wait */,
684                                              delay, bits);
685
686      // It is possible for the external suspend request to be cancelled
687      // (by a resume) before the actual suspend operation is completed.
688      // Refresh our local copy to see if we still need to wait.
689      pending = is_external_suspend();
690    }
691
692    if (!pending) {
693      // A cancelled suspend request is the only false return from
694      // is_ext_suspend_completed() that keeps us from staying in the
695      // retry loop.
696      *bits |= 0x00080000;
697      return false;
698    }
699
700    if (is_suspended) {
701      *bits |= 0x00100000;
702      return true;
703    }
704  } // end retry loop
705
706  // thread did not suspend after all our retries
707  *bits |= 0x00200000;
708  return false;
709}
710
711#ifndef PRODUCT
712void JavaThread::record_jump(address target, address instr, const char* file,
713                             int line) {
714
715  // This should not need to be atomic as the only way for simultaneous
716  // updates is via interrupts. Even then this should be rare or non-existent
717  // and we don't care that much anyway.
718
719  int index = _jmp_ring_index;
720  _jmp_ring_index = (index + 1) & (jump_ring_buffer_size - 1);
721  _jmp_ring[index]._target = (intptr_t) target;
722  _jmp_ring[index]._instruction = (intptr_t) instr;
723  _jmp_ring[index]._file = file;
724  _jmp_ring[index]._line = line;
725}
726#endif // PRODUCT
727
728// Called by flat profiler
729// Callers have already called wait_for_ext_suspend_completion
730// The assertion for that is currently too complex to put here:
731bool JavaThread::profile_last_Java_frame(frame* _fr) {
732  bool gotframe = false;
733  // self suspension saves needed state.
734  if (has_last_Java_frame() && _anchor.walkable()) {
735    *_fr = pd_last_frame();
736    gotframe = true;
737  }
738  return gotframe;
739}
740
741void Thread::interrupt(Thread* thread) {
742  debug_only(check_for_dangling_thread_pointer(thread);)
743  os::interrupt(thread);
744}
745
746bool Thread::is_interrupted(Thread* thread, bool clear_interrupted) {
747  debug_only(check_for_dangling_thread_pointer(thread);)
748  // Note:  If clear_interrupted==false, this simply fetches and
749  // returns the value of the field osthread()->interrupted().
750  return os::is_interrupted(thread, clear_interrupted);
751}
752
753
754// GC Support
755bool Thread::claim_oops_do_par_case(int strong_roots_parity) {
756  jint thread_parity = _oops_do_parity;
757  if (thread_parity != strong_roots_parity) {
758    jint res = Atomic::cmpxchg(strong_roots_parity, &_oops_do_parity, thread_parity);
759    if (res == thread_parity) {
760      return true;
761    } else {
762      guarantee(res == strong_roots_parity, "Or else what?");
763      return false;
764    }
765  }
766  return false;
767}
768
769void Thread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
770  active_handles()->oops_do(f);
771  // Do oop for ThreadShadow
772  f->do_oop((oop*)&_pending_exception);
773  handle_area()->oops_do(f);
774}
775
776void Thread::nmethods_do(CodeBlobClosure* cf) {
777  // no nmethods in a generic thread...
778}
779
780void Thread::metadata_handles_do(void f(Metadata*)) {
781  // Only walk the Handles in Thread.
782  if (metadata_handles() != NULL) {
783    for (int i = 0; i< metadata_handles()->length(); i++) {
784      f(metadata_handles()->at(i));
785    }
786  }
787}
788
789void Thread::print_on(outputStream* st) const {
790  // get_priority assumes osthread initialized
791  if (osthread() != NULL) {
792    int os_prio;
793    if (os::get_native_priority(this, &os_prio) == OS_OK) {
794      st->print("os_prio=%d ", os_prio);
795    }
796    st->print("tid=" INTPTR_FORMAT " ", this);
797    ext().print_on(st);
798    osthread()->print_on(st);
799  }
800  debug_only(if (WizardMode) print_owned_locks_on(st);)
801}
802
803// Thread::print_on_error() is called by fatal error handler. Don't use
804// any lock or allocate memory.
805void Thread::print_on_error(outputStream* st, char* buf, int buflen) const {
806  if (is_VM_thread())                 st->print("VMThread");
807  else if (is_Compiler_thread())      st->print("CompilerThread");
808  else if (is_Java_thread())          st->print("JavaThread");
809  else if (is_GC_task_thread())       st->print("GCTaskThread");
810  else if (is_Watcher_thread())       st->print("WatcherThread");
811  else if (is_ConcurrentGC_thread())  st->print("ConcurrentGCThread");
812  else                                st->print("Thread");
813
814  st->print(" [stack: " PTR_FORMAT "," PTR_FORMAT "]",
815            _stack_base - _stack_size, _stack_base);
816
817  if (osthread()) {
818    st->print(" [id=%d]", osthread()->thread_id());
819  }
820}
821
822#ifdef ASSERT
823void Thread::print_owned_locks_on(outputStream* st) const {
824  Monitor *cur = _owned_locks;
825  if (cur == NULL) {
826    st->print(" (no locks) ");
827  } else {
828    st->print_cr(" Locks owned:");
829    while (cur) {
830      cur->print_on(st);
831      cur = cur->next();
832    }
833  }
834}
835
836static int ref_use_count  = 0;
837
838bool Thread::owns_locks_but_compiled_lock() const {
839  for (Monitor *cur = _owned_locks; cur; cur = cur->next()) {
840    if (cur != Compile_lock) return true;
841  }
842  return false;
843}
844
845
846#endif
847
848#ifndef PRODUCT
849
850// The flag: potential_vm_operation notifies if this particular safepoint state could potential
851// invoke the vm-thread (i.e., and oop allocation). In that case, we also have to make sure that
852// no threads which allow_vm_block's are held
853void Thread::check_for_valid_safepoint_state(bool potential_vm_operation) {
854  // Check if current thread is allowed to block at a safepoint
855  if (!(_allow_safepoint_count == 0)) {
856    fatal("Possible safepoint reached by thread that does not allow it");
857  }
858  if (is_Java_thread() && ((JavaThread*)this)->thread_state() != _thread_in_vm) {
859    fatal("LEAF method calling lock?");
860  }
861
862#ifdef ASSERT
863  if (potential_vm_operation && is_Java_thread()
864      && !Universe::is_bootstrapping()) {
865    // Make sure we do not hold any locks that the VM thread also uses.
866    // This could potentially lead to deadlocks
867    for (Monitor *cur = _owned_locks; cur; cur = cur->next()) {
868      // Threads_lock is special, since the safepoint synchronization will not start before this is
869      // acquired. Hence, a JavaThread cannot be holding it at a safepoint. So is VMOperationRequest_lock,
870      // since it is used to transfer control between JavaThreads and the VMThread
871      // Do not *exclude* any locks unless you are absolutely sure it is correct. Ask someone else first!
872      if ((cur->allow_vm_block() &&
873           cur != Threads_lock &&
874           cur != Compile_lock &&               // Temporary: should not be necessary when we get separate compilation
875           cur != VMOperationRequest_lock &&
876           cur != VMOperationQueue_lock) ||
877           cur->rank() == Mutex::special) {
878        fatal(err_msg("Thread holding lock at safepoint that vm can block on: %s", cur->name()));
879      }
880    }
881  }
882
883  if (GCALotAtAllSafepoints) {
884    // We could enter a safepoint here and thus have a gc
885    InterfaceSupport::check_gc_alot();
886  }
887#endif
888}
889#endif
890
891bool Thread::is_in_stack(address adr) const {
892  assert(Thread::current() == this, "is_in_stack can only be called from current thread");
893  address end = os::current_stack_pointer();
894  // Allow non Java threads to call this without stack_base
895  if (_stack_base == NULL) return true;
896  if (stack_base() >= adr && adr >= end) return true;
897
898  return false;
899}
900
901
902bool Thread::is_in_usable_stack(address adr) const {
903  size_t stack_guard_size = os::uses_stack_guard_pages() ? (StackYellowPages + StackRedPages) * os::vm_page_size() : 0;
904  size_t usable_stack_size = _stack_size - stack_guard_size;
905
906  return ((adr < stack_base()) && (adr >= stack_base() - usable_stack_size));
907}
908
909
910// We had to move these methods here, because vm threads get into ObjectSynchronizer::enter
911// However, there is a note in JavaThread::is_lock_owned() about the VM threads not being
912// used for compilation in the future. If that change is made, the need for these methods
913// should be revisited, and they should be removed if possible.
914
915bool Thread::is_lock_owned(address adr) const {
916  return on_local_stack(adr);
917}
918
919bool Thread::set_as_starting_thread() {
920  // NOTE: this must be called inside the main thread.
921  return os::create_main_thread((JavaThread*)this);
922}
923
924static void initialize_class(Symbol* class_name, TRAPS) {
925  Klass* klass = SystemDictionary::resolve_or_fail(class_name, true, CHECK);
926  InstanceKlass::cast(klass)->initialize(CHECK);
927}
928
929
930// Creates the initial ThreadGroup
931static Handle create_initial_thread_group(TRAPS) {
932  Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ThreadGroup(), true, CHECK_NH);
933  instanceKlassHandle klass (THREAD, k);
934
935  Handle system_instance = klass->allocate_instance_handle(CHECK_NH);
936  {
937    JavaValue result(T_VOID);
938    JavaCalls::call_special(&result,
939                            system_instance,
940                            klass,
941                            vmSymbols::object_initializer_name(),
942                            vmSymbols::void_method_signature(),
943                            CHECK_NH);
944  }
945  Universe::set_system_thread_group(system_instance());
946
947  Handle main_instance = klass->allocate_instance_handle(CHECK_NH);
948  {
949    JavaValue result(T_VOID);
950    Handle string = java_lang_String::create_from_str("main", CHECK_NH);
951    JavaCalls::call_special(&result,
952                            main_instance,
953                            klass,
954                            vmSymbols::object_initializer_name(),
955                            vmSymbols::threadgroup_string_void_signature(),
956                            system_instance,
957                            string,
958                            CHECK_NH);
959  }
960  return main_instance;
961}
962
963// Creates the initial Thread
964static oop create_initial_thread(Handle thread_group, JavaThread* thread,
965                                 TRAPS) {
966  Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL);
967  instanceKlassHandle klass (THREAD, k);
968  instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_NULL);
969
970  java_lang_Thread::set_thread(thread_oop(), thread);
971  java_lang_Thread::set_priority(thread_oop(), NormPriority);
972  thread->set_threadObj(thread_oop());
973
974  Handle string = java_lang_String::create_from_str("main", CHECK_NULL);
975
976  JavaValue result(T_VOID);
977  JavaCalls::call_special(&result, thread_oop,
978                          klass,
979                          vmSymbols::object_initializer_name(),
980                          vmSymbols::threadgroup_string_void_signature(),
981                          thread_group,
982                          string,
983                          CHECK_NULL);
984  return thread_oop();
985}
986
987static void call_initializeSystemClass(TRAPS) {
988  Klass* k =  SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
989  instanceKlassHandle klass (THREAD, k);
990
991  JavaValue result(T_VOID);
992  JavaCalls::call_static(&result, klass, vmSymbols::initializeSystemClass_name(),
993                         vmSymbols::void_method_signature(), CHECK);
994}
995
996char java_runtime_name[128] = "";
997char java_runtime_version[128] = "";
998
999// extract the JRE name from sun.misc.Version.java_runtime_name
1000static const char* get_java_runtime_name(TRAPS) {
1001  Klass* k = SystemDictionary::find(vmSymbols::sun_misc_Version(),
1002                                    Handle(), Handle(), CHECK_AND_CLEAR_NULL);
1003  fieldDescriptor fd;
1004  bool found = k != NULL &&
1005               InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(),
1006                                                        vmSymbols::string_signature(), &fd);
1007  if (found) {
1008    oop name_oop = k->java_mirror()->obj_field(fd.offset());
1009    if (name_oop == NULL) {
1010      return NULL;
1011    }
1012    const char* name = java_lang_String::as_utf8_string(name_oop,
1013                                                        java_runtime_name,
1014                                                        sizeof(java_runtime_name));
1015    return name;
1016  } else {
1017    return NULL;
1018  }
1019}
1020
1021// extract the JRE version from sun.misc.Version.java_runtime_version
1022static const char* get_java_runtime_version(TRAPS) {
1023  Klass* k = SystemDictionary::find(vmSymbols::sun_misc_Version(),
1024                                    Handle(), Handle(), CHECK_AND_CLEAR_NULL);
1025  fieldDescriptor fd;
1026  bool found = k != NULL &&
1027               InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_version_name(),
1028                                                        vmSymbols::string_signature(), &fd);
1029  if (found) {
1030    oop name_oop = k->java_mirror()->obj_field(fd.offset());
1031    if (name_oop == NULL) {
1032      return NULL;
1033    }
1034    const char* name = java_lang_String::as_utf8_string(name_oop,
1035                                                        java_runtime_version,
1036                                                        sizeof(java_runtime_version));
1037    return name;
1038  } else {
1039    return NULL;
1040  }
1041}
1042
1043// General purpose hook into Java code, run once when the VM is initialized.
1044// The Java library method itself may be changed independently from the VM.
1045static void call_postVMInitHook(TRAPS) {
1046  Klass* k = SystemDictionary::resolve_or_null(vmSymbols::sun_misc_PostVMInitHook(), THREAD);
1047  instanceKlassHandle klass (THREAD, k);
1048  if (klass.not_null()) {
1049    JavaValue result(T_VOID);
1050    JavaCalls::call_static(&result, klass, vmSymbols::run_method_name(),
1051                           vmSymbols::void_method_signature(),
1052                           CHECK);
1053  }
1054}
1055
1056static void reset_vm_info_property(TRAPS) {
1057  // the vm info string
1058  ResourceMark rm(THREAD);
1059  const char *vm_info = VM_Version::vm_info_string();
1060
1061  // java.lang.System class
1062  Klass* k =  SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
1063  instanceKlassHandle klass (THREAD, k);
1064
1065  // setProperty arguments
1066  Handle key_str    = java_lang_String::create_from_str("java.vm.info", CHECK);
1067  Handle value_str  = java_lang_String::create_from_str(vm_info, CHECK);
1068
1069  // return value
1070  JavaValue r(T_OBJECT);
1071
1072  // public static String setProperty(String key, String value);
1073  JavaCalls::call_static(&r,
1074                         klass,
1075                         vmSymbols::setProperty_name(),
1076                         vmSymbols::string_string_string_signature(),
1077                         key_str,
1078                         value_str,
1079                         CHECK);
1080}
1081
1082
1083void JavaThread::allocate_threadObj(Handle thread_group, const char* thread_name,
1084                                    bool daemon, TRAPS) {
1085  assert(thread_group.not_null(), "thread group should be specified");
1086  assert(threadObj() == NULL, "should only create Java thread object once");
1087
1088  Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK);
1089  instanceKlassHandle klass (THREAD, k);
1090  instanceHandle thread_oop = klass->allocate_instance_handle(CHECK);
1091
1092  java_lang_Thread::set_thread(thread_oop(), this);
1093  java_lang_Thread::set_priority(thread_oop(), NormPriority);
1094  set_threadObj(thread_oop());
1095
1096  JavaValue result(T_VOID);
1097  if (thread_name != NULL) {
1098    Handle name = java_lang_String::create_from_str(thread_name, CHECK);
1099    // Thread gets assigned specified name and null target
1100    JavaCalls::call_special(&result,
1101                            thread_oop,
1102                            klass,
1103                            vmSymbols::object_initializer_name(),
1104                            vmSymbols::threadgroup_string_void_signature(),
1105                            thread_group, // Argument 1
1106                            name,         // Argument 2
1107                            THREAD);
1108  } else {
1109    // Thread gets assigned name "Thread-nnn" and null target
1110    // (java.lang.Thread doesn't have a constructor taking only a ThreadGroup argument)
1111    JavaCalls::call_special(&result,
1112                            thread_oop,
1113                            klass,
1114                            vmSymbols::object_initializer_name(),
1115                            vmSymbols::threadgroup_runnable_void_signature(),
1116                            thread_group, // Argument 1
1117                            Handle(),     // Argument 2
1118                            THREAD);
1119  }
1120
1121
1122  if (daemon) {
1123    java_lang_Thread::set_daemon(thread_oop());
1124  }
1125
1126  if (HAS_PENDING_EXCEPTION) {
1127    return;
1128  }
1129
1130  KlassHandle group(THREAD, SystemDictionary::ThreadGroup_klass());
1131  Handle threadObj(THREAD, this->threadObj());
1132
1133  JavaCalls::call_special(&result,
1134                          thread_group,
1135                          group,
1136                          vmSymbols::add_method_name(),
1137                          vmSymbols::thread_void_signature(),
1138                          threadObj,          // Arg 1
1139                          THREAD);
1140}
1141
1142// NamedThread --  non-JavaThread subclasses with multiple
1143// uniquely named instances should derive from this.
1144NamedThread::NamedThread() : Thread() {
1145  _name = NULL;
1146  _processed_thread = NULL;
1147}
1148
1149NamedThread::~NamedThread() {
1150  if (_name != NULL) {
1151    FREE_C_HEAP_ARRAY(char, _name);
1152    _name = NULL;
1153  }
1154}
1155
1156void NamedThread::set_name(const char* format, ...) {
1157  guarantee(_name == NULL, "Only get to set name once.");
1158  _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread);
1159  guarantee(_name != NULL, "alloc failure");
1160  va_list ap;
1161  va_start(ap, format);
1162  jio_vsnprintf(_name, max_name_len, format, ap);
1163  va_end(ap);
1164}
1165
1166void NamedThread::initialize_named_thread() {
1167  set_native_thread_name(name());
1168}
1169
1170void NamedThread::print_on(outputStream* st) const {
1171  st->print("\"%s\" ", name());
1172  Thread::print_on(st);
1173  st->cr();
1174}
1175
1176
1177// ======= WatcherThread ========
1178
1179// The watcher thread exists to simulate timer interrupts.  It should
1180// be replaced by an abstraction over whatever native support for
1181// timer interrupts exists on the platform.
1182
1183WatcherThread* WatcherThread::_watcher_thread   = NULL;
1184bool WatcherThread::_startable = false;
1185volatile bool  WatcherThread::_should_terminate = false;
1186
1187WatcherThread::WatcherThread() : Thread(), _crash_protection(NULL) {
1188  assert(watcher_thread() == NULL, "we can only allocate one WatcherThread");
1189  if (os::create_thread(this, os::watcher_thread)) {
1190    _watcher_thread = this;
1191
1192    // Set the watcher thread to the highest OS priority which should not be
1193    // used, unless a Java thread with priority java.lang.Thread.MAX_PRIORITY
1194    // is created. The only normal thread using this priority is the reference
1195    // handler thread, which runs for very short intervals only.
1196    // If the VMThread's priority is not lower than the WatcherThread profiling
1197    // will be inaccurate.
1198    os::set_priority(this, MaxPriority);
1199    if (!DisableStartThread) {
1200      os::start_thread(this);
1201    }
1202  }
1203}
1204
1205int WatcherThread::sleep() const {
1206  // The WatcherThread does not participate in the safepoint protocol
1207  // for the PeriodicTask_lock because it is not a JavaThread.
1208  MutexLockerEx ml(PeriodicTask_lock, Mutex::_no_safepoint_check_flag);
1209
1210  if (_should_terminate) {
1211    // check for termination before we do any housekeeping or wait
1212    return 0;  // we did not sleep.
1213  }
1214
1215  // remaining will be zero if there are no tasks,
1216  // causing the WatcherThread to sleep until a task is
1217  // enrolled
1218  int remaining = PeriodicTask::time_to_wait();
1219  int time_slept = 0;
1220
1221  // we expect this to timeout - we only ever get unparked when
1222  // we should terminate or when a new task has been enrolled
1223  OSThreadWaitState osts(this->osthread(), false /* not Object.wait() */);
1224
1225  jlong time_before_loop = os::javaTimeNanos();
1226
1227  while (true) {
1228    bool timedout = PeriodicTask_lock->wait(Mutex::_no_safepoint_check_flag,
1229                                            remaining);
1230    jlong now = os::javaTimeNanos();
1231
1232    if (remaining == 0) {
1233      // if we didn't have any tasks we could have waited for a long time
1234      // consider the time_slept zero and reset time_before_loop
1235      time_slept = 0;
1236      time_before_loop = now;
1237    } else {
1238      // need to recalculate since we might have new tasks in _tasks
1239      time_slept = (int) ((now - time_before_loop) / 1000000);
1240    }
1241
1242    // Change to task list or spurious wakeup of some kind
1243    if (timedout || _should_terminate) {
1244      break;
1245    }
1246
1247    remaining = PeriodicTask::time_to_wait();
1248    if (remaining == 0) {
1249      // Last task was just disenrolled so loop around and wait until
1250      // another task gets enrolled
1251      continue;
1252    }
1253
1254    remaining -= time_slept;
1255    if (remaining <= 0) {
1256      break;
1257    }
1258  }
1259
1260  return time_slept;
1261}
1262
1263void WatcherThread::run() {
1264  assert(this == watcher_thread(), "just checking");
1265
1266  this->record_stack_base_and_size();
1267  this->initialize_thread_local_storage();
1268  this->set_native_thread_name(this->name());
1269  this->set_active_handles(JNIHandleBlock::allocate_block());
1270  while (true) {
1271    assert(watcher_thread() == Thread::current(), "thread consistency check");
1272    assert(watcher_thread() == this, "thread consistency check");
1273
1274    // Calculate how long it'll be until the next PeriodicTask work
1275    // should be done, and sleep that amount of time.
1276    int time_waited = sleep();
1277
1278    if (is_error_reported()) {
1279      // A fatal error has happened, the error handler(VMError::report_and_die)
1280      // should abort JVM after creating an error log file. However in some
1281      // rare cases, the error handler itself might deadlock. Here we try to
1282      // kill JVM if the fatal error handler fails to abort in 2 minutes.
1283      //
1284      // This code is in WatcherThread because WatcherThread wakes up
1285      // periodically so the fatal error handler doesn't need to do anything;
1286      // also because the WatcherThread is less likely to crash than other
1287      // threads.
1288
1289      for (;;) {
1290        if (!ShowMessageBoxOnError
1291            && (OnError == NULL || OnError[0] == '\0')
1292            && Arguments::abort_hook() == NULL) {
1293          os::sleep(this, 2 * 60 * 1000, false);
1294          fdStream err(defaultStream::output_fd());
1295          err.print_raw_cr("# [ timer expired, abort... ]");
1296          // skip atexit/vm_exit/vm_abort hooks
1297          os::die();
1298        }
1299
1300        // Wake up 5 seconds later, the fatal handler may reset OnError or
1301        // ShowMessageBoxOnError when it is ready to abort.
1302        os::sleep(this, 5 * 1000, false);
1303      }
1304    }
1305
1306    if (_should_terminate) {
1307      // check for termination before posting the next tick
1308      break;
1309    }
1310
1311    PeriodicTask::real_time_tick(time_waited);
1312  }
1313
1314  // Signal that it is terminated
1315  {
1316    MutexLockerEx mu(Terminator_lock, Mutex::_no_safepoint_check_flag);
1317    _watcher_thread = NULL;
1318    Terminator_lock->notify();
1319  }
1320
1321  // Thread destructor usually does this..
1322  ThreadLocalStorage::set_thread(NULL);
1323}
1324
1325void WatcherThread::start() {
1326  assert(PeriodicTask_lock->owned_by_self(), "PeriodicTask_lock required");
1327
1328  if (watcher_thread() == NULL && _startable) {
1329    _should_terminate = false;
1330    // Create the single instance of WatcherThread
1331    new WatcherThread();
1332  }
1333}
1334
1335void WatcherThread::make_startable() {
1336  assert(PeriodicTask_lock->owned_by_self(), "PeriodicTask_lock required");
1337  _startable = true;
1338}
1339
1340void WatcherThread::stop() {
1341  {
1342    // Follow normal safepoint aware lock enter protocol since the
1343    // WatcherThread is stopped by another JavaThread.
1344    MutexLocker ml(PeriodicTask_lock);
1345    _should_terminate = true;
1346
1347    WatcherThread* watcher = watcher_thread();
1348    if (watcher != NULL) {
1349      // unpark the WatcherThread so it can see that it should terminate
1350      watcher->unpark();
1351    }
1352  }
1353
1354  MutexLocker mu(Terminator_lock);
1355
1356  while (watcher_thread() != NULL) {
1357    // This wait should make safepoint checks, wait without a timeout,
1358    // and wait as a suspend-equivalent condition.
1359    //
1360    // Note: If the FlatProfiler is running, then this thread is waiting
1361    // for the WatcherThread to terminate and the WatcherThread, via the
1362    // FlatProfiler task, is waiting for the external suspend request on
1363    // this thread to complete. wait_for_ext_suspend_completion() will
1364    // eventually timeout, but that takes time. Making this wait a
1365    // suspend-equivalent condition solves that timeout problem.
1366    //
1367    Terminator_lock->wait(!Mutex::_no_safepoint_check_flag, 0,
1368                          Mutex::_as_suspend_equivalent_flag);
1369  }
1370}
1371
1372void WatcherThread::unpark() {
1373  assert(PeriodicTask_lock->owned_by_self(), "PeriodicTask_lock required");
1374  PeriodicTask_lock->notify();
1375}
1376
1377void WatcherThread::print_on(outputStream* st) const {
1378  st->print("\"%s\" ", name());
1379  Thread::print_on(st);
1380  st->cr();
1381}
1382
1383// ======= JavaThread ========
1384
1385// A JavaThread is a normal Java thread
1386
1387void JavaThread::initialize() {
1388  // Initialize fields
1389
1390  // Set the claimed par_id to UINT_MAX (ie not claiming any par_ids)
1391  set_claimed_par_id(UINT_MAX);
1392
1393  set_saved_exception_pc(NULL);
1394  set_threadObj(NULL);
1395  _anchor.clear();
1396  set_entry_point(NULL);
1397  set_jni_functions(jni_functions());
1398  set_callee_target(NULL);
1399  set_vm_result(NULL);
1400  set_vm_result_2(NULL);
1401  set_vframe_array_head(NULL);
1402  set_vframe_array_last(NULL);
1403  set_deferred_locals(NULL);
1404  set_deopt_mark(NULL);
1405  set_deopt_nmethod(NULL);
1406  clear_must_deopt_id();
1407  set_monitor_chunks(NULL);
1408  set_next(NULL);
1409  set_thread_state(_thread_new);
1410  _terminated = _not_terminated;
1411  _privileged_stack_top = NULL;
1412  _array_for_gc = NULL;
1413  _suspend_equivalent = false;
1414  _in_deopt_handler = 0;
1415  _doing_unsafe_access = false;
1416  _stack_guard_state = stack_guard_unused;
1417  (void)const_cast<oop&>(_exception_oop = oop(NULL));
1418  _exception_pc  = 0;
1419  _exception_handler_pc = 0;
1420  _is_method_handle_return = 0;
1421  _jvmti_thread_state= NULL;
1422  _should_post_on_exceptions_flag = JNI_FALSE;
1423  _jvmti_get_loaded_classes_closure = NULL;
1424  _interp_only_mode    = 0;
1425  _special_runtime_exit_condition = _no_async_condition;
1426  _pending_async_exception = NULL;
1427  _thread_stat = NULL;
1428  _thread_stat = new ThreadStatistics();
1429  _blocked_on_compilation = false;
1430  _jni_active_critical = 0;
1431  _pending_jni_exception_check_fn = NULL;
1432  _do_not_unlock_if_synchronized = false;
1433  _cached_monitor_info = NULL;
1434  _parker = Parker::Allocate(this);
1435
1436#ifndef PRODUCT
1437  _jmp_ring_index = 0;
1438  for (int ji = 0; ji < jump_ring_buffer_size; ji++) {
1439    record_jump(NULL, NULL, NULL, 0);
1440  }
1441#endif // PRODUCT
1442
1443  set_thread_profiler(NULL);
1444  if (FlatProfiler::is_active()) {
1445    // This is where we would decide to either give each thread it's own profiler
1446    // or use one global one from FlatProfiler,
1447    // or up to some count of the number of profiled threads, etc.
1448    ThreadProfiler* pp = new ThreadProfiler();
1449    pp->engage();
1450    set_thread_profiler(pp);
1451  }
1452
1453  // Setup safepoint state info for this thread
1454  ThreadSafepointState::create(this);
1455
1456  debug_only(_java_call_counter = 0);
1457
1458  // JVMTI PopFrame support
1459  _popframe_condition = popframe_inactive;
1460  _popframe_preserved_args = NULL;
1461  _popframe_preserved_args_size = 0;
1462  _frames_to_pop_failed_realloc = 0;
1463
1464  pd_initialize();
1465}
1466
1467#if INCLUDE_ALL_GCS
1468SATBMarkQueueSet JavaThread::_satb_mark_queue_set;
1469DirtyCardQueueSet JavaThread::_dirty_card_queue_set;
1470#endif // INCLUDE_ALL_GCS
1471
1472JavaThread::JavaThread(bool is_attaching_via_jni) :
1473                       Thread()
1474#if INCLUDE_ALL_GCS
1475                       , _satb_mark_queue(&_satb_mark_queue_set),
1476                       _dirty_card_queue(&_dirty_card_queue_set)
1477#endif // INCLUDE_ALL_GCS
1478{
1479  initialize();
1480  if (is_attaching_via_jni) {
1481    _jni_attach_state = _attaching_via_jni;
1482  } else {
1483    _jni_attach_state = _not_attaching_via_jni;
1484  }
1485  assert(deferred_card_mark().is_empty(), "Default MemRegion ctor");
1486}
1487
1488bool JavaThread::reguard_stack(address cur_sp) {
1489  if (_stack_guard_state != stack_guard_yellow_disabled) {
1490    return true; // Stack already guarded or guard pages not needed.
1491  }
1492
1493  if (register_stack_overflow()) {
1494    // For those architectures which have separate register and
1495    // memory stacks, we must check the register stack to see if
1496    // it has overflowed.
1497    return false;
1498  }
1499
1500  // Java code never executes within the yellow zone: the latter is only
1501  // there to provoke an exception during stack banging.  If java code
1502  // is executing there, either StackShadowPages should be larger, or
1503  // some exception code in c1, c2 or the interpreter isn't unwinding
1504  // when it should.
1505  guarantee(cur_sp > stack_yellow_zone_base(), "not enough space to reguard - increase StackShadowPages");
1506
1507  enable_stack_yellow_zone();
1508  return true;
1509}
1510
1511bool JavaThread::reguard_stack(void) {
1512  return reguard_stack(os::current_stack_pointer());
1513}
1514
1515
1516void JavaThread::block_if_vm_exited() {
1517  if (_terminated == _vm_exited) {
1518    // _vm_exited is set at safepoint, and Threads_lock is never released
1519    // we will block here forever
1520    Threads_lock->lock_without_safepoint_check();
1521    ShouldNotReachHere();
1522  }
1523}
1524
1525
1526// Remove this ifdef when C1 is ported to the compiler interface.
1527static void compiler_thread_entry(JavaThread* thread, TRAPS);
1528static void sweeper_thread_entry(JavaThread* thread, TRAPS);
1529
1530JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz) :
1531                       Thread()
1532#if INCLUDE_ALL_GCS
1533                       , _satb_mark_queue(&_satb_mark_queue_set),
1534                       _dirty_card_queue(&_dirty_card_queue_set)
1535#endif // INCLUDE_ALL_GCS
1536{
1537  initialize();
1538  _jni_attach_state = _not_attaching_via_jni;
1539  set_entry_point(entry_point);
1540  // Create the native thread itself.
1541  // %note runtime_23
1542  os::ThreadType thr_type = os::java_thread;
1543  thr_type = entry_point == &compiler_thread_entry ? os::compiler_thread :
1544                                                     os::java_thread;
1545  os::create_thread(this, thr_type, stack_sz);
1546  // The _osthread may be NULL here because we ran out of memory (too many threads active).
1547  // We need to throw and OutOfMemoryError - however we cannot do this here because the caller
1548  // may hold a lock and all locks must be unlocked before throwing the exception (throwing
1549  // the exception consists of creating the exception object & initializing it, initialization
1550  // will leave the VM via a JavaCall and then all locks must be unlocked).
1551  //
1552  // The thread is still suspended when we reach here. Thread must be explicit started
1553  // by creator! Furthermore, the thread must also explicitly be added to the Threads list
1554  // by calling Threads:add. The reason why this is not done here, is because the thread
1555  // object must be fully initialized (take a look at JVM_Start)
1556}
1557
1558JavaThread::~JavaThread() {
1559
1560  // JSR166 -- return the parker to the free list
1561  Parker::Release(_parker);
1562  _parker = NULL;
1563
1564  // Free any remaining  previous UnrollBlock
1565  vframeArray* old_array = vframe_array_last();
1566
1567  if (old_array != NULL) {
1568    Deoptimization::UnrollBlock* old_info = old_array->unroll_block();
1569    old_array->set_unroll_block(NULL);
1570    delete old_info;
1571    delete old_array;
1572  }
1573
1574  GrowableArray<jvmtiDeferredLocalVariableSet*>* deferred = deferred_locals();
1575  if (deferred != NULL) {
1576    // This can only happen if thread is destroyed before deoptimization occurs.
1577    assert(deferred->length() != 0, "empty array!");
1578    do {
1579      jvmtiDeferredLocalVariableSet* dlv = deferred->at(0);
1580      deferred->remove_at(0);
1581      // individual jvmtiDeferredLocalVariableSet are CHeapObj's
1582      delete dlv;
1583    } while (deferred->length() != 0);
1584    delete deferred;
1585  }
1586
1587  // All Java related clean up happens in exit
1588  ThreadSafepointState::destroy(this);
1589  if (_thread_profiler != NULL) delete _thread_profiler;
1590  if (_thread_stat != NULL) delete _thread_stat;
1591}
1592
1593
1594// The first routine called by a new Java thread
1595void JavaThread::run() {
1596  // initialize thread-local alloc buffer related fields
1597  this->initialize_tlab();
1598
1599  // used to test validity of stack trace backs
1600  this->record_base_of_stack_pointer();
1601
1602  // Record real stack base and size.
1603  this->record_stack_base_and_size();
1604
1605  // Initialize thread local storage; set before calling MutexLocker
1606  this->initialize_thread_local_storage();
1607
1608  this->create_stack_guard_pages();
1609
1610  this->cache_global_variables();
1611
1612  // Thread is now sufficient initialized to be handled by the safepoint code as being
1613  // in the VM. Change thread state from _thread_new to _thread_in_vm
1614  ThreadStateTransition::transition_and_fence(this, _thread_new, _thread_in_vm);
1615
1616  assert(JavaThread::current() == this, "sanity check");
1617  assert(!Thread::current()->owns_locks(), "sanity check");
1618
1619  DTRACE_THREAD_PROBE(start, this);
1620
1621  // This operation might block. We call that after all safepoint checks for a new thread has
1622  // been completed.
1623  this->set_active_handles(JNIHandleBlock::allocate_block());
1624
1625  if (JvmtiExport::should_post_thread_life()) {
1626    JvmtiExport::post_thread_start(this);
1627  }
1628
1629  EventThreadStart event;
1630  if (event.should_commit()) {
1631    event.set_javalangthread(java_lang_Thread::thread_id(this->threadObj()));
1632    event.commit();
1633  }
1634
1635  // We call another function to do the rest so we are sure that the stack addresses used
1636  // from there will be lower than the stack base just computed
1637  thread_main_inner();
1638
1639  // Note, thread is no longer valid at this point!
1640}
1641
1642
1643void JavaThread::thread_main_inner() {
1644  assert(JavaThread::current() == this, "sanity check");
1645  assert(this->threadObj() != NULL, "just checking");
1646
1647  // Execute thread entry point unless this thread has a pending exception
1648  // or has been stopped before starting.
1649  // Note: Due to JVM_StopThread we can have pending exceptions already!
1650  if (!this->has_pending_exception() &&
1651      !java_lang_Thread::is_stillborn(this->threadObj())) {
1652    {
1653      ResourceMark rm(this);
1654      this->set_native_thread_name(this->get_thread_name());
1655    }
1656    HandleMark hm(this);
1657    this->entry_point()(this, this);
1658  }
1659
1660  DTRACE_THREAD_PROBE(stop, this);
1661
1662  this->exit(false);
1663  delete this;
1664}
1665
1666
1667static void ensure_join(JavaThread* thread) {
1668  // We do not need to grap the Threads_lock, since we are operating on ourself.
1669  Handle threadObj(thread, thread->threadObj());
1670  assert(threadObj.not_null(), "java thread object must exist");
1671  ObjectLocker lock(threadObj, thread);
1672  // Ignore pending exception (ThreadDeath), since we are exiting anyway
1673  thread->clear_pending_exception();
1674  // Thread is exiting. So set thread_status field in  java.lang.Thread class to TERMINATED.
1675  java_lang_Thread::set_thread_status(threadObj(), java_lang_Thread::TERMINATED);
1676  // Clear the native thread instance - this makes isAlive return false and allows the join()
1677  // to complete once we've done the notify_all below
1678  java_lang_Thread::set_thread(threadObj(), NULL);
1679  lock.notify_all(thread);
1680  // Ignore pending exception (ThreadDeath), since we are exiting anyway
1681  thread->clear_pending_exception();
1682}
1683
1684
1685// For any new cleanup additions, please check to see if they need to be applied to
1686// cleanup_failed_attach_current_thread as well.
1687void JavaThread::exit(bool destroy_vm, ExitType exit_type) {
1688  assert(this == JavaThread::current(), "thread consistency check");
1689
1690  HandleMark hm(this);
1691  Handle uncaught_exception(this, this->pending_exception());
1692  this->clear_pending_exception();
1693  Handle threadObj(this, this->threadObj());
1694  assert(threadObj.not_null(), "Java thread object should be created");
1695
1696  if (get_thread_profiler() != NULL) {
1697    get_thread_profiler()->disengage();
1698    ResourceMark rm;
1699    get_thread_profiler()->print(get_thread_name());
1700  }
1701
1702
1703  // FIXIT: This code should be moved into else part, when reliable 1.2/1.3 check is in place
1704  {
1705    EXCEPTION_MARK;
1706
1707    CLEAR_PENDING_EXCEPTION;
1708  }
1709  if (!destroy_vm) {
1710    if (uncaught_exception.not_null()) {
1711      EXCEPTION_MARK;
1712      // Call method Thread.dispatchUncaughtException().
1713      KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass());
1714      JavaValue result(T_VOID);
1715      JavaCalls::call_virtual(&result,
1716                              threadObj, thread_klass,
1717                              vmSymbols::dispatchUncaughtException_name(),
1718                              vmSymbols::throwable_void_signature(),
1719                              uncaught_exception,
1720                              THREAD);
1721      if (HAS_PENDING_EXCEPTION) {
1722        ResourceMark rm(this);
1723        jio_fprintf(defaultStream::error_stream(),
1724                    "\nException: %s thrown from the UncaughtExceptionHandler"
1725                    " in thread \"%s\"\n",
1726                    pending_exception()->klass()->external_name(),
1727                    get_thread_name());
1728        CLEAR_PENDING_EXCEPTION;
1729      }
1730    }
1731
1732    // Called before the java thread exit since we want to read info
1733    // from java_lang_Thread object
1734    EventThreadEnd event;
1735    if (event.should_commit()) {
1736      event.set_javalangthread(java_lang_Thread::thread_id(this->threadObj()));
1737      event.commit();
1738    }
1739
1740    // Call after last event on thread
1741    EVENT_THREAD_EXIT(this);
1742
1743    // Call Thread.exit(). We try 3 times in case we got another Thread.stop during
1744    // the execution of the method. If that is not enough, then we don't really care. Thread.stop
1745    // is deprecated anyhow.
1746    if (!is_Compiler_thread()) {
1747      int count = 3;
1748      while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) {
1749        EXCEPTION_MARK;
1750        JavaValue result(T_VOID);
1751        KlassHandle thread_klass(THREAD, SystemDictionary::Thread_klass());
1752        JavaCalls::call_virtual(&result,
1753                                threadObj, thread_klass,
1754                                vmSymbols::exit_method_name(),
1755                                vmSymbols::void_method_signature(),
1756                                THREAD);
1757        CLEAR_PENDING_EXCEPTION;
1758      }
1759    }
1760    // notify JVMTI
1761    if (JvmtiExport::should_post_thread_life()) {
1762      JvmtiExport::post_thread_end(this);
1763    }
1764
1765    // We have notified the agents that we are exiting, before we go on,
1766    // we must check for a pending external suspend request and honor it
1767    // in order to not surprise the thread that made the suspend request.
1768    while (true) {
1769      {
1770        MutexLockerEx ml(SR_lock(), Mutex::_no_safepoint_check_flag);
1771        if (!is_external_suspend()) {
1772          set_terminated(_thread_exiting);
1773          ThreadService::current_thread_exiting(this);
1774          break;
1775        }
1776        // Implied else:
1777        // Things get a little tricky here. We have a pending external
1778        // suspend request, but we are holding the SR_lock so we
1779        // can't just self-suspend. So we temporarily drop the lock
1780        // and then self-suspend.
1781      }
1782
1783      ThreadBlockInVM tbivm(this);
1784      java_suspend_self();
1785
1786      // We're done with this suspend request, but we have to loop around
1787      // and check again. Eventually we will get SR_lock without a pending
1788      // external suspend request and will be able to mark ourselves as
1789      // exiting.
1790    }
1791    // no more external suspends are allowed at this point
1792  } else {
1793    // before_exit() has already posted JVMTI THREAD_END events
1794  }
1795
1796  // Notify waiters on thread object. This has to be done after exit() is called
1797  // on the thread (if the thread is the last thread in a daemon ThreadGroup the
1798  // group should have the destroyed bit set before waiters are notified).
1799  ensure_join(this);
1800  assert(!this->has_pending_exception(), "ensure_join should have cleared");
1801
1802  // 6282335 JNI DetachCurrentThread spec states that all Java monitors
1803  // held by this thread must be released.  A detach operation must only
1804  // get here if there are no Java frames on the stack.  Therefore, any
1805  // owned monitors at this point MUST be JNI-acquired monitors which are
1806  // pre-inflated and in the monitor cache.
1807  //
1808  // ensure_join() ignores IllegalThreadStateExceptions, and so does this.
1809  if (exit_type == jni_detach && JNIDetachReleasesMonitors) {
1810    assert(!this->has_last_Java_frame(), "detaching with Java frames?");
1811    ObjectSynchronizer::release_monitors_owned_by_thread(this);
1812    assert(!this->has_pending_exception(), "release_monitors should have cleared");
1813  }
1814
1815  // These things needs to be done while we are still a Java Thread. Make sure that thread
1816  // is in a consistent state, in case GC happens
1817  assert(_privileged_stack_top == NULL, "must be NULL when we get here");
1818
1819  if (active_handles() != NULL) {
1820    JNIHandleBlock* block = active_handles();
1821    set_active_handles(NULL);
1822    JNIHandleBlock::release_block(block);
1823  }
1824
1825  if (free_handle_block() != NULL) {
1826    JNIHandleBlock* block = free_handle_block();
1827    set_free_handle_block(NULL);
1828    JNIHandleBlock::release_block(block);
1829  }
1830
1831  // These have to be removed while this is still a valid thread.
1832  remove_stack_guard_pages();
1833
1834  if (UseTLAB) {
1835    tlab().make_parsable(true);  // retire TLAB
1836  }
1837
1838  if (JvmtiEnv::environments_might_exist()) {
1839    JvmtiExport::cleanup_thread(this);
1840  }
1841
1842  // We must flush any deferred card marks before removing a thread from
1843  // the list of active threads.
1844  Universe::heap()->flush_deferred_store_barrier(this);
1845  assert(deferred_card_mark().is_empty(), "Should have been flushed");
1846
1847#if INCLUDE_ALL_GCS
1848  // We must flush the G1-related buffers before removing a thread
1849  // from the list of active threads. We must do this after any deferred
1850  // card marks have been flushed (above) so that any entries that are
1851  // added to the thread's dirty card queue as a result are not lost.
1852  if (UseG1GC) {
1853    flush_barrier_queues();
1854  }
1855#endif // INCLUDE_ALL_GCS
1856
1857  // Remove from list of active threads list, and notify VM thread if we are the last non-daemon thread
1858  Threads::remove(this);
1859}
1860
1861#if INCLUDE_ALL_GCS
1862// Flush G1-related queues.
1863void JavaThread::flush_barrier_queues() {
1864  satb_mark_queue().flush();
1865  dirty_card_queue().flush();
1866}
1867
1868void JavaThread::initialize_queues() {
1869  assert(!SafepointSynchronize::is_at_safepoint(),
1870         "we should not be at a safepoint");
1871
1872  ObjPtrQueue& satb_queue = satb_mark_queue();
1873  SATBMarkQueueSet& satb_queue_set = satb_mark_queue_set();
1874  // The SATB queue should have been constructed with its active
1875  // field set to false.
1876  assert(!satb_queue.is_active(), "SATB queue should not be active");
1877  assert(satb_queue.is_empty(), "SATB queue should be empty");
1878  // If we are creating the thread during a marking cycle, we should
1879  // set the active field of the SATB queue to true.
1880  if (satb_queue_set.is_active()) {
1881    satb_queue.set_active(true);
1882  }
1883
1884  DirtyCardQueue& dirty_queue = dirty_card_queue();
1885  // The dirty card queue should have been constructed with its
1886  // active field set to true.
1887  assert(dirty_queue.is_active(), "dirty card queue should be active");
1888}
1889#endif // INCLUDE_ALL_GCS
1890
1891void JavaThread::cleanup_failed_attach_current_thread() {
1892  if (get_thread_profiler() != NULL) {
1893    get_thread_profiler()->disengage();
1894    ResourceMark rm;
1895    get_thread_profiler()->print(get_thread_name());
1896  }
1897
1898  if (active_handles() != NULL) {
1899    JNIHandleBlock* block = active_handles();
1900    set_active_handles(NULL);
1901    JNIHandleBlock::release_block(block);
1902  }
1903
1904  if (free_handle_block() != NULL) {
1905    JNIHandleBlock* block = free_handle_block();
1906    set_free_handle_block(NULL);
1907    JNIHandleBlock::release_block(block);
1908  }
1909
1910  // These have to be removed while this is still a valid thread.
1911  remove_stack_guard_pages();
1912
1913  if (UseTLAB) {
1914    tlab().make_parsable(true);  // retire TLAB, if any
1915  }
1916
1917#if INCLUDE_ALL_GCS
1918  if (UseG1GC) {
1919    flush_barrier_queues();
1920  }
1921#endif // INCLUDE_ALL_GCS
1922
1923  Threads::remove(this);
1924  delete this;
1925}
1926
1927
1928
1929
1930JavaThread* JavaThread::active() {
1931  Thread* thread = ThreadLocalStorage::thread();
1932  assert(thread != NULL, "just checking");
1933  if (thread->is_Java_thread()) {
1934    return (JavaThread*) thread;
1935  } else {
1936    assert(thread->is_VM_thread(), "this must be a vm thread");
1937    VM_Operation* op = ((VMThread*) thread)->vm_operation();
1938    JavaThread *ret=op == NULL ? NULL : (JavaThread *)op->calling_thread();
1939    assert(ret->is_Java_thread(), "must be a Java thread");
1940    return ret;
1941  }
1942}
1943
1944bool JavaThread::is_lock_owned(address adr) const {
1945  if (Thread::is_lock_owned(adr)) return true;
1946
1947  for (MonitorChunk* chunk = monitor_chunks(); chunk != NULL; chunk = chunk->next()) {
1948    if (chunk->contains(adr)) return true;
1949  }
1950
1951  return false;
1952}
1953
1954
1955void JavaThread::add_monitor_chunk(MonitorChunk* chunk) {
1956  chunk->set_next(monitor_chunks());
1957  set_monitor_chunks(chunk);
1958}
1959
1960void JavaThread::remove_monitor_chunk(MonitorChunk* chunk) {
1961  guarantee(monitor_chunks() != NULL, "must be non empty");
1962  if (monitor_chunks() == chunk) {
1963    set_monitor_chunks(chunk->next());
1964  } else {
1965    MonitorChunk* prev = monitor_chunks();
1966    while (prev->next() != chunk) prev = prev->next();
1967    prev->set_next(chunk->next());
1968  }
1969}
1970
1971// JVM support.
1972
1973// Note: this function shouldn't block if it's called in
1974// _thread_in_native_trans state (such as from
1975// check_special_condition_for_native_trans()).
1976void JavaThread::check_and_handle_async_exceptions(bool check_unsafe_error) {
1977
1978  if (has_last_Java_frame() && has_async_condition()) {
1979    // If we are at a polling page safepoint (not a poll return)
1980    // then we must defer async exception because live registers
1981    // will be clobbered by the exception path. Poll return is
1982    // ok because the call we a returning from already collides
1983    // with exception handling registers and so there is no issue.
1984    // (The exception handling path kills call result registers but
1985    //  this is ok since the exception kills the result anyway).
1986
1987    if (is_at_poll_safepoint()) {
1988      // if the code we are returning to has deoptimized we must defer
1989      // the exception otherwise live registers get clobbered on the
1990      // exception path before deoptimization is able to retrieve them.
1991      //
1992      RegisterMap map(this, false);
1993      frame caller_fr = last_frame().sender(&map);
1994      assert(caller_fr.is_compiled_frame(), "what?");
1995      if (caller_fr.is_deoptimized_frame()) {
1996        if (TraceExceptions) {
1997          ResourceMark rm;
1998          tty->print_cr("deferred async exception at compiled safepoint");
1999        }
2000        return;
2001      }
2002    }
2003  }
2004
2005  JavaThread::AsyncRequests condition = clear_special_runtime_exit_condition();
2006  if (condition == _no_async_condition) {
2007    // Conditions have changed since has_special_runtime_exit_condition()
2008    // was called:
2009    // - if we were here only because of an external suspend request,
2010    //   then that was taken care of above (or cancelled) so we are done
2011    // - if we were here because of another async request, then it has
2012    //   been cleared between the has_special_runtime_exit_condition()
2013    //   and now so again we are done
2014    return;
2015  }
2016
2017  // Check for pending async. exception
2018  if (_pending_async_exception != NULL) {
2019    // Only overwrite an already pending exception, if it is not a threadDeath.
2020    if (!has_pending_exception() || !pending_exception()->is_a(SystemDictionary::ThreadDeath_klass())) {
2021
2022      // We cannot call Exceptions::_throw(...) here because we cannot block
2023      set_pending_exception(_pending_async_exception, __FILE__, __LINE__);
2024
2025      if (TraceExceptions) {
2026        ResourceMark rm;
2027        tty->print("Async. exception installed at runtime exit (" INTPTR_FORMAT ")", this);
2028        if (has_last_Java_frame()) {
2029          frame f = last_frame();
2030          tty->print(" (pc: " INTPTR_FORMAT " sp: " INTPTR_FORMAT " )", f.pc(), f.sp());
2031        }
2032        tty->print_cr(" of type: %s", InstanceKlass::cast(_pending_async_exception->klass())->external_name());
2033      }
2034      _pending_async_exception = NULL;
2035      clear_has_async_exception();
2036    }
2037  }
2038
2039  if (check_unsafe_error &&
2040      condition == _async_unsafe_access_error && !has_pending_exception()) {
2041    condition = _no_async_condition;  // done
2042    switch (thread_state()) {
2043    case _thread_in_vm: {
2044      JavaThread* THREAD = this;
2045      THROW_MSG(vmSymbols::java_lang_InternalError(), "a fault occurred in an unsafe memory access operation");
2046    }
2047    case _thread_in_native: {
2048      ThreadInVMfromNative tiv(this);
2049      JavaThread* THREAD = this;
2050      THROW_MSG(vmSymbols::java_lang_InternalError(), "a fault occurred in an unsafe memory access operation");
2051    }
2052    case _thread_in_Java: {
2053      ThreadInVMfromJava tiv(this);
2054      JavaThread* THREAD = this;
2055      THROW_MSG(vmSymbols::java_lang_InternalError(), "a fault occurred in a recent unsafe memory access operation in compiled Java code");
2056    }
2057    default:
2058      ShouldNotReachHere();
2059    }
2060  }
2061
2062  assert(condition == _no_async_condition || has_pending_exception() ||
2063         (!check_unsafe_error && condition == _async_unsafe_access_error),
2064         "must have handled the async condition, if no exception");
2065}
2066
2067void JavaThread::handle_special_runtime_exit_condition(bool check_asyncs) {
2068  //
2069  // Check for pending external suspend. Internal suspend requests do
2070  // not use handle_special_runtime_exit_condition().
2071  // If JNIEnv proxies are allowed, don't self-suspend if the target
2072  // thread is not the current thread. In older versions of jdbx, jdbx
2073  // threads could call into the VM with another thread's JNIEnv so we
2074  // can be here operating on behalf of a suspended thread (4432884).
2075  bool do_self_suspend = is_external_suspend_with_lock();
2076  if (do_self_suspend && (!AllowJNIEnvProxy || this == JavaThread::current())) {
2077    //
2078    // Because thread is external suspended the safepoint code will count
2079    // thread as at a safepoint. This can be odd because we can be here
2080    // as _thread_in_Java which would normally transition to _thread_blocked
2081    // at a safepoint. We would like to mark the thread as _thread_blocked
2082    // before calling java_suspend_self like all other callers of it but
2083    // we must then observe proper safepoint protocol. (We can't leave
2084    // _thread_blocked with a safepoint in progress). However we can be
2085    // here as _thread_in_native_trans so we can't use a normal transition
2086    // constructor/destructor pair because they assert on that type of
2087    // transition. We could do something like:
2088    //
2089    // JavaThreadState state = thread_state();
2090    // set_thread_state(_thread_in_vm);
2091    // {
2092    //   ThreadBlockInVM tbivm(this);
2093    //   java_suspend_self()
2094    // }
2095    // set_thread_state(_thread_in_vm_trans);
2096    // if (safepoint) block;
2097    // set_thread_state(state);
2098    //
2099    // but that is pretty messy. Instead we just go with the way the
2100    // code has worked before and note that this is the only path to
2101    // java_suspend_self that doesn't put the thread in _thread_blocked
2102    // mode.
2103
2104    frame_anchor()->make_walkable(this);
2105    java_suspend_self();
2106
2107    // We might be here for reasons in addition to the self-suspend request
2108    // so check for other async requests.
2109  }
2110
2111  if (check_asyncs) {
2112    check_and_handle_async_exceptions();
2113  }
2114}
2115
2116void JavaThread::send_thread_stop(oop java_throwable)  {
2117  assert(Thread::current()->is_VM_thread(), "should be in the vm thread");
2118  assert(Threads_lock->is_locked(), "Threads_lock should be locked by safepoint code");
2119  assert(SafepointSynchronize::is_at_safepoint(), "all threads are stopped");
2120
2121  // Do not throw asynchronous exceptions against the compiler thread
2122  // (the compiler thread should not be a Java thread -- fix in 1.4.2)
2123  if (is_Compiler_thread()) return;
2124
2125  {
2126    // Actually throw the Throwable against the target Thread - however
2127    // only if there is no thread death exception installed already.
2128    if (_pending_async_exception == NULL || !_pending_async_exception->is_a(SystemDictionary::ThreadDeath_klass())) {
2129      // If the topmost frame is a runtime stub, then we are calling into
2130      // OptoRuntime from compiled code. Some runtime stubs (new, monitor_exit..)
2131      // must deoptimize the caller before continuing, as the compiled  exception handler table
2132      // may not be valid
2133      if (has_last_Java_frame()) {
2134        frame f = last_frame();
2135        if (f.is_runtime_frame() || f.is_safepoint_blob_frame()) {
2136          // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2137          RegisterMap reg_map(this, UseBiasedLocking);
2138          frame compiled_frame = f.sender(&reg_map);
2139          if (!StressCompiledExceptionHandlers && compiled_frame.can_be_deoptimized()) {
2140            Deoptimization::deoptimize(this, compiled_frame, &reg_map);
2141          }
2142        }
2143      }
2144
2145      // Set async. pending exception in thread.
2146      set_pending_async_exception(java_throwable);
2147
2148      if (TraceExceptions) {
2149        ResourceMark rm;
2150        tty->print_cr("Pending Async. exception installed of type: %s", InstanceKlass::cast(_pending_async_exception->klass())->external_name());
2151      }
2152      // for AbortVMOnException flag
2153      NOT_PRODUCT(Exceptions::debug_check_abort(InstanceKlass::cast(_pending_async_exception->klass())->external_name()));
2154    }
2155  }
2156
2157
2158  // Interrupt thread so it will wake up from a potential wait()
2159  Thread::interrupt(this);
2160}
2161
2162// External suspension mechanism.
2163//
2164// Tell the VM to suspend a thread when ever it knows that it does not hold on
2165// to any VM_locks and it is at a transition
2166// Self-suspension will happen on the transition out of the vm.
2167// Catch "this" coming in from JNIEnv pointers when the thread has been freed
2168//
2169// Guarantees on return:
2170//   + Target thread will not execute any new bytecode (that's why we need to
2171//     force a safepoint)
2172//   + Target thread will not enter any new monitors
2173//
2174void JavaThread::java_suspend() {
2175  { MutexLocker mu(Threads_lock);
2176    if (!Threads::includes(this) || is_exiting() || this->threadObj() == NULL) {
2177      return;
2178    }
2179  }
2180
2181  { MutexLockerEx ml(SR_lock(), Mutex::_no_safepoint_check_flag);
2182    if (!is_external_suspend()) {
2183      // a racing resume has cancelled us; bail out now
2184      return;
2185    }
2186
2187    // suspend is done
2188    uint32_t debug_bits = 0;
2189    // Warning: is_ext_suspend_completed() may temporarily drop the
2190    // SR_lock to allow the thread to reach a stable thread state if
2191    // it is currently in a transient thread state.
2192    if (is_ext_suspend_completed(false /* !called_by_wait */,
2193                                 SuspendRetryDelay, &debug_bits)) {
2194      return;
2195    }
2196  }
2197
2198  VM_ForceSafepoint vm_suspend;
2199  VMThread::execute(&vm_suspend);
2200}
2201
2202// Part II of external suspension.
2203// A JavaThread self suspends when it detects a pending external suspend
2204// request. This is usually on transitions. It is also done in places
2205// where continuing to the next transition would surprise the caller,
2206// e.g., monitor entry.
2207//
2208// Returns the number of times that the thread self-suspended.
2209//
2210// Note: DO NOT call java_suspend_self() when you just want to block current
2211//       thread. java_suspend_self() is the second stage of cooperative
2212//       suspension for external suspend requests and should only be used
2213//       to complete an external suspend request.
2214//
2215int JavaThread::java_suspend_self() {
2216  int ret = 0;
2217
2218  // we are in the process of exiting so don't suspend
2219  if (is_exiting()) {
2220    clear_external_suspend();
2221    return ret;
2222  }
2223
2224  assert(_anchor.walkable() ||
2225         (is_Java_thread() && !((JavaThread*)this)->has_last_Java_frame()),
2226         "must have walkable stack");
2227
2228  MutexLockerEx ml(SR_lock(), Mutex::_no_safepoint_check_flag);
2229
2230  assert(!this->is_ext_suspended(),
2231         "a thread trying to self-suspend should not already be suspended");
2232
2233  if (this->is_suspend_equivalent()) {
2234    // If we are self-suspending as a result of the lifting of a
2235    // suspend equivalent condition, then the suspend_equivalent
2236    // flag is not cleared until we set the ext_suspended flag so
2237    // that wait_for_ext_suspend_completion() returns consistent
2238    // results.
2239    this->clear_suspend_equivalent();
2240  }
2241
2242  // A racing resume may have cancelled us before we grabbed SR_lock
2243  // above. Or another external suspend request could be waiting for us
2244  // by the time we return from SR_lock()->wait(). The thread
2245  // that requested the suspension may already be trying to walk our
2246  // stack and if we return now, we can change the stack out from under
2247  // it. This would be a "bad thing (TM)" and cause the stack walker
2248  // to crash. We stay self-suspended until there are no more pending
2249  // external suspend requests.
2250  while (is_external_suspend()) {
2251    ret++;
2252    this->set_ext_suspended();
2253
2254    // _ext_suspended flag is cleared by java_resume()
2255    while (is_ext_suspended()) {
2256      this->SR_lock()->wait(Mutex::_no_safepoint_check_flag);
2257    }
2258  }
2259
2260  return ret;
2261}
2262
2263#ifdef ASSERT
2264// verify the JavaThread has not yet been published in the Threads::list, and
2265// hence doesn't need protection from concurrent access at this stage
2266void JavaThread::verify_not_published() {
2267  if (!Threads_lock->owned_by_self()) {
2268    MutexLockerEx ml(Threads_lock,  Mutex::_no_safepoint_check_flag);
2269    assert(!Threads::includes(this),
2270           "java thread shouldn't have been published yet!");
2271  } else {
2272    assert(!Threads::includes(this),
2273           "java thread shouldn't have been published yet!");
2274  }
2275}
2276#endif
2277
2278// Slow path when the native==>VM/Java barriers detect a safepoint is in
2279// progress or when _suspend_flags is non-zero.
2280// Current thread needs to self-suspend if there is a suspend request and/or
2281// block if a safepoint is in progress.
2282// Async exception ISN'T checked.
2283// Note only the ThreadInVMfromNative transition can call this function
2284// directly and when thread state is _thread_in_native_trans
2285void JavaThread::check_safepoint_and_suspend_for_native_trans(JavaThread *thread) {
2286  assert(thread->thread_state() == _thread_in_native_trans, "wrong state");
2287
2288  JavaThread *curJT = JavaThread::current();
2289  bool do_self_suspend = thread->is_external_suspend();
2290
2291  assert(!curJT->has_last_Java_frame() || curJT->frame_anchor()->walkable(), "Unwalkable stack in native->vm transition");
2292
2293  // If JNIEnv proxies are allowed, don't self-suspend if the target
2294  // thread is not the current thread. In older versions of jdbx, jdbx
2295  // threads could call into the VM with another thread's JNIEnv so we
2296  // can be here operating on behalf of a suspended thread (4432884).
2297  if (do_self_suspend && (!AllowJNIEnvProxy || curJT == thread)) {
2298    JavaThreadState state = thread->thread_state();
2299
2300    // We mark this thread_blocked state as a suspend-equivalent so
2301    // that a caller to is_ext_suspend_completed() won't be confused.
2302    // The suspend-equivalent state is cleared by java_suspend_self().
2303    thread->set_suspend_equivalent();
2304
2305    // If the safepoint code sees the _thread_in_native_trans state, it will
2306    // wait until the thread changes to other thread state. There is no
2307    // guarantee on how soon we can obtain the SR_lock and complete the
2308    // self-suspend request. It would be a bad idea to let safepoint wait for
2309    // too long. Temporarily change the state to _thread_blocked to
2310    // let the VM thread know that this thread is ready for GC. The problem
2311    // of changing thread state is that safepoint could happen just after
2312    // java_suspend_self() returns after being resumed, and VM thread will
2313    // see the _thread_blocked state. We must check for safepoint
2314    // after restoring the state and make sure we won't leave while a safepoint
2315    // is in progress.
2316    thread->set_thread_state(_thread_blocked);
2317    thread->java_suspend_self();
2318    thread->set_thread_state(state);
2319    // Make sure new state is seen by VM thread
2320    if (os::is_MP()) {
2321      if (UseMembar) {
2322        // Force a fence between the write above and read below
2323        OrderAccess::fence();
2324      } else {
2325        // Must use this rather than serialization page in particular on Windows
2326        InterfaceSupport::serialize_memory(thread);
2327      }
2328    }
2329  }
2330
2331  if (SafepointSynchronize::do_call_back()) {
2332    // If we are safepointing, then block the caller which may not be
2333    // the same as the target thread (see above).
2334    SafepointSynchronize::block(curJT);
2335  }
2336
2337  if (thread->is_deopt_suspend()) {
2338    thread->clear_deopt_suspend();
2339    RegisterMap map(thread, false);
2340    frame f = thread->last_frame();
2341    while (f.id() != thread->must_deopt_id() && ! f.is_first_frame()) {
2342      f = f.sender(&map);
2343    }
2344    if (f.id() == thread->must_deopt_id()) {
2345      thread->clear_must_deopt_id();
2346      f.deoptimize(thread);
2347    } else {
2348      fatal("missed deoptimization!");
2349    }
2350  }
2351}
2352
2353// Slow path when the native==>VM/Java barriers detect a safepoint is in
2354// progress or when _suspend_flags is non-zero.
2355// Current thread needs to self-suspend if there is a suspend request and/or
2356// block if a safepoint is in progress.
2357// Also check for pending async exception (not including unsafe access error).
2358// Note only the native==>VM/Java barriers can call this function and when
2359// thread state is _thread_in_native_trans.
2360void JavaThread::check_special_condition_for_native_trans(JavaThread *thread) {
2361  check_safepoint_and_suspend_for_native_trans(thread);
2362
2363  if (thread->has_async_exception()) {
2364    // We are in _thread_in_native_trans state, don't handle unsafe
2365    // access error since that may block.
2366    thread->check_and_handle_async_exceptions(false);
2367  }
2368}
2369
2370// This is a variant of the normal
2371// check_special_condition_for_native_trans with slightly different
2372// semantics for use by critical native wrappers.  It does all the
2373// normal checks but also performs the transition back into
2374// thread_in_Java state.  This is required so that critical natives
2375// can potentially block and perform a GC if they are the last thread
2376// exiting the GC_locker.
2377void JavaThread::check_special_condition_for_native_trans_and_transition(JavaThread *thread) {
2378  check_special_condition_for_native_trans(thread);
2379
2380  // Finish the transition
2381  thread->set_thread_state(_thread_in_Java);
2382
2383  if (thread->do_critical_native_unlock()) {
2384    ThreadInVMfromJavaNoAsyncException tiv(thread);
2385    GC_locker::unlock_critical(thread);
2386    thread->clear_critical_native_unlock();
2387  }
2388}
2389
2390// We need to guarantee the Threads_lock here, since resumes are not
2391// allowed during safepoint synchronization
2392// Can only resume from an external suspension
2393void JavaThread::java_resume() {
2394  assert_locked_or_safepoint(Threads_lock);
2395
2396  // Sanity check: thread is gone, has started exiting or the thread
2397  // was not externally suspended.
2398  if (!Threads::includes(this) || is_exiting() || !is_external_suspend()) {
2399    return;
2400  }
2401
2402  MutexLockerEx ml(SR_lock(), Mutex::_no_safepoint_check_flag);
2403
2404  clear_external_suspend();
2405
2406  if (is_ext_suspended()) {
2407    clear_ext_suspended();
2408    SR_lock()->notify_all();
2409  }
2410}
2411
2412void JavaThread::create_stack_guard_pages() {
2413  if (! os::uses_stack_guard_pages() || _stack_guard_state != stack_guard_unused) return;
2414  address low_addr = stack_base() - stack_size();
2415  size_t len = (StackYellowPages + StackRedPages) * os::vm_page_size();
2416
2417  int allocate = os::allocate_stack_guard_pages();
2418  // warning("Guarding at " PTR_FORMAT " for len " SIZE_FORMAT "\n", low_addr, len);
2419
2420  if (allocate && !os::create_stack_guard_pages((char *) low_addr, len)) {
2421    warning("Attempt to allocate stack guard pages failed.");
2422    return;
2423  }
2424
2425  if (os::guard_memory((char *) low_addr, len)) {
2426    _stack_guard_state = stack_guard_enabled;
2427  } else {
2428    warning("Attempt to protect stack guard pages failed.");
2429    if (os::uncommit_memory((char *) low_addr, len)) {
2430      warning("Attempt to deallocate stack guard pages failed.");
2431    }
2432  }
2433}
2434
2435void JavaThread::remove_stack_guard_pages() {
2436  assert(Thread::current() == this, "from different thread");
2437  if (_stack_guard_state == stack_guard_unused) return;
2438  address low_addr = stack_base() - stack_size();
2439  size_t len = (StackYellowPages + StackRedPages) * os::vm_page_size();
2440
2441  if (os::allocate_stack_guard_pages()) {
2442    if (os::remove_stack_guard_pages((char *) low_addr, len)) {
2443      _stack_guard_state = stack_guard_unused;
2444    } else {
2445      warning("Attempt to deallocate stack guard pages failed.");
2446    }
2447  } else {
2448    if (_stack_guard_state == stack_guard_unused) return;
2449    if (os::unguard_memory((char *) low_addr, len)) {
2450      _stack_guard_state = stack_guard_unused;
2451    } else {
2452      warning("Attempt to unprotect stack guard pages failed.");
2453    }
2454  }
2455}
2456
2457void JavaThread::enable_stack_yellow_zone() {
2458  assert(_stack_guard_state != stack_guard_unused, "must be using guard pages.");
2459  assert(_stack_guard_state != stack_guard_enabled, "already enabled");
2460
2461  // The base notation is from the stacks point of view, growing downward.
2462  // We need to adjust it to work correctly with guard_memory()
2463  address base = stack_yellow_zone_base() - stack_yellow_zone_size();
2464
2465  guarantee(base < stack_base(), "Error calculating stack yellow zone");
2466  guarantee(base < os::current_stack_pointer(), "Error calculating stack yellow zone");
2467
2468  if (os::guard_memory((char *) base, stack_yellow_zone_size())) {
2469    _stack_guard_state = stack_guard_enabled;
2470  } else {
2471    warning("Attempt to guard stack yellow zone failed.");
2472  }
2473  enable_register_stack_guard();
2474}
2475
2476void JavaThread::disable_stack_yellow_zone() {
2477  assert(_stack_guard_state != stack_guard_unused, "must be using guard pages.");
2478  assert(_stack_guard_state != stack_guard_yellow_disabled, "already disabled");
2479
2480  // Simply return if called for a thread that does not use guard pages.
2481  if (_stack_guard_state == stack_guard_unused) return;
2482
2483  // The base notation is from the stacks point of view, growing downward.
2484  // We need to adjust it to work correctly with guard_memory()
2485  address base = stack_yellow_zone_base() - stack_yellow_zone_size();
2486
2487  if (os::unguard_memory((char *)base, stack_yellow_zone_size())) {
2488    _stack_guard_state = stack_guard_yellow_disabled;
2489  } else {
2490    warning("Attempt to unguard stack yellow zone failed.");
2491  }
2492  disable_register_stack_guard();
2493}
2494
2495void JavaThread::enable_stack_red_zone() {
2496  // The base notation is from the stacks point of view, growing downward.
2497  // We need to adjust it to work correctly with guard_memory()
2498  assert(_stack_guard_state != stack_guard_unused, "must be using guard pages.");
2499  address base = stack_red_zone_base() - stack_red_zone_size();
2500
2501  guarantee(base < stack_base(), "Error calculating stack red zone");
2502  guarantee(base < os::current_stack_pointer(), "Error calculating stack red zone");
2503
2504  if (!os::guard_memory((char *) base, stack_red_zone_size())) {
2505    warning("Attempt to guard stack red zone failed.");
2506  }
2507}
2508
2509void JavaThread::disable_stack_red_zone() {
2510  // The base notation is from the stacks point of view, growing downward.
2511  // We need to adjust it to work correctly with guard_memory()
2512  assert(_stack_guard_state != stack_guard_unused, "must be using guard pages.");
2513  address base = stack_red_zone_base() - stack_red_zone_size();
2514  if (!os::unguard_memory((char *)base, stack_red_zone_size())) {
2515    warning("Attempt to unguard stack red zone failed.");
2516  }
2517}
2518
2519void JavaThread::frames_do(void f(frame*, const RegisterMap* map)) {
2520  // ignore is there is no stack
2521  if (!has_last_Java_frame()) return;
2522  // traverse the stack frames. Starts from top frame.
2523  for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2524    frame* fr = fst.current();
2525    f(fr, fst.register_map());
2526  }
2527}
2528
2529
2530#ifndef PRODUCT
2531// Deoptimization
2532// Function for testing deoptimization
2533void JavaThread::deoptimize() {
2534  // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2535  StackFrameStream fst(this, UseBiasedLocking);
2536  bool deopt = false;           // Dump stack only if a deopt actually happens.
2537  bool only_at = strlen(DeoptimizeOnlyAt) > 0;
2538  // Iterate over all frames in the thread and deoptimize
2539  for (; !fst.is_done(); fst.next()) {
2540    if (fst.current()->can_be_deoptimized()) {
2541
2542      if (only_at) {
2543        // Deoptimize only at particular bcis.  DeoptimizeOnlyAt
2544        // consists of comma or carriage return separated numbers so
2545        // search for the current bci in that string.
2546        address pc = fst.current()->pc();
2547        nmethod* nm =  (nmethod*) fst.current()->cb();
2548        ScopeDesc* sd = nm->scope_desc_at(pc);
2549        char buffer[8];
2550        jio_snprintf(buffer, sizeof(buffer), "%d", sd->bci());
2551        size_t len = strlen(buffer);
2552        const char * found = strstr(DeoptimizeOnlyAt, buffer);
2553        while (found != NULL) {
2554          if ((found[len] == ',' || found[len] == '\n' || found[len] == '\0') &&
2555              (found == DeoptimizeOnlyAt || found[-1] == ',' || found[-1] == '\n')) {
2556            // Check that the bci found is bracketed by terminators.
2557            break;
2558          }
2559          found = strstr(found + 1, buffer);
2560        }
2561        if (!found) {
2562          continue;
2563        }
2564      }
2565
2566      if (DebugDeoptimization && !deopt) {
2567        deopt = true; // One-time only print before deopt
2568        tty->print_cr("[BEFORE Deoptimization]");
2569        trace_frames();
2570        trace_stack();
2571      }
2572      Deoptimization::deoptimize(this, *fst.current(), fst.register_map());
2573    }
2574  }
2575
2576  if (DebugDeoptimization && deopt) {
2577    tty->print_cr("[AFTER Deoptimization]");
2578    trace_frames();
2579  }
2580}
2581
2582
2583// Make zombies
2584void JavaThread::make_zombies() {
2585  for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2586    if (fst.current()->can_be_deoptimized()) {
2587      // it is a Java nmethod
2588      nmethod* nm = CodeCache::find_nmethod(fst.current()->pc());
2589      nm->make_not_entrant();
2590    }
2591  }
2592}
2593#endif // PRODUCT
2594
2595
2596void JavaThread::deoptimized_wrt_marked_nmethods() {
2597  if (!has_last_Java_frame()) return;
2598  // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2599  StackFrameStream fst(this, UseBiasedLocking);
2600  for (; !fst.is_done(); fst.next()) {
2601    if (fst.current()->should_be_deoptimized()) {
2602      if (LogCompilation && xtty != NULL) {
2603        nmethod* nm = fst.current()->cb()->as_nmethod_or_null();
2604        xtty->elem("deoptimized thread='" UINTX_FORMAT "' compile_id='%d'",
2605                   this->name(), nm != NULL ? nm->compile_id() : -1);
2606      }
2607
2608      Deoptimization::deoptimize(this, *fst.current(), fst.register_map());
2609    }
2610  }
2611}
2612
2613
2614// If the caller is a NamedThread, then remember, in the current scope,
2615// the given JavaThread in its _processed_thread field.
2616class RememberProcessedThread: public StackObj {
2617  NamedThread* _cur_thr;
2618 public:
2619  RememberProcessedThread(JavaThread* jthr) {
2620    Thread* thread = Thread::current();
2621    if (thread->is_Named_thread()) {
2622      _cur_thr = (NamedThread *)thread;
2623      _cur_thr->set_processed_thread(jthr);
2624    } else {
2625      _cur_thr = NULL;
2626    }
2627  }
2628
2629  ~RememberProcessedThread() {
2630    if (_cur_thr) {
2631      _cur_thr->set_processed_thread(NULL);
2632    }
2633  }
2634};
2635
2636void JavaThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
2637  // Verify that the deferred card marks have been flushed.
2638  assert(deferred_card_mark().is_empty(), "Should be empty during GC");
2639
2640  // The ThreadProfiler oops_do is done from FlatProfiler::oops_do
2641  // since there may be more than one thread using each ThreadProfiler.
2642
2643  // Traverse the GCHandles
2644  Thread::oops_do(f, cld_f, cf);
2645
2646  assert((!has_last_Java_frame() && java_call_counter() == 0) ||
2647         (has_last_Java_frame() && java_call_counter() > 0), "wrong java_sp info!");
2648
2649  if (has_last_Java_frame()) {
2650    // Record JavaThread to GC thread
2651    RememberProcessedThread rpt(this);
2652
2653    // Traverse the privileged stack
2654    if (_privileged_stack_top != NULL) {
2655      _privileged_stack_top->oops_do(f);
2656    }
2657
2658    // traverse the registered growable array
2659    if (_array_for_gc != NULL) {
2660      for (int index = 0; index < _array_for_gc->length(); index++) {
2661        f->do_oop(_array_for_gc->adr_at(index));
2662      }
2663    }
2664
2665    // Traverse the monitor chunks
2666    for (MonitorChunk* chunk = monitor_chunks(); chunk != NULL; chunk = chunk->next()) {
2667      chunk->oops_do(f);
2668    }
2669
2670    // Traverse the execution stack
2671    for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2672      fst.current()->oops_do(f, cld_f, cf, fst.register_map());
2673    }
2674  }
2675
2676  // callee_target is never live across a gc point so NULL it here should
2677  // it still contain a methdOop.
2678
2679  set_callee_target(NULL);
2680
2681  assert(vframe_array_head() == NULL, "deopt in progress at a safepoint!");
2682  // If we have deferred set_locals there might be oops waiting to be
2683  // written
2684  GrowableArray<jvmtiDeferredLocalVariableSet*>* list = deferred_locals();
2685  if (list != NULL) {
2686    for (int i = 0; i < list->length(); i++) {
2687      list->at(i)->oops_do(f);
2688    }
2689  }
2690
2691  // Traverse instance variables at the end since the GC may be moving things
2692  // around using this function
2693  f->do_oop((oop*) &_threadObj);
2694  f->do_oop((oop*) &_vm_result);
2695  f->do_oop((oop*) &_exception_oop);
2696  f->do_oop((oop*) &_pending_async_exception);
2697
2698  if (jvmti_thread_state() != NULL) {
2699    jvmti_thread_state()->oops_do(f);
2700  }
2701}
2702
2703void JavaThread::nmethods_do(CodeBlobClosure* cf) {
2704  Thread::nmethods_do(cf);  // (super method is a no-op)
2705
2706  assert((!has_last_Java_frame() && java_call_counter() == 0) ||
2707         (has_last_Java_frame() && java_call_counter() > 0), "wrong java_sp info!");
2708
2709  if (has_last_Java_frame()) {
2710    // Traverse the execution stack
2711    for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2712      fst.current()->nmethods_do(cf);
2713    }
2714  }
2715}
2716
2717void JavaThread::metadata_do(void f(Metadata*)) {
2718  if (has_last_Java_frame()) {
2719    // Traverse the execution stack to call f() on the methods in the stack
2720    for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2721      fst.current()->metadata_do(f);
2722    }
2723  } else if (is_Compiler_thread()) {
2724    // need to walk ciMetadata in current compile tasks to keep alive.
2725    CompilerThread* ct = (CompilerThread*)this;
2726    if (ct->env() != NULL) {
2727      ct->env()->metadata_do(f);
2728    }
2729  }
2730}
2731
2732// Printing
2733const char* _get_thread_state_name(JavaThreadState _thread_state) {
2734  switch (_thread_state) {
2735  case _thread_uninitialized:     return "_thread_uninitialized";
2736  case _thread_new:               return "_thread_new";
2737  case _thread_new_trans:         return "_thread_new_trans";
2738  case _thread_in_native:         return "_thread_in_native";
2739  case _thread_in_native_trans:   return "_thread_in_native_trans";
2740  case _thread_in_vm:             return "_thread_in_vm";
2741  case _thread_in_vm_trans:       return "_thread_in_vm_trans";
2742  case _thread_in_Java:           return "_thread_in_Java";
2743  case _thread_in_Java_trans:     return "_thread_in_Java_trans";
2744  case _thread_blocked:           return "_thread_blocked";
2745  case _thread_blocked_trans:     return "_thread_blocked_trans";
2746  default:                        return "unknown thread state";
2747  }
2748}
2749
2750#ifndef PRODUCT
2751void JavaThread::print_thread_state_on(outputStream *st) const {
2752  st->print_cr("   JavaThread state: %s", _get_thread_state_name(_thread_state));
2753};
2754void JavaThread::print_thread_state() const {
2755  print_thread_state_on(tty);
2756}
2757#endif // PRODUCT
2758
2759// Called by Threads::print() for VM_PrintThreads operation
2760void JavaThread::print_on(outputStream *st) const {
2761  st->print("\"%s\" ", get_thread_name());
2762  oop thread_oop = threadObj();
2763  if (thread_oop != NULL) {
2764    st->print("#" INT64_FORMAT " ", java_lang_Thread::thread_id(thread_oop));
2765    if (java_lang_Thread::is_daemon(thread_oop))  st->print("daemon ");
2766    st->print("prio=%d ", java_lang_Thread::priority(thread_oop));
2767  }
2768  Thread::print_on(st);
2769  // print guess for valid stack memory region (assume 4K pages); helps lock debugging
2770  st->print_cr("[" INTPTR_FORMAT "]", (intptr_t)last_Java_sp() & ~right_n_bits(12));
2771  if (thread_oop != NULL) {
2772    st->print_cr("   java.lang.Thread.State: %s", java_lang_Thread::thread_status_name(thread_oop));
2773  }
2774#ifndef PRODUCT
2775  print_thread_state_on(st);
2776  _safepoint_state->print_on(st);
2777#endif // PRODUCT
2778}
2779
2780// Called by fatal error handler. The difference between this and
2781// JavaThread::print() is that we can't grab lock or allocate memory.
2782void JavaThread::print_on_error(outputStream* st, char *buf, int buflen) const {
2783  st->print("JavaThread \"%s\"", get_thread_name_string(buf, buflen));
2784  oop thread_obj = threadObj();
2785  if (thread_obj != NULL) {
2786    if (java_lang_Thread::is_daemon(thread_obj)) st->print(" daemon");
2787  }
2788  st->print(" [");
2789  st->print("%s", _get_thread_state_name(_thread_state));
2790  if (osthread()) {
2791    st->print(", id=%d", osthread()->thread_id());
2792  }
2793  st->print(", stack(" PTR_FORMAT "," PTR_FORMAT ")",
2794            _stack_base - _stack_size, _stack_base);
2795  st->print("]");
2796  return;
2797}
2798
2799// Verification
2800
2801static void frame_verify(frame* f, const RegisterMap *map) { f->verify(map); }
2802
2803void JavaThread::verify() {
2804  // Verify oops in the thread.
2805  oops_do(&VerifyOopClosure::verify_oop, NULL, NULL);
2806
2807  // Verify the stack frames.
2808  frames_do(frame_verify);
2809}
2810
2811// CR 6300358 (sub-CR 2137150)
2812// Most callers of this method assume that it can't return NULL but a
2813// thread may not have a name whilst it is in the process of attaching to
2814// the VM - see CR 6412693, and there are places where a JavaThread can be
2815// seen prior to having it's threadObj set (eg JNI attaching threads and
2816// if vm exit occurs during initialization). These cases can all be accounted
2817// for such that this method never returns NULL.
2818const char* JavaThread::get_thread_name() const {
2819#ifdef ASSERT
2820  // early safepoints can hit while current thread does not yet have TLS
2821  if (!SafepointSynchronize::is_at_safepoint()) {
2822    Thread *cur = Thread::current();
2823    if (!(cur->is_Java_thread() && cur == this)) {
2824      // Current JavaThreads are allowed to get their own name without
2825      // the Threads_lock.
2826      assert_locked_or_safepoint(Threads_lock);
2827    }
2828  }
2829#endif // ASSERT
2830  return get_thread_name_string();
2831}
2832
2833// Returns a non-NULL representation of this thread's name, or a suitable
2834// descriptive string if there is no set name
2835const char* JavaThread::get_thread_name_string(char* buf, int buflen) const {
2836  const char* name_str;
2837  oop thread_obj = threadObj();
2838  if (thread_obj != NULL) {
2839    oop name = java_lang_Thread::name(thread_obj);
2840    if (name != NULL) {
2841      if (buf == NULL) {
2842        name_str = java_lang_String::as_utf8_string(name);
2843      } else {
2844        name_str = java_lang_String::as_utf8_string(name, buf, buflen);
2845      }
2846    } else if (is_attaching_via_jni()) { // workaround for 6412693 - see 6404306
2847      name_str = "<no-name - thread is attaching>";
2848    } else {
2849      name_str = Thread::name();
2850    }
2851  } else {
2852    name_str = Thread::name();
2853  }
2854  assert(name_str != NULL, "unexpected NULL thread name");
2855  return name_str;
2856}
2857
2858
2859const char* JavaThread::get_threadgroup_name() const {
2860  debug_only(if (JavaThread::current() != this) assert_locked_or_safepoint(Threads_lock);)
2861  oop thread_obj = threadObj();
2862  if (thread_obj != NULL) {
2863    oop thread_group = java_lang_Thread::threadGroup(thread_obj);
2864    if (thread_group != NULL) {
2865      typeArrayOop name = java_lang_ThreadGroup::name(thread_group);
2866      // ThreadGroup.name can be null
2867      if (name != NULL) {
2868        const char* str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length());
2869        return str;
2870      }
2871    }
2872  }
2873  return NULL;
2874}
2875
2876const char* JavaThread::get_parent_name() const {
2877  debug_only(if (JavaThread::current() != this) assert_locked_or_safepoint(Threads_lock);)
2878  oop thread_obj = threadObj();
2879  if (thread_obj != NULL) {
2880    oop thread_group = java_lang_Thread::threadGroup(thread_obj);
2881    if (thread_group != NULL) {
2882      oop parent = java_lang_ThreadGroup::parent(thread_group);
2883      if (parent != NULL) {
2884        typeArrayOop name = java_lang_ThreadGroup::name(parent);
2885        // ThreadGroup.name can be null
2886        if (name != NULL) {
2887          const char* str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length());
2888          return str;
2889        }
2890      }
2891    }
2892  }
2893  return NULL;
2894}
2895
2896ThreadPriority JavaThread::java_priority() const {
2897  oop thr_oop = threadObj();
2898  if (thr_oop == NULL) return NormPriority; // Bootstrapping
2899  ThreadPriority priority = java_lang_Thread::priority(thr_oop);
2900  assert(MinPriority <= priority && priority <= MaxPriority, "sanity check");
2901  return priority;
2902}
2903
2904void JavaThread::prepare(jobject jni_thread, ThreadPriority prio) {
2905
2906  assert(Threads_lock->owner() == Thread::current(), "must have threads lock");
2907  // Link Java Thread object <-> C++ Thread
2908
2909  // Get the C++ thread object (an oop) from the JNI handle (a jthread)
2910  // and put it into a new Handle.  The Handle "thread_oop" can then
2911  // be used to pass the C++ thread object to other methods.
2912
2913  // Set the Java level thread object (jthread) field of the
2914  // new thread (a JavaThread *) to C++ thread object using the
2915  // "thread_oop" handle.
2916
2917  // Set the thread field (a JavaThread *) of the
2918  // oop representing the java_lang_Thread to the new thread (a JavaThread *).
2919
2920  Handle thread_oop(Thread::current(),
2921                    JNIHandles::resolve_non_null(jni_thread));
2922  assert(InstanceKlass::cast(thread_oop->klass())->is_linked(),
2923         "must be initialized");
2924  set_threadObj(thread_oop());
2925  java_lang_Thread::set_thread(thread_oop(), this);
2926
2927  if (prio == NoPriority) {
2928    prio = java_lang_Thread::priority(thread_oop());
2929    assert(prio != NoPriority, "A valid priority should be present");
2930  }
2931
2932  // Push the Java priority down to the native thread; needs Threads_lock
2933  Thread::set_priority(this, prio);
2934
2935  prepare_ext();
2936
2937  // Add the new thread to the Threads list and set it in motion.
2938  // We must have threads lock in order to call Threads::add.
2939  // It is crucial that we do not block before the thread is
2940  // added to the Threads list for if a GC happens, then the java_thread oop
2941  // will not be visited by GC.
2942  Threads::add(this);
2943}
2944
2945oop JavaThread::current_park_blocker() {
2946  // Support for JSR-166 locks
2947  oop thread_oop = threadObj();
2948  if (thread_oop != NULL &&
2949      JDK_Version::current().supports_thread_park_blocker()) {
2950    return java_lang_Thread::park_blocker(thread_oop);
2951  }
2952  return NULL;
2953}
2954
2955
2956void JavaThread::print_stack_on(outputStream* st) {
2957  if (!has_last_Java_frame()) return;
2958  ResourceMark rm;
2959  HandleMark   hm;
2960
2961  RegisterMap reg_map(this);
2962  vframe* start_vf = last_java_vframe(&reg_map);
2963  int count = 0;
2964  for (vframe* f = start_vf; f; f = f->sender()) {
2965    if (f->is_java_frame()) {
2966      javaVFrame* jvf = javaVFrame::cast(f);
2967      java_lang_Throwable::print_stack_element(st, jvf->method(), jvf->bci());
2968
2969      // Print out lock information
2970      if (JavaMonitorsInStackTrace) {
2971        jvf->print_lock_info_on(st, count);
2972      }
2973    } else {
2974      // Ignore non-Java frames
2975    }
2976
2977    // Bail-out case for too deep stacks
2978    count++;
2979    if (MaxJavaStackTraceDepth == count) return;
2980  }
2981}
2982
2983
2984// JVMTI PopFrame support
2985void JavaThread::popframe_preserve_args(ByteSize size_in_bytes, void* start) {
2986  assert(_popframe_preserved_args == NULL, "should not wipe out old PopFrame preserved arguments");
2987  if (in_bytes(size_in_bytes) != 0) {
2988    _popframe_preserved_args = NEW_C_HEAP_ARRAY(char, in_bytes(size_in_bytes), mtThread);
2989    _popframe_preserved_args_size = in_bytes(size_in_bytes);
2990    Copy::conjoint_jbytes(start, _popframe_preserved_args, _popframe_preserved_args_size);
2991  }
2992}
2993
2994void* JavaThread::popframe_preserved_args() {
2995  return _popframe_preserved_args;
2996}
2997
2998ByteSize JavaThread::popframe_preserved_args_size() {
2999  return in_ByteSize(_popframe_preserved_args_size);
3000}
3001
3002WordSize JavaThread::popframe_preserved_args_size_in_words() {
3003  int sz = in_bytes(popframe_preserved_args_size());
3004  assert(sz % wordSize == 0, "argument size must be multiple of wordSize");
3005  return in_WordSize(sz / wordSize);
3006}
3007
3008void JavaThread::popframe_free_preserved_args() {
3009  assert(_popframe_preserved_args != NULL, "should not free PopFrame preserved arguments twice");
3010  FREE_C_HEAP_ARRAY(char, (char*) _popframe_preserved_args);
3011  _popframe_preserved_args = NULL;
3012  _popframe_preserved_args_size = 0;
3013}
3014
3015#ifndef PRODUCT
3016
3017void JavaThread::trace_frames() {
3018  tty->print_cr("[Describe stack]");
3019  int frame_no = 1;
3020  for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
3021    tty->print("  %d. ", frame_no++);
3022    fst.current()->print_value_on(tty, this);
3023    tty->cr();
3024  }
3025}
3026
3027class PrintAndVerifyOopClosure: public OopClosure {
3028 protected:
3029  template <class T> inline void do_oop_work(T* p) {
3030    oop obj = oopDesc::load_decode_heap_oop(p);
3031    if (obj == NULL) return;
3032    tty->print(INTPTR_FORMAT ": ", p);
3033    if (obj->is_oop_or_null()) {
3034      if (obj->is_objArray()) {
3035        tty->print_cr("valid objArray: " INTPTR_FORMAT, (oopDesc*) obj);
3036      } else {
3037        obj->print();
3038      }
3039    } else {
3040      tty->print_cr("invalid oop: " INTPTR_FORMAT, (oopDesc*) obj);
3041    }
3042    tty->cr();
3043  }
3044 public:
3045  virtual void do_oop(oop* p) { do_oop_work(p); }
3046  virtual void do_oop(narrowOop* p)  { do_oop_work(p); }
3047};
3048
3049
3050static void oops_print(frame* f, const RegisterMap *map) {
3051  PrintAndVerifyOopClosure print;
3052  f->print_value();
3053  f->oops_do(&print, NULL, NULL, (RegisterMap*)map);
3054}
3055
3056// Print our all the locations that contain oops and whether they are
3057// valid or not.  This useful when trying to find the oldest frame
3058// where an oop has gone bad since the frame walk is from youngest to
3059// oldest.
3060void JavaThread::trace_oops() {
3061  tty->print_cr("[Trace oops]");
3062  frames_do(oops_print);
3063}
3064
3065
3066#ifdef ASSERT
3067// Print or validate the layout of stack frames
3068void JavaThread::print_frame_layout(int depth, bool validate_only) {
3069  ResourceMark rm;
3070  PRESERVE_EXCEPTION_MARK;
3071  FrameValues values;
3072  int frame_no = 0;
3073  for (StackFrameStream fst(this, false); !fst.is_done(); fst.next()) {
3074    fst.current()->describe(values, ++frame_no);
3075    if (depth == frame_no) break;
3076  }
3077  if (validate_only) {
3078    values.validate();
3079  } else {
3080    tty->print_cr("[Describe stack layout]");
3081    values.print(this);
3082  }
3083}
3084#endif
3085
3086void JavaThread::trace_stack_from(vframe* start_vf) {
3087  ResourceMark rm;
3088  int vframe_no = 1;
3089  for (vframe* f = start_vf; f; f = f->sender()) {
3090    if (f->is_java_frame()) {
3091      javaVFrame::cast(f)->print_activation(vframe_no++);
3092    } else {
3093      f->print();
3094    }
3095    if (vframe_no > StackPrintLimit) {
3096      tty->print_cr("...<more frames>...");
3097      return;
3098    }
3099  }
3100}
3101
3102
3103void JavaThread::trace_stack() {
3104  if (!has_last_Java_frame()) return;
3105  ResourceMark rm;
3106  HandleMark   hm;
3107  RegisterMap reg_map(this);
3108  trace_stack_from(last_java_vframe(&reg_map));
3109}
3110
3111
3112#endif // PRODUCT
3113
3114
3115javaVFrame* JavaThread::last_java_vframe(RegisterMap *reg_map) {
3116  assert(reg_map != NULL, "a map must be given");
3117  frame f = last_frame();
3118  for (vframe* vf = vframe::new_vframe(&f, reg_map, this); vf; vf = vf->sender()) {
3119    if (vf->is_java_frame()) return javaVFrame::cast(vf);
3120  }
3121  return NULL;
3122}
3123
3124
3125Klass* JavaThread::security_get_caller_class(int depth) {
3126  vframeStream vfst(this);
3127  vfst.security_get_caller_frame(depth);
3128  if (!vfst.at_end()) {
3129    return vfst.method()->method_holder();
3130  }
3131  return NULL;
3132}
3133
3134static void compiler_thread_entry(JavaThread* thread, TRAPS) {
3135  assert(thread->is_Compiler_thread(), "must be compiler thread");
3136  CompileBroker::compiler_thread_loop();
3137}
3138
3139static void sweeper_thread_entry(JavaThread* thread, TRAPS) {
3140  NMethodSweeper::sweeper_loop();
3141}
3142
3143// Create a CompilerThread
3144CompilerThread::CompilerThread(CompileQueue* queue,
3145                               CompilerCounters* counters)
3146                               : JavaThread(&compiler_thread_entry) {
3147  _env   = NULL;
3148  _log   = NULL;
3149  _task  = NULL;
3150  _queue = queue;
3151  _counters = counters;
3152  _buffer_blob = NULL;
3153  _compiler = NULL;
3154
3155#ifndef PRODUCT
3156  _ideal_graph_printer = NULL;
3157#endif
3158}
3159
3160// Create sweeper thread
3161CodeCacheSweeperThread::CodeCacheSweeperThread()
3162: JavaThread(&sweeper_thread_entry) {
3163  _scanned_nmethod = NULL;
3164}
3165void CodeCacheSweeperThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
3166  JavaThread::oops_do(f, cld_f, cf);
3167  if (_scanned_nmethod != NULL && cf != NULL) {
3168    // Safepoints can occur when the sweeper is scanning an nmethod so
3169    // process it here to make sure it isn't unloaded in the middle of
3170    // a scan.
3171    cf->do_code_blob(_scanned_nmethod);
3172  }
3173}
3174
3175
3176// ======= Threads ========
3177
3178// The Threads class links together all active threads, and provides
3179// operations over all threads.  It is protected by its own Mutex
3180// lock, which is also used in other contexts to protect thread
3181// operations from having the thread being operated on from exiting
3182// and going away unexpectedly (e.g., safepoint synchronization)
3183
3184JavaThread* Threads::_thread_list = NULL;
3185int         Threads::_number_of_threads = 0;
3186int         Threads::_number_of_non_daemon_threads = 0;
3187int         Threads::_return_code = 0;
3188int         Threads::_thread_claim_parity = 0;
3189size_t      JavaThread::_stack_size_at_create = 0;
3190#ifdef ASSERT
3191bool        Threads::_vm_complete = false;
3192#endif
3193
3194// All JavaThreads
3195#define ALL_JAVA_THREADS(X) for (JavaThread* X = _thread_list; X; X = X->next())
3196
3197// All JavaThreads + all non-JavaThreads (i.e., every thread in the system)
3198void Threads::threads_do(ThreadClosure* tc) {
3199  assert_locked_or_safepoint(Threads_lock);
3200  // ALL_JAVA_THREADS iterates through all JavaThreads
3201  ALL_JAVA_THREADS(p) {
3202    tc->do_thread(p);
3203  }
3204  // Someday we could have a table or list of all non-JavaThreads.
3205  // For now, just manually iterate through them.
3206  tc->do_thread(VMThread::vm_thread());
3207  Universe::heap()->gc_threads_do(tc);
3208  WatcherThread *wt = WatcherThread::watcher_thread();
3209  // Strictly speaking, the following NULL check isn't sufficient to make sure
3210  // the data for WatcherThread is still valid upon being examined. However,
3211  // considering that WatchThread terminates when the VM is on the way to
3212  // exit at safepoint, the chance of the above is extremely small. The right
3213  // way to prevent termination of WatcherThread would be to acquire
3214  // Terminator_lock, but we can't do that without violating the lock rank
3215  // checking in some cases.
3216  if (wt != NULL) {
3217    tc->do_thread(wt);
3218  }
3219
3220  // If CompilerThreads ever become non-JavaThreads, add them here
3221}
3222
3223void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) {
3224  TraceTime timer("Initialize java.lang classes", TraceStartupTime);
3225
3226  if (EagerXrunInit && Arguments::init_libraries_at_startup()) {
3227    create_vm_init_libraries();
3228  }
3229
3230  initialize_class(vmSymbols::java_lang_String(), CHECK);
3231
3232  // Initialize java_lang.System (needed before creating the thread)
3233  initialize_class(vmSymbols::java_lang_System(), CHECK);
3234  // The VM creates & returns objects of this class. Make sure it's initialized.
3235  initialize_class(vmSymbols::java_lang_Class(), CHECK);
3236  initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK);
3237  Handle thread_group = create_initial_thread_group(CHECK);
3238  Universe::set_main_thread_group(thread_group());
3239  initialize_class(vmSymbols::java_lang_Thread(), CHECK);
3240  oop thread_object = create_initial_thread(thread_group, main_thread, CHECK);
3241  main_thread->set_threadObj(thread_object);
3242  // Set thread status to running since main thread has
3243  // been started and running.
3244  java_lang_Thread::set_thread_status(thread_object,
3245                                      java_lang_Thread::RUNNABLE);
3246
3247  // The VM preresolves methods to these classes. Make sure that they get initialized
3248  initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK);
3249  initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK);
3250  call_initializeSystemClass(CHECK);
3251
3252  // get the Java runtime name after java.lang.System is initialized
3253  JDK_Version::set_runtime_name(get_java_runtime_name(THREAD));
3254  JDK_Version::set_runtime_version(get_java_runtime_version(THREAD));
3255
3256  // an instance of OutOfMemory exception has been allocated earlier
3257  initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK);
3258  initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK);
3259  initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK);
3260  initialize_class(vmSymbols::java_lang_ArrayStoreException(), CHECK);
3261  initialize_class(vmSymbols::java_lang_ArithmeticException(), CHECK);
3262  initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK);
3263  initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK);
3264  initialize_class(vmSymbols::java_lang_IllegalArgumentException(), CHECK);
3265}
3266
3267void Threads::initialize_jsr292_core_classes(TRAPS) {
3268  initialize_class(vmSymbols::java_lang_invoke_MethodHandle(), CHECK);
3269  initialize_class(vmSymbols::java_lang_invoke_MemberName(), CHECK);
3270  initialize_class(vmSymbols::java_lang_invoke_MethodHandleNatives(), CHECK);
3271}
3272
3273jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
3274  extern void JDK_Version_init();
3275
3276  // Check version
3277  if (!is_supported_jni_version(args->version)) return JNI_EVERSION;
3278
3279  // Initialize the output stream module
3280  ostream_init();
3281
3282  // Process java launcher properties.
3283  Arguments::process_sun_java_launcher_properties(args);
3284
3285  // Initialize the os module before using TLS
3286  os::init();
3287
3288  // Initialize system properties.
3289  Arguments::init_system_properties();
3290
3291  // So that JDK version can be used as a discriminator when parsing arguments
3292  JDK_Version_init();
3293
3294  // Update/Initialize System properties after JDK version number is known
3295  Arguments::init_version_specific_system_properties();
3296
3297  // Parse arguments
3298  jint parse_result = Arguments::parse(args);
3299  if (parse_result != JNI_OK) return parse_result;
3300
3301  os::init_before_ergo();
3302
3303  jint ergo_result = Arguments::apply_ergo();
3304  if (ergo_result != JNI_OK) return ergo_result;
3305
3306  if (PauseAtStartup) {
3307    os::pause();
3308  }
3309
3310  HOTSPOT_VM_INIT_BEGIN();
3311
3312  // Record VM creation timing statistics
3313  TraceVmCreationTime create_vm_timer;
3314  create_vm_timer.start();
3315
3316  // Timing (must come after argument parsing)
3317  TraceTime timer("Create VM", TraceStartupTime);
3318
3319  // Initialize the os module after parsing the args
3320  jint os_init_2_result = os::init_2();
3321  if (os_init_2_result != JNI_OK) return os_init_2_result;
3322
3323  jint adjust_after_os_result = Arguments::adjust_after_os();
3324  if (adjust_after_os_result != JNI_OK) return adjust_after_os_result;
3325
3326  // initialize TLS
3327  ThreadLocalStorage::init();
3328
3329  // Initialize output stream logging
3330  ostream_init_log();
3331
3332  // Convert -Xrun to -agentlib: if there is no JVM_OnLoad
3333  // Must be before create_vm_init_agents()
3334  if (Arguments::init_libraries_at_startup()) {
3335    convert_vm_init_libraries_to_agents();
3336  }
3337
3338  // Launch -agentlib/-agentpath and converted -Xrun agents
3339  if (Arguments::init_agents_at_startup()) {
3340    create_vm_init_agents();
3341  }
3342
3343  // Initialize Threads state
3344  _thread_list = NULL;
3345  _number_of_threads = 0;
3346  _number_of_non_daemon_threads = 0;
3347
3348  // Initialize global data structures and create system classes in heap
3349  vm_init_globals();
3350
3351  // Attach the main thread to this os thread
3352  JavaThread* main_thread = new JavaThread();
3353  main_thread->set_thread_state(_thread_in_vm);
3354  // must do this before set_active_handles and initialize_thread_local_storage
3355  // Note: on solaris initialize_thread_local_storage() will (indirectly)
3356  // change the stack size recorded here to one based on the java thread
3357  // stacksize. This adjusted size is what is used to figure the placement
3358  // of the guard pages.
3359  main_thread->record_stack_base_and_size();
3360  main_thread->initialize_thread_local_storage();
3361
3362  main_thread->set_active_handles(JNIHandleBlock::allocate_block());
3363
3364  if (!main_thread->set_as_starting_thread()) {
3365    vm_shutdown_during_initialization(
3366                                      "Failed necessary internal allocation. Out of swap space");
3367    delete main_thread;
3368    *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
3369    return JNI_ENOMEM;
3370  }
3371
3372  // Enable guard page *after* os::create_main_thread(), otherwise it would
3373  // crash Linux VM, see notes in os_linux.cpp.
3374  main_thread->create_stack_guard_pages();
3375
3376  // Initialize Java-Level synchronization subsystem
3377  ObjectMonitor::Initialize();
3378
3379  // Initialize global modules
3380  jint status = init_globals();
3381  if (status != JNI_OK) {
3382    delete main_thread;
3383    *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
3384    return status;
3385  }
3386
3387  // Should be done after the heap is fully created
3388  main_thread->cache_global_variables();
3389
3390  HandleMark hm;
3391
3392  { MutexLocker mu(Threads_lock);
3393    Threads::add(main_thread);
3394  }
3395
3396  // Any JVMTI raw monitors entered in onload will transition into
3397  // real raw monitor. VM is setup enough here for raw monitor enter.
3398  JvmtiExport::transition_pending_onload_raw_monitors();
3399
3400  // Create the VMThread
3401  { TraceTime timer("Start VMThread", TraceStartupTime);
3402    VMThread::create();
3403    Thread* vmthread = VMThread::vm_thread();
3404
3405    if (!os::create_thread(vmthread, os::vm_thread)) {
3406      vm_exit_during_initialization("Cannot create VM thread. "
3407                                    "Out of system resources.");
3408    }
3409
3410    // Wait for the VM thread to become ready, and VMThread::run to initialize
3411    // Monitors can have spurious returns, must always check another state flag
3412    {
3413      MutexLocker ml(Notify_lock);
3414      os::start_thread(vmthread);
3415      while (vmthread->active_handles() == NULL) {
3416        Notify_lock->wait();
3417      }
3418    }
3419  }
3420
3421  assert(Universe::is_fully_initialized(), "not initialized");
3422  if (VerifyDuringStartup) {
3423    // Make sure we're starting with a clean slate.
3424    VM_Verify verify_op;
3425    VMThread::execute(&verify_op);
3426  }
3427
3428  Thread* THREAD = Thread::current();
3429
3430  // At this point, the Universe is initialized, but we have not executed
3431  // any byte code.  Now is a good time (the only time) to dump out the
3432  // internal state of the JVM for sharing.
3433  if (DumpSharedSpaces) {
3434    MetaspaceShared::preload_and_dump(CHECK_JNI_ERR);
3435    ShouldNotReachHere();
3436  }
3437
3438  // Always call even when there are not JVMTI environments yet, since environments
3439  // may be attached late and JVMTI must track phases of VM execution
3440  JvmtiExport::enter_start_phase();
3441
3442  // Notify JVMTI agents that VM has started (JNI is up) - nop if no agents.
3443  JvmtiExport::post_vm_start();
3444
3445  initialize_java_lang_classes(main_thread, CHECK_JNI_ERR);
3446
3447  // We need this for ClassDataSharing - the initial vm.info property is set
3448  // with the default value of CDS "sharing" which may be reset through
3449  // command line options.
3450  reset_vm_info_property(CHECK_JNI_ERR);
3451
3452  quicken_jni_functions();
3453
3454  // Must be run after init_ft which initializes ft_enabled
3455  if (TRACE_INITIALIZE() != JNI_OK) {
3456    vm_exit_during_initialization("Failed to initialize tracing backend");
3457  }
3458
3459  // Set flag that basic initialization has completed. Used by exceptions and various
3460  // debug stuff, that does not work until all basic classes have been initialized.
3461  set_init_completed();
3462
3463  Metaspace::post_initialize();
3464
3465  HOTSPOT_VM_INIT_END();
3466
3467  // record VM initialization completion time
3468#if INCLUDE_MANAGEMENT
3469  Management::record_vm_init_completed();
3470#endif // INCLUDE_MANAGEMENT
3471
3472  // Compute system loader. Note that this has to occur after set_init_completed, since
3473  // valid exceptions may be thrown in the process.
3474  // Note that we do not use CHECK_0 here since we are inside an EXCEPTION_MARK and
3475  // set_init_completed has just been called, causing exceptions not to be shortcut
3476  // anymore. We call vm_exit_during_initialization directly instead.
3477  SystemDictionary::compute_java_system_loader(CHECK_JNI_ERR);
3478
3479#if INCLUDE_ALL_GCS
3480  // Support for ConcurrentMarkSweep. This should be cleaned up
3481  // and better encapsulated. The ugly nested if test would go away
3482  // once things are properly refactored. XXX YSR
3483  if (UseConcMarkSweepGC || UseG1GC) {
3484    if (UseConcMarkSweepGC) {
3485      ConcurrentMarkSweepThread::makeSurrogateLockerThread(CHECK_JNI_ERR);
3486    } else {
3487      ConcurrentMarkThread::makeSurrogateLockerThread(CHECK_JNI_ERR);
3488    }
3489  }
3490#endif // INCLUDE_ALL_GCS
3491
3492  // Always call even when there are not JVMTI environments yet, since environments
3493  // may be attached late and JVMTI must track phases of VM execution
3494  JvmtiExport::enter_live_phase();
3495
3496  // Signal Dispatcher needs to be started before VMInit event is posted
3497  os::signal_init();
3498
3499  // Start Attach Listener if +StartAttachListener or it can't be started lazily
3500  if (!DisableAttachMechanism) {
3501    AttachListener::vm_start();
3502    if (StartAttachListener || AttachListener::init_at_startup()) {
3503      AttachListener::init();
3504    }
3505  }
3506
3507  // Launch -Xrun agents
3508  // Must be done in the JVMTI live phase so that for backward compatibility the JDWP
3509  // back-end can launch with -Xdebug -Xrunjdwp.
3510  if (!EagerXrunInit && Arguments::init_libraries_at_startup()) {
3511    create_vm_init_libraries();
3512  }
3513
3514  // Notify JVMTI agents that VM initialization is complete - nop if no agents.
3515  JvmtiExport::post_vm_initialized();
3516
3517  if (TRACE_START() != JNI_OK) {
3518    vm_exit_during_initialization("Failed to start tracing backend.");
3519  }
3520
3521  if (CleanChunkPoolAsync) {
3522    Chunk::start_chunk_pool_cleaner_task();
3523  }
3524
3525  // initialize compiler(s)
3526#if defined(COMPILER1) || defined(COMPILER2) || defined(SHARK)
3527  CompileBroker::compilation_init();
3528#endif
3529
3530  // Pre-initialize some JSR292 core classes to avoid deadlock during class loading.
3531  // It is done after compilers are initialized, because otherwise compilations of
3532  // signature polymorphic MH intrinsics can be missed
3533  // (see SystemDictionary::find_method_handle_intrinsic).
3534  initialize_jsr292_core_classes(CHECK_JNI_ERR);
3535
3536#if INCLUDE_MANAGEMENT
3537  Management::initialize(THREAD);
3538
3539  if (HAS_PENDING_EXCEPTION) {
3540    // management agent fails to start possibly due to
3541    // configuration problem and is responsible for printing
3542    // stack trace if appropriate. Simply exit VM.
3543    vm_exit(1);
3544  }
3545#endif // INCLUDE_MANAGEMENT
3546
3547  if (Arguments::has_profile())       FlatProfiler::engage(main_thread, true);
3548  if (MemProfiling)                   MemProfiler::engage();
3549  StatSampler::engage();
3550  if (CheckJNICalls)                  JniPeriodicChecker::engage();
3551
3552  BiasedLocking::init();
3553
3554#if INCLUDE_RTM_OPT
3555  RTMLockingCounters::init();
3556#endif
3557
3558  if (JDK_Version::current().post_vm_init_hook_enabled()) {
3559    call_postVMInitHook(THREAD);
3560    // The Java side of PostVMInitHook.run must deal with all
3561    // exceptions and provide means of diagnosis.
3562    if (HAS_PENDING_EXCEPTION) {
3563      CLEAR_PENDING_EXCEPTION;
3564    }
3565  }
3566
3567  {
3568    MutexLocker ml(PeriodicTask_lock);
3569    // Make sure the WatcherThread can be started by WatcherThread::start()
3570    // or by dynamic enrollment.
3571    WatcherThread::make_startable();
3572    // Start up the WatcherThread if there are any periodic tasks
3573    // NOTE:  All PeriodicTasks should be registered by now. If they
3574    //   aren't, late joiners might appear to start slowly (we might
3575    //   take a while to process their first tick).
3576    if (PeriodicTask::num_tasks() > 0) {
3577      WatcherThread::start();
3578    }
3579  }
3580
3581  create_vm_timer.end();
3582#ifdef ASSERT
3583  _vm_complete = true;
3584#endif
3585  return JNI_OK;
3586}
3587
3588// type for the Agent_OnLoad and JVM_OnLoad entry points
3589extern "C" {
3590  typedef jint (JNICALL *OnLoadEntry_t)(JavaVM *, char *, void *);
3591}
3592// Find a command line agent library and return its entry point for
3593//         -agentlib:  -agentpath:   -Xrun
3594// num_symbol_entries must be passed-in since only the caller knows the number of symbols in the array.
3595static OnLoadEntry_t lookup_on_load(AgentLibrary* agent,
3596                                    const char *on_load_symbols[],
3597                                    size_t num_symbol_entries) {
3598  OnLoadEntry_t on_load_entry = NULL;
3599  void *library = NULL;
3600
3601  if (!agent->valid()) {
3602    char buffer[JVM_MAXPATHLEN];
3603    char ebuf[1024] = "";
3604    const char *name = agent->name();
3605    const char *msg = "Could not find agent library ";
3606
3607    // First check to see if agent is statically linked into executable
3608    if (os::find_builtin_agent(agent, on_load_symbols, num_symbol_entries)) {
3609      library = agent->os_lib();
3610    } else if (agent->is_absolute_path()) {
3611      library = os::dll_load(name, ebuf, sizeof ebuf);
3612      if (library == NULL) {
3613        const char *sub_msg = " in absolute path, with error: ";
3614        size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1;
3615        char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread);
3616        jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
3617        // If we can't find the agent, exit.
3618        vm_exit_during_initialization(buf, NULL);
3619        FREE_C_HEAP_ARRAY(char, buf);
3620      }
3621    } else {
3622      // Try to load the agent from the standard dll directory
3623      if (os::dll_build_name(buffer, sizeof(buffer), Arguments::get_dll_dir(),
3624                             name)) {
3625        library = os::dll_load(buffer, ebuf, sizeof ebuf);
3626      }
3627      if (library == NULL) { // Try the local directory
3628        char ns[1] = {0};
3629        if (os::dll_build_name(buffer, sizeof(buffer), ns, name)) {
3630          library = os::dll_load(buffer, ebuf, sizeof ebuf);
3631        }
3632        if (library == NULL) {
3633          const char *sub_msg = " on the library path, with error: ";
3634          size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1;
3635          char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread);
3636          jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
3637          // If we can't find the agent, exit.
3638          vm_exit_during_initialization(buf, NULL);
3639          FREE_C_HEAP_ARRAY(char, buf);
3640        }
3641      }
3642    }
3643    agent->set_os_lib(library);
3644    agent->set_valid();
3645  }
3646
3647  // Find the OnLoad function.
3648  on_load_entry =
3649    CAST_TO_FN_PTR(OnLoadEntry_t, os::find_agent_function(agent,
3650                                                          false,
3651                                                          on_load_symbols,
3652                                                          num_symbol_entries));
3653  return on_load_entry;
3654}
3655
3656// Find the JVM_OnLoad entry point
3657static OnLoadEntry_t lookup_jvm_on_load(AgentLibrary* agent) {
3658  const char *on_load_symbols[] = JVM_ONLOAD_SYMBOLS;
3659  return lookup_on_load(agent, on_load_symbols, sizeof(on_load_symbols) / sizeof(char*));
3660}
3661
3662// Find the Agent_OnLoad entry point
3663static OnLoadEntry_t lookup_agent_on_load(AgentLibrary* agent) {
3664  const char *on_load_symbols[] = AGENT_ONLOAD_SYMBOLS;
3665  return lookup_on_load(agent, on_load_symbols, sizeof(on_load_symbols) / sizeof(char*));
3666}
3667
3668// For backwards compatibility with -Xrun
3669// Convert libraries with no JVM_OnLoad, but which have Agent_OnLoad to be
3670// treated like -agentpath:
3671// Must be called before agent libraries are created
3672void Threads::convert_vm_init_libraries_to_agents() {
3673  AgentLibrary* agent;
3674  AgentLibrary* next;
3675
3676  for (agent = Arguments::libraries(); agent != NULL; agent = next) {
3677    next = agent->next();  // cache the next agent now as this agent may get moved off this list
3678    OnLoadEntry_t on_load_entry = lookup_jvm_on_load(agent);
3679
3680    // If there is an JVM_OnLoad function it will get called later,
3681    // otherwise see if there is an Agent_OnLoad
3682    if (on_load_entry == NULL) {
3683      on_load_entry = lookup_agent_on_load(agent);
3684      if (on_load_entry != NULL) {
3685        // switch it to the agent list -- so that Agent_OnLoad will be called,
3686        // JVM_OnLoad won't be attempted and Agent_OnUnload will
3687        Arguments::convert_library_to_agent(agent);
3688      } else {
3689        vm_exit_during_initialization("Could not find JVM_OnLoad or Agent_OnLoad function in the library", agent->name());
3690      }
3691    }
3692  }
3693}
3694
3695// Create agents for -agentlib:  -agentpath:  and converted -Xrun
3696// Invokes Agent_OnLoad
3697// Called very early -- before JavaThreads exist
3698void Threads::create_vm_init_agents() {
3699  extern struct JavaVM_ main_vm;
3700  AgentLibrary* agent;
3701
3702  JvmtiExport::enter_onload_phase();
3703
3704  for (agent = Arguments::agents(); agent != NULL; agent = agent->next()) {
3705    OnLoadEntry_t  on_load_entry = lookup_agent_on_load(agent);
3706
3707    if (on_load_entry != NULL) {
3708      // Invoke the Agent_OnLoad function
3709      jint err = (*on_load_entry)(&main_vm, agent->options(), NULL);
3710      if (err != JNI_OK) {
3711        vm_exit_during_initialization("agent library failed to init", agent->name());
3712      }
3713    } else {
3714      vm_exit_during_initialization("Could not find Agent_OnLoad function in the agent library", agent->name());
3715    }
3716  }
3717  JvmtiExport::enter_primordial_phase();
3718}
3719
3720extern "C" {
3721  typedef void (JNICALL *Agent_OnUnload_t)(JavaVM *);
3722}
3723
3724void Threads::shutdown_vm_agents() {
3725  // Send any Agent_OnUnload notifications
3726  const char *on_unload_symbols[] = AGENT_ONUNLOAD_SYMBOLS;
3727  size_t num_symbol_entries = ARRAY_SIZE(on_unload_symbols);
3728  extern struct JavaVM_ main_vm;
3729  for (AgentLibrary* agent = Arguments::agents(); agent != NULL; agent = agent->next()) {
3730
3731    // Find the Agent_OnUnload function.
3732    Agent_OnUnload_t unload_entry = CAST_TO_FN_PTR(Agent_OnUnload_t,
3733                                                   os::find_agent_function(agent,
3734                                                   false,
3735                                                   on_unload_symbols,
3736                                                   num_symbol_entries));
3737
3738    // Invoke the Agent_OnUnload function
3739    if (unload_entry != NULL) {
3740      JavaThread* thread = JavaThread::current();
3741      ThreadToNativeFromVM ttn(thread);
3742      HandleMark hm(thread);
3743      (*unload_entry)(&main_vm);
3744    }
3745  }
3746}
3747
3748// Called for after the VM is initialized for -Xrun libraries which have not been converted to agent libraries
3749// Invokes JVM_OnLoad
3750void Threads::create_vm_init_libraries() {
3751  extern struct JavaVM_ main_vm;
3752  AgentLibrary* agent;
3753
3754  for (agent = Arguments::libraries(); agent != NULL; agent = agent->next()) {
3755    OnLoadEntry_t on_load_entry = lookup_jvm_on_load(agent);
3756
3757    if (on_load_entry != NULL) {
3758      // Invoke the JVM_OnLoad function
3759      JavaThread* thread = JavaThread::current();
3760      ThreadToNativeFromVM ttn(thread);
3761      HandleMark hm(thread);
3762      jint err = (*on_load_entry)(&main_vm, agent->options(), NULL);
3763      if (err != JNI_OK) {
3764        vm_exit_during_initialization("-Xrun library failed to init", agent->name());
3765      }
3766    } else {
3767      vm_exit_during_initialization("Could not find JVM_OnLoad function in -Xrun library", agent->name());
3768    }
3769  }
3770}
3771
3772JavaThread* Threads::find_java_thread_from_java_tid(jlong java_tid) {
3773  assert(Threads_lock->owned_by_self(), "Must hold Threads_lock");
3774
3775  JavaThread* java_thread = NULL;
3776  // Sequential search for now.  Need to do better optimization later.
3777  for (JavaThread* thread = Threads::first(); thread != NULL; thread = thread->next()) {
3778    oop tobj = thread->threadObj();
3779    if (!thread->is_exiting() &&
3780        tobj != NULL &&
3781        java_tid == java_lang_Thread::thread_id(tobj)) {
3782      java_thread = thread;
3783      break;
3784    }
3785  }
3786  return java_thread;
3787}
3788
3789
3790// Last thread running calls java.lang.Shutdown.shutdown()
3791void JavaThread::invoke_shutdown_hooks() {
3792  HandleMark hm(this);
3793
3794  // We could get here with a pending exception, if so clear it now.
3795  if (this->has_pending_exception()) {
3796    this->clear_pending_exception();
3797  }
3798
3799  EXCEPTION_MARK;
3800  Klass* k =
3801    SystemDictionary::resolve_or_null(vmSymbols::java_lang_Shutdown(),
3802                                      THREAD);
3803  if (k != NULL) {
3804    // SystemDictionary::resolve_or_null will return null if there was
3805    // an exception.  If we cannot load the Shutdown class, just don't
3806    // call Shutdown.shutdown() at all.  This will mean the shutdown hooks
3807    // and finalizers (if runFinalizersOnExit is set) won't be run.
3808    // Note that if a shutdown hook was registered or runFinalizersOnExit
3809    // was called, the Shutdown class would have already been loaded
3810    // (Runtime.addShutdownHook and runFinalizersOnExit will load it).
3811    instanceKlassHandle shutdown_klass (THREAD, k);
3812    JavaValue result(T_VOID);
3813    JavaCalls::call_static(&result,
3814                           shutdown_klass,
3815                           vmSymbols::shutdown_method_name(),
3816                           vmSymbols::void_method_signature(),
3817                           THREAD);
3818  }
3819  CLEAR_PENDING_EXCEPTION;
3820}
3821
3822// Threads::destroy_vm() is normally called from jni_DestroyJavaVM() when
3823// the program falls off the end of main(). Another VM exit path is through
3824// vm_exit() when the program calls System.exit() to return a value or when
3825// there is a serious error in VM. The two shutdown paths are not exactly
3826// the same, but they share Shutdown.shutdown() at Java level and before_exit()
3827// and VM_Exit op at VM level.
3828//
3829// Shutdown sequence:
3830//   + Shutdown native memory tracking if it is on
3831//   + Wait until we are the last non-daemon thread to execute
3832//     <-- every thing is still working at this moment -->
3833//   + Call java.lang.Shutdown.shutdown(), which will invoke Java level
3834//        shutdown hooks, run finalizers if finalization-on-exit
3835//   + Call before_exit(), prepare for VM exit
3836//      > run VM level shutdown hooks (they are registered through JVM_OnExit(),
3837//        currently the only user of this mechanism is File.deleteOnExit())
3838//      > stop flat profiler, StatSampler, watcher thread, CMS threads,
3839//        post thread end and vm death events to JVMTI,
3840//        stop signal thread
3841//   + Call JavaThread::exit(), it will:
3842//      > release JNI handle blocks, remove stack guard pages
3843//      > remove this thread from Threads list
3844//     <-- no more Java code from this thread after this point -->
3845//   + Stop VM thread, it will bring the remaining VM to a safepoint and stop
3846//     the compiler threads at safepoint
3847//     <-- do not use anything that could get blocked by Safepoint -->
3848//   + Disable tracing at JNI/JVM barriers
3849//   + Set _vm_exited flag for threads that are still running native code
3850//   + Delete this thread
3851//   + Call exit_globals()
3852//      > deletes tty
3853//      > deletes PerfMemory resources
3854//   + Return to caller
3855
3856bool Threads::destroy_vm() {
3857  JavaThread* thread = JavaThread::current();
3858
3859#ifdef ASSERT
3860  _vm_complete = false;
3861#endif
3862  // Wait until we are the last non-daemon thread to execute
3863  { MutexLocker nu(Threads_lock);
3864    while (Threads::number_of_non_daemon_threads() > 1)
3865      // This wait should make safepoint checks, wait without a timeout,
3866      // and wait as a suspend-equivalent condition.
3867      //
3868      // Note: If the FlatProfiler is running and this thread is waiting
3869      // for another non-daemon thread to finish, then the FlatProfiler
3870      // is waiting for the external suspend request on this thread to
3871      // complete. wait_for_ext_suspend_completion() will eventually
3872      // timeout, but that takes time. Making this wait a suspend-
3873      // equivalent condition solves that timeout problem.
3874      //
3875      Threads_lock->wait(!Mutex::_no_safepoint_check_flag, 0,
3876                         Mutex::_as_suspend_equivalent_flag);
3877  }
3878
3879  // Hang forever on exit if we are reporting an error.
3880  if (ShowMessageBoxOnError && is_error_reported()) {
3881    os::infinite_sleep();
3882  }
3883  os::wait_for_keypress_at_exit();
3884
3885  // run Java level shutdown hooks
3886  thread->invoke_shutdown_hooks();
3887
3888  before_exit(thread);
3889
3890  thread->exit(true);
3891
3892  // Stop VM thread.
3893  {
3894    // 4945125 The vm thread comes to a safepoint during exit.
3895    // GC vm_operations can get caught at the safepoint, and the
3896    // heap is unparseable if they are caught. Grab the Heap_lock
3897    // to prevent this. The GC vm_operations will not be able to
3898    // queue until after the vm thread is dead. After this point,
3899    // we'll never emerge out of the safepoint before the VM exits.
3900
3901    MutexLocker ml(Heap_lock);
3902
3903    VMThread::wait_for_vm_thread_exit();
3904    assert(SafepointSynchronize::is_at_safepoint(), "VM thread should exit at Safepoint");
3905    VMThread::destroy();
3906  }
3907
3908  // clean up ideal graph printers
3909#if defined(COMPILER2) && !defined(PRODUCT)
3910  IdealGraphPrinter::clean_up();
3911#endif
3912
3913  // Now, all Java threads are gone except daemon threads. Daemon threads
3914  // running Java code or in VM are stopped by the Safepoint. However,
3915  // daemon threads executing native code are still running.  But they
3916  // will be stopped at native=>Java/VM barriers. Note that we can't
3917  // simply kill or suspend them, as it is inherently deadlock-prone.
3918
3919#ifndef PRODUCT
3920  // disable function tracing at JNI/JVM barriers
3921  TraceJNICalls = false;
3922  TraceJVMCalls = false;
3923  TraceRuntimeCalls = false;
3924#endif
3925
3926  VM_Exit::set_vm_exited();
3927
3928  notify_vm_shutdown();
3929
3930  delete thread;
3931
3932  // exit_globals() will delete tty
3933  exit_globals();
3934
3935  return true;
3936}
3937
3938
3939jboolean Threads::is_supported_jni_version_including_1_1(jint version) {
3940  if (version == JNI_VERSION_1_1) return JNI_TRUE;
3941  return is_supported_jni_version(version);
3942}
3943
3944
3945jboolean Threads::is_supported_jni_version(jint version) {
3946  if (version == JNI_VERSION_1_2) return JNI_TRUE;
3947  if (version == JNI_VERSION_1_4) return JNI_TRUE;
3948  if (version == JNI_VERSION_1_6) return JNI_TRUE;
3949  if (version == JNI_VERSION_1_8) return JNI_TRUE;
3950  return JNI_FALSE;
3951}
3952
3953
3954void Threads::add(JavaThread* p, bool force_daemon) {
3955  // The threads lock must be owned at this point
3956  assert_locked_or_safepoint(Threads_lock);
3957
3958  // See the comment for this method in thread.hpp for its purpose and
3959  // why it is called here.
3960  p->initialize_queues();
3961  p->set_next(_thread_list);
3962  _thread_list = p;
3963  _number_of_threads++;
3964  oop threadObj = p->threadObj();
3965  bool daemon = true;
3966  // Bootstrapping problem: threadObj can be null for initial
3967  // JavaThread (or for threads attached via JNI)
3968  if ((!force_daemon) && (threadObj == NULL || !java_lang_Thread::is_daemon(threadObj))) {
3969    _number_of_non_daemon_threads++;
3970    daemon = false;
3971  }
3972
3973  ThreadService::add_thread(p, daemon);
3974
3975  // Possible GC point.
3976  Events::log(p, "Thread added: " INTPTR_FORMAT, p);
3977}
3978
3979void Threads::remove(JavaThread* p) {
3980  // Extra scope needed for Thread_lock, so we can check
3981  // that we do not remove thread without safepoint code notice
3982  { MutexLocker ml(Threads_lock);
3983
3984    assert(includes(p), "p must be present");
3985
3986    JavaThread* current = _thread_list;
3987    JavaThread* prev    = NULL;
3988
3989    while (current != p) {
3990      prev    = current;
3991      current = current->next();
3992    }
3993
3994    if (prev) {
3995      prev->set_next(current->next());
3996    } else {
3997      _thread_list = p->next();
3998    }
3999    _number_of_threads--;
4000    oop threadObj = p->threadObj();
4001    bool daemon = true;
4002    if (threadObj == NULL || !java_lang_Thread::is_daemon(threadObj)) {
4003      _number_of_non_daemon_threads--;
4004      daemon = false;
4005
4006      // Only one thread left, do a notify on the Threads_lock so a thread waiting
4007      // on destroy_vm will wake up.
4008      if (number_of_non_daemon_threads() == 1) {
4009        Threads_lock->notify_all();
4010      }
4011    }
4012    ThreadService::remove_thread(p, daemon);
4013
4014    // Make sure that safepoint code disregard this thread. This is needed since
4015    // the thread might mess around with locks after this point. This can cause it
4016    // to do callbacks into the safepoint code. However, the safepoint code is not aware
4017    // of this thread since it is removed from the queue.
4018    p->set_terminated_value();
4019  } // unlock Threads_lock
4020
4021  // Since Events::log uses a lock, we grab it outside the Threads_lock
4022  Events::log(p, "Thread exited: " INTPTR_FORMAT, p);
4023}
4024
4025// Threads_lock must be held when this is called (or must be called during a safepoint)
4026bool Threads::includes(JavaThread* p) {
4027  assert(Threads_lock->is_locked(), "sanity check");
4028  ALL_JAVA_THREADS(q) {
4029    if (q == p) {
4030      return true;
4031    }
4032  }
4033  return false;
4034}
4035
4036// Operations on the Threads list for GC.  These are not explicitly locked,
4037// but the garbage collector must provide a safe context for them to run.
4038// In particular, these things should never be called when the Threads_lock
4039// is held by some other thread. (Note: the Safepoint abstraction also
4040// uses the Threads_lock to guarantee this property. It also makes sure that
4041// all threads gets blocked when exiting or starting).
4042
4043void Threads::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
4044  ALL_JAVA_THREADS(p) {
4045    p->oops_do(f, cld_f, cf);
4046  }
4047  VMThread::vm_thread()->oops_do(f, cld_f, cf);
4048}
4049
4050void Threads::change_thread_claim_parity() {
4051  // Set the new claim parity.
4052  assert(_thread_claim_parity >= 0 && _thread_claim_parity <= 2,
4053         "Not in range.");
4054  _thread_claim_parity++;
4055  if (_thread_claim_parity == 3) _thread_claim_parity = 1;
4056  assert(_thread_claim_parity >= 1 && _thread_claim_parity <= 2,
4057         "Not in range.");
4058}
4059
4060#ifdef ASSERT
4061void Threads::assert_all_threads_claimed() {
4062  ALL_JAVA_THREADS(p) {
4063    const int thread_parity = p->oops_do_parity();
4064    assert((thread_parity == _thread_claim_parity),
4065        err_msg("Thread " PTR_FORMAT " has incorrect parity %d != %d", p2i(p), thread_parity, _thread_claim_parity));
4066  }
4067}
4068#endif // ASSERT
4069
4070void Threads::possibly_parallel_oops_do(bool is_par, OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
4071  int cp = Threads::thread_claim_parity();
4072  ALL_JAVA_THREADS(p) {
4073    if (p->claim_oops_do(is_par, cp)) {
4074      p->oops_do(f, cld_f, cf);
4075    }
4076  }
4077  VMThread* vmt = VMThread::vm_thread();
4078  if (vmt->claim_oops_do(is_par, cp)) {
4079    vmt->oops_do(f, cld_f, cf);
4080  }
4081}
4082
4083#if INCLUDE_ALL_GCS
4084// Used by ParallelScavenge
4085void Threads::create_thread_roots_tasks(GCTaskQueue* q) {
4086  ALL_JAVA_THREADS(p) {
4087    q->enqueue(new ThreadRootsTask(p));
4088  }
4089  q->enqueue(new ThreadRootsTask(VMThread::vm_thread()));
4090}
4091
4092// Used by Parallel Old
4093void Threads::create_thread_roots_marking_tasks(GCTaskQueue* q) {
4094  ALL_JAVA_THREADS(p) {
4095    q->enqueue(new ThreadRootsMarkingTask(p));
4096  }
4097  q->enqueue(new ThreadRootsMarkingTask(VMThread::vm_thread()));
4098}
4099#endif // INCLUDE_ALL_GCS
4100
4101void Threads::nmethods_do(CodeBlobClosure* cf) {
4102  ALL_JAVA_THREADS(p) {
4103    p->nmethods_do(cf);
4104  }
4105  VMThread::vm_thread()->nmethods_do(cf);
4106}
4107
4108void Threads::metadata_do(void f(Metadata*)) {
4109  ALL_JAVA_THREADS(p) {
4110    p->metadata_do(f);
4111  }
4112}
4113
4114class ThreadHandlesClosure : public ThreadClosure {
4115  void (*_f)(Metadata*);
4116 public:
4117  ThreadHandlesClosure(void f(Metadata*)) : _f(f) {}
4118  virtual void do_thread(Thread* thread) {
4119    thread->metadata_handles_do(_f);
4120  }
4121};
4122
4123void Threads::metadata_handles_do(void f(Metadata*)) {
4124  // Only walk the Handles in Thread.
4125  ThreadHandlesClosure handles_closure(f);
4126  threads_do(&handles_closure);
4127}
4128
4129void Threads::deoptimized_wrt_marked_nmethods() {
4130  ALL_JAVA_THREADS(p) {
4131    p->deoptimized_wrt_marked_nmethods();
4132  }
4133}
4134
4135
4136// Get count Java threads that are waiting to enter the specified monitor.
4137GrowableArray<JavaThread*>* Threads::get_pending_threads(int count,
4138                                                         address monitor,
4139                                                         bool doLock) {
4140  assert(doLock || SafepointSynchronize::is_at_safepoint(),
4141         "must grab Threads_lock or be at safepoint");
4142  GrowableArray<JavaThread*>* result = new GrowableArray<JavaThread*>(count);
4143
4144  int i = 0;
4145  {
4146    MutexLockerEx ml(doLock ? Threads_lock : NULL);
4147    ALL_JAVA_THREADS(p) {
4148      if (p->is_Compiler_thread()) continue;
4149
4150      address pending = (address)p->current_pending_monitor();
4151      if (pending == monitor) {             // found a match
4152        if (i < count) result->append(p);   // save the first count matches
4153        i++;
4154      }
4155    }
4156  }
4157  return result;
4158}
4159
4160
4161JavaThread *Threads::owning_thread_from_monitor_owner(address owner,
4162                                                      bool doLock) {
4163  assert(doLock ||
4164         Threads_lock->owned_by_self() ||
4165         SafepointSynchronize::is_at_safepoint(),
4166         "must grab Threads_lock or be at safepoint");
4167
4168  // NULL owner means not locked so we can skip the search
4169  if (owner == NULL) return NULL;
4170
4171  {
4172    MutexLockerEx ml(doLock ? Threads_lock : NULL);
4173    ALL_JAVA_THREADS(p) {
4174      // first, see if owner is the address of a Java thread
4175      if (owner == (address)p) return p;
4176    }
4177  }
4178  // Cannot assert on lack of success here since this function may be
4179  // used by code that is trying to report useful problem information
4180  // like deadlock detection.
4181  if (UseHeavyMonitors) return NULL;
4182
4183  // If we didn't find a matching Java thread and we didn't force use of
4184  // heavyweight monitors, then the owner is the stack address of the
4185  // Lock Word in the owning Java thread's stack.
4186  //
4187  JavaThread* the_owner = NULL;
4188  {
4189    MutexLockerEx ml(doLock ? Threads_lock : NULL);
4190    ALL_JAVA_THREADS(q) {
4191      if (q->is_lock_owned(owner)) {
4192        the_owner = q;
4193        break;
4194      }
4195    }
4196  }
4197  // cannot assert on lack of success here; see above comment
4198  return the_owner;
4199}
4200
4201// Threads::print_on() is called at safepoint by VM_PrintThreads operation.
4202void Threads::print_on(outputStream* st, bool print_stacks,
4203                       bool internal_format, bool print_concurrent_locks) {
4204  char buf[32];
4205  st->print_cr("%s", os::local_time_string(buf, sizeof(buf)));
4206
4207  st->print_cr("Full thread dump %s (%s %s):",
4208               Abstract_VM_Version::vm_name(),
4209               Abstract_VM_Version::vm_release(),
4210               Abstract_VM_Version::vm_info_string());
4211  st->cr();
4212
4213#if INCLUDE_SERVICES
4214  // Dump concurrent locks
4215  ConcurrentLocksDump concurrent_locks;
4216  if (print_concurrent_locks) {
4217    concurrent_locks.dump_at_safepoint();
4218  }
4219#endif // INCLUDE_SERVICES
4220
4221  ALL_JAVA_THREADS(p) {
4222    ResourceMark rm;
4223    p->print_on(st);
4224    if (print_stacks) {
4225      if (internal_format) {
4226        p->trace_stack();
4227      } else {
4228        p->print_stack_on(st);
4229      }
4230    }
4231    st->cr();
4232#if INCLUDE_SERVICES
4233    if (print_concurrent_locks) {
4234      concurrent_locks.print_locks_on(p, st);
4235    }
4236#endif // INCLUDE_SERVICES
4237  }
4238
4239  VMThread::vm_thread()->print_on(st);
4240  st->cr();
4241  Universe::heap()->print_gc_threads_on(st);
4242  WatcherThread* wt = WatcherThread::watcher_thread();
4243  if (wt != NULL) {
4244    wt->print_on(st);
4245    st->cr();
4246  }
4247  CompileBroker::print_compiler_threads_on(st);
4248  st->flush();
4249}
4250
4251// Threads::print_on_error() is called by fatal error handler. It's possible
4252// that VM is not at safepoint and/or current thread is inside signal handler.
4253// Don't print stack trace, as the stack may not be walkable. Don't allocate
4254// memory (even in resource area), it might deadlock the error handler.
4255void Threads::print_on_error(outputStream* st, Thread* current, char* buf,
4256                             int buflen) {
4257  bool found_current = false;
4258  st->print_cr("Java Threads: ( => current thread )");
4259  ALL_JAVA_THREADS(thread) {
4260    bool is_current = (current == thread);
4261    found_current = found_current || is_current;
4262
4263    st->print("%s", is_current ? "=>" : "  ");
4264
4265    st->print(PTR_FORMAT, thread);
4266    st->print(" ");
4267    thread->print_on_error(st, buf, buflen);
4268    st->cr();
4269  }
4270  st->cr();
4271
4272  st->print_cr("Other Threads:");
4273  if (VMThread::vm_thread()) {
4274    bool is_current = (current == VMThread::vm_thread());
4275    found_current = found_current || is_current;
4276    st->print("%s", current == VMThread::vm_thread() ? "=>" : "  ");
4277
4278    st->print(PTR_FORMAT, VMThread::vm_thread());
4279    st->print(" ");
4280    VMThread::vm_thread()->print_on_error(st, buf, buflen);
4281    st->cr();
4282  }
4283  WatcherThread* wt = WatcherThread::watcher_thread();
4284  if (wt != NULL) {
4285    bool is_current = (current == wt);
4286    found_current = found_current || is_current;
4287    st->print("%s", is_current ? "=>" : "  ");
4288
4289    st->print(PTR_FORMAT, wt);
4290    st->print(" ");
4291    wt->print_on_error(st, buf, buflen);
4292    st->cr();
4293  }
4294  if (!found_current) {
4295    st->cr();
4296    st->print("=>" PTR_FORMAT " (exited) ", current);
4297    current->print_on_error(st, buf, buflen);
4298    st->cr();
4299  }
4300}
4301
4302// Internal SpinLock and Mutex
4303// Based on ParkEvent
4304
4305// Ad-hoc mutual exclusion primitives: SpinLock and Mux
4306//
4307// We employ SpinLocks _only for low-contention, fixed-length
4308// short-duration critical sections where we're concerned
4309// about native mutex_t or HotSpot Mutex:: latency.
4310// The mux construct provides a spin-then-block mutual exclusion
4311// mechanism.
4312//
4313// Testing has shown that contention on the ListLock guarding gFreeList
4314// is common.  If we implement ListLock as a simple SpinLock it's common
4315// for the JVM to devolve to yielding with little progress.  This is true
4316// despite the fact that the critical sections protected by ListLock are
4317// extremely short.
4318//
4319// TODO-FIXME: ListLock should be of type SpinLock.
4320// We should make this a 1st-class type, integrated into the lock
4321// hierarchy as leaf-locks.  Critically, the SpinLock structure
4322// should have sufficient padding to avoid false-sharing and excessive
4323// cache-coherency traffic.
4324
4325
4326typedef volatile int SpinLockT;
4327
4328void Thread::SpinAcquire(volatile int * adr, const char * LockName) {
4329  if (Atomic::cmpxchg (1, adr, 0) == 0) {
4330    return;   // normal fast-path return
4331  }
4332
4333  // Slow-path : We've encountered contention -- Spin/Yield/Block strategy.
4334  TEVENT(SpinAcquire - ctx);
4335  int ctr = 0;
4336  int Yields = 0;
4337  for (;;) {
4338    while (*adr != 0) {
4339      ++ctr;
4340      if ((ctr & 0xFFF) == 0 || !os::is_MP()) {
4341        if (Yields > 5) {
4342          os::naked_short_sleep(1);
4343        } else {
4344          os::naked_yield();
4345          ++Yields;
4346        }
4347      } else {
4348        SpinPause();
4349      }
4350    }
4351    if (Atomic::cmpxchg(1, adr, 0) == 0) return;
4352  }
4353}
4354
4355void Thread::SpinRelease(volatile int * adr) {
4356  assert(*adr != 0, "invariant");
4357  OrderAccess::fence();      // guarantee at least release consistency.
4358  // Roach-motel semantics.
4359  // It's safe if subsequent LDs and STs float "up" into the critical section,
4360  // but prior LDs and STs within the critical section can't be allowed
4361  // to reorder or float past the ST that releases the lock.
4362  // Loads and stores in the critical section - which appear in program
4363  // order before the store that releases the lock - must also appear
4364  // before the store that releases the lock in memory visibility order.
4365  // Conceptually we need a #loadstore|#storestore "release" MEMBAR before
4366  // the ST of 0 into the lock-word which releases the lock, so fence
4367  // more than covers this on all platforms.
4368  *adr = 0;
4369}
4370
4371// muxAcquire and muxRelease:
4372//
4373// *  muxAcquire and muxRelease support a single-word lock-word construct.
4374//    The LSB of the word is set IFF the lock is held.
4375//    The remainder of the word points to the head of a singly-linked list
4376//    of threads blocked on the lock.
4377//
4378// *  The current implementation of muxAcquire-muxRelease uses its own
4379//    dedicated Thread._MuxEvent instance.  If we're interested in
4380//    minimizing the peak number of extant ParkEvent instances then
4381//    we could eliminate _MuxEvent and "borrow" _ParkEvent as long
4382//    as certain invariants were satisfied.  Specifically, care would need
4383//    to be taken with regards to consuming unpark() "permits".
4384//    A safe rule of thumb is that a thread would never call muxAcquire()
4385//    if it's enqueued (cxq, EntryList, WaitList, etc) and will subsequently
4386//    park().  Otherwise the _ParkEvent park() operation in muxAcquire() could
4387//    consume an unpark() permit intended for monitorenter, for instance.
4388//    One way around this would be to widen the restricted-range semaphore
4389//    implemented in park().  Another alternative would be to provide
4390//    multiple instances of the PlatformEvent() for each thread.  One
4391//    instance would be dedicated to muxAcquire-muxRelease, for instance.
4392//
4393// *  Usage:
4394//    -- Only as leaf locks
4395//    -- for short-term locking only as muxAcquire does not perform
4396//       thread state transitions.
4397//
4398// Alternatives:
4399// *  We could implement muxAcquire and muxRelease with MCS or CLH locks
4400//    but with parking or spin-then-park instead of pure spinning.
4401// *  Use Taura-Oyama-Yonenzawa locks.
4402// *  It's possible to construct a 1-0 lock if we encode the lockword as
4403//    (List,LockByte).  Acquire will CAS the full lockword while Release
4404//    will STB 0 into the LockByte.  The 1-0 scheme admits stranding, so
4405//    acquiring threads use timers (ParkTimed) to detect and recover from
4406//    the stranding window.  Thread/Node structures must be aligned on 256-byte
4407//    boundaries by using placement-new.
4408// *  Augment MCS with advisory back-link fields maintained with CAS().
4409//    Pictorially:  LockWord -> T1 <-> T2 <-> T3 <-> ... <-> Tn <-> Owner.
4410//    The validity of the backlinks must be ratified before we trust the value.
4411//    If the backlinks are invalid the exiting thread must back-track through the
4412//    the forward links, which are always trustworthy.
4413// *  Add a successor indication.  The LockWord is currently encoded as
4414//    (List, LOCKBIT:1).  We could also add a SUCCBIT or an explicit _succ variable
4415//    to provide the usual futile-wakeup optimization.
4416//    See RTStt for details.
4417// *  Consider schedctl.sc_nopreempt to cover the critical section.
4418//
4419
4420
4421typedef volatile intptr_t MutexT;      // Mux Lock-word
4422enum MuxBits { LOCKBIT = 1 };
4423
4424void Thread::muxAcquire(volatile intptr_t * Lock, const char * LockName) {
4425  intptr_t w = Atomic::cmpxchg_ptr(LOCKBIT, Lock, 0);
4426  if (w == 0) return;
4427  if ((w & LOCKBIT) == 0 && Atomic::cmpxchg_ptr (w|LOCKBIT, Lock, w) == w) {
4428    return;
4429  }
4430
4431  TEVENT(muxAcquire - Contention);
4432  ParkEvent * const Self = Thread::current()->_MuxEvent;
4433  assert((intptr_t(Self) & LOCKBIT) == 0, "invariant");
4434  for (;;) {
4435    int its = (os::is_MP() ? 100 : 0) + 1;
4436
4437    // Optional spin phase: spin-then-park strategy
4438    while (--its >= 0) {
4439      w = *Lock;
4440      if ((w & LOCKBIT) == 0 && Atomic::cmpxchg_ptr (w|LOCKBIT, Lock, w) == w) {
4441        return;
4442      }
4443    }
4444
4445    Self->reset();
4446    Self->OnList = intptr_t(Lock);
4447    // The following fence() isn't _strictly necessary as the subsequent
4448    // CAS() both serializes execution and ratifies the fetched *Lock value.
4449    OrderAccess::fence();
4450    for (;;) {
4451      w = *Lock;
4452      if ((w & LOCKBIT) == 0) {
4453        if (Atomic::cmpxchg_ptr (w|LOCKBIT, Lock, w) == w) {
4454          Self->OnList = 0;   // hygiene - allows stronger asserts
4455          return;
4456        }
4457        continue;      // Interference -- *Lock changed -- Just retry
4458      }
4459      assert(w & LOCKBIT, "invariant");
4460      Self->ListNext = (ParkEvent *) (w & ~LOCKBIT);
4461      if (Atomic::cmpxchg_ptr(intptr_t(Self)|LOCKBIT, Lock, w) == w) break;
4462    }
4463
4464    while (Self->OnList != 0) {
4465      Self->park();
4466    }
4467  }
4468}
4469
4470void Thread::muxAcquireW(volatile intptr_t * Lock, ParkEvent * ev) {
4471  intptr_t w = Atomic::cmpxchg_ptr(LOCKBIT, Lock, 0);
4472  if (w == 0) return;
4473  if ((w & LOCKBIT) == 0 && Atomic::cmpxchg_ptr (w|LOCKBIT, Lock, w) == w) {
4474    return;
4475  }
4476
4477  TEVENT(muxAcquire - Contention);
4478  ParkEvent * ReleaseAfter = NULL;
4479  if (ev == NULL) {
4480    ev = ReleaseAfter = ParkEvent::Allocate(NULL);
4481  }
4482  assert((intptr_t(ev) & LOCKBIT) == 0, "invariant");
4483  for (;;) {
4484    guarantee(ev->OnList == 0, "invariant");
4485    int its = (os::is_MP() ? 100 : 0) + 1;
4486
4487    // Optional spin phase: spin-then-park strategy
4488    while (--its >= 0) {
4489      w = *Lock;
4490      if ((w & LOCKBIT) == 0 && Atomic::cmpxchg_ptr (w|LOCKBIT, Lock, w) == w) {
4491        if (ReleaseAfter != NULL) {
4492          ParkEvent::Release(ReleaseAfter);
4493        }
4494        return;
4495      }
4496    }
4497
4498    ev->reset();
4499    ev->OnList = intptr_t(Lock);
4500    // The following fence() isn't _strictly necessary as the subsequent
4501    // CAS() both serializes execution and ratifies the fetched *Lock value.
4502    OrderAccess::fence();
4503    for (;;) {
4504      w = *Lock;
4505      if ((w & LOCKBIT) == 0) {
4506        if (Atomic::cmpxchg_ptr (w|LOCKBIT, Lock, w) == w) {
4507          ev->OnList = 0;
4508          // We call ::Release while holding the outer lock, thus
4509          // artificially lengthening the critical section.
4510          // Consider deferring the ::Release() until the subsequent unlock(),
4511          // after we've dropped the outer lock.
4512          if (ReleaseAfter != NULL) {
4513            ParkEvent::Release(ReleaseAfter);
4514          }
4515          return;
4516        }
4517        continue;      // Interference -- *Lock changed -- Just retry
4518      }
4519      assert(w & LOCKBIT, "invariant");
4520      ev->ListNext = (ParkEvent *) (w & ~LOCKBIT);
4521      if (Atomic::cmpxchg_ptr(intptr_t(ev)|LOCKBIT, Lock, w) == w) break;
4522    }
4523
4524    while (ev->OnList != 0) {
4525      ev->park();
4526    }
4527  }
4528}
4529
4530// Release() must extract a successor from the list and then wake that thread.
4531// It can "pop" the front of the list or use a detach-modify-reattach (DMR) scheme
4532// similar to that used by ParkEvent::Allocate() and ::Release().  DMR-based
4533// Release() would :
4534// (A) CAS() or swap() null to *Lock, releasing the lock and detaching the list.
4535// (B) Extract a successor from the private list "in-hand"
4536// (C) attempt to CAS() the residual back into *Lock over null.
4537//     If there were any newly arrived threads and the CAS() would fail.
4538//     In that case Release() would detach the RATs, re-merge the list in-hand
4539//     with the RATs and repeat as needed.  Alternately, Release() might
4540//     detach and extract a successor, but then pass the residual list to the wakee.
4541//     The wakee would be responsible for reattaching and remerging before it
4542//     competed for the lock.
4543//
4544// Both "pop" and DMR are immune from ABA corruption -- there can be
4545// multiple concurrent pushers, but only one popper or detacher.
4546// This implementation pops from the head of the list.  This is unfair,
4547// but tends to provide excellent throughput as hot threads remain hot.
4548// (We wake recently run threads first).
4549//
4550// All paths through muxRelease() will execute a CAS.
4551// Release consistency -- We depend on the CAS in muxRelease() to provide full
4552// bidirectional fence/MEMBAR semantics, ensuring that all prior memory operations
4553// executed within the critical section are complete and globally visible before the
4554// store (CAS) to the lock-word that releases the lock becomes globally visible.
4555void Thread::muxRelease(volatile intptr_t * Lock)  {
4556  for (;;) {
4557    const intptr_t w = Atomic::cmpxchg_ptr(0, Lock, LOCKBIT);
4558    assert(w & LOCKBIT, "invariant");
4559    if (w == LOCKBIT) return;
4560    ParkEvent * const List = (ParkEvent *) (w & ~LOCKBIT);
4561    assert(List != NULL, "invariant");
4562    assert(List->OnList == intptr_t(Lock), "invariant");
4563    ParkEvent * const nxt = List->ListNext;
4564    guarantee((intptr_t(nxt) & LOCKBIT) == 0, "invariant");
4565
4566    // The following CAS() releases the lock and pops the head element.
4567    // The CAS() also ratifies the previously fetched lock-word value.
4568    if (Atomic::cmpxchg_ptr (intptr_t(nxt), Lock, w) != w) {
4569      continue;
4570    }
4571    List->OnList = 0;
4572    OrderAccess::fence();
4573    List->unpark();
4574    return;
4575  }
4576}
4577
4578
4579void Threads::verify() {
4580  ALL_JAVA_THREADS(p) {
4581    p->verify();
4582  }
4583  VMThread* thread = VMThread::vm_thread();
4584  if (thread != NULL) thread->verify();
4585}
4586