FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Include/internal/pycore_pystate.h at master · python-emscripten/cpython · GitHub
python-emscripten
cpython
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
Include
/
internal
/
pycore_pystate.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
153 lines (115 loc) · 3.85 KB
Breadcrumbs
cpython
/
Include
/
internal
/
pycore_pystate.h
Copy path
File metadata and controls
153 lines (115 loc) · 3.85 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#ifndef
Py_INTERNAL_PYSTATE_H
#define
Py_INTERNAL_PYSTATE_H
#ifdef
__cplusplus
extern
"C"
{
#endif
#ifndef
Py_BUILD_CORE
# error
"this header requires Py_BUILD_CORE define"
#endif
#include
"pycore_runtime.h"
/* PyRuntimeState */
/* Check if the current thread is the main thread.
Use _Py_IsMainInterpreter() to check if it's the main interpreter. */
static
inline
int
_Py_IsMainThread
(
void
)
{
unsigned long
thread
=
PyThread_get_thread_ident
();
return
(
thread
==
_PyRuntime
.
main_thread
);
}
static
inline
int
_Py_IsMainInterpreter
(
PyThreadState
*
tstate
)
{
/* Use directly _PyRuntime rather than tstate->interp->runtime, since
this function is used in performance critical code path (ceval) */
return
(
tstate
->
interp
==
_PyRuntime
.
interpreters
.
main
);
}
/* Only handle signals on the main thread of the main interpreter. */
static
inline
int
_Py_ThreadCanHandleSignals
(
PyInterpreterState
*
interp
)
{
return
(
_Py_IsMainThread
()
&&
interp
==
_PyRuntime
.
interpreters
.
main
);
}
/* Only execute pending calls on the main thread. */
static
inline
int
_Py_ThreadCanHandlePendingCalls
(
void
)
{
return
_Py_IsMainThread
();
}
/* Variable and macro for in-line access to current thread
and interpreter state */
#ifdef
EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
PyAPI_FUNC
(
PyThreadState
*
)
_PyThreadState_GetTSS
(
void
);
#endif
static
inline
PyThreadState
*
_PyRuntimeState_GetThreadState
(
_PyRuntimeState
*
runtime
)
{
#ifdef
EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
return
_PyThreadState_GetTSS
();
#else
return
(
PyThreadState
*
)
_Py_atomic_load_relaxed
(
&
runtime
->
gilstate
.
tstate_current
);
#endif
}
/* Get the current Python thread state.
Efficient macro reading directly the 'gilstate.tstate_current' atomic
variable. The macro is unsafe: it does not check for error and it can
return NULL.
The caller must hold the GIL.
See also PyThreadState_Get() and PyThreadState_GET(). */
static
inline
PyThreadState
*
_PyThreadState_GET
(
void
)
{
#ifdef
EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
return
_PyThreadState_GetTSS
();
#else
return
_PyRuntimeState_GetThreadState
(
&
_PyRuntime
);
#endif
}
/* Redefine PyThreadState_GET() as an alias to _PyThreadState_GET() */
#undef
PyThreadState_GET
#define
PyThreadState_GET
() _PyThreadState_GET()
PyAPI_FUNC
(
void
)
_Py_NO_RETURN
_Py_FatalError_TstateNULL
(
const
char
*
func
);
static
inline
void
_Py_EnsureFuncTstateNotNULL
(
const
char
*
func
,
PyThreadState
*
tstate
)
{
if
(
tstate
==
NULL
) {
_Py_FatalError_TstateNULL
(
func
);
}
}
// Call Py_FatalError() if tstate is NULL
#define
_Py_EnsureTstateNotNULL
(
tstate
) \
_Py_EnsureFuncTstateNotNULL(__func__, tstate)
/* Get the current interpreter state.
The macro is unsafe: it does not check for error and it can return NULL.
The caller must hold the GIL.
See also _PyInterpreterState_Get()
and _PyGILState_GetInterpreterStateUnsafe(). */
static
inline
PyInterpreterState
*
_PyInterpreterState_GET
(
void
) {
PyThreadState
*
tstate
=
_PyThreadState_GET
();
#ifdef
Py_DEBUG
_Py_EnsureTstateNotNULL
(
tstate
);
#endif
return
tstate
->
interp
;
}
/* Other */
PyAPI_FUNC
(
void
)
_PyThreadState_Init
(
PyThreadState
*
tstate
);
PyAPI_FUNC
(
void
)
_PyThreadState_DeleteExcept
(
_PyRuntimeState
*
runtime
,
PyThreadState
*
tstate
);
PyAPI_FUNC
(
PyThreadState
*
)
_PyThreadState_Swap
(
struct
_gilstate_runtime_state
*
gilstate
,
PyThreadState
*
newts
);
PyAPI_FUNC
(
PyStatus
)
_PyInterpreterState_Enable
(
_PyRuntimeState
*
runtime
);
#ifdef
HAVE_FORK
extern
PyStatus
_PyInterpreterState_DeleteExceptMain
(
_PyRuntimeState
*
runtime
);
extern
PyStatus
_PyGILState_Reinit
(
_PyRuntimeState
*
runtime
);
extern
void
_PySignal_AfterFork
(
void
);
#endif
PyAPI_FUNC
(
int
)
_PyState_AddModule
(
PyThreadState
*
tstate
,
PyObject
*
module
,
struct
PyModuleDef
*
def
);
PyAPI_FUNC
(
int
)
_PyOS_InterruptOccurred
(
PyThreadState
*
tstate
);
#ifdef
__cplusplus
}
#endif
#endif
/* !Py_INTERNAL_PYSTATE_H */
Back
|
FazBrowse Home
|
New Git URL