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