Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/os/solaris/vm/osThread_solaris.hpp
32285 views
1
/*
2
* Copyright (c) 1997, 2013, 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
#ifndef OS_SOLARIS_VM_OSTHREAD_SOLARIS_HPP
26
#define OS_SOLARIS_VM_OSTHREAD_SOLARIS_HPP
27
28
// This is embedded via include into the class OSThread
29
public:
30
typedef thread_t thread_id_t;
31
32
private:
33
uint _lwp_id; // lwp ID, only used with bound threads
34
int _native_priority; // Saved native priority when starting
35
// a bound thread
36
sigset_t _caller_sigmask; // Caller's signal mask
37
bool _vm_created_thread; // true if the VM created this thread,
38
// false if primary thread or attached thread
39
public:
40
uint lwp_id() const { return _lwp_id; }
41
int native_priority() const { return _native_priority; }
42
43
// Set and get state of _vm_created_thread flag
44
void set_vm_created() { _vm_created_thread = true; }
45
bool is_vm_created() { return _vm_created_thread; }
46
47
// Methods to save/restore caller's signal mask
48
sigset_t caller_sigmask() const { return _caller_sigmask; }
49
void set_caller_sigmask(sigset_t sigmask) { _caller_sigmask = sigmask; }
50
51
#ifndef PRODUCT
52
// Used for debugging, return a unique integer for each thread.
53
int thread_identifier() const { return _thread_id; }
54
#endif
55
#ifdef ASSERT
56
// On solaris reposition can fail in two ways:
57
// 1: a mismatched pc, because signal is delivered too late, target thread
58
// is resumed.
59
// 2: on a timeout where signal is lost, target thread is resumed.
60
bool valid_reposition_failure() {
61
// only 1 and 2 can happen and we can handle both of them
62
return true;
63
}
64
#endif
65
void set_lwp_id(uint id) { _lwp_id = id; }
66
void set_native_priority(int prio) { _native_priority = prio; }
67
68
// ***************************************************************
69
// interrupt support. interrupts (using signals) are used to get
70
// the thread context (get_thread_pc), to set the thread context
71
// (set_thread_pc), and to implement java.lang.Thread.interrupt.
72
// ***************************************************************
73
74
public:
75
os::SuspendResume sr;
76
77
private:
78
ucontext_t* _ucontext;
79
80
public:
81
ucontext_t* ucontext() const { return _ucontext; }
82
void set_ucontext(ucontext_t* ptr) { _ucontext = ptr; }
83
static void SR_handler(Thread* thread, ucontext_t* uc);
84
85
// ***************************************************************
86
// java.lang.Thread.interrupt state.
87
// ***************************************************************
88
89
private:
90
91
JavaThreadState _saved_interrupt_thread_state; // the thread state before a system call -- restored afterward
92
93
public:
94
95
96
JavaThreadState saved_interrupt_thread_state() { return _saved_interrupt_thread_state; }
97
void set_saved_interrupt_thread_state(JavaThreadState state) { _saved_interrupt_thread_state = state; }
98
99
static void handle_spinlock_contention(int tries); // Used for thread local eden locking
100
101
// ***************************************************************
102
// Platform dependent initialization and cleanup
103
// ***************************************************************
104
105
private:
106
107
void pd_initialize();
108
void pd_destroy();
109
110
#endif // OS_SOLARIS_VM_OSTHREAD_SOLARIS_HPP
111
112