◐ Shell
clean mode source ↗

bpo-39877: _PyRuntimeState.finalizing becomes atomic by vstinner · Pull Request #18816 · python/cpython

Conversation

@vstinner

Convert _PyRuntimeState.finalizing field to an atomic variable:

  • Rename it to _finalizing
  • Change its type to _Py_atomic_address
  • Add _PyRuntimeState_GetFinalizing() and _PyRuntimeState_SetFinalizing()
    functions
  • Remove _Py_CURRENTLY_FINALIZING() function: replace it with testing
    directly _PyRuntimeState_GetFinalizing() value

Convert _PyRuntimeState_GetThreadState() to static inline function.

https://bugs.python.org/issue39877

Convert _PyRuntimeState.finalizing field to an atomic variable:

* Rename it to _finalizing
* Change its type to _Py_atomic_address
* Add _PyRuntimeState_GetFinalizing() and _PyRuntimeState_SetFinalizing()
  functions
* Remove _Py_CURRENTLY_FINALIZING() function: replace it with testing
  directly _PyRuntimeState_GetFinalizing() value

Convert _PyRuntimeState_GetThreadState() to static inline function.

@vstinner

This PR prepares the code for PR #18811 which does no longer protect _PyRuntimeState.finalizing with the GIL. See discussion: #18811 (comment)

pitrou

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, but need to fix that pesky MSVC failure.


static inline void
_PyRuntimeState_SetFinalizing(_PyRuntimeState *runtime, PyThreadState *tstate) {
return _Py_atomic_store_relaxed(&runtime->_finalizing, (uintptr_t)tstate);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the return is confusing MSVC (see CI failures).

Labels