From 1012dc1b4367e05b92d67ea6925a39d50dce31b7 Mon Sep 17 00:00:00 2001 From: Itamar Ostricher Date: Sun, 4 Dec 2022 04:38:21 -0800 Subject: GH-91054: Reset static events counts in code watchers tests (#99978) --- Lib/test/test_capi/test_watchers.py | 6 +++--- Modules/_testcapi/watchers.c | 9 +++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_capi/test_watchers.py b/Lib/test/test_capi/test_watchers.py index ebe7d27..1922614 100644 --- a/Lib/test/test_capi/test_watchers.py +++ b/Lib/test/test_capi/test_watchers.py @@ -383,11 +383,11 @@ class TestCodeObjectWatchers(unittest.TestCase): del co3 self.assert_event_counts(2, 2, 1, 1) - # verify counts remain as they were after both watchers are cleared + # verify counts are reset and don't change after both watchers are cleared co4 = _testcapi.code_newempty("test_watchers", "dummy4", 0) - self.assert_event_counts(2, 2, 1, 1) + self.assert_event_counts(0, 0, 0, 0) del co4 - self.assert_event_counts(2, 2, 1, 1) + self.assert_event_counts(0, 0, 0, 0) def test_clear_out_of_range_watcher_id(self): with self.assertRaisesRegex(ValueError, r"Invalid code watcher ID -1"): diff --git a/Modules/_testcapi/watchers.c b/Modules/_testcapi/watchers.c index f0e51fd..1d91c20 100644 --- a/Modules/_testcapi/watchers.c +++ b/Modules/_testcapi/watchers.c @@ -325,9 +325,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); + 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); + num_code_object_created_events[1] = 0; + num_code_object_destroyed_events[1] = 0; } else { return NULL; @@ -346,6 +350,11 @@ clear_code_watcher(PyObject *self, PyObject *watcher_id) if (PyCode_ClearWatcher(watcher_id_l) < 0) { 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; + } Py_RETURN_NONE; } -- cgit v0.12