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