bpo-40521: Make MemoryError free list per interpreter (GH-21086)

Each interpreter now has its own MemoryError free list: it is not
longer shared by all interpreters.

Add _Py_exc_state structure and PyInterpreterState.exc_state member.
Move also errnomap into _Py_exc_state.
This commit is contained in:
Victor Stinner 2020-06-23 22:55:46 +02:00 • committed by GitHub
parent 2c6e4e91c5
commit 281cce1106
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 58 additions and 39 deletions

View file

@ -152,6 +152,13 @@ struct _Py_context_state {
int numfree;
};
struct _Py_exc_state {
// The dict mapping from errno codes to OSError subclasses
PyObject *errnomap;
PyBaseExceptionObject *memerrors_freelist;
int memerrors_numfree;
};
/* interpreter state */
@ -251,6 +258,7 @@ struct _is {
struct _Py_frame_state frame;
struct _Py_async_gen_state async_gen;
struct _Py_context_state context;
struct _Py_exc_state exc_state;
};
/* Used by _PyImport_Cleanup() */

View file

@ -43,7 +43,7 @@ extern PyStatus _PySys_Create(
extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options);
extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config);
extern int _PySys_InitMain(PyThreadState *tstate);
extern PyStatus _PyExc_Init(void);
extern PyStatus _PyExc_Init(PyThreadState *tstate);
extern PyStatus _PyErr_Init(void);
extern PyStatus _PyBuiltins_AddExceptions(PyObject * bltinmod);
extern PyStatus _PyImportHooks_Init(PyThreadState *tstate);
@ -69,7 +69,7 @@ extern void _PyAsyncGen_Fini(PyThreadState *tstate);
extern void PyOS_FiniInterrupts(void);
extern void _PyExc_Fini(void);
extern void _PyExc_Fini(PyThreadState *tstate);
extern void _PyImport_Fini(void);
extern void _PyImport_Fini2(void);
extern void _PyGC_Fini(PyThreadState *tstate);