bpo-40268: Add _PyInterpreterState_GetConfig() (GH-19492)
Don't access PyInterpreterState.config member directly anymore, but
use new functions:
* _PyInterpreterState_GetConfig()
* _PyInterpreterState_SetConfig()
* _Py_GetConfig()
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
index e880992..571f225 100644
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -9,7 +9,6 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
-#include "pycore_pystate.h" /* _PyInterpreterState_GET_UNSAFE() */
#include "structmember.h"
#include "_iomodule.h"
@@ -377,7 +376,7 @@
{
PyObject *RawIO_class = (PyObject *)&PyFileIO_Type;
#ifdef MS_WINDOWS
- PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
+ const PyConfig *config = _Py_GetConfig();
if (!config->legacy_windows_stdio && _PyIO_get_console_type(path_or_fd) != '\0') {
RawIO_class = (PyObject *)&PyWindowsConsoleIO_Type;
encoding = "utf-8";
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index 1ff3564..924ffb5 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -287,8 +287,7 @@
shutdown issues). */
if (res == NULL) {
#ifndef Py_DEBUG
- const PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
- if (config->dev_mode) {
+ if (_Py_GetConfig()->dev_mode) {
PyErr_WriteUnraisable(self);
}
else {
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 92d6faa..492988e 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -9,6 +9,7 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
#include "pycore_object.h"
+#include "pycore_pystate.h"
#include "structmember.h"
#include "_iomodule.h"
@@ -996,7 +997,7 @@
PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
#ifndef Py_DEBUG
/* In release mode, only check in development mode (-X dev) */
- if (!interp->config.dev_mode) {
+ if (!_PyInterpreterState_GetConfig(interp)->dev_mode) {
return 0;
}
#else
diff --git a/Modules/main.c b/Modules/main.c
index 0288f17..00a0fc3 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -301,7 +301,7 @@
static int
-pymain_run_file(PyConfig *config, PyCompilerFlags *cf)
+pymain_run_file(const PyConfig *config, PyCompilerFlags *cf)
{
const wchar_t *filename = config->run_filename;
if (PySys_Audit("cpython.run_file", "u", filename) < 0) {
@@ -499,7 +499,7 @@
{
PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
/* pymain_run_stdin() modify the config */
- PyConfig *config = &interp->config;
+ PyConfig *config = (PyConfig*)_PyInterpreterState_GetConfig(interp);
PyObject *main_importer_path = NULL;
if (config->run_filename != NULL) {