Skip to content

Commit 0663518

Browse files
committed
Remove the cache as it was making things worse
1 parent e9ec2fa commit 0663518

File tree

2 files changed

+0
-84
lines changed

2 files changed

+0
-84
lines changed

Modules/_remote_debugging_module.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2754,7 +2754,6 @@ _remote_debugging_RemoteUnwinder_get_stack_trace_impl(RemoteUnwinderObject *self
27542754
}
27552755

27562756
exit:
2757-
_Py_RemoteDebug_ClearCache(&self->handle);
27582757
return result;
27592758
}
27602759

@@ -2878,11 +2877,9 @@ _remote_debugging_RemoteUnwinder_get_all_awaited_by_impl(RemoteUnwinderObject *s
28782877
goto result_err;
28792878
}
28802879

2881-
_Py_RemoteDebug_ClearCache(&self->handle);
28822880
return result;
28832881

28842882
result_err:
2885-
_Py_RemoteDebug_ClearCache(&self->handle);
28862883
Py_XDECREF(result);
28872884
return NULL;
28882885
}
@@ -2949,11 +2946,9 @@ _remote_debugging_RemoteUnwinder_get_async_stack_trace_impl(RemoteUnwinderObject
29492946
goto cleanup;
29502947
}
29512948

2952-
_Py_RemoteDebug_ClearCache(&self->handle);
29532949
return result;
29542950

29552951
cleanup:
2956-
_Py_RemoteDebug_ClearCache(&self->handle);
29572952
Py_XDECREF(result);
29582953
return NULL;
29592954
}
@@ -2979,7 +2974,6 @@ RemoteUnwinder_dealloc(PyObject *op)
29792974
}
29802975
#endif
29812976
if (self->handle.pid != 0) {
2982-
_Py_RemoteDebug_ClearCache(&self->handle);
29832977
_Py_RemoteDebug_CleanupProcHandle(&self->handle);
29842978
}
29852979
PyObject_Del(self);

Python/remote_debug.h

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,6 @@ get_page_size(void) {
110110
return page_size;
111111
}
112112

113-
typedef struct page_cache_entry {
114-
uintptr_t page_addr; // page-aligned base address
115-
char *data;
116-
int valid;
117-
struct page_cache_entry *next;
118-
} page_cache_entry_t;
119-
120-
#define MAX_PAGES 1024
121113

122114
// Define a platform-independent process handle structure
123115
typedef struct {
@@ -129,27 +121,9 @@ typedef struct {
129121
#elif defined(__linux__)
130122
int memfd;
131123
#endif
132-
page_cache_entry_t pages[MAX_PAGES];
133124
Py_ssize_t page_size;
134125
} proc_handle_t;
135126

136-
static void
137-
_Py_RemoteDebug_FreePageCache(proc_handle_t *handle)
138-
{
139-
for (int i = 0; i < MAX_PAGES; i++) {
140-
PyMem_RawFree(handle->pages[i].data);
141-
handle->pages[i].data = NULL;
142-
handle->pages[i].valid = 0;
143-
}
144-
}
145-
146-
UNUSED static void
147-
_Py_RemoteDebug_ClearCache(proc_handle_t *handle)
148-
{
149-
for (int i = 0; i < MAX_PAGES; i++) {
150-
handle->pages[i].valid = 0;
151-
}
152-
}
153127

154128
#if defined(__APPLE__) && defined(TARGET_OS_OSX) && TARGET_OS_OSX
155129
static mach_port_t pid_to_task(pid_t pid);
@@ -178,10 +152,6 @@ _Py_RemoteDebug_InitProcHandle(proc_handle_t *handle, pid_t pid) {
178152
handle->memfd = -1;
179153
#endif
180154
handle->page_size = get_page_size();
181-
for (int i = 0; i < MAX_PAGES; i++) {
182-
handle->pages[i].data = NULL;
183-
handle->pages[i].valid = 0;
184-
}
185155
return 0;
186156
}
187157

@@ -200,7 +170,6 @@ _Py_RemoteDebug_CleanupProcHandle(proc_handle_t *handle) {
200170
}
201171
#endif
202172
handle->pid = 0;
203-
_Py_RemoteDebug_FreePageCache(handle);
204173
}
205174

206175
#if defined(__APPLE__) && defined(TARGET_OS_OSX) && TARGET_OS_OSX
@@ -1066,53 +1035,6 @@ _Py_RemoteDebug_PagedReadRemoteMemory(proc_handle_t *handle,
10661035
size_t size,
10671036
void *out)
10681037
{
1069-
size_t page_size = handle->page_size;
1070-
uintptr_t page_base = addr & ~(page_size - 1);
1071-
size_t offset_in_page = addr - page_base;
1072-
1073-
if (offset_in_page + size > page_size) {
1074-
return _Py_RemoteDebug_ReadRemoteMemory(handle, addr, size, out);
1075-
}
1076-
1077-
// Search for valid cached page
1078-
for (int i = 0; i < MAX_PAGES; i++) {
1079-
page_cache_entry_t *entry = &handle->pages[i];
1080-
if (entry->valid && entry->page_addr == page_base) {
1081-
memcpy(out, entry->data + offset_in_page, size);
1082-
return 0;
1083-
}
1084-
}
1085-
1086-
// Find reusable slot
1087-
for (int i = 0; i < MAX_PAGES; i++) {
1088-
page_cache_entry_t *entry = &handle->pages[i];
1089-
if (!entry->valid) {
1090-
if (entry->data == NULL) {
1091-
entry->data = PyMem_RawMalloc(page_size);
1092-
if (entry->data == NULL) {
1093-
_set_debug_exception_cause(PyExc_MemoryError,
1094-
"Cannot allocate %zu bytes for page cache entry "
1095-
"during read from PID %d at address 0x%lx",
1096-
page_size, handle->pid, addr);
1097-
return -1;
1098-
}
1099-
}
1100-
1101-
if (_Py_RemoteDebug_ReadRemoteMemory(handle, page_base, page_size, entry->data) < 0) {
1102-
// Try to just copy the exact ammount as a fallback
1103-
PyErr_Clear();
1104-
goto fallback;
1105-
}
1106-
1107-
entry->page_addr = page_base;
1108-
entry->valid = 1;
1109-
memcpy(out, entry->data + offset_in_page, size);
1110-
return 0;
1111-
}
1112-
}
1113-
1114-
fallback:
1115-
// Cache full — fallback to uncached read
11161038
return _Py_RemoteDebug_ReadRemoteMemory(handle, addr, size, out);
11171039
}
11181040

0 commit comments

Comments
 (0)