397
398 ThreadStatisticalInfo _statistical_info; // Statistics about the thread
399
400 JFR_ONLY(DEFINE_THREAD_LOCAL_FIELD_JFR;) // Thread-local data for jfr
401
402 int _vm_operation_started_count; // VM_Operation support
403 int _vm_operation_completed_count; // VM_Operation support
404
405 ObjectMonitor* _current_pending_monitor; // ObjectMonitor this thread
406 // is waiting to lock
407 bool _current_pending_monitor_is_from_java; // locking is from Java code
408 JvmtiRawMonitor* _current_pending_raw_monitor; // JvmtiRawMonitor this thread
409 // is waiting to lock
410
411
412 // ObjectMonitor on which this thread called Object.wait()
413 ObjectMonitor* _current_waiting_monitor;
414
415 // Per-thread ObjectMonitor lists:
416 public:
417 ObjectMonitor* om_free_list; // SLL of free ObjectMonitors
418 int om_free_count; // # on om_free_list
419 int om_free_provision; // # to try to allocate next
420 ObjectMonitor* om_in_use_list; // SLL of in-use ObjectMonitors
421 int om_in_use_count; // # on om_in_use_list
422
423 #ifdef ASSERT
424 private:
425 volatile uint64_t _visited_for_critical_count;
426
427 public:
428 void set_visited_for_critical_count(uint64_t safepoint_id) {
429 assert(_visited_for_critical_count == 0, "Must be reset before set");
430 assert((safepoint_id & 0x1) == 1, "Must be odd");
431 _visited_for_critical_count = safepoint_id;
432 }
433 void reset_visited_for_critical_count(uint64_t safepoint_id) {
434 assert(_visited_for_critical_count == safepoint_id, "Was not visited");
435 _visited_for_critical_count = 0;
436 }
437 bool was_visited_for_critical_count(uint64_t safepoint_id) const {
438 return _visited_for_critical_count == safepoint_id;
439 }
440 #endif
441
507 static inline Thread* current();
508 // Returns the current thread, or NULL if not attached
509 static inline Thread* current_or_null();
510 // Returns the current thread, or NULL if not attached, and is
511 // safe for use from signal-handlers
512 static inline Thread* current_or_null_safe();
513
514 // Common thread operations
515 #ifdef ASSERT
516 static void check_for_dangling_thread_pointer(Thread *thread);
517 #endif
518 static void set_priority(Thread* thread, ThreadPriority priority);
519 static ThreadPriority get_priority(const Thread* const thread);
520 static void start(Thread* thread);
521
522 void set_native_thread_name(const char *name) {
523 assert(Thread::current() == this, "set_native_thread_name can only be called on the current thread");
524 os::set_native_thread_name(name);
525 }
526
527 ObjectMonitor** om_in_use_list_addr() { return (ObjectMonitor **)&om_in_use_list; }
528 Monitor* SR_lock() const { return _SR_lock; }
529
530 bool has_async_exception() const { return (_suspend_flags & _has_async_exception) != 0; }
531
532 inline void set_suspend_flag(SuspendFlags f);
533 inline void clear_suspend_flag(SuspendFlags f);
534
535 inline void set_has_async_exception();
536 inline void clear_has_async_exception();
537
538 bool do_critical_native_unlock() const { return (_suspend_flags & _critical_native_unlock) != 0; }
539
540 inline void set_critical_native_unlock();
541 inline void clear_critical_native_unlock();
542
543 inline void set_trace_flag();
544 inline void clear_trace_flag();
545
546 // Support for Unhandled Oop detection
547 // Add the field for both, fastdebug and debug, builds to keep
|
397
398 ThreadStatisticalInfo _statistical_info; // Statistics about the thread
399
400 JFR_ONLY(DEFINE_THREAD_LOCAL_FIELD_JFR;) // Thread-local data for jfr
401
402 int _vm_operation_started_count; // VM_Operation support
403 int _vm_operation_completed_count; // VM_Operation support
404
405 ObjectMonitor* _current_pending_monitor; // ObjectMonitor this thread
406 // is waiting to lock
407 bool _current_pending_monitor_is_from_java; // locking is from Java code
408 JvmtiRawMonitor* _current_pending_raw_monitor; // JvmtiRawMonitor this thread
409 // is waiting to lock
410
411
412 // ObjectMonitor on which this thread called Object.wait()
413 ObjectMonitor* _current_waiting_monitor;
414
415 // Per-thread ObjectMonitor lists:
416 public:
417 ObjectMonitor* volatile om_free_list; // SLL of free ObjectMonitors
418 volatile int om_free_count; // # on om_free_list
419 int om_free_provision; // # to try to allocate next
420 ObjectMonitor* volatile om_in_use_list; // SLL of in-use ObjectMonitors
421 volatile int om_in_use_count; // # on om_in_use_list
422
423 #ifdef ASSERT
424 private:
425 volatile uint64_t _visited_for_critical_count;
426
427 public:
428 void set_visited_for_critical_count(uint64_t safepoint_id) {
429 assert(_visited_for_critical_count == 0, "Must be reset before set");
430 assert((safepoint_id & 0x1) == 1, "Must be odd");
431 _visited_for_critical_count = safepoint_id;
432 }
433 void reset_visited_for_critical_count(uint64_t safepoint_id) {
434 assert(_visited_for_critical_count == safepoint_id, "Was not visited");
435 _visited_for_critical_count = 0;
436 }
437 bool was_visited_for_critical_count(uint64_t safepoint_id) const {
438 return _visited_for_critical_count == safepoint_id;
439 }
440 #endif
441
507 static inline Thread* current();
508 // Returns the current thread, or NULL if not attached
509 static inline Thread* current_or_null();
510 // Returns the current thread, or NULL if not attached, and is
511 // safe for use from signal-handlers
512 static inline Thread* current_or_null_safe();
513
514 // Common thread operations
515 #ifdef ASSERT
516 static void check_for_dangling_thread_pointer(Thread *thread);
517 #endif
518 static void set_priority(Thread* thread, ThreadPriority priority);
519 static ThreadPriority get_priority(const Thread* const thread);
520 static void start(Thread* thread);
521
522 void set_native_thread_name(const char *name) {
523 assert(Thread::current() == this, "set_native_thread_name can only be called on the current thread");
524 os::set_native_thread_name(name);
525 }
526
527 Monitor* SR_lock() const { return _SR_lock; }
528
529 bool has_async_exception() const { return (_suspend_flags & _has_async_exception) != 0; }
530
531 inline void set_suspend_flag(SuspendFlags f);
532 inline void clear_suspend_flag(SuspendFlags f);
533
534 inline void set_has_async_exception();
535 inline void clear_has_async_exception();
536
537 bool do_critical_native_unlock() const { return (_suspend_flags & _critical_native_unlock) != 0; }
538
539 inline void set_critical_native_unlock();
540 inline void clear_critical_native_unlock();
541
542 inline void set_trace_flag();
543 inline void clear_trace_flag();
544
545 // Support for Unhandled Oop detection
546 // Add the field for both, fastdebug and debug, builds to keep
|