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