8341413: Stop including osThread_os.hpp in the middle of the OSThread class
Reviewed-by: coleenp, dholmes
This commit is contained in:
parent
7fa2f229fb
commit
72ac72fe1f
src/hotspot
os
aix
bsd
linux
windows
os_cpu
aix_ppc
bsd_aarch64
bsd_x86
linux_aarch64
linux_arm
linux_ppc
linux_riscv
linux_s390
linux_x86
windows_aarch64
windows_x86
share
interpreter
jvmci
runtime
@ -23,32 +23,28 @@
|
||||
*
|
||||
*/
|
||||
|
||||
// no precompiled headers
|
||||
|
||||
#include "memory/allocation.inline.hpp"
|
||||
#include "runtime/handles.inline.hpp"
|
||||
#include "runtime/mutexLocker.hpp"
|
||||
#include "runtime/os.hpp"
|
||||
#include "precompiled.hpp"
|
||||
#include "memory/allocation.hpp"
|
||||
#include "runtime/mutex.hpp"
|
||||
#include "runtime/osThread.hpp"
|
||||
#include "runtime/safepoint.hpp"
|
||||
#include "runtime/vmThread.hpp"
|
||||
|
||||
void OSThread::pd_initialize() {
|
||||
_thread_id = 0;
|
||||
_kernel_thread_id = 0;
|
||||
_siginfo = nullptr;
|
||||
_ucontext = nullptr;
|
||||
_expanding_stack = 0;
|
||||
_alt_sig_stack = nullptr;
|
||||
|
||||
_last_cpu_times.sys = _last_cpu_times.user = 0L;
|
||||
#include <signal.h>
|
||||
|
||||
OSThread::OSThread()
|
||||
: _thread_id(0),
|
||||
_thread_type(),
|
||||
_kernel_thread_id(0),
|
||||
_caller_sigmask(),
|
||||
sr(),
|
||||
_siginfo(nullptr),
|
||||
_ucontext(nullptr),
|
||||
_expanding_stack(0),
|
||||
_alt_sig_stack(nullptr),
|
||||
_last_cpu_times(),
|
||||
_startThread_lock(new Monitor(Mutex::event, "startThread_lock")) {
|
||||
sigemptyset(&_caller_sigmask);
|
||||
|
||||
_startThread_lock = new Monitor(Mutex::event, "startThread_lock");
|
||||
assert(_startThread_lock != nullptr, "check");
|
||||
}
|
||||
|
||||
void OSThread::pd_destroy() {
|
||||
OSThread::~OSThread() {
|
||||
delete _startThread_lock;
|
||||
}
|
||||
|
@ -26,23 +26,18 @@
|
||||
#ifndef OS_AIX_OSTHREAD_AIX_HPP
|
||||
#define OS_AIX_OSTHREAD_AIX_HPP
|
||||
|
||||
public:
|
||||
#include "runtime/osThreadBase.hpp"
|
||||
#include "suspendResume_posix.hpp"
|
||||
#include "utilities/globalDefinitions.hpp"
|
||||
|
||||
class OSThread : public OSThreadBase {
|
||||
friend class VMStructs;
|
||||
|
||||
typedef pthread_t thread_id_t;
|
||||
|
||||
private:
|
||||
thread_id_t _thread_id;
|
||||
int _thread_type;
|
||||
|
||||
public:
|
||||
|
||||
int thread_type() const {
|
||||
return _thread_type;
|
||||
}
|
||||
void set_thread_type(int type) {
|
||||
_thread_type = type;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
// On AIX, we use the pthread id as OSThread::thread_id and keep the kernel thread id
|
||||
// separately for diagnostic purposes.
|
||||
//
|
||||
@ -54,15 +49,27 @@
|
||||
sigset_t _caller_sigmask; // Caller's signal mask
|
||||
|
||||
public:
|
||||
OSThread();
|
||||
~OSThread();
|
||||
|
||||
int thread_type() const {
|
||||
return _thread_type;
|
||||
}
|
||||
void set_thread_type(int type) {
|
||||
_thread_type = type;
|
||||
}
|
||||
|
||||
// Methods to save/restore caller's signal mask
|
||||
sigset_t caller_sigmask() const { return _caller_sigmask; }
|
||||
void set_caller_sigmask(sigset_t sigmask) { _caller_sigmask = sigmask; }
|
||||
|
||||
#ifndef PRODUCT
|
||||
// Used for debugging, return a unique integer for each thread.
|
||||
int thread_identifier() const { return _thread_id; }
|
||||
#endif
|
||||
thread_id_t thread_id() const {
|
||||
return _thread_id;
|
||||
}
|
||||
void set_thread_id(thread_id_t id) {
|
||||
_thread_id = id;
|
||||
}
|
||||
|
||||
tid_t kernel_thread_id() const {
|
||||
return _kernel_thread_id;
|
||||
}
|
||||
@ -71,7 +78,7 @@
|
||||
}
|
||||
|
||||
pthread_t pthread_id() const {
|
||||
// Here: same as OSThread::thread_id()
|
||||
// Here: same as thread_id()
|
||||
return _thread_id;
|
||||
}
|
||||
|
||||
@ -79,7 +86,6 @@
|
||||
// suspension support.
|
||||
// ***************************************************************
|
||||
|
||||
public:
|
||||
// flags that support signal based suspend/resume on Aix are in a
|
||||
// separate class to avoid confusion with many flags in OSThread that
|
||||
// are used by VM level suspend/resume.
|
||||
@ -125,17 +131,6 @@
|
||||
return _startThread_lock;
|
||||
}
|
||||
|
||||
// ***************************************************************
|
||||
// Platform dependent initialization and cleanup
|
||||
// ***************************************************************
|
||||
|
||||
private:
|
||||
|
||||
void pd_initialize();
|
||||
void pd_destroy();
|
||||
|
||||
public:
|
||||
|
||||
// The last measured values of cpu timing to prevent the "stale
|
||||
// value return" bug in thread_cpu_time.
|
||||
volatile struct {
|
||||
@ -143,4 +138,10 @@
|
||||
jlong user;
|
||||
} _last_cpu_times;
|
||||
|
||||
// Printing
|
||||
uintx thread_id_for_printing() const override {
|
||||
return (uintx)_thread_id;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // OS_AIX_OSTHREAD_AIX_HPP
|
||||
|
@ -29,9 +29,20 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
#define VM_STRUCTS_OS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, pthread_t) \
|
||||
|
||||
#define VM_TYPES_OS(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
#define VM_TYPES_OS(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Posix Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_unsigned_integer_type(pthread_t)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -22,30 +22,32 @@
|
||||
*
|
||||
*/
|
||||
|
||||
// no precompiled headers
|
||||
#include "memory/allocation.inline.hpp"
|
||||
#include "runtime/mutexLocker.hpp"
|
||||
#include "precompiled.hpp"
|
||||
#include "memory/allocation.hpp"
|
||||
#include "runtime/mutex.hpp"
|
||||
#include "runtime/osThread.hpp"
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
void OSThread::pd_initialize() {
|
||||
OSThread::OSThread()
|
||||
: _thread_id(
|
||||
#ifdef __APPLE__
|
||||
_thread_id = 0;
|
||||
0
|
||||
#else
|
||||
_thread_id = nullptr;
|
||||
nullptr
|
||||
#endif
|
||||
_unique_thread_id = 0;
|
||||
_pthread_id = nullptr;
|
||||
_siginfo = nullptr;
|
||||
_ucontext = nullptr;
|
||||
_expanding_stack = 0;
|
||||
_alt_sig_stack = nullptr;
|
||||
|
||||
),
|
||||
_thread_type(),
|
||||
_pthread_id(nullptr),
|
||||
_unique_thread_id(0),
|
||||
_caller_sigmask(),
|
||||
sr(),
|
||||
_siginfo(nullptr),
|
||||
_ucontext(nullptr),
|
||||
_expanding_stack(0),
|
||||
_alt_sig_stack(nullptr),
|
||||
_startThread_lock(new Monitor(Mutex::event, "startThread_lock")) {
|
||||
sigemptyset(&_caller_sigmask);
|
||||
|
||||
_startThread_lock = new Monitor(Mutex::event, "startThread_lock");
|
||||
assert(_startThread_lock !=nullptr, "check");
|
||||
}
|
||||
|
||||
// Additional thread_id used to correlate threads in SA
|
||||
@ -64,6 +66,6 @@ void OSThread::set_unique_thread_id() {
|
||||
#endif
|
||||
}
|
||||
|
||||
void OSThread::pd_destroy() {
|
||||
OSThread::~OSThread() {
|
||||
delete _startThread_lock;
|
||||
}
|
||||
|
@ -25,19 +25,12 @@
|
||||
#ifndef OS_BSD_OSTHREAD_BSD_HPP
|
||||
#define OS_BSD_OSTHREAD_BSD_HPP
|
||||
|
||||
private:
|
||||
int _thread_type;
|
||||
#include "runtime/osThreadBase.hpp"
|
||||
#include "suspendResume_posix.hpp"
|
||||
#include "utilities/globalDefinitions.hpp"
|
||||
|
||||
public:
|
||||
|
||||
int thread_type() const {
|
||||
return _thread_type;
|
||||
}
|
||||
void set_thread_type(int type) {
|
||||
_thread_type = type;
|
||||
}
|
||||
|
||||
private:
|
||||
class OSThread : public OSThreadBase {
|
||||
friend class VMStructs;
|
||||
|
||||
#ifdef __APPLE__
|
||||
typedef thread_t thread_id_t;
|
||||
@ -45,6 +38,9 @@
|
||||
typedef pid_t thread_id_t;
|
||||
#endif
|
||||
|
||||
thread_id_t _thread_id;
|
||||
int _thread_type;
|
||||
|
||||
// _pthread_id is the pthread id, which is used by library calls
|
||||
// (e.g. pthread_kill).
|
||||
pthread_t _pthread_id;
|
||||
@ -57,15 +53,26 @@
|
||||
sigset_t _caller_sigmask; // Caller's signal mask
|
||||
|
||||
public:
|
||||
OSThread();
|
||||
~OSThread();
|
||||
|
||||
int thread_type() const {
|
||||
return _thread_type;
|
||||
}
|
||||
void set_thread_type(int type) {
|
||||
_thread_type = type;
|
||||
}
|
||||
|
||||
// Methods to save/restore caller's signal mask
|
||||
sigset_t caller_sigmask() const { return _caller_sigmask; }
|
||||
void set_caller_sigmask(sigset_t sigmask) { _caller_sigmask = sigmask; }
|
||||
|
||||
#ifndef PRODUCT
|
||||
// Used for debugging, return a unique integer for each thread.
|
||||
intptr_t thread_identifier() const { return (intptr_t)_pthread_id; }
|
||||
#endif
|
||||
thread_id_t thread_id() const {
|
||||
return _thread_id;
|
||||
}
|
||||
void set_thread_id(thread_id_t id) {
|
||||
_thread_id = id;
|
||||
}
|
||||
|
||||
pthread_t pthread_id() const {
|
||||
return _pthread_id;
|
||||
@ -80,7 +87,6 @@
|
||||
// suspension support.
|
||||
// ***************************************************************
|
||||
|
||||
public:
|
||||
// flags that support signal based suspend/resume on Bsd are in a
|
||||
// separate class to avoid confusion with many flags in OSThread that
|
||||
// are used by VM level suspend/resume.
|
||||
@ -126,17 +132,9 @@ public:
|
||||
return _startThread_lock;
|
||||
}
|
||||
|
||||
// ***************************************************************
|
||||
// Platform dependent initialization and cleanup
|
||||
// ***************************************************************
|
||||
|
||||
private:
|
||||
|
||||
void pd_initialize();
|
||||
void pd_destroy();
|
||||
|
||||
// Reconciliation History
|
||||
// osThread_solaris.hpp 1.24 99/08/27 13:11:54
|
||||
// End
|
||||
uintx thread_id_for_printing() const override {
|
||||
return (uintx)_thread_id;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // OS_BSD_OSTHREAD_BSD_HPP
|
||||
|
@ -31,9 +31,21 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
#define VM_STRUCTS_OS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
nonstatic_field(OSThread, _unique_thread_id, uint64_t)
|
||||
|
||||
#define VM_TYPES_OS(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
#define VM_TYPES_OS(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_unsigned_integer_type(OSThread::thread_id_t)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -22,27 +22,27 @@
|
||||
*
|
||||
*/
|
||||
|
||||
// no precompiled headers
|
||||
#include "memory/allocation.inline.hpp"
|
||||
#include "precompiled.hpp"
|
||||
#include "memory/allocation.hpp"
|
||||
#include "runtime/mutex.hpp"
|
||||
#include "runtime/osThread.hpp"
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
void OSThread::pd_initialize() {
|
||||
_thread_id = 0;
|
||||
_pthread_id = 0;
|
||||
_siginfo = nullptr;
|
||||
_ucontext = nullptr;
|
||||
_expanding_stack = 0;
|
||||
_alt_sig_stack = nullptr;
|
||||
|
||||
OSThread::OSThread()
|
||||
: _thread_id(0),
|
||||
_thread_type(),
|
||||
_pthread_id(0),
|
||||
_caller_sigmask(),
|
||||
sr(),
|
||||
_siginfo(nullptr),
|
||||
_ucontext(nullptr),
|
||||
_expanding_stack(0),
|
||||
_alt_sig_stack(nullptr),
|
||||
_startThread_lock(new Monitor(Mutex::event, "startThread_lock")) {
|
||||
sigemptyset(&_caller_sigmask);
|
||||
|
||||
_startThread_lock = new Monitor(Mutex::event, "startThread_lock");
|
||||
assert(_startThread_lock !=nullptr, "check");
|
||||
}
|
||||
|
||||
void OSThread::pd_destroy() {
|
||||
OSThread::~OSThread() {
|
||||
delete _startThread_lock;
|
||||
}
|
||||
|
@ -24,21 +24,19 @@
|
||||
|
||||
#ifndef OS_LINUX_OSTHREAD_LINUX_HPP
|
||||
#define OS_LINUX_OSTHREAD_LINUX_HPP
|
||||
public:
|
||||
|
||||
#include "runtime/osThreadBase.hpp"
|
||||
#include "suspendResume_posix.hpp"
|
||||
#include "utilities/globalDefinitions.hpp"
|
||||
|
||||
class OSThread : public OSThreadBase {
|
||||
friend class VMStructs;
|
||||
|
||||
typedef pid_t thread_id_t;
|
||||
|
||||
private:
|
||||
thread_id_t _thread_id;
|
||||
int _thread_type;
|
||||
|
||||
public:
|
||||
|
||||
int thread_type() const {
|
||||
return _thread_type;
|
||||
}
|
||||
void set_thread_type(int type) {
|
||||
_thread_type = type;
|
||||
}
|
||||
|
||||
// _pthread_id is the pthread id, which is used by library calls
|
||||
// (e.g. pthread_kill).
|
||||
pthread_t _pthread_id;
|
||||
@ -46,15 +44,26 @@
|
||||
sigset_t _caller_sigmask; // Caller's signal mask
|
||||
|
||||
public:
|
||||
OSThread();
|
||||
~OSThread();
|
||||
|
||||
int thread_type() const {
|
||||
return _thread_type;
|
||||
}
|
||||
void set_thread_type(int type) {
|
||||
_thread_type = type;
|
||||
}
|
||||
|
||||
// Methods to save/restore caller's signal mask
|
||||
sigset_t caller_sigmask() const { return _caller_sigmask; }
|
||||
void set_caller_sigmask(sigset_t sigmask) { _caller_sigmask = sigmask; }
|
||||
|
||||
#ifndef PRODUCT
|
||||
// Used for debugging, return a unique integer for each thread.
|
||||
int thread_identifier() const { return _thread_id; }
|
||||
#endif
|
||||
thread_id_t thread_id() const {
|
||||
return _thread_id;
|
||||
}
|
||||
void set_thread_id(thread_id_t id) {
|
||||
_thread_id = id;
|
||||
}
|
||||
|
||||
pthread_t pthread_id() const {
|
||||
return _pthread_id;
|
||||
@ -67,7 +76,6 @@
|
||||
// suspension support.
|
||||
// ***************************************************************
|
||||
|
||||
public:
|
||||
// flags that support signal based suspend/resume on Linux are in a
|
||||
// separate class to avoid confusion with many flags in OSThread that
|
||||
// are used by VM level suspend/resume.
|
||||
@ -113,17 +121,10 @@ public:
|
||||
return _startThread_lock;
|
||||
}
|
||||
|
||||
// ***************************************************************
|
||||
// Platform dependent initialization and cleanup
|
||||
// ***************************************************************
|
||||
|
||||
private:
|
||||
|
||||
void pd_initialize();
|
||||
void pd_destroy();
|
||||
|
||||
// Reconciliation History
|
||||
// osThread_solaris.hpp 1.24 99/08/27 13:11:54
|
||||
// End
|
||||
// Printing
|
||||
uintx thread_id_for_printing() const override {
|
||||
return (uintx)_thread_id;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // OS_LINUX_OSTHREAD_LINUX_HPP
|
||||
|
@ -817,7 +817,7 @@ static void *thread_native_entry(Thread *thread) {
|
||||
OSThread* osthread = thread->osthread();
|
||||
Monitor* sync = osthread->startThread_lock();
|
||||
|
||||
osthread->set_thread_id(checked_cast<OSThread::thread_id_t>(os::current_thread_id()));
|
||||
osthread->set_thread_id(checked_cast<pid_t>(os::current_thread_id()));
|
||||
|
||||
if (UseNUMA) {
|
||||
int lgrp_id = os::numa_get_group_id();
|
||||
|
@ -31,9 +31,22 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
#define VM_STRUCTS_OS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, pid_t) \
|
||||
nonstatic_field(OSThread, _pthread_id, pthread_t)
|
||||
|
||||
#define VM_TYPES_OS(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
#define VM_TYPES_OS(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Posix Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_integer_type(pid_t) \
|
||||
declare_unsigned_integer_type(pthread_t)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -22,17 +22,17 @@
|
||||
*
|
||||
*/
|
||||
|
||||
// no precompiled headers
|
||||
#include "runtime/os.hpp"
|
||||
#include "precompiled.hpp"
|
||||
#include "runtime/osThread.hpp"
|
||||
|
||||
void OSThread::pd_initialize() {
|
||||
set_thread_handle(nullptr);
|
||||
set_thread_id(0);
|
||||
set_interrupt_event(nullptr);
|
||||
}
|
||||
#include <Windows.h>
|
||||
|
||||
void OSThread::pd_destroy() {
|
||||
OSThread::OSThread()
|
||||
: _thread_id(0),
|
||||
_thread_handle(nullptr),
|
||||
_interrupt_event(nullptr) {}
|
||||
|
||||
OSThread::~OSThread() {
|
||||
if (_interrupt_event != nullptr) {
|
||||
CloseHandle(_interrupt_event);
|
||||
}
|
||||
|
@ -25,17 +25,29 @@
|
||||
#ifndef OS_WINDOWS_OSTHREAD_WINDOWS_HPP
|
||||
#define OS_WINDOWS_OSTHREAD_WINDOWS_HPP
|
||||
|
||||
typedef void* HANDLE;
|
||||
public:
|
||||
typedef unsigned long thread_id_t;
|
||||
#include "runtime/osThreadBase.hpp"
|
||||
#include "utilities/globalDefinitions.hpp"
|
||||
|
||||
class OSThread : public OSThreadBase {
|
||||
friend class VMStructs;
|
||||
|
||||
typedef unsigned long thread_id_t;
|
||||
typedef void* HANDLE;
|
||||
|
||||
thread_id_t _thread_id;
|
||||
|
||||
private:
|
||||
// Win32-specific thread information
|
||||
HANDLE _thread_handle; // Win32 thread handle
|
||||
HANDLE _interrupt_event; // Event signalled on thread interrupt for use by
|
||||
// Process.waitFor().
|
||||
|
||||
public:
|
||||
OSThread();
|
||||
~OSThread();
|
||||
|
||||
thread_id_t thread_id() const { return _thread_id; }
|
||||
void set_thread_id(thread_id_t id) { _thread_id = id; }
|
||||
|
||||
// The following will only apply in the Win32 implementation, and should only
|
||||
// be visible in the concrete class, not this which should be an abstract base class
|
||||
HANDLE thread_handle() const { return _thread_handle; }
|
||||
@ -45,13 +57,9 @@
|
||||
// This is specialized on Windows to interact with the _interrupt_event.
|
||||
void set_interrupted(bool z);
|
||||
|
||||
#ifndef PRODUCT
|
||||
// Used for debugging, return a unique integer for each thread.
|
||||
int thread_identifier() const { return _thread_id; }
|
||||
#endif
|
||||
|
||||
private:
|
||||
void pd_initialize();
|
||||
void pd_destroy();
|
||||
uintx thread_id_for_printing() const override {
|
||||
return (uintx)_thread_id;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // OS_WINDOWS_OSTHREAD_WINDOWS_HPP
|
||||
|
@ -63,6 +63,7 @@
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
#include "runtime/statSampler.hpp"
|
||||
#include "runtime/stubRoutines.hpp"
|
||||
#include "runtime/suspendedThreadTask.hpp"
|
||||
#include "runtime/threadCritical.hpp"
|
||||
#include "runtime/threads.hpp"
|
||||
#include "runtime/timer.hpp"
|
||||
@ -5992,7 +5993,7 @@ static void do_resume(HANDLE* h) {
|
||||
// retrieve a suspend/resume context capable handle
|
||||
// from the tid. Caller validates handle return value.
|
||||
void get_thread_handle_for_extended_context(HANDLE* h,
|
||||
OSThread::thread_id_t tid) {
|
||||
DWORD tid) {
|
||||
if (h != nullptr) {
|
||||
*h = OpenThread(THREAD_SUSPEND_RESUME | THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION, FALSE, tid);
|
||||
}
|
||||
|
@ -29,9 +29,18 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
#define VM_STRUCTS_OS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
\
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
unchecked_nonstatic_field(OSThread, _thread_handle, sizeof(HANDLE)) /* NOTE: no type */
|
||||
|
||||
#define VM_TYPES_OS(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
#define VM_TYPES_OS(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
declare_unsigned_integer_type(OSThread::thread_id_t)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -30,21 +30,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, pthread_t) \
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Posix Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_unsigned_integer_type(pthread_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -31,22 +31,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
nonstatic_field(OSThread, _unique_thread_id, uint64_t)
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_unsigned_integer_type(OSThread::thread_id_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -29,22 +29,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
nonstatic_field(OSThread, _unique_thread_id, uint64_t)
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_unsigned_integer_type(OSThread::thread_id_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -30,23 +30,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
nonstatic_field(OSThread, _pthread_id, pthread_t)
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Posix Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_integer_type(OSThread::thread_id_t) \
|
||||
declare_unsigned_integer_type(pthread_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -29,22 +29,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
nonstatic_field(OSThread, _pthread_id, pthread_t)
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Posix Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_integer_type(OSThread::thread_id_t) \
|
||||
declare_unsigned_integer_type(pthread_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -30,23 +30,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, pid_t) \
|
||||
nonstatic_field(OSThread, _pthread_id, pthread_t)
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Posix Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_integer_type(pid_t) \
|
||||
declare_unsigned_integer_type(pthread_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -30,23 +30,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
nonstatic_field(OSThread, _pthread_id, pthread_t)
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Posix Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_integer_type(OSThread::thread_id_t) \
|
||||
declare_unsigned_integer_type(pthread_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -30,23 +30,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, pid_t) \
|
||||
nonstatic_field(OSThread, _pthread_id, pthread_t)
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Posix Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_integer_type(pid_t) \
|
||||
declare_unsigned_integer_type(pthread_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -29,23 +29,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
nonstatic_field(OSThread, _pthread_id, pthread_t)
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
/**********************/ \
|
||||
/* Posix Thread IDs */ \
|
||||
/**********************/ \
|
||||
\
|
||||
declare_integer_type(OSThread::thread_id_t) \
|
||||
declare_unsigned_integer_type(pthread_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -29,18 +29,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
\
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
unchecked_nonstatic_field(OSThread, _thread_handle, sizeof(HANDLE)) /* NOTE: no type */
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
declare_unsigned_integer_type(OSThread::thread_id_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -29,18 +29,9 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* Threads (NOTE: incomplete) */ \
|
||||
/******************************/ \
|
||||
\
|
||||
nonstatic_field(OSThread, _thread_id, OSThread::thread_id_t) \
|
||||
unchecked_nonstatic_field(OSThread, _thread_handle, sizeof(HANDLE)) /* NOTE: no type */
|
||||
#define VM_STRUCTS_OS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field)
|
||||
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
\
|
||||
declare_unsigned_integer_type(OSThread::thread_id_t)
|
||||
#define VM_TYPES_OS_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
#define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant)
|
||||
|
||||
|
@ -105,7 +105,7 @@ class BytecodePrinter {
|
||||
// the incoming method. We could lose a line of trace output.
|
||||
// This is acceptable in a debug-only feature.
|
||||
st->cr();
|
||||
st->print("[%ld] ", (long) Thread::current()->osthread()->thread_id());
|
||||
st->print("[" UINTX_FORMAT "] ", Thread::current()->osthread()->thread_id_for_printing());
|
||||
method->print_name(st);
|
||||
st->cr();
|
||||
_current_method = method();
|
||||
@ -128,7 +128,7 @@ class BytecodePrinter {
|
||||
code == Bytecodes::_return_register_finalizer ||
|
||||
(code >= Bytecodes::_ireturn && code <= Bytecodes::_return)) {
|
||||
int bci = (int)(bcp - method->code_base());
|
||||
st->print("[%ld] ", (long) Thread::current()->osthread()->thread_id());
|
||||
st->print("[" UINTX_FORMAT "] ", Thread::current()->osthread()->thread_id_for_printing());
|
||||
if (Verbose) {
|
||||
st->print("%8d %4d " INTPTR_FORMAT " " INTPTR_FORMAT " %s",
|
||||
BytecodeCounter::counter_value(), bci, tos, tos2, Bytecodes::name(code));
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "runtime/continuationEntry.hpp"
|
||||
#include "runtime/deoptimization.hpp"
|
||||
#include "runtime/flags/jvmFlag.hpp"
|
||||
#include "runtime/objectMonitor.hpp"
|
||||
#include "runtime/osThread.hpp"
|
||||
#include "runtime/sharedRuntime.hpp"
|
||||
#include "runtime/stubRoutines.hpp"
|
||||
|
@ -25,111 +25,8 @@
|
||||
#ifndef SHARE_RUNTIME_OSTHREAD_HPP
|
||||
#define SHARE_RUNTIME_OSTHREAD_HPP
|
||||
|
||||
#include "runtime/frame.hpp"
|
||||
#include "runtime/handles.hpp"
|
||||
#include "runtime/javaFrameAnchor.hpp"
|
||||
#include "runtime/objectMonitor.hpp"
|
||||
#include "runtime/suspendedThreadTask.hpp"
|
||||
#include "utilities/macros.hpp"
|
||||
|
||||
#if defined(LINUX) || defined(AIX) || defined(BSD)
|
||||
#include "suspendResume_posix.hpp"
|
||||
#endif
|
||||
|
||||
class Monitor;
|
||||
|
||||
// The OSThread class holds OS-specific thread information. It is equivalent
|
||||
// to the sys_thread_t structure of the classic JVM implementation.
|
||||
|
||||
// The thread states represented by the ThreadState values are platform-specific
|
||||
// and are likely to be only approximate, because most OSes don't give you access
|
||||
// to precise thread state information.
|
||||
|
||||
// Note: the ThreadState is legacy code and is not correctly implemented.
|
||||
// Uses of ThreadState need to be replaced by the state in the JavaThread.
|
||||
|
||||
enum ThreadState {
|
||||
ALLOCATED, // Memory has been allocated but not initialized
|
||||
INITIALIZED, // The thread has been initialized but yet started
|
||||
RUNNABLE, // Has been started and is runnable, but not necessarily running
|
||||
MONITOR_WAIT, // Waiting on a contended monitor lock
|
||||
CONDVAR_WAIT, // Waiting on a condition variable
|
||||
OBJECT_WAIT, // Waiting on an Object.wait() call
|
||||
BREAKPOINTED, // Suspended at breakpoint
|
||||
SLEEPING, // Thread.sleep()
|
||||
ZOMBIE // All done, but not reclaimed yet
|
||||
};
|
||||
|
||||
typedef int (*OSThreadStartFunc)(void*);
|
||||
|
||||
class OSThread: public CHeapObj<mtThread> {
|
||||
friend class VMStructs;
|
||||
friend class JVMCIVMStructs;
|
||||
private:
|
||||
volatile ThreadState _state; // Thread state *hint*
|
||||
|
||||
// Methods
|
||||
public:
|
||||
void set_state(ThreadState state) { _state = state; }
|
||||
ThreadState get_state() { return _state; }
|
||||
|
||||
OSThread();
|
||||
~OSThread();
|
||||
|
||||
// Printing
|
||||
void print_on(outputStream* st) const;
|
||||
void print() const;
|
||||
|
||||
// Platform dependent stuff
|
||||
// The actual class declaration is platform specific.
|
||||
#include OS_HEADER(osThread)
|
||||
|
||||
public:
|
||||
|
||||
thread_id_t thread_id() const { return _thread_id; }
|
||||
|
||||
void set_thread_id(thread_id_t id) { _thread_id = id; }
|
||||
|
||||
private:
|
||||
// _thread_id is kernel thread id (similar to LWP id on Solaris). Each
|
||||
// thread has a unique thread_id (BsdThreads or NPTL). It can be used
|
||||
// to access /proc.
|
||||
thread_id_t _thread_id;
|
||||
};
|
||||
|
||||
|
||||
// Utility class for use with condition variables:
|
||||
class OSThreadWaitState : public StackObj {
|
||||
OSThread* _osthread;
|
||||
ThreadState _old_state;
|
||||
public:
|
||||
OSThreadWaitState(OSThread* osthread, bool is_object_wait) {
|
||||
_osthread = osthread;
|
||||
_old_state = osthread->get_state();
|
||||
if (is_object_wait) {
|
||||
osthread->set_state(OBJECT_WAIT);
|
||||
} else {
|
||||
osthread->set_state(CONDVAR_WAIT);
|
||||
}
|
||||
}
|
||||
~OSThreadWaitState() {
|
||||
_osthread->set_state(_old_state);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Utility class for use with contended monitors:
|
||||
class OSThreadContendState : public StackObj {
|
||||
OSThread* _osthread;
|
||||
ThreadState _old_state;
|
||||
public:
|
||||
OSThreadContendState(OSThread* osthread) {
|
||||
_osthread = osthread;
|
||||
_old_state = osthread->get_state();
|
||||
osthread->set_state(MONITOR_WAIT);
|
||||
}
|
||||
~OSThreadContendState() {
|
||||
_osthread->set_state(_old_state);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // SHARE_RUNTIME_OSTHREAD_HPP
|
||||
|
@ -24,19 +24,11 @@
|
||||
|
||||
#include "precompiled.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "runtime/osThread.hpp"
|
||||
|
||||
OSThread::OSThread() {
|
||||
pd_initialize();
|
||||
}
|
||||
|
||||
OSThread::~OSThread() {
|
||||
pd_destroy();
|
||||
}
|
||||
#include "runtime/osThreadBase.hpp"
|
||||
|
||||
// Printing
|
||||
void OSThread::print_on(outputStream *st) const {
|
||||
st->print("nid=" UINT64_FORMAT " ", (uint64_t)thread_id());
|
||||
void OSThreadBase::print_on(outputStream *st) const {
|
||||
st->print("nid=" UINTX_FORMAT " ", thread_id_for_printing());
|
||||
switch (_state) {
|
||||
case ALLOCATED: st->print("allocated "); break;
|
||||
case INITIALIZED: st->print("initialized "); break;
|
||||
@ -51,4 +43,4 @@ void OSThread::print_on(outputStream *st) const {
|
||||
}
|
||||
}
|
||||
|
||||
void OSThread::print() const { print_on(tty); }
|
||||
void OSThreadBase::print() const { print_on(tty); }
|
115
src/hotspot/share/runtime/osThreadBase.hpp
Normal file
115
src/hotspot/share/runtime/osThreadBase.hpp
Normal file
@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SHARE_RUNTIME_OSTHREAD_BASE_HPP
|
||||
#define SHARE_RUNTIME_OSTHREAD_BASE_HPP
|
||||
|
||||
#include "memory/allocation.hpp"
|
||||
|
||||
class Monitor;
|
||||
|
||||
// The OSThread class holds OS-specific thread information. It is equivalent
|
||||
// to the sys_thread_t structure of the classic JVM implementation.
|
||||
|
||||
// The thread states represented by the ThreadState values are platform-specific
|
||||
// and are likely to be only approximate, because most OSes don't give you access
|
||||
// to precise thread state information.
|
||||
|
||||
// Note: the ThreadState is legacy code and is not correctly implemented.
|
||||
// Uses of ThreadState need to be replaced by the state in the JavaThread.
|
||||
|
||||
enum ThreadState {
|
||||
ALLOCATED, // Memory has been allocated but not initialized
|
||||
INITIALIZED, // The thread has been initialized but yet started
|
||||
RUNNABLE, // Has been started and is runnable, but not necessarily running
|
||||
MONITOR_WAIT, // Waiting on a contended monitor lock
|
||||
CONDVAR_WAIT, // Waiting on a condition variable
|
||||
OBJECT_WAIT, // Waiting on an Object.wait() call
|
||||
BREAKPOINTED, // Suspended at breakpoint
|
||||
SLEEPING, // Thread.sleep()
|
||||
ZOMBIE // All done, but not reclaimed yet
|
||||
};
|
||||
|
||||
typedef int (*OSThreadStartFunc)(void*);
|
||||
|
||||
class OSThreadBase: public CHeapObj<mtThread> {
|
||||
friend class VMStructs;
|
||||
friend class JVMCIVMStructs;
|
||||
private:
|
||||
volatile ThreadState _state; // Thread state *hint*
|
||||
|
||||
// Methods
|
||||
public:
|
||||
OSThreadBase() {}
|
||||
virtual ~OSThreadBase() {}
|
||||
NONCOPYABLE(OSThreadBase);
|
||||
|
||||
void set_state(ThreadState state) { _state = state; }
|
||||
ThreadState get_state() { return _state; }
|
||||
|
||||
|
||||
virtual uintx thread_id_for_printing() const = 0;
|
||||
|
||||
// Printing
|
||||
void print_on(outputStream* st) const;
|
||||
void print() const;
|
||||
};
|
||||
|
||||
|
||||
// Utility class for use with condition variables:
|
||||
class OSThreadWaitState : public StackObj {
|
||||
OSThreadBase* _osthread;
|
||||
ThreadState _old_state;
|
||||
public:
|
||||
OSThreadWaitState(OSThreadBase* osthread, bool is_object_wait) {
|
||||
_osthread = osthread;
|
||||
_old_state = osthread->get_state();
|
||||
if (is_object_wait) {
|
||||
osthread->set_state(OBJECT_WAIT);
|
||||
} else {
|
||||
osthread->set_state(CONDVAR_WAIT);
|
||||
}
|
||||
}
|
||||
~OSThreadWaitState() {
|
||||
_osthread->set_state(_old_state);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Utility class for use with contended monitors:
|
||||
class OSThreadContendState : public StackObj {
|
||||
OSThreadBase* _osthread;
|
||||
ThreadState _old_state;
|
||||
public:
|
||||
OSThreadContendState(OSThreadBase* osthread) {
|
||||
_osthread = osthread;
|
||||
_old_state = osthread->get_state();
|
||||
osthread->set_state(MONITOR_WAIT);
|
||||
}
|
||||
~OSThreadContendState() {
|
||||
_osthread->set_state(_old_state);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // SHARE_RUNTIME_OSTHREAD_BASE_HPP
|
Loading…
x
Reference in New Issue
Block a user