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

gh-119333: Add c-api to have contextvar enter/exit callbacks #119335

Merged
merged 16 commits into from
Sep 24, 2024

Conversation

fried
Copy link
Contributor

@fried fried commented May 21, 2024

This PR implements gh-119333, allowing for setting a callback function on PyContext_Enter and PyContext_Exit from the c-api

Co-authored-by: @itamaro


📚 Documentation preview 📚: https://cpython-previews--119335.org.readthedocs.build/

Python/context.c Show resolved Hide resolved
Copy link
Member

@1st1 1st1 left a comment

Choose a reason for hiding this comment

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

I'm OK with this change. The motivation for adding it seems reasonable. I'll let @ericsnowcurrently review it properly, but I skimmed through the code and I like the approach.

Copy link
Contributor

@erlend-aasland erlend-aasland left a comment

Choose a reason for hiding this comment

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

Some minor remarks after a quick look: please align the naming with PEP-7 and use Py (not PY) prefixes for the macros.

Doc/c-api/contextvars.rst Outdated Show resolved Hide resolved
@fried
Copy link
Contributor Author

fried commented May 22, 2024

@ericsnowcurrently Am I doing this wrong, Having an issue with Check if generated files are up to date I followed the example for the other watcher checks and they use the same style globals. Also I can't run the check locally it on my mac it doesn't seem to like clang.

Doc/c-api/contextvars.rst Outdated Show resolved Hide resolved
Doc/c-api/contextvars.rst Outdated Show resolved Hide resolved
Modules/_testcapi/watchers.c Show resolved Hide resolved
Python/context.c Outdated Show resolved Hide resolved
Python/context.c Outdated Show resolved Hide resolved
Python/context.c Outdated Show resolved Hide resolved
Include/cpython/context.h Outdated Show resolved Hide resolved
Include/cpython/context.h Outdated Show resolved Hide resolved
@ericsnowcurrently
Copy link
Member

Am I doing this wrong, Having an issue with Check if generated files are up to date I followed the example for the other watcher checks and they use the same style globals.

Try copying similar entries in Tools/c-analyzer/cpython/ignored.tsv and then editing them to match the new variables.

Also I can't run the check locally it on my mac it doesn't seem to like clang.

Yeah, sorry, this is definitely a gap.

@fried fried force-pushed the pull-request-context-watchers branch from e2fef0c to c210351 Compare September 23, 2024 20:01
@gvanrossum gvanrossum merged commit d87482b into python:main Sep 24, 2024
37 checks passed
static void notify_context_watchers(PyContextEvent event, PyContext *ctx)
{
assert(Py_REFCNT(ctx) > 0);
PyInterpreterState *interp = _PyInterpreterState_GET();
Copy link
Contributor

Choose a reason for hiding this comment

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

FWIW you can get interp from tstate which is already known, it would have avoided one more tls read which is slow on msvc.

Copy link
Member

Choose a reason for hiding this comment

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

Sorry. We’ll fix it tomorrow. Any other concerns?

} PyContextEvent;

/*
* A Callback to clue in non-python contexts impls about a
Copy link
Contributor

Choose a reason for hiding this comment

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

I don't understand this comment, what is meant by clue in? Also what is change in active python context?

* A Callback to clue in non-python contexts impls about a
* change in the active python context.
*
* The callback is invoked with the event and a reference to =
Copy link
Contributor

Choose a reason for hiding this comment

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

Remove the =, it adds no useful info and is confusing.

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.

7 participants