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