Skip to content

Conversation

@vstinner
Copy link
Member

@vstinner vstinner commented Oct 31, 2018

PyThreadState_GET() is a macro accessing
_PyRuntime.gilstate.tstate_current variable or calling
PyThreadState_Get() depending on Py_BUILD_CORE.

Add a new _PyThreadState_GET() internal macro which is always
the efficient macro accessing directly the variable. _PyThreadState_GET()
is not available if Py_BUILD_CORE is not defined.

Changes:

  • Add a new internal _PyThreadState_GET() macro
  • Replace "PyThreadState_GET()->interp" with
    _PyInterpreterState_GET_UNSAFE()
  • Replace PyThreadState_GET() with _PyThreadState_GET() in internal C
    files, but keep PyThreadState_GET() in the public API.
  • _testcapimodule.c: replace PyThreadState_GET() with
    PyThreadState_Get(), the module is not compiled with Py_BUILD_CORE
    defined.

https://bugs.python.org/issue35081

@vstinner
Copy link
Member Author

Travis CI failed on running doctests:

xvfb-run:
   error:
   Xvfb
   failed
   to
   start

@vstinner vstinner requested a review from ncoghlan October 31, 2018 21:55
If Py_BUILD_CORE is defined, the PyThreadState_GET() macro access
_PyRuntime which comes from the internal pycore_state.h header.
Public headers must not require internal headers.

Move PyThreadState_GET() and _PyInterpreterState_GET_UNSAFE() from
Include/pystate.h to Include/internal/pycore_state.h, and rename
PyThreadState_GET() to _PyThreadState_GET() there.

The PyThreadState_GET() macro of pystate.h is now redefined when
pycore_state.h is included, to use the fast _PyThreadState_GET().

Changes:

* Add _PyThreadState_GET() macro
* Replace "PyThreadState_GET()->interp" with
  _PyInterpreterState_GET_UNSAFE()
* Replace PyThreadState_GET() with _PyThreadState_GET() in internal C
  files (compiled with Py_BUILD_CORE defined), but keep
  PyThreadState_GET() in the public header files.
* _testcapimodule.c: replace PyThreadState_GET() with
  PyThreadState_Get(); the module is not compiled with Py_BUILD_CORE
  defined.
* pycore_state.h now requires Py_BUILD_CORE to be defined.
@vstinner vstinner merged commit 50b4857 into python:master Nov 1, 2018
@vstinner vstinner deleted the pythreadstate_get branch November 1, 2018 00:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants