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