diff options
author | Carl Meyer <carl@oddbird.net> | 2023-08-09 22:42:32 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-09 22:42:32 (GMT) |
commit | 2ec16fed14aae896e38dd5bd9e73e2eddc974439 (patch) | |
tree | 71c266210ffecd8ad706ba859129ce50f3503f8e /Modules/_testcapi | |
parent | 1e229e2c3d212accbd5fbe3a46cd42f8252b2868 (diff) | |
download | cpython-2ec16fed14aae896e38dd5bd9e73e2eddc974439.zip cpython-2ec16fed14aae896e38dd5bd9e73e2eddc974439.tar.gz cpython-2ec16fed14aae896e38dd5bd9e73e2eddc974439.tar.bz2 |
gh-91054: make code watcher tests resilient to other watchers (#107821)
Diffstat (limited to 'Modules/_testcapi')
-rw-r--r-- | Modules/_testcapi/watchers.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Modules/_testcapi/watchers.c b/Modules/_testcapi/watchers.c index 4cf567b..8a264bb 100644 --- a/Modules/_testcapi/watchers.c +++ b/Modules/_testcapi/watchers.c @@ -295,6 +295,7 @@ _testcapi_unwatch_type_impl(PyObject *module, int watcher_id, PyObject *type) // Test code object watching #define NUM_CODE_WATCHERS 2 +static int code_watcher_ids[NUM_CODE_WATCHERS] = {-1, -1}; static int num_code_object_created_events[NUM_CODE_WATCHERS] = {0, 0}; static int num_code_object_destroyed_events[NUM_CODE_WATCHERS] = {0, 0}; @@ -345,11 +346,13 @@ add_code_watcher(PyObject *self, PyObject *which_watcher) long which_l = PyLong_AsLong(which_watcher); if (which_l == 0) { watcher_id = PyCode_AddWatcher(first_code_object_callback); + code_watcher_ids[0] = watcher_id; num_code_object_created_events[0] = 0; num_code_object_destroyed_events[0] = 0; } else if (which_l == 1) { watcher_id = PyCode_AddWatcher(second_code_object_callback); + code_watcher_ids[1] = watcher_id; num_code_object_created_events[1] = 0; num_code_object_destroyed_events[1] = 0; } @@ -375,9 +378,14 @@ clear_code_watcher(PyObject *self, PyObject *watcher_id) return NULL; } // reset static events counters - if (watcher_id_l >= 0 && watcher_id_l < NUM_CODE_WATCHERS) { - num_code_object_created_events[watcher_id_l] = 0; - num_code_object_destroyed_events[watcher_id_l] = 0; + if (watcher_id_l >= 0) { + for (int i = 0; i < NUM_CODE_WATCHERS; i++) { + if (watcher_id_l == code_watcher_ids[i]) { + code_watcher_ids[i] = -1; + num_code_object_created_events[i] = 0; + num_code_object_destroyed_events[i] = 0; + } + } } Py_RETURN_NONE; } |