mirror of
https://github.com/python/cpython.git
synced 2024-11-29 04:44:13 +08:00
gh-105699: Fix a Crasher Related to a Deprecated Global Variable (gh-106923)
There was a slight race in _Py_ClearFileSystemEncoding() (when called from _Py_SetFileSystemEncoding()), between freeing the value and setting the variable to NULL, which occasionally caused crashes when multiple isolated interpreters were used. (Notably, I saw at least 10 different, seemingly unrelated spooky-action-at-a-distance, ways this crashed. Yay, free threading!) We avoid the problem by only setting the global variables with the main interpreter (i.e. runtime init).
This commit is contained in:
parent
87e7cb09e4
commit
0ba07b2108
@ -0,0 +1,4 @@
|
||||
Python no longer crashes due to an infrequent race in setting
|
||||
``Py_FileSystemDefaultEncoding`` and ``Py_FileSystemDefaultEncodeErrors``
|
||||
(both deprecated), when simultaneously initializing two isolated
|
||||
subinterpreters. Now they are only set during runtime initialization.
|
@ -15189,10 +15189,13 @@ init_fs_codec(PyInterpreterState *interp)
|
||||
|
||||
/* Set Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
|
||||
global configuration variables. */
|
||||
if (_Py_SetFileSystemEncoding(fs_codec->encoding,
|
||||
fs_codec->errors) < 0) {
|
||||
PyErr_NoMemory();
|
||||
return -1;
|
||||
if (_Py_IsMainInterpreter(interp)) {
|
||||
|
||||
if (_Py_SetFileSystemEncoding(fs_codec->encoding,
|
||||
fs_codec->errors) < 0) {
|
||||
PyErr_NoMemory();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user