Skip to content

Commit 2f82834

Browse files
committed
rewrite subinterp traversal
1 parent 7c205da commit 2f82834

1 file changed

Lines changed: 2 additions & 25 deletions

File tree

‎Modules/_remote_debugging/module.c‎

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -958,11 +958,6 @@ _remote_debugging_RemoteUnwinder_get_all_awaited_by_impl(RemoteUnwinderObject *s
958958
if (ensure_async_debug_offsets(self) < 0) {
959959
return NULL;
960960
}
961-
PyObject *seen = PySet_New(NULL);
962-
if (seen == NULL) {
963-
set_exception_cause(self, PyExc_MemoryError, "Failed to create interpreter set");
964-
return NULL;
965-
}
966961

967962
PyObject *result = PyList_New(0);
968963
if (result == NULL) {
@@ -971,24 +966,8 @@ _remote_debugging_RemoteUnwinder_get_all_awaited_by_impl(RemoteUnwinderObject *s
971966
}
972967

973968
// gh-158880: Tasks live in every interpreter, not only the one at the list head
974-
for (uintptr_t interp = self->interpreter_addr; interp != 0; ) {
975-
PyObject *addr = PyLong_FromUnsignedLongLong(interp);
976-
if (addr == NULL) {
977-
set_exception_cause(self, PyExc_MemoryError, "Failed to create interpreter address");
978-
goto result_err;
979-
}
980-
Py_ssize_t seen_count = PySet_GET_SIZE(seen);
981-
int marked = PySet_Add(seen, addr);
982-
Py_DECREF(addr);
983-
if (marked < 0) {
984-
set_exception_cause(self, PyExc_RuntimeError, "Failed to mark interpreter as seen");
985-
goto result_err;
986-
}
987-
if (PySet_GET_SIZE(seen) == seen_count) {
988-
// already walked
989-
break;
990-
}
991-
969+
uintptr_t interp = self->interpreter_addr;
970+
while (interp != 0) {
992971
if (refresh_generation_caches_for_interpreter(self, interp) < 0) {
993972
goto result_err;
994973
}
@@ -1023,12 +1002,10 @@ _remote_debugging_RemoteUnwinder_get_all_awaited_by_impl(RemoteUnwinderObject *s
10231002
}
10241003

10251004
_Py_RemoteDebug_ClearCache(&self->handle);
1026-
Py_DECREF(seen);
10271005
return result;
10281006

10291007
result_err:
10301008
_Py_RemoteDebug_ClearCache(&self->handle);
1031-
Py_DECREF(seen);
10321009
Py_XDECREF(result);
10331010
return NULL;
10341011
}

0 commit comments

Comments
 (0)