• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /* Thread and interpreter state structures and their interfaces */
3 
4 #include "Python.h"
5 #include "pycore_ceval.h"
6 #include "pycore_initconfig.h"
7 #include "pycore_object.h"        // _PyType_InitCache()
8 #include "pycore_pyerrors.h"
9 #include "pycore_pylifecycle.h"
10 #include "pycore_pymem.h"         // _PyMem_SetDefaultAllocator()
11 #include "pycore_pystate.h"       // _PyThreadState_GET()
12 #include "pycore_sysmodule.h"
13 
14 /* --------------------------------------------------------------------------
15 CAUTION
16 
17 Always use PyMem_RawMalloc() and PyMem_RawFree() directly in this file.  A
18 number of these functions are advertised as safe to call when the GIL isn't
19 held, and in a debug build Python redirects (e.g.) PyMem_NEW (etc) to Python's
20 debugging obmalloc functions.  Those aren't thread-safe (they rely on the GIL
21 to avoid the expense of doing their own locking).
22 -------------------------------------------------------------------------- */
23 
24 #ifdef HAVE_DLOPEN
25 #ifdef HAVE_DLFCN_H
26 #include <dlfcn.h>
27 #endif
28 #if !HAVE_DECL_RTLD_LAZY
29 #define RTLD_LAZY 1
30 #endif
31 #endif
32 
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36 
37 #define _PyRuntimeGILState_GetThreadState(gilstate) \
38     ((PyThreadState*)_Py_atomic_load_relaxed(&(gilstate)->tstate_current))
39 #define _PyRuntimeGILState_SetThreadState(gilstate, value) \
40     _Py_atomic_store_relaxed(&(gilstate)->tstate_current, \
41                              (uintptr_t)(value))
42 
43 /* Forward declarations */
44 static PyThreadState *_PyGILState_GetThisThreadState(struct _gilstate_runtime_state *gilstate);
45 static void _PyThreadState_Delete(PyThreadState *tstate, int check_current);
46 
47 
48 static PyStatus
_PyRuntimeState_Init_impl(_PyRuntimeState * runtime)49 _PyRuntimeState_Init_impl(_PyRuntimeState *runtime)
50 {
51     /* We preserve the hook across init, because there is
52        currently no public API to set it between runtime
53        initialization and interpreter initialization. */
54     void *open_code_hook = runtime->open_code_hook;
55     void *open_code_userdata = runtime->open_code_userdata;
56     _Py_AuditHookEntry *audit_hook_head = runtime->audit_hook_head;
57     // bpo-42882: Preserve next_index value if Py_Initialize()/Py_Finalize()
58     // is called multiple times.
59     Py_ssize_t unicode_next_index = runtime->unicode_ids.next_index;
60 
61     memset(runtime, 0, sizeof(*runtime));
62 
63     runtime->open_code_hook = open_code_hook;
64     runtime->open_code_userdata = open_code_userdata;
65     runtime->audit_hook_head = audit_hook_head;
66 
67     _PyEval_InitRuntimeState(&runtime->ceval);
68 
69     PyPreConfig_InitPythonConfig(&runtime->preconfig);
70 
71     runtime->gilstate.check_enabled = 1;
72 
73     /* A TSS key must be initialized with Py_tss_NEEDS_INIT
74        in accordance with the specification. */
75     Py_tss_t initial = Py_tss_NEEDS_INIT;
76     runtime->gilstate.autoTSSkey = initial;
77 
78     runtime->interpreters.mutex = PyThread_allocate_lock();
79     if (runtime->interpreters.mutex == NULL) {
80         return _PyStatus_NO_MEMORY();
81     }
82     runtime->interpreters.next_id = -1;
83 
84     runtime->xidregistry.mutex = PyThread_allocate_lock();
85     if (runtime->xidregistry.mutex == NULL) {
86         return _PyStatus_NO_MEMORY();
87     }
88 
89     // Set it to the ID of the main thread of the main interpreter.
90     runtime->main_thread = PyThread_get_thread_ident();
91 
92     runtime->unicode_ids.lock = PyThread_allocate_lock();
93     if (runtime->unicode_ids.lock == NULL) {
94         return _PyStatus_NO_MEMORY();
95     }
96     runtime->unicode_ids.next_index = unicode_next_index;
97 
98     return _PyStatus_OK();
99 }
100 
101 PyStatus
_PyRuntimeState_Init(_PyRuntimeState * runtime)102 _PyRuntimeState_Init(_PyRuntimeState *runtime)
103 {
104     /* Force default allocator, since _PyRuntimeState_Fini() must
105        use the same allocator than this function. */
106     PyMemAllocatorEx old_alloc;
107     _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
108 
109     PyStatus status = _PyRuntimeState_Init_impl(runtime);
110 
111     PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
112     return status;
113 }
114 
115 void
_PyRuntimeState_Fini(_PyRuntimeState * runtime)116 _PyRuntimeState_Fini(_PyRuntimeState *runtime)
117 {
118     /* Force the allocator used by _PyRuntimeState_Init(). */
119     PyMemAllocatorEx old_alloc;
120     _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
121 #define FREE_LOCK(LOCK) \
122     if (LOCK != NULL) { \
123         PyThread_free_lock(LOCK); \
124         LOCK = NULL; \
125     }
126 
127     FREE_LOCK(runtime->interpreters.mutex);
128     FREE_LOCK(runtime->xidregistry.mutex);
129     FREE_LOCK(runtime->unicode_ids.lock);
130 
131 #undef FREE_LOCK
132     PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
133 }
134 
135 #ifdef HAVE_FORK
136 /* This function is called from PyOS_AfterFork_Child to ensure that
137    newly created child processes do not share locks with the parent. */
138 PyStatus
_PyRuntimeState_ReInitThreads(_PyRuntimeState * runtime)139 _PyRuntimeState_ReInitThreads(_PyRuntimeState *runtime)
140 {
141     // This was initially set in _PyRuntimeState_Init().
142     runtime->main_thread = PyThread_get_thread_ident();
143 
144     /* Force default allocator, since _PyRuntimeState_Fini() must
145        use the same allocator than this function. */
146     PyMemAllocatorEx old_alloc;
147     _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
148 
149     int reinit_interp = _PyThread_at_fork_reinit(&runtime->interpreters.mutex);
150     int reinit_xidregistry = _PyThread_at_fork_reinit(&runtime->xidregistry.mutex);
151     int reinit_unicode_ids = _PyThread_at_fork_reinit(&runtime->unicode_ids.lock);
152 
153     PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
154 
155     /* bpo-42540: id_mutex is freed by _PyInterpreterState_Delete, which does
156      * not force the default allocator. */
157     int reinit_main_id = _PyThread_at_fork_reinit(&runtime->interpreters.main->id_mutex);
158 
159     if (reinit_interp < 0
160         || reinit_main_id < 0
161         || reinit_xidregistry < 0
162         || reinit_unicode_ids < 0)
163     {
164         return _PyStatus_ERR("Failed to reinitialize runtime locks");
165 
166     }
167     return _PyStatus_OK();
168 }
169 #endif
170 
171 #define HEAD_LOCK(runtime) \
172     PyThread_acquire_lock((runtime)->interpreters.mutex, WAIT_LOCK)
173 #define HEAD_UNLOCK(runtime) \
174     PyThread_release_lock((runtime)->interpreters.mutex)
175 
176 /* Forward declaration */
177 static void _PyGILState_NoteThreadState(
178     struct _gilstate_runtime_state *gilstate, PyThreadState* tstate);
179 
180 PyStatus
_PyInterpreterState_Enable(_PyRuntimeState * runtime)181 _PyInterpreterState_Enable(_PyRuntimeState *runtime)
182 {
183     struct pyinterpreters *interpreters = &runtime->interpreters;
184     interpreters->next_id = 0;
185 
186     /* Py_Finalize() calls _PyRuntimeState_Fini() which clears the mutex.
187        Create a new mutex if needed. */
188     if (interpreters->mutex == NULL) {
189         /* Force default allocator, since _PyRuntimeState_Fini() must
190            use the same allocator than this function. */
191         PyMemAllocatorEx old_alloc;
192         _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
193 
194         interpreters->mutex = PyThread_allocate_lock();
195 
196         PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
197 
198         if (interpreters->mutex == NULL) {
199             return _PyStatus_ERR("Can't initialize threads for interpreter");
200         }
201     }
202 
203     return _PyStatus_OK();
204 }
205 
206 PyInterpreterState *
PyInterpreterState_New(void)207 PyInterpreterState_New(void)
208 {
209     PyThreadState *tstate = _PyThreadState_GET();
210     /* tstate is NULL when Py_InitializeFromConfig() calls
211        PyInterpreterState_New() to create the main interpreter. */
212     if (_PySys_Audit(tstate, "cpython.PyInterpreterState_New", NULL) < 0) {
213         return NULL;
214     }
215 
216     PyInterpreterState *interp = PyMem_RawCalloc(1, sizeof(PyInterpreterState));
217     if (interp == NULL) {
218         return NULL;
219     }
220 
221     interp->id_refcount = -1;
222 
223     /* Don't get runtime from tstate since tstate can be NULL */
224     _PyRuntimeState *runtime = &_PyRuntime;
225     interp->runtime = runtime;
226 
227     if (_PyEval_InitState(&interp->ceval) < 0) {
228         goto out_of_memory;
229     }
230 
231     _PyGC_InitState(&interp->gc);
232     PyConfig_InitPythonConfig(&interp->config);
233     _PyType_InitCache(interp);
234 
235     interp->eval_frame = _PyEval_EvalFrameDefault;
236 #ifdef HAVE_DLOPEN
237 #if HAVE_DECL_RTLD_NOW
238     interp->dlopenflags = RTLD_NOW;
239 #else
240     interp->dlopenflags = RTLD_LAZY;
241 #endif
242 #endif
243 
244     struct pyinterpreters *interpreters = &runtime->interpreters;
245 
246     HEAD_LOCK(runtime);
247     if (interpreters->next_id < 0) {
248         /* overflow or Py_Initialize() not called! */
249         if (tstate != NULL) {
250             _PyErr_SetString(tstate, PyExc_RuntimeError,
251                              "failed to get an interpreter ID");
252         }
253         PyMem_RawFree(interp);
254         interp = NULL;
255     }
256     else {
257         interp->id = interpreters->next_id;
258         interpreters->next_id += 1;
259         interp->next = interpreters->head;
260         if (interpreters->main == NULL) {
261             interpreters->main = interp;
262         }
263         interpreters->head = interp;
264     }
265     HEAD_UNLOCK(runtime);
266 
267     if (interp == NULL) {
268         return NULL;
269     }
270 
271     interp->tstate_next_unique_id = 0;
272 
273     interp->audit_hooks = NULL;
274 
275     return interp;
276 
277 out_of_memory:
278     if (tstate != NULL) {
279         _PyErr_NoMemory(tstate);
280     }
281 
282     PyMem_RawFree(interp);
283     return NULL;
284 }
285 
286 
287 static void
interpreter_clear(PyInterpreterState * interp,PyThreadState * tstate)288 interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate)
289 {
290     _PyRuntimeState *runtime = interp->runtime;
291 
292     if (_PySys_Audit(tstate, "cpython.PyInterpreterState_Clear", NULL) < 0) {
293         _PyErr_Clear(tstate);
294     }
295 
296     HEAD_LOCK(runtime);
297     for (PyThreadState *p = interp->tstate_head; p != NULL; p = p->next) {
298         PyThreadState_Clear(p);
299     }
300     HEAD_UNLOCK(runtime);
301 
302     Py_CLEAR(interp->audit_hooks);
303 
304     PyConfig_Clear(&interp->config);
305     Py_CLEAR(interp->codec_search_path);
306     Py_CLEAR(interp->codec_search_cache);
307     Py_CLEAR(interp->codec_error_registry);
308     Py_CLEAR(interp->modules);
309     Py_CLEAR(interp->modules_by_index);
310     Py_CLEAR(interp->builtins_copy);
311     Py_CLEAR(interp->importlib);
312     Py_CLEAR(interp->import_func);
313     Py_CLEAR(interp->dict);
314 #ifdef HAVE_FORK
315     Py_CLEAR(interp->before_forkers);
316     Py_CLEAR(interp->after_forkers_parent);
317     Py_CLEAR(interp->after_forkers_child);
318 #endif
319 
320     _PyAST_Fini(interp);
321     _PyWarnings_Fini(interp);
322     _PyAtExit_Fini(interp);
323 
324     // All Python types must be destroyed before the last GC collection. Python
325     // types create a reference cycle to themselves in their in their
326     // PyTypeObject.tp_mro member (the tuple contains the type).
327 
328     /* Last garbage collection on this interpreter */
329     _PyGC_CollectNoFail(tstate);
330     _PyGC_Fini(interp);
331 
332     /* We don't clear sysdict and builtins until the end of this function.
333        Because clearing other attributes can execute arbitrary Python code
334        which requires sysdict and builtins. */
335     PyDict_Clear(interp->sysdict);
336     PyDict_Clear(interp->builtins);
337     Py_CLEAR(interp->sysdict);
338     Py_CLEAR(interp->builtins);
339 
340     // XXX Once we have one allocator per interpreter (i.e.
341     // per-interpreter GC) we must ensure that all of the interpreter's
342     // objects have been cleaned up at the point.
343 }
344 
345 
346 void
PyInterpreterState_Clear(PyInterpreterState * interp)347 PyInterpreterState_Clear(PyInterpreterState *interp)
348 {
349     // Use the current Python thread state to call audit hooks and to collect
350     // garbage. It can be different than the current Python thread state
351     // of 'interp'.
352     PyThreadState *current_tstate = _PyThreadState_GET();
353 
354     interpreter_clear(interp, current_tstate);
355 }
356 
357 
358 void
_PyInterpreterState_Clear(PyThreadState * tstate)359 _PyInterpreterState_Clear(PyThreadState *tstate)
360 {
361     interpreter_clear(tstate->interp, tstate);
362 }
363 
364 
365 static void
zapthreads(PyInterpreterState * interp,int check_current)366 zapthreads(PyInterpreterState *interp, int check_current)
367 {
368     PyThreadState *tstate;
369     /* No need to lock the mutex here because this should only happen
370        when the threads are all really dead (XXX famous last words). */
371     while ((tstate = interp->tstate_head) != NULL) {
372         _PyThreadState_Delete(tstate, check_current);
373     }
374 }
375 
376 
377 void
PyInterpreterState_Delete(PyInterpreterState * interp)378 PyInterpreterState_Delete(PyInterpreterState *interp)
379 {
380     _PyRuntimeState *runtime = interp->runtime;
381     struct pyinterpreters *interpreters = &runtime->interpreters;
382     zapthreads(interp, 0);
383 
384     _PyEval_FiniState(&interp->ceval);
385 
386     /* Delete current thread. After this, many C API calls become crashy. */
387     _PyThreadState_Swap(&runtime->gilstate, NULL);
388 
389     HEAD_LOCK(runtime);
390     PyInterpreterState **p;
391     for (p = &interpreters->head; ; p = &(*p)->next) {
392         if (*p == NULL) {
393             Py_FatalError("NULL interpreter");
394         }
395         if (*p == interp) {
396             break;
397         }
398     }
399     if (interp->tstate_head != NULL) {
400         Py_FatalError("remaining threads");
401     }
402     *p = interp->next;
403 
404     if (interpreters->main == interp) {
405         interpreters->main = NULL;
406         if (interpreters->head != NULL) {
407             Py_FatalError("remaining subinterpreters");
408         }
409     }
410     HEAD_UNLOCK(runtime);
411 
412     if (interp->id_mutex != NULL) {
413         PyThread_free_lock(interp->id_mutex);
414     }
415     PyMem_RawFree(interp);
416 }
417 
418 
419 #ifdef HAVE_FORK
420 /*
421  * Delete all interpreter states except the main interpreter.  If there
422  * is a current interpreter state, it *must* be the main interpreter.
423  */
424 PyStatus
_PyInterpreterState_DeleteExceptMain(_PyRuntimeState * runtime)425 _PyInterpreterState_DeleteExceptMain(_PyRuntimeState *runtime)
426 {
427     struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
428     struct pyinterpreters *interpreters = &runtime->interpreters;
429 
430     PyThreadState *tstate = _PyThreadState_Swap(gilstate, NULL);
431     if (tstate != NULL && tstate->interp != interpreters->main) {
432         return _PyStatus_ERR("not main interpreter");
433     }
434 
435     HEAD_LOCK(runtime);
436     PyInterpreterState *interp = interpreters->head;
437     interpreters->head = NULL;
438     while (interp != NULL) {
439         if (interp == interpreters->main) {
440             interpreters->main->next = NULL;
441             interpreters->head = interp;
442             interp = interp->next;
443             continue;
444         }
445 
446         PyInterpreterState_Clear(interp);  // XXX must activate?
447         zapthreads(interp, 1);
448         if (interp->id_mutex != NULL) {
449             PyThread_free_lock(interp->id_mutex);
450         }
451         PyInterpreterState *prev_interp = interp;
452         interp = interp->next;
453         PyMem_RawFree(prev_interp);
454     }
455     HEAD_UNLOCK(runtime);
456 
457     if (interpreters->head == NULL) {
458         return _PyStatus_ERR("missing main interpreter");
459     }
460     _PyThreadState_Swap(gilstate, tstate);
461     return _PyStatus_OK();
462 }
463 #endif
464 
465 
466 PyInterpreterState *
PyInterpreterState_Get(void)467 PyInterpreterState_Get(void)
468 {
469     PyThreadState *tstate = _PyThreadState_GET();
470     _Py_EnsureTstateNotNULL(tstate);
471     PyInterpreterState *interp = tstate->interp;
472     if (interp == NULL) {
473         Py_FatalError("no current interpreter");
474     }
475     return interp;
476 }
477 
478 
479 int64_t
PyInterpreterState_GetID(PyInterpreterState * interp)480 PyInterpreterState_GetID(PyInterpreterState *interp)
481 {
482     if (interp == NULL) {
483         PyErr_SetString(PyExc_RuntimeError, "no interpreter provided");
484         return -1;
485     }
486     return interp->id;
487 }
488 
489 
490 static PyInterpreterState *
interp_look_up_id(_PyRuntimeState * runtime,int64_t requested_id)491 interp_look_up_id(_PyRuntimeState *runtime, int64_t requested_id)
492 {
493     PyInterpreterState *interp = runtime->interpreters.head;
494     while (interp != NULL) {
495         int64_t id = PyInterpreterState_GetID(interp);
496         if (id < 0) {
497             return NULL;
498         }
499         if (requested_id == id) {
500             return interp;
501         }
502         interp = PyInterpreterState_Next(interp);
503     }
504     return NULL;
505 }
506 
507 PyInterpreterState *
_PyInterpreterState_LookUpID(int64_t requested_id)508 _PyInterpreterState_LookUpID(int64_t requested_id)
509 {
510     PyInterpreterState *interp = NULL;
511     if (requested_id >= 0) {
512         _PyRuntimeState *runtime = &_PyRuntime;
513         HEAD_LOCK(runtime);
514         interp = interp_look_up_id(runtime, requested_id);
515         HEAD_UNLOCK(runtime);
516     }
517     if (interp == NULL && !PyErr_Occurred()) {
518         PyErr_Format(PyExc_RuntimeError,
519                      "unrecognized interpreter ID %lld", requested_id);
520     }
521     return interp;
522 }
523 
524 
525 int
_PyInterpreterState_IDInitref(PyInterpreterState * interp)526 _PyInterpreterState_IDInitref(PyInterpreterState *interp)
527 {
528     if (interp->id_mutex != NULL) {
529         return 0;
530     }
531     interp->id_mutex = PyThread_allocate_lock();
532     if (interp->id_mutex == NULL) {
533         PyErr_SetString(PyExc_RuntimeError,
534                         "failed to create init interpreter ID mutex");
535         return -1;
536     }
537     interp->id_refcount = 0;
538     return 0;
539 }
540 
541 
542 int
_PyInterpreterState_IDIncref(PyInterpreterState * interp)543 _PyInterpreterState_IDIncref(PyInterpreterState *interp)
544 {
545     if (_PyInterpreterState_IDInitref(interp) < 0) {
546         return -1;
547     }
548 
549     PyThread_acquire_lock(interp->id_mutex, WAIT_LOCK);
550     interp->id_refcount += 1;
551     PyThread_release_lock(interp->id_mutex);
552     return 0;
553 }
554 
555 
556 void
_PyInterpreterState_IDDecref(PyInterpreterState * interp)557 _PyInterpreterState_IDDecref(PyInterpreterState *interp)
558 {
559     assert(interp->id_mutex != NULL);
560 
561     struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
562     PyThread_acquire_lock(interp->id_mutex, WAIT_LOCK);
563     assert(interp->id_refcount != 0);
564     interp->id_refcount -= 1;
565     int64_t refcount = interp->id_refcount;
566     PyThread_release_lock(interp->id_mutex);
567 
568     if (refcount == 0 && interp->requires_idref) {
569         // XXX Using the "head" thread isn't strictly correct.
570         PyThreadState *tstate = PyInterpreterState_ThreadHead(interp);
571         // XXX Possible GILState issues?
572         PyThreadState *save_tstate = _PyThreadState_Swap(gilstate, tstate);
573         Py_EndInterpreter(tstate);
574         _PyThreadState_Swap(gilstate, save_tstate);
575     }
576 }
577 
578 int
_PyInterpreterState_RequiresIDRef(PyInterpreterState * interp)579 _PyInterpreterState_RequiresIDRef(PyInterpreterState *interp)
580 {
581     return interp->requires_idref;
582 }
583 
584 void
_PyInterpreterState_RequireIDRef(PyInterpreterState * interp,int required)585 _PyInterpreterState_RequireIDRef(PyInterpreterState *interp, int required)
586 {
587     interp->requires_idref = required ? 1 : 0;
588 }
589 
590 PyObject *
_PyInterpreterState_GetMainModule(PyInterpreterState * interp)591 _PyInterpreterState_GetMainModule(PyInterpreterState *interp)
592 {
593     if (interp->modules == NULL) {
594         PyErr_SetString(PyExc_RuntimeError, "interpreter not initialized");
595         return NULL;
596     }
597     return PyMapping_GetItemString(interp->modules, "__main__");
598 }
599 
600 PyObject *
PyInterpreterState_GetDict(PyInterpreterState * interp)601 PyInterpreterState_GetDict(PyInterpreterState *interp)
602 {
603     if (interp->dict == NULL) {
604         interp->dict = PyDict_New();
605         if (interp->dict == NULL) {
606             PyErr_Clear();
607         }
608     }
609     /* Returning NULL means no per-interpreter dict is available. */
610     return interp->dict;
611 }
612 
613 static PyThreadState *
new_threadstate(PyInterpreterState * interp,int init)614 new_threadstate(PyInterpreterState *interp, int init)
615 {
616     _PyRuntimeState *runtime = interp->runtime;
617     PyThreadState *tstate = (PyThreadState *)PyMem_RawMalloc(sizeof(PyThreadState));
618     if (tstate == NULL) {
619         return NULL;
620     }
621 
622     tstate->interp = interp;
623 
624     tstate->frame = NULL;
625     tstate->recursion_depth = 0;
626     tstate->recursion_headroom = 0;
627     tstate->stackcheck_counter = 0;
628     tstate->tracing = 0;
629     tstate->root_cframe.use_tracing = 0;
630     tstate->cframe = &tstate->root_cframe;
631     tstate->gilstate_counter = 0;
632     tstate->async_exc = NULL;
633     tstate->thread_id = PyThread_get_thread_ident();
634 
635     tstate->dict = NULL;
636 
637     tstate->curexc_type = NULL;
638     tstate->curexc_value = NULL;
639     tstate->curexc_traceback = NULL;
640 
641     tstate->exc_state.exc_type = NULL;
642     tstate->exc_state.exc_value = NULL;
643     tstate->exc_state.exc_traceback = NULL;
644     tstate->exc_state.previous_item = NULL;
645     tstate->exc_info = &tstate->exc_state;
646 
647     tstate->c_profilefunc = NULL;
648     tstate->c_tracefunc = NULL;
649     tstate->c_profileobj = NULL;
650     tstate->c_traceobj = NULL;
651 
652     tstate->trash_delete_nesting = 0;
653     tstate->trash_delete_later = NULL;
654     tstate->on_delete = NULL;
655     tstate->on_delete_data = NULL;
656 
657     tstate->coroutine_origin_tracking_depth = 0;
658 
659     tstate->async_gen_firstiter = NULL;
660     tstate->async_gen_finalizer = NULL;
661 
662     tstate->context = NULL;
663     tstate->context_ver = 1;
664 
665     if (init) {
666         _PyThreadState_Init(tstate);
667     }
668 
669     HEAD_LOCK(runtime);
670     tstate->id = ++interp->tstate_next_unique_id;
671     tstate->prev = NULL;
672     tstate->next = interp->tstate_head;
673     if (tstate->next)
674         tstate->next->prev = tstate;
675     interp->tstate_head = tstate;
676     HEAD_UNLOCK(runtime);
677 
678     return tstate;
679 }
680 
681 PyThreadState *
PyThreadState_New(PyInterpreterState * interp)682 PyThreadState_New(PyInterpreterState *interp)
683 {
684     return new_threadstate(interp, 1);
685 }
686 
687 PyThreadState *
_PyThreadState_Prealloc(PyInterpreterState * interp)688 _PyThreadState_Prealloc(PyInterpreterState *interp)
689 {
690     return new_threadstate(interp, 0);
691 }
692 
693 void
_PyThreadState_Init(PyThreadState * tstate)694 _PyThreadState_Init(PyThreadState *tstate)
695 {
696     _PyGILState_NoteThreadState(&tstate->interp->runtime->gilstate, tstate);
697 }
698 
699 PyObject*
PyState_FindModule(struct PyModuleDef * module)700 PyState_FindModule(struct PyModuleDef* module)
701 {
702     Py_ssize_t index = module->m_base.m_index;
703     PyInterpreterState *state = _PyInterpreterState_GET();
704     PyObject *res;
705     if (module->m_slots) {
706         return NULL;
707     }
708     if (index == 0)
709         return NULL;
710     if (state->modules_by_index == NULL)
711         return NULL;
712     if (index >= PyList_GET_SIZE(state->modules_by_index))
713         return NULL;
714     res = PyList_GET_ITEM(state->modules_by_index, index);
715     return res==Py_None ? NULL : res;
716 }
717 
718 int
_PyState_AddModule(PyThreadState * tstate,PyObject * module,struct PyModuleDef * def)719 _PyState_AddModule(PyThreadState *tstate, PyObject* module, struct PyModuleDef* def)
720 {
721     if (!def) {
722         assert(_PyErr_Occurred(tstate));
723         return -1;
724     }
725     if (def->m_slots) {
726         _PyErr_SetString(tstate,
727                          PyExc_SystemError,
728                          "PyState_AddModule called on module with slots");
729         return -1;
730     }
731 
732     PyInterpreterState *interp = tstate->interp;
733     if (!interp->modules_by_index) {
734         interp->modules_by_index = PyList_New(0);
735         if (!interp->modules_by_index) {
736             return -1;
737         }
738     }
739 
740     while (PyList_GET_SIZE(interp->modules_by_index) <= def->m_base.m_index) {
741         if (PyList_Append(interp->modules_by_index, Py_None) < 0) {
742             return -1;
743         }
744     }
745 
746     Py_INCREF(module);
747     return PyList_SetItem(interp->modules_by_index,
748                           def->m_base.m_index, module);
749 }
750 
751 int
PyState_AddModule(PyObject * module,struct PyModuleDef * def)752 PyState_AddModule(PyObject* module, struct PyModuleDef* def)
753 {
754     if (!def) {
755         Py_FatalError("module definition is NULL");
756         return -1;
757     }
758 
759     PyThreadState *tstate = _PyThreadState_GET();
760     PyInterpreterState *interp = tstate->interp;
761     Py_ssize_t index = def->m_base.m_index;
762     if (interp->modules_by_index &&
763         index < PyList_GET_SIZE(interp->modules_by_index) &&
764         module == PyList_GET_ITEM(interp->modules_by_index, index))
765     {
766         _Py_FatalErrorFormat(__func__, "module %p already added", module);
767         return -1;
768     }
769     return _PyState_AddModule(tstate, module, def);
770 }
771 
772 int
PyState_RemoveModule(struct PyModuleDef * def)773 PyState_RemoveModule(struct PyModuleDef* def)
774 {
775     PyThreadState *tstate = _PyThreadState_GET();
776     PyInterpreterState *interp = tstate->interp;
777 
778     if (def->m_slots) {
779         _PyErr_SetString(tstate,
780                          PyExc_SystemError,
781                          "PyState_RemoveModule called on module with slots");
782         return -1;
783     }
784 
785     Py_ssize_t index = def->m_base.m_index;
786     if (index == 0) {
787         Py_FatalError("invalid module index");
788     }
789     if (interp->modules_by_index == NULL) {
790         Py_FatalError("Interpreters module-list not accessible.");
791     }
792     if (index > PyList_GET_SIZE(interp->modules_by_index)) {
793         Py_FatalError("Module index out of bounds.");
794     }
795 
796     Py_INCREF(Py_None);
797     return PyList_SetItem(interp->modules_by_index, index, Py_None);
798 }
799 
800 // Used by finalize_modules()
801 void
_PyInterpreterState_ClearModules(PyInterpreterState * interp)802 _PyInterpreterState_ClearModules(PyInterpreterState *interp)
803 {
804     if (!interp->modules_by_index) {
805         return;
806     }
807 
808     Py_ssize_t i;
809     for (i = 0; i < PyList_GET_SIZE(interp->modules_by_index); i++) {
810         PyObject *m = PyList_GET_ITEM(interp->modules_by_index, i);
811         if (PyModule_Check(m)) {
812             /* cleanup the saved copy of module dicts */
813             PyModuleDef *md = PyModule_GetDef(m);
814             if (md) {
815                 Py_CLEAR(md->m_base.m_copy);
816             }
817         }
818     }
819 
820     /* Setting modules_by_index to NULL could be dangerous, so we
821        clear the list instead. */
822     if (PyList_SetSlice(interp->modules_by_index,
823                         0, PyList_GET_SIZE(interp->modules_by_index),
824                         NULL)) {
825         PyErr_WriteUnraisable(interp->modules_by_index);
826     }
827 }
828 
829 void
PyThreadState_Clear(PyThreadState * tstate)830 PyThreadState_Clear(PyThreadState *tstate)
831 {
832     int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose;
833 
834     if (verbose && tstate->frame != NULL) {
835         /* bpo-20526: After the main thread calls
836            _PyRuntimeState_SetFinalizing() in Py_FinalizeEx(), threads must
837            exit when trying to take the GIL. If a thread exit in the middle of
838            _PyEval_EvalFrameDefault(), tstate->frame is not reset to its
839            previous value. It is more likely with daemon threads, but it can
840            happen with regular threads if threading._shutdown() fails
841            (ex: interrupted by CTRL+C). */
842         fprintf(stderr,
843           "PyThreadState_Clear: warning: thread still has a frame\n");
844     }
845 
846     /* Don't clear tstate->frame: it is a borrowed reference */
847 
848     Py_CLEAR(tstate->dict);
849     Py_CLEAR(tstate->async_exc);
850 
851     Py_CLEAR(tstate->curexc_type);
852     Py_CLEAR(tstate->curexc_value);
853     Py_CLEAR(tstate->curexc_traceback);
854 
855     Py_CLEAR(tstate->exc_state.exc_type);
856     Py_CLEAR(tstate->exc_state.exc_value);
857     Py_CLEAR(tstate->exc_state.exc_traceback);
858 
859     /* The stack of exception states should contain just this thread. */
860     if (verbose && tstate->exc_info != &tstate->exc_state) {
861         fprintf(stderr,
862           "PyThreadState_Clear: warning: thread still has a generator\n");
863     }
864 
865     tstate->c_profilefunc = NULL;
866     tstate->c_tracefunc = NULL;
867     Py_CLEAR(tstate->c_profileobj);
868     Py_CLEAR(tstate->c_traceobj);
869 
870     Py_CLEAR(tstate->async_gen_firstiter);
871     Py_CLEAR(tstate->async_gen_finalizer);
872 
873     Py_CLEAR(tstate->context);
874 
875     if (tstate->on_delete != NULL) {
876         tstate->on_delete(tstate->on_delete_data);
877     }
878 }
879 
880 
881 /* Common code for PyThreadState_Delete() and PyThreadState_DeleteCurrent() */
882 static void
tstate_delete_common(PyThreadState * tstate,struct _gilstate_runtime_state * gilstate)883 tstate_delete_common(PyThreadState *tstate,
884                      struct _gilstate_runtime_state *gilstate)
885 {
886     _Py_EnsureTstateNotNULL(tstate);
887     PyInterpreterState *interp = tstate->interp;
888     if (interp == NULL) {
889         Py_FatalError("NULL interpreter");
890     }
891     _PyRuntimeState *runtime = interp->runtime;
892 
893     HEAD_LOCK(runtime);
894     if (tstate->prev) {
895         tstate->prev->next = tstate->next;
896     }
897     else {
898         interp->tstate_head = tstate->next;
899     }
900     if (tstate->next) {
901         tstate->next->prev = tstate->prev;
902     }
903     HEAD_UNLOCK(runtime);
904 
905     if (gilstate->autoInterpreterState &&
906         PyThread_tss_get(&gilstate->autoTSSkey) == tstate)
907     {
908         PyThread_tss_set(&gilstate->autoTSSkey, NULL);
909     }
910 }
911 
912 
913 static void
_PyThreadState_Delete(PyThreadState * tstate,int check_current)914 _PyThreadState_Delete(PyThreadState *tstate, int check_current)
915 {
916     struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
917     if (check_current) {
918         if (tstate == _PyRuntimeGILState_GetThreadState(gilstate)) {
919             _Py_FatalErrorFormat(__func__, "tstate %p is still current", tstate);
920         }
921     }
922     tstate_delete_common(tstate, gilstate);
923     PyMem_RawFree(tstate);
924 }
925 
926 
927 void
PyThreadState_Delete(PyThreadState * tstate)928 PyThreadState_Delete(PyThreadState *tstate)
929 {
930     _PyThreadState_Delete(tstate, 1);
931 }
932 
933 
934 void
_PyThreadState_DeleteCurrent(PyThreadState * tstate)935 _PyThreadState_DeleteCurrent(PyThreadState *tstate)
936 {
937     _Py_EnsureTstateNotNULL(tstate);
938     struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
939     tstate_delete_common(tstate, gilstate);
940     _PyRuntimeGILState_SetThreadState(gilstate, NULL);
941     _PyEval_ReleaseLock(tstate);
942     PyMem_RawFree(tstate);
943 }
944 
945 void
PyThreadState_DeleteCurrent(void)946 PyThreadState_DeleteCurrent(void)
947 {
948     struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
949     PyThreadState *tstate = _PyRuntimeGILState_GetThreadState(gilstate);
950     _PyThreadState_DeleteCurrent(tstate);
951 }
952 
953 
954 /*
955  * Delete all thread states except the one passed as argument.
956  * Note that, if there is a current thread state, it *must* be the one
957  * passed as argument.  Also, this won't touch any other interpreters
958  * than the current one, since we don't know which thread state should
959  * be kept in those other interpreters.
960  */
961 void
_PyThreadState_DeleteExcept(_PyRuntimeState * runtime,PyThreadState * tstate)962 _PyThreadState_DeleteExcept(_PyRuntimeState *runtime, PyThreadState *tstate)
963 {
964     PyInterpreterState *interp = tstate->interp;
965 
966     HEAD_LOCK(runtime);
967     /* Remove all thread states, except tstate, from the linked list of
968        thread states.  This will allow calling PyThreadState_Clear()
969        without holding the lock. */
970     PyThreadState *list = interp->tstate_head;
971     if (list == tstate) {
972         list = tstate->next;
973     }
974     if (tstate->prev) {
975         tstate->prev->next = tstate->next;
976     }
977     if (tstate->next) {
978         tstate->next->prev = tstate->prev;
979     }
980     tstate->prev = tstate->next = NULL;
981     interp->tstate_head = tstate;
982     HEAD_UNLOCK(runtime);
983 
984     /* Clear and deallocate all stale thread states.  Even if this
985        executes Python code, we should be safe since it executes
986        in the current thread, not one of the stale threads. */
987     PyThreadState *p, *next;
988     for (p = list; p; p = next) {
989         next = p->next;
990         PyThreadState_Clear(p);
991         PyMem_RawFree(p);
992     }
993 }
994 
995 
996 #ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
997 PyThreadState*
_PyThreadState_GetTSS(void)998 _PyThreadState_GetTSS(void) {
999     return PyThread_tss_get(&_PyRuntime.gilstate.autoTSSkey);
1000 }
1001 #endif
1002 
1003 
1004 PyThreadState *
_PyThreadState_UncheckedGet(void)1005 _PyThreadState_UncheckedGet(void)
1006 {
1007     return _PyThreadState_GET();
1008 }
1009 
1010 
1011 PyThreadState *
PyThreadState_Get(void)1012 PyThreadState_Get(void)
1013 {
1014     PyThreadState *tstate = _PyThreadState_GET();
1015     _Py_EnsureTstateNotNULL(tstate);
1016     return tstate;
1017 }
1018 
1019 
1020 PyThreadState *
_PyThreadState_Swap(struct _gilstate_runtime_state * gilstate,PyThreadState * newts)1021 _PyThreadState_Swap(struct _gilstate_runtime_state *gilstate, PyThreadState *newts)
1022 {
1023 #ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
1024     PyThreadState *oldts = _PyThreadState_GetTSS();
1025 #else
1026     PyThreadState *oldts = _PyRuntimeGILState_GetThreadState(gilstate);
1027 #endif
1028 
1029     _PyRuntimeGILState_SetThreadState(gilstate, newts);
1030     /* It should not be possible for more than one thread state
1031        to be used for a thread.  Check this the best we can in debug
1032        builds.
1033     */
1034 #if defined(Py_DEBUG)
1035     if (newts) {
1036         /* This can be called from PyEval_RestoreThread(). Similar
1037            to it, we need to ensure errno doesn't change.
1038         */
1039         int err = errno;
1040         PyThreadState *check = _PyGILState_GetThisThreadState(gilstate);
1041         if (check && check->interp == newts->interp && check != newts)
1042             Py_FatalError("Invalid thread state for this thread");
1043         errno = err;
1044     }
1045 #endif
1046 #ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
1047     PyThread_tss_set(&gilstate->autoTSSkey, newts);
1048 #endif
1049     return oldts;
1050 }
1051 
1052 PyThreadState *
PyThreadState_Swap(PyThreadState * newts)1053 PyThreadState_Swap(PyThreadState *newts)
1054 {
1055     return _PyThreadState_Swap(&_PyRuntime.gilstate, newts);
1056 }
1057 
1058 /* An extension mechanism to store arbitrary additional per-thread state.
1059    PyThreadState_GetDict() returns a dictionary that can be used to hold such
1060    state; the caller should pick a unique key and store its state there.  If
1061    PyThreadState_GetDict() returns NULL, an exception has *not* been raised
1062    and the caller should assume no per-thread state is available. */
1063 
1064 PyObject *
_PyThreadState_GetDict(PyThreadState * tstate)1065 _PyThreadState_GetDict(PyThreadState *tstate)
1066 {
1067     assert(tstate != NULL);
1068     if (tstate->dict == NULL) {
1069         tstate->dict = PyDict_New();
1070         if (tstate->dict == NULL) {
1071             _PyErr_Clear(tstate);
1072         }
1073     }
1074     return tstate->dict;
1075 }
1076 
1077 
1078 PyObject *
PyThreadState_GetDict(void)1079 PyThreadState_GetDict(void)
1080 {
1081     PyThreadState *tstate = _PyThreadState_GET();
1082     if (tstate == NULL) {
1083         return NULL;
1084     }
1085     return _PyThreadState_GetDict(tstate);
1086 }
1087 
1088 
1089 PyInterpreterState *
PyThreadState_GetInterpreter(PyThreadState * tstate)1090 PyThreadState_GetInterpreter(PyThreadState *tstate)
1091 {
1092     assert(tstate != NULL);
1093     return tstate->interp;
1094 }
1095 
1096 
1097 PyFrameObject*
PyThreadState_GetFrame(PyThreadState * tstate)1098 PyThreadState_GetFrame(PyThreadState *tstate)
1099 {
1100     assert(tstate != NULL);
1101     PyFrameObject *frame = tstate->frame;
1102     Py_XINCREF(frame);
1103     return frame;
1104 }
1105 
1106 
1107 uint64_t
PyThreadState_GetID(PyThreadState * tstate)1108 PyThreadState_GetID(PyThreadState *tstate)
1109 {
1110     assert(tstate != NULL);
1111     return tstate->id;
1112 }
1113 
1114 
1115 /* Asynchronously raise an exception in a thread.
1116    Requested by Just van Rossum and Alex Martelli.
1117    To prevent naive misuse, you must write your own extension
1118    to call this, or use ctypes.  Must be called with the GIL held.
1119    Returns the number of tstates modified (normally 1, but 0 if `id` didn't
1120    match any known thread id).  Can be called with exc=NULL to clear an
1121    existing async exception.  This raises no exceptions. */
1122 
1123 int
PyThreadState_SetAsyncExc(unsigned long id,PyObject * exc)1124 PyThreadState_SetAsyncExc(unsigned long id, PyObject *exc)
1125 {
1126     _PyRuntimeState *runtime = &_PyRuntime;
1127     PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
1128 
1129     /* Although the GIL is held, a few C API functions can be called
1130      * without the GIL held, and in particular some that create and
1131      * destroy thread and interpreter states.  Those can mutate the
1132      * list of thread states we're traversing, so to prevent that we lock
1133      * head_mutex for the duration.
1134      */
1135     HEAD_LOCK(runtime);
1136     for (PyThreadState *tstate = interp->tstate_head; tstate != NULL; tstate = tstate->next) {
1137         if (tstate->thread_id != id) {
1138             continue;
1139         }
1140 
1141         /* Tricky:  we need to decref the current value
1142          * (if any) in tstate->async_exc, but that can in turn
1143          * allow arbitrary Python code to run, including
1144          * perhaps calls to this function.  To prevent
1145          * deadlock, we need to release head_mutex before
1146          * the decref.
1147          */
1148         PyObject *old_exc = tstate->async_exc;
1149         Py_XINCREF(exc);
1150         tstate->async_exc = exc;
1151         HEAD_UNLOCK(runtime);
1152 
1153         Py_XDECREF(old_exc);
1154         _PyEval_SignalAsyncExc(tstate->interp);
1155         return 1;
1156     }
1157     HEAD_UNLOCK(runtime);
1158     return 0;
1159 }
1160 
1161 
1162 /* Routines for advanced debuggers, requested by David Beazley.
1163    Don't use unless you know what you are doing! */
1164 
1165 PyInterpreterState *
PyInterpreterState_Head(void)1166 PyInterpreterState_Head(void)
1167 {
1168     return _PyRuntime.interpreters.head;
1169 }
1170 
1171 PyInterpreterState *
PyInterpreterState_Main(void)1172 PyInterpreterState_Main(void)
1173 {
1174     return _PyRuntime.interpreters.main;
1175 }
1176 
1177 PyInterpreterState *
PyInterpreterState_Next(PyInterpreterState * interp)1178 PyInterpreterState_Next(PyInterpreterState *interp) {
1179     return interp->next;
1180 }
1181 
1182 PyThreadState *
PyInterpreterState_ThreadHead(PyInterpreterState * interp)1183 PyInterpreterState_ThreadHead(PyInterpreterState *interp) {
1184     return interp->tstate_head;
1185 }
1186 
1187 PyThreadState *
PyThreadState_Next(PyThreadState * tstate)1188 PyThreadState_Next(PyThreadState *tstate) {
1189     return tstate->next;
1190 }
1191 
1192 /* The implementation of sys._current_frames().  This is intended to be
1193    called with the GIL held, as it will be when called via
1194    sys._current_frames().  It's possible it would work fine even without
1195    the GIL held, but haven't thought enough about that.
1196 */
1197 PyObject *
_PyThread_CurrentFrames(void)1198 _PyThread_CurrentFrames(void)
1199 {
1200     PyThreadState *tstate = _PyThreadState_GET();
1201     if (_PySys_Audit(tstate, "sys._current_frames", NULL) < 0) {
1202         return NULL;
1203     }
1204 
1205     PyObject *result = PyDict_New();
1206     if (result == NULL) {
1207         return NULL;
1208     }
1209 
1210     /* for i in all interpreters:
1211      *     for t in all of i's thread states:
1212      *          if t's frame isn't NULL, map t's id to its frame
1213      * Because these lists can mutate even when the GIL is held, we
1214      * need to grab head_mutex for the duration.
1215      */
1216     _PyRuntimeState *runtime = tstate->interp->runtime;
1217     HEAD_LOCK(runtime);
1218     PyInterpreterState *i;
1219     for (i = runtime->interpreters.head; i != NULL; i = i->next) {
1220         PyThreadState *t;
1221         for (t = i->tstate_head; t != NULL; t = t->next) {
1222             PyFrameObject *frame = t->frame;
1223             if (frame == NULL) {
1224                 continue;
1225             }
1226             PyObject *id = PyLong_FromUnsignedLong(t->thread_id);
1227             if (id == NULL) {
1228                 goto fail;
1229             }
1230             int stat = PyDict_SetItem(result, id, (PyObject *)frame);
1231             Py_DECREF(id);
1232             if (stat < 0) {
1233                 goto fail;
1234             }
1235         }
1236     }
1237     goto done;
1238 
1239 fail:
1240     Py_CLEAR(result);
1241 
1242 done:
1243     HEAD_UNLOCK(runtime);
1244     return result;
1245 }
1246 
1247 PyObject *
_PyThread_CurrentExceptions(void)1248 _PyThread_CurrentExceptions(void)
1249 {
1250     PyThreadState *tstate = _PyThreadState_GET();
1251 
1252     _Py_EnsureTstateNotNULL(tstate);
1253 
1254     if (_PySys_Audit(tstate, "sys._current_exceptions", NULL) < 0) {
1255         return NULL;
1256     }
1257 
1258     PyObject *result = PyDict_New();
1259     if (result == NULL) {
1260         return NULL;
1261     }
1262 
1263     /* for i in all interpreters:
1264      *     for t in all of i's thread states:
1265      *          if t's frame isn't NULL, map t's id to its frame
1266      * Because these lists can mutate even when the GIL is held, we
1267      * need to grab head_mutex for the duration.
1268      */
1269     _PyRuntimeState *runtime = tstate->interp->runtime;
1270     HEAD_LOCK(runtime);
1271     PyInterpreterState *i;
1272     for (i = runtime->interpreters.head; i != NULL; i = i->next) {
1273         PyThreadState *t;
1274         for (t = i->tstate_head; t != NULL; t = t->next) {
1275             _PyErr_StackItem *err_info = _PyErr_GetTopmostException(t);
1276             if (err_info == NULL) {
1277                 continue;
1278             }
1279             PyObject *id = PyLong_FromUnsignedLong(t->thread_id);
1280             if (id == NULL) {
1281                 goto fail;
1282             }
1283             PyObject *exc_info = PyTuple_Pack(
1284                 3,
1285                 err_info->exc_type != NULL ? err_info->exc_type : Py_None,
1286                 err_info->exc_value != NULL ? err_info->exc_value : Py_None,
1287                 err_info->exc_traceback != NULL ? err_info->exc_traceback : Py_None);
1288             if (exc_info == NULL) {
1289                 Py_DECREF(id);
1290                 goto fail;
1291             }
1292             int stat = PyDict_SetItem(result, id, exc_info);
1293             Py_DECREF(id);
1294             Py_DECREF(exc_info);
1295             if (stat < 0) {
1296                 goto fail;
1297             }
1298         }
1299     }
1300     goto done;
1301 
1302 fail:
1303     Py_CLEAR(result);
1304 
1305 done:
1306     HEAD_UNLOCK(runtime);
1307     return result;
1308 }
1309 
1310 /* Python "auto thread state" API. */
1311 
1312 /* Keep this as a static, as it is not reliable!  It can only
1313    ever be compared to the state for the *current* thread.
1314    * If not equal, then it doesn't matter that the actual
1315      value may change immediately after comparison, as it can't
1316      possibly change to the current thread's state.
1317    * If equal, then the current thread holds the lock, so the value can't
1318      change until we yield the lock.
1319 */
1320 static int
PyThreadState_IsCurrent(PyThreadState * tstate)1321 PyThreadState_IsCurrent(PyThreadState *tstate)
1322 {
1323     /* Must be the tstate for this thread */
1324     struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
1325     assert(_PyGILState_GetThisThreadState(gilstate) == tstate);
1326     return tstate == _PyRuntimeGILState_GetThreadState(gilstate);
1327 }
1328 
1329 /* Internal initialization/finalization functions called by
1330    Py_Initialize/Py_FinalizeEx
1331 */
1332 PyStatus
_PyGILState_Init(_PyRuntimeState * runtime)1333 _PyGILState_Init(_PyRuntimeState *runtime)
1334 {
1335     struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
1336     if (PyThread_tss_create(&gilstate->autoTSSkey) != 0) {
1337         return _PyStatus_NO_MEMORY();
1338     }
1339     // PyThreadState_New() calls _PyGILState_NoteThreadState() which does
1340     // nothing before autoInterpreterState is set.
1341     assert(gilstate->autoInterpreterState == NULL);
1342     return _PyStatus_OK();
1343 }
1344 
1345 
1346 PyStatus
_PyGILState_SetTstate(PyThreadState * tstate)1347 _PyGILState_SetTstate(PyThreadState *tstate)
1348 {
1349     if (!_Py_IsMainInterpreter(tstate->interp)) {
1350         /* Currently, PyGILState is shared by all interpreters. The main
1351          * interpreter is responsible to initialize it. */
1352         return _PyStatus_OK();
1353     }
1354 
1355     /* must init with valid states */
1356     assert(tstate != NULL);
1357     assert(tstate->interp != NULL);
1358 
1359     struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
1360 
1361     gilstate->autoInterpreterState = tstate->interp;
1362     assert(PyThread_tss_get(&gilstate->autoTSSkey) == NULL);
1363     assert(tstate->gilstate_counter == 0);
1364 
1365     _PyGILState_NoteThreadState(gilstate, tstate);
1366     return _PyStatus_OK();
1367 }
1368 
1369 PyInterpreterState *
_PyGILState_GetInterpreterStateUnsafe(void)1370 _PyGILState_GetInterpreterStateUnsafe(void)
1371 {
1372     return _PyRuntime.gilstate.autoInterpreterState;
1373 }
1374 
1375 void
_PyGILState_Fini(PyInterpreterState * interp)1376 _PyGILState_Fini(PyInterpreterState *interp)
1377 {
1378     struct _gilstate_runtime_state *gilstate = &interp->runtime->gilstate;
1379     PyThread_tss_delete(&gilstate->autoTSSkey);
1380     gilstate->autoInterpreterState = NULL;
1381 }
1382 
1383 #ifdef HAVE_FORK
1384 /* Reset the TSS key - called by PyOS_AfterFork_Child().
1385  * This should not be necessary, but some - buggy - pthread implementations
1386  * don't reset TSS upon fork(), see issue #10517.
1387  */
1388 PyStatus
_PyGILState_Reinit(_PyRuntimeState * runtime)1389 _PyGILState_Reinit(_PyRuntimeState *runtime)
1390 {
1391     struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
1392     PyThreadState *tstate = _PyGILState_GetThisThreadState(gilstate);
1393 
1394     PyThread_tss_delete(&gilstate->autoTSSkey);
1395     if (PyThread_tss_create(&gilstate->autoTSSkey) != 0) {
1396         return _PyStatus_NO_MEMORY();
1397     }
1398 
1399     /* If the thread had an associated auto thread state, reassociate it with
1400      * the new key. */
1401     if (tstate &&
1402         PyThread_tss_set(&gilstate->autoTSSkey, (void *)tstate) != 0)
1403     {
1404         return _PyStatus_ERR("failed to set autoTSSkey");
1405     }
1406     return _PyStatus_OK();
1407 }
1408 #endif
1409 
1410 /* When a thread state is created for a thread by some mechanism other than
1411    PyGILState_Ensure, it's important that the GILState machinery knows about
1412    it so it doesn't try to create another thread state for the thread (this is
1413    a better fix for SF bug #1010677 than the first one attempted).
1414 */
1415 static void
_PyGILState_NoteThreadState(struct _gilstate_runtime_state * gilstate,PyThreadState * tstate)1416 _PyGILState_NoteThreadState(struct _gilstate_runtime_state *gilstate, PyThreadState* tstate)
1417 {
1418     /* If autoTSSkey isn't initialized, this must be the very first
1419        threadstate created in Py_Initialize().  Don't do anything for now
1420        (we'll be back here when _PyGILState_Init is called). */
1421     if (!gilstate->autoInterpreterState) {
1422         return;
1423     }
1424 
1425     /* Stick the thread state for this thread in thread specific storage.
1426 
1427        The only situation where you can legitimately have more than one
1428        thread state for an OS level thread is when there are multiple
1429        interpreters.
1430 
1431        You shouldn't really be using the PyGILState_ APIs anyway (see issues
1432        #10915 and #15751).
1433 
1434        The first thread state created for that given OS level thread will
1435        "win", which seems reasonable behaviour.
1436     */
1437     if (PyThread_tss_get(&gilstate->autoTSSkey) == NULL) {
1438         if ((PyThread_tss_set(&gilstate->autoTSSkey, (void *)tstate)) != 0) {
1439             Py_FatalError("Couldn't create autoTSSkey mapping");
1440         }
1441     }
1442 
1443     /* PyGILState_Release must not try to delete this thread state. */
1444     tstate->gilstate_counter = 1;
1445 }
1446 
1447 /* The public functions */
1448 static PyThreadState *
_PyGILState_GetThisThreadState(struct _gilstate_runtime_state * gilstate)1449 _PyGILState_GetThisThreadState(struct _gilstate_runtime_state *gilstate)
1450 {
1451     if (gilstate->autoInterpreterState == NULL)
1452         return NULL;
1453     return (PyThreadState *)PyThread_tss_get(&gilstate->autoTSSkey);
1454 }
1455 
1456 PyThreadState *
PyGILState_GetThisThreadState(void)1457 PyGILState_GetThisThreadState(void)
1458 {
1459     return _PyGILState_GetThisThreadState(&_PyRuntime.gilstate);
1460 }
1461 
1462 int
PyGILState_Check(void)1463 PyGILState_Check(void)
1464 {
1465     struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
1466     if (!gilstate->check_enabled) {
1467         return 1;
1468     }
1469 
1470     if (!PyThread_tss_is_created(&gilstate->autoTSSkey)) {
1471         return 1;
1472     }
1473 
1474     PyThreadState *tstate = _PyRuntimeGILState_GetThreadState(gilstate);
1475     if (tstate == NULL) {
1476         return 0;
1477     }
1478 
1479     return (tstate == _PyGILState_GetThisThreadState(gilstate));
1480 }
1481 
1482 PyGILState_STATE
PyGILState_Ensure(void)1483 PyGILState_Ensure(void)
1484 {
1485     _PyRuntimeState *runtime = &_PyRuntime;
1486     struct _gilstate_runtime_state *gilstate = &runtime->gilstate;
1487 
1488     /* Note that we do not auto-init Python here - apart from
1489        potential races with 2 threads auto-initializing, pep-311
1490        spells out other issues.  Embedders are expected to have
1491        called Py_Initialize(). */
1492 
1493     /* Ensure that _PyEval_InitThreads() and _PyGILState_Init() have been
1494        called by Py_Initialize() */
1495 #ifndef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS
1496     assert(_PyEval_ThreadsInitialized(runtime));
1497 #endif
1498     assert(gilstate->autoInterpreterState);
1499 
1500     PyThreadState *tcur = (PyThreadState *)PyThread_tss_get(&gilstate->autoTSSkey);
1501     int current;
1502     if (tcur == NULL) {
1503         /* Create a new Python thread state for this thread */
1504         tcur = PyThreadState_New(gilstate->autoInterpreterState);
1505         if (tcur == NULL) {
1506             Py_FatalError("Couldn't create thread-state for new thread");
1507         }
1508 
1509         /* This is our thread state!  We'll need to delete it in the
1510            matching call to PyGILState_Release(). */
1511         tcur->gilstate_counter = 0;
1512         current = 0; /* new thread state is never current */
1513     }
1514     else {
1515         current = PyThreadState_IsCurrent(tcur);
1516     }
1517 
1518     if (current == 0) {
1519         PyEval_RestoreThread(tcur);
1520     }
1521 
1522     /* Update our counter in the thread-state - no need for locks:
1523        - tcur will remain valid as we hold the GIL.
1524        - the counter is safe as we are the only thread "allowed"
1525          to modify this value
1526     */
1527     ++tcur->gilstate_counter;
1528 
1529     return current ? PyGILState_LOCKED : PyGILState_UNLOCKED;
1530 }
1531 
1532 void
PyGILState_Release(PyGILState_STATE oldstate)1533 PyGILState_Release(PyGILState_STATE oldstate)
1534 {
1535     _PyRuntimeState *runtime = &_PyRuntime;
1536     PyThreadState *tstate = PyThread_tss_get(&runtime->gilstate.autoTSSkey);
1537     if (tstate == NULL) {
1538         Py_FatalError("auto-releasing thread-state, "
1539                       "but no thread-state for this thread");
1540     }
1541 
1542     /* We must hold the GIL and have our thread state current */
1543     /* XXX - remove the check - the assert should be fine,
1544        but while this is very new (April 2003), the extra check
1545        by release-only users can't hurt.
1546     */
1547     if (!PyThreadState_IsCurrent(tstate)) {
1548         _Py_FatalErrorFormat(__func__,
1549                              "thread state %p must be current when releasing",
1550                              tstate);
1551     }
1552     assert(PyThreadState_IsCurrent(tstate));
1553     --tstate->gilstate_counter;
1554     assert(tstate->gilstate_counter >= 0); /* illegal counter value */
1555 
1556     /* If we're going to destroy this thread-state, we must
1557      * clear it while the GIL is held, as destructors may run.
1558      */
1559     if (tstate->gilstate_counter == 0) {
1560         /* can't have been locked when we created it */
1561         assert(oldstate == PyGILState_UNLOCKED);
1562         PyThreadState_Clear(tstate);
1563         /* Delete the thread-state.  Note this releases the GIL too!
1564          * It's vital that the GIL be held here, to avoid shutdown
1565          * races; see bugs 225673 and 1061968 (that nasty bug has a
1566          * habit of coming back).
1567          */
1568         assert(_PyRuntimeGILState_GetThreadState(&runtime->gilstate) == tstate);
1569         _PyThreadState_DeleteCurrent(tstate);
1570     }
1571     /* Release the lock if necessary */
1572     else if (oldstate == PyGILState_UNLOCKED)
1573         PyEval_SaveThread();
1574 }
1575 
1576 
1577 /**************************/
1578 /* cross-interpreter data */
1579 /**************************/
1580 
1581 /* cross-interpreter data */
1582 
1583 crossinterpdatafunc _PyCrossInterpreterData_Lookup(PyObject *);
1584 
1585 /* This is a separate func from _PyCrossInterpreterData_Lookup in order
1586    to keep the registry code separate. */
1587 static crossinterpdatafunc
_lookup_getdata(PyObject * obj)1588 _lookup_getdata(PyObject *obj)
1589 {
1590     crossinterpdatafunc getdata = _PyCrossInterpreterData_Lookup(obj);
1591     if (getdata == NULL && PyErr_Occurred() == 0)
1592         PyErr_Format(PyExc_ValueError,
1593                      "%S does not support cross-interpreter data", obj);
1594     return getdata;
1595 }
1596 
1597 int
_PyObject_CheckCrossInterpreterData(PyObject * obj)1598 _PyObject_CheckCrossInterpreterData(PyObject *obj)
1599 {
1600     crossinterpdatafunc getdata = _lookup_getdata(obj);
1601     if (getdata == NULL) {
1602         return -1;
1603     }
1604     return 0;
1605 }
1606 
1607 static int
_check_xidata(PyThreadState * tstate,_PyCrossInterpreterData * data)1608 _check_xidata(PyThreadState *tstate, _PyCrossInterpreterData *data)
1609 {
1610     // data->data can be anything, including NULL, so we don't check it.
1611 
1612     // data->obj may be NULL, so we don't check it.
1613 
1614     if (data->interp < 0) {
1615         _PyErr_SetString(tstate, PyExc_SystemError, "missing interp");
1616         return -1;
1617     }
1618 
1619     if (data->new_object == NULL) {
1620         _PyErr_SetString(tstate, PyExc_SystemError, "missing new_object func");
1621         return -1;
1622     }
1623 
1624     // data->free may be NULL, so we don't check it.
1625 
1626     return 0;
1627 }
1628 
1629 int
_PyObject_GetCrossInterpreterData(PyObject * obj,_PyCrossInterpreterData * data)1630 _PyObject_GetCrossInterpreterData(PyObject *obj, _PyCrossInterpreterData *data)
1631 {
1632     // PyThreadState_Get() aborts if tstate is NULL.
1633     PyThreadState *tstate = PyThreadState_Get();
1634     PyInterpreterState *interp = tstate->interp;
1635 
1636     // Reset data before re-populating.
1637     *data = (_PyCrossInterpreterData){0};
1638     data->free = PyMem_RawFree;  // Set a default that may be overridden.
1639 
1640     // Call the "getdata" func for the object.
1641     Py_INCREF(obj);
1642     crossinterpdatafunc getdata = _lookup_getdata(obj);
1643     if (getdata == NULL) {
1644         Py_DECREF(obj);
1645         return -1;
1646     }
1647     int res = getdata(obj, data);
1648     Py_DECREF(obj);
1649     if (res != 0) {
1650         return -1;
1651     }
1652 
1653     // Fill in the blanks and validate the result.
1654     data->interp = interp->id;
1655     if (_check_xidata(tstate, data) != 0) {
1656         _PyCrossInterpreterData_Release(data);
1657         return -1;
1658     }
1659 
1660     return 0;
1661 }
1662 
1663 static void
_release_xidata(void * arg)1664 _release_xidata(void *arg)
1665 {
1666     _PyCrossInterpreterData *data = (_PyCrossInterpreterData *)arg;
1667     if (data->free != NULL) {
1668         data->free(data->data);
1669     }
1670     Py_XDECREF(data->obj);
1671 }
1672 
1673 static void
_call_in_interpreter(struct _gilstate_runtime_state * gilstate,PyInterpreterState * interp,void (* func)(void *),void * arg)1674 _call_in_interpreter(struct _gilstate_runtime_state *gilstate,
1675                      PyInterpreterState *interp,
1676                      void (*func)(void *), void *arg)
1677 {
1678     /* We would use Py_AddPendingCall() if it weren't specific to the
1679      * main interpreter (see bpo-33608).  In the meantime we take a
1680      * naive approach.
1681      */
1682     PyThreadState *save_tstate = NULL;
1683     if (interp != _PyRuntimeGILState_GetThreadState(gilstate)->interp) {
1684         // XXX Using the "head" thread isn't strictly correct.
1685         PyThreadState *tstate = PyInterpreterState_ThreadHead(interp);
1686         // XXX Possible GILState issues?
1687         save_tstate = _PyThreadState_Swap(gilstate, tstate);
1688     }
1689 
1690     func(arg);
1691 
1692     // Switch back.
1693     if (save_tstate != NULL) {
1694         _PyThreadState_Swap(gilstate, save_tstate);
1695     }
1696 }
1697 
1698 void
_PyCrossInterpreterData_Release(_PyCrossInterpreterData * data)1699 _PyCrossInterpreterData_Release(_PyCrossInterpreterData *data)
1700 {
1701     if (data->data == NULL && data->obj == NULL) {
1702         // Nothing to release!
1703         return;
1704     }
1705 
1706     // Switch to the original interpreter.
1707     PyInterpreterState *interp = _PyInterpreterState_LookUpID(data->interp);
1708     if (interp == NULL) {
1709         // The interpreter was already destroyed.
1710         if (data->free != NULL) {
1711             // XXX Someone leaked some memory...
1712         }
1713         return;
1714     }
1715 
1716     // "Release" the data and/or the object.
1717     struct _gilstate_runtime_state *gilstate = &_PyRuntime.gilstate;
1718     _call_in_interpreter(gilstate, interp, _release_xidata, data);
1719 }
1720 
1721 PyObject *
_PyCrossInterpreterData_NewObject(_PyCrossInterpreterData * data)1722 _PyCrossInterpreterData_NewObject(_PyCrossInterpreterData *data)
1723 {
1724     return data->new_object(data);
1725 }
1726 
1727 /* registry of {type -> crossinterpdatafunc} */
1728 
1729 /* For now we use a global registry of shareable classes.  An
1730    alternative would be to add a tp_* slot for a class's
1731    crossinterpdatafunc. It would be simpler and more efficient. */
1732 
1733 static int
_register_xidata(struct _xidregistry * xidregistry,PyTypeObject * cls,crossinterpdatafunc getdata)1734 _register_xidata(struct _xidregistry *xidregistry, PyTypeObject *cls,
1735                  crossinterpdatafunc getdata)
1736 {
1737     // Note that we effectively replace already registered classes
1738     // rather than failing.
1739     struct _xidregitem *newhead = PyMem_RawMalloc(sizeof(struct _xidregitem));
1740     if (newhead == NULL)
1741         return -1;
1742     newhead->cls = cls;
1743     newhead->getdata = getdata;
1744     newhead->next = xidregistry->head;
1745     xidregistry->head = newhead;
1746     return 0;
1747 }
1748 
1749 static void _register_builtins_for_crossinterpreter_data(struct _xidregistry *xidregistry);
1750 
1751 int
_PyCrossInterpreterData_RegisterClass(PyTypeObject * cls,crossinterpdatafunc getdata)1752 _PyCrossInterpreterData_RegisterClass(PyTypeObject *cls,
1753                                        crossinterpdatafunc getdata)
1754 {
1755     if (!PyType_Check(cls)) {
1756         PyErr_Format(PyExc_ValueError, "only classes may be registered");
1757         return -1;
1758     }
1759     if (getdata == NULL) {
1760         PyErr_Format(PyExc_ValueError, "missing 'getdata' func");
1761         return -1;
1762     }
1763 
1764     // Make sure the class isn't ever deallocated.
1765     Py_INCREF((PyObject *)cls);
1766 
1767     struct _xidregistry *xidregistry = &_PyRuntime.xidregistry ;
1768     PyThread_acquire_lock(xidregistry->mutex, WAIT_LOCK);
1769     if (xidregistry->head == NULL) {
1770         _register_builtins_for_crossinterpreter_data(xidregistry);
1771     }
1772     int res = _register_xidata(xidregistry, cls, getdata);
1773     PyThread_release_lock(xidregistry->mutex);
1774     return res;
1775 }
1776 
1777 /* Cross-interpreter objects are looked up by exact match on the class.
1778    We can reassess this policy when we move from a global registry to a
1779    tp_* slot. */
1780 
1781 crossinterpdatafunc
_PyCrossInterpreterData_Lookup(PyObject * obj)1782 _PyCrossInterpreterData_Lookup(PyObject *obj)
1783 {
1784     struct _xidregistry *xidregistry = &_PyRuntime.xidregistry ;
1785     PyObject *cls = PyObject_Type(obj);
1786     crossinterpdatafunc getdata = NULL;
1787     PyThread_acquire_lock(xidregistry->mutex, WAIT_LOCK);
1788     struct _xidregitem *cur = xidregistry->head;
1789     if (cur == NULL) {
1790         _register_builtins_for_crossinterpreter_data(xidregistry);
1791         cur = xidregistry->head;
1792     }
1793     for(; cur != NULL; cur = cur->next) {
1794         if (cur->cls == (PyTypeObject *)cls) {
1795             getdata = cur->getdata;
1796             break;
1797         }
1798     }
1799     Py_DECREF(cls);
1800     PyThread_release_lock(xidregistry->mutex);
1801     return getdata;
1802 }
1803 
1804 /* cross-interpreter data for builtin types */
1805 
1806 struct _shared_bytes_data {
1807     char *bytes;
1808     Py_ssize_t len;
1809 };
1810 
1811 static PyObject *
_new_bytes_object(_PyCrossInterpreterData * data)1812 _new_bytes_object(_PyCrossInterpreterData *data)
1813 {
1814     struct _shared_bytes_data *shared = (struct _shared_bytes_data *)(data->data);
1815     return PyBytes_FromStringAndSize(shared->bytes, shared->len);
1816 }
1817 
1818 static int
_bytes_shared(PyObject * obj,_PyCrossInterpreterData * data)1819 _bytes_shared(PyObject *obj, _PyCrossInterpreterData *data)
1820 {
1821     struct _shared_bytes_data *shared = PyMem_NEW(struct _shared_bytes_data, 1);
1822     if (PyBytes_AsStringAndSize(obj, &shared->bytes, &shared->len) < 0) {
1823         return -1;
1824     }
1825     data->data = (void *)shared;
1826     Py_INCREF(obj);
1827     data->obj = obj;  // Will be "released" (decref'ed) when data released.
1828     data->new_object = _new_bytes_object;
1829     data->free = PyMem_Free;
1830     return 0;
1831 }
1832 
1833 struct _shared_str_data {
1834     int kind;
1835     const void *buffer;
1836     Py_ssize_t len;
1837 };
1838 
1839 static PyObject *
_new_str_object(_PyCrossInterpreterData * data)1840 _new_str_object(_PyCrossInterpreterData *data)
1841 {
1842     struct _shared_str_data *shared = (struct _shared_str_data *)(data->data);
1843     return PyUnicode_FromKindAndData(shared->kind, shared->buffer, shared->len);
1844 }
1845 
1846 static int
_str_shared(PyObject * obj,_PyCrossInterpreterData * data)1847 _str_shared(PyObject *obj, _PyCrossInterpreterData *data)
1848 {
1849     struct _shared_str_data *shared = PyMem_NEW(struct _shared_str_data, 1);
1850     shared->kind = PyUnicode_KIND(obj);
1851     shared->buffer = PyUnicode_DATA(obj);
1852     shared->len = PyUnicode_GET_LENGTH(obj);
1853     data->data = (void *)shared;
1854     Py_INCREF(obj);
1855     data->obj = obj;  // Will be "released" (decref'ed) when data released.
1856     data->new_object = _new_str_object;
1857     data->free = PyMem_Free;
1858     return 0;
1859 }
1860 
1861 static PyObject *
_new_long_object(_PyCrossInterpreterData * data)1862 _new_long_object(_PyCrossInterpreterData *data)
1863 {
1864     return PyLong_FromSsize_t((Py_ssize_t)(data->data));
1865 }
1866 
1867 static int
_long_shared(PyObject * obj,_PyCrossInterpreterData * data)1868 _long_shared(PyObject *obj, _PyCrossInterpreterData *data)
1869 {
1870     /* Note that this means the size of shareable ints is bounded by
1871      * sys.maxsize.  Hence on 32-bit architectures that is half the
1872      * size of maximum shareable ints on 64-bit.
1873      */
1874     Py_ssize_t value = PyLong_AsSsize_t(obj);
1875     if (value == -1 && PyErr_Occurred()) {
1876         if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
1877             PyErr_SetString(PyExc_OverflowError, "try sending as bytes");
1878         }
1879         return -1;
1880     }
1881     data->data = (void *)value;
1882     data->obj = NULL;
1883     data->new_object = _new_long_object;
1884     data->free = NULL;
1885     return 0;
1886 }
1887 
1888 static PyObject *
_new_none_object(_PyCrossInterpreterData * data)1889 _new_none_object(_PyCrossInterpreterData *data)
1890 {
1891     // XXX Singleton refcounts are problematic across interpreters...
1892     Py_INCREF(Py_None);
1893     return Py_None;
1894 }
1895 
1896 static int
_none_shared(PyObject * obj,_PyCrossInterpreterData * data)1897 _none_shared(PyObject *obj, _PyCrossInterpreterData *data)
1898 {
1899     data->data = NULL;
1900     // data->obj remains NULL
1901     data->new_object = _new_none_object;
1902     data->free = NULL;  // There is nothing to free.
1903     return 0;
1904 }
1905 
1906 static void
_register_builtins_for_crossinterpreter_data(struct _xidregistry * xidregistry)1907 _register_builtins_for_crossinterpreter_data(struct _xidregistry *xidregistry)
1908 {
1909     // None
1910     if (_register_xidata(xidregistry, (PyTypeObject *)PyObject_Type(Py_None), _none_shared) != 0) {
1911         Py_FatalError("could not register None for cross-interpreter sharing");
1912     }
1913 
1914     // int
1915     if (_register_xidata(xidregistry, &PyLong_Type, _long_shared) != 0) {
1916         Py_FatalError("could not register int for cross-interpreter sharing");
1917     }
1918 
1919     // bytes
1920     if (_register_xidata(xidregistry, &PyBytes_Type, _bytes_shared) != 0) {
1921         Py_FatalError("could not register bytes for cross-interpreter sharing");
1922     }
1923 
1924     // str
1925     if (_register_xidata(xidregistry, &PyUnicode_Type, _str_shared) != 0) {
1926         Py_FatalError("could not register str for cross-interpreter sharing");
1927     }
1928 }
1929 
1930 
1931 _PyFrameEvalFunction
_PyInterpreterState_GetEvalFrameFunc(PyInterpreterState * interp)1932 _PyInterpreterState_GetEvalFrameFunc(PyInterpreterState *interp)
1933 {
1934     return interp->eval_frame;
1935 }
1936 
1937 
1938 void
_PyInterpreterState_SetEvalFrameFunc(PyInterpreterState * interp,_PyFrameEvalFunction eval_frame)1939 _PyInterpreterState_SetEvalFrameFunc(PyInterpreterState *interp,
1940                                      _PyFrameEvalFunction eval_frame)
1941 {
1942     interp->eval_frame = eval_frame;
1943 }
1944 
1945 
1946 const PyConfig*
_PyInterpreterState_GetConfig(PyInterpreterState * interp)1947 _PyInterpreterState_GetConfig(PyInterpreterState *interp)
1948 {
1949     return &interp->config;
1950 }
1951 
1952 
1953 int
_PyInterpreterState_GetConfigCopy(PyConfig * config)1954 _PyInterpreterState_GetConfigCopy(PyConfig *config)
1955 {
1956     PyInterpreterState *interp = PyInterpreterState_Get();
1957 
1958     PyStatus status = _PyConfig_Copy(config, &interp->config);
1959     if (PyStatus_Exception(status)) {
1960         _PyErr_SetFromPyStatus(status);
1961         return -1;
1962     }
1963     return 0;
1964 }
1965 
1966 
1967 const PyConfig*
_Py_GetConfig(void)1968 _Py_GetConfig(void)
1969 {
1970     assert(PyGILState_Check());
1971     PyThreadState *tstate = _PyThreadState_GET();
1972     return _PyInterpreterState_GetConfig(tstate->interp);
1973 }
1974 
1975 #ifdef __cplusplus
1976 }
1977 #endif
1978