gh-116738: Make _codecs module thread-safe (#117530)
The module itself is a thin wrapper around calls to functions in `Python/codecs.c`, so that's where the meaningful changes happened: - Move codecs-related state that lives on `PyInterpreterState` to a struct declared in `pycore_codecs.h`. - In free-threaded builds, add a mutex to `codecs_state` to synchronize operations on `search_path`. Because `search_path_mutex` is used as a normal mutex and not a critical section, we must be extremely careful with operations called while holding it. - The codec registry is explicitly initialized as part of `_PyUnicode_InitEncodings` to simplify thread-safety.
This commit is contained in:
@@ -15441,7 +15441,11 @@ init_fs_encoding(PyThreadState *tstate)
|
||||
PyStatus
|
||||
_PyUnicode_InitEncodings(PyThreadState *tstate)
|
||||
{
|
||||
PyStatus status = init_fs_encoding(tstate);
|
||||
PyStatus status = _PyCodec_InitRegistry(tstate->interp);
|
||||
if (_PyStatus_EXCEPTION(status)) {
|
||||
return status;
|
||||
}
|
||||
status = init_fs_encoding(tstate);
|
||||
if (_PyStatus_EXCEPTION(status)) {
|
||||
return status;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user