Skip to content

Commit

Permalink
pythongh-124872: Change PyContext_WatchCallback to take PyObject (pyt…
Browse files Browse the repository at this point in the history
…hon#124737)

The PyContext struct is not intended to be public, and users of the
API don't need anything more specific than PyObject.  Also see
pythongh-78943.
  • Loading branch information
rhansen authored Oct 12, 2024
1 parent fa52b82 commit 330c527
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Doc/c-api/contextvars.rst
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ Context object management functions:
.. versionadded:: 3.14
.. c:type:: int (*PyContext_WatchCallback)(PyContextEvent event, PyContext* ctx)
.. c:type:: int (*PyContext_WatchCallback)(PyContextEvent event, PyObject *obj)
Context object watcher callback function. The object passed to the callback
is event-specific; see :c:type:`PyContextEvent` for details.
Expand Down
2 changes: 1 addition & 1 deletion Include/cpython/context.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ typedef enum {
* if the callback returns with an exception set, it must return -1. Otherwise
* it should return 0
*/
typedef int (*PyContext_WatchCallback)(PyContextEvent, PyContext *);
typedef int (*PyContext_WatchCallback)(PyContextEvent, PyObject *);

/*
* Register a per-interpreter callback that will be invoked for context object
Expand Down
10 changes: 5 additions & 5 deletions Modules/_testcapi/watchers.c
Original file line number Diff line number Diff line change
Expand Up @@ -630,7 +630,7 @@ static int num_context_object_enter_events[NUM_CONTEXT_WATCHERS] = {0, 0};
static int num_context_object_exit_events[NUM_CONTEXT_WATCHERS] = {0, 0};

static int
handle_context_watcher_event(int which_watcher, PyContextEvent event, PyContext *ctx) {
handle_context_watcher_event(int which_watcher, PyContextEvent event, PyObject *ctx) {
if (event == Py_CONTEXT_EVENT_ENTER) {
num_context_object_enter_events[which_watcher]++;
}
Expand All @@ -644,22 +644,22 @@ handle_context_watcher_event(int which_watcher, PyContextEvent event, PyContext
}

static int
first_context_watcher_callback(PyContextEvent event, PyContext *ctx) {
first_context_watcher_callback(PyContextEvent event, PyObject *ctx) {
return handle_context_watcher_event(0, event, ctx);
}

static int
second_context_watcher_callback(PyContextEvent event, PyContext *ctx) {
second_context_watcher_callback(PyContextEvent event, PyObject *ctx) {
return handle_context_watcher_event(1, event, ctx);
}

static int
noop_context_event_handler(PyContextEvent event, PyContext *ctx) {
noop_context_event_handler(PyContextEvent event, PyObject *ctx) {
return 0;
}

static int
error_context_event_handler(PyContextEvent event, PyContext *ctx) {
error_context_event_handler(PyContextEvent event, PyObject *ctx) {
PyErr_SetString(PyExc_RuntimeError, "boom!");
return -1;
}
Expand Down
6 changes: 3 additions & 3 deletions Python/context.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ context_event_name(PyContextEvent event) {
}

static void
notify_context_watchers(PyThreadState *ts, PyContextEvent event, PyContext *ctx)
notify_context_watchers(PyThreadState *ts, PyContextEvent event, PyObject *ctx)
{
assert(Py_REFCNT(ctx) > 0);
PyInterpreterState *interp = ts->interp;
Expand Down Expand Up @@ -193,7 +193,7 @@ _PyContext_Enter(PyThreadState *ts, PyObject *octx)
ts->context = Py_NewRef(ctx);
ts->context_ver++;

notify_context_watchers(ts, Py_CONTEXT_EVENT_ENTER, ctx);
notify_context_watchers(ts, Py_CONTEXT_EVENT_ENTER, octx);
return 0;
}

Expand Down Expand Up @@ -227,7 +227,7 @@ _PyContext_Exit(PyThreadState *ts, PyObject *octx)
return -1;
}

notify_context_watchers(ts, Py_CONTEXT_EVENT_EXIT, ctx);
notify_context_watchers(ts, Py_CONTEXT_EVENT_EXIT, octx);
Py_SETREF(ts->context, (PyObject *)ctx->ctx_prev);
ts->context_ver++;

Expand Down

0 comments on commit 330c527

Please sign in to comment.