Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use PyThreadState_EnterTracing() #267

Closed
wants to merge 1 commit into from
Closed

Use PyThreadState_EnterTracing() #267

wants to merge 1 commit into from

Conversation

vstinner
Copy link
Contributor

Add a copy of the pythoncapi_compat.h header:
https://github.com/pythoncapi/pythoncapi_compat

pythoncapi_compat.h provides PyThreadState_EnterTracing() and
PyThreadState_LeaveTracing() to Python 3.10 and older. They function
were added to Python 3.11.0a2:
python/cpython@547d26a

PyThreadState.cframe.use_tracing format changed again in Python
3.11.0a2 (value set to 0 or 255):
python/cpython@bd627eb

This change makes greenlet ready for these changes and future CPython
internal changes.

Add a copy of the pythoncapi_compat.h header:
https://github.com/pythoncapi/pythoncapi_compat

pythoncapi_compat.h provides PyThreadState_EnterTracing() and
PyThreadState_LeaveTracing() to Python 3.10 and older. They function
were added to Python 3.11.0a2:
python/cpython@547d26a

PyThreadState.cframe.use_tracing format changed again in Python
3.11.0a2 (value set to 0 or 255):
python/cpython@bd627eb

This change makes greenlet ready for these changes and future CPython
internal changes.
@vstinner
Copy link
Contributor Author

See https://bugs.python.org/issue43760 discussion for recent CPython changes and discussions about adding new C API functions to abstract accesses to PyThreadState and PyFrameObject.

I'm the author and maintainer of pythoncapi_compat. Using it, it becomes to remove the following lines from src/greenlet/greenlet_cpython_compat.hpp:

#if PY_VERSION_HEX < 0x03090000
// The official version only became available in 3.9
#    define PyObject_GC_IsTracked(o) _PyObject_GC_IS_TRACKED(o)
#endif

But I suggest to do it in a separated change, to keep this PR as small as possible.

I wrote pythoncapi_compat to help C extension maintainers to keep up with recent Python C API changes.

@jamadden
Copy link
Contributor

Thanks for the heads up!

Rather than vendor an entire header file, I'll probably just add only the definitions greenlet needs to the existing header as it needs them.

@vstinner
Copy link
Contributor Author

Oh, pythoncapi_compat.h would also allow to remove another compatibility function:

#ifndef Py_SET_REFCNT
/* Py_REFCNT and Py_SIZE macros are converted to functions
https://bugs.python.org/issue39573 */
#    define Py_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
#endif

@vstinner
Copy link
Contributor Author

Rather than vendor an entire header file, I'll probably just add only the definitions greenlet needs to the existing header as it needs them.

My long term plan is to ship pythoncapi_compat.h as part of Python itself and/or install it on the system, as the six module is now preinstalled or easy to install on any system. For now, I prefer to copy it in each project.

@vstinner
Copy link
Contributor Author

If you don't want to use pythoncapi_compat.h for now, here is a different PR without it: #268

@jamadden
Copy link
Contributor

jamadden commented Nov 2, 2021

Fixed by #268

@jamadden jamadden closed this Nov 2, 2021
@vstinner vstinner deleted the enter_tracing branch November 8, 2021 17:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants