Skip to content

Commit b52011d

Browse files
committed
Fix test_tracemalloc
* test_tracemalloc find_trace() now also filters by size to ignore the memory allocated by _PyRefchain_Trace().
1 parent a44bea2 commit b52011d

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

Lib/test/test_tracemalloc.py

+11-9
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,11 @@ def test_set_traceback_limit(self):
173173
self.assertEqual(len(traceback), 1)
174174
self.assertEqual(traceback, obj_traceback)
175175

176-
def find_trace(self, traces, traceback):
176+
def find_trace(self, traces, traceback, size):
177+
# filter also by size to ignore the memory allocated by
178+
# _PyRefchain_Trace() if Python is built with Py_TRACE_REFS.
177179
for trace in traces:
178-
if trace[2] == traceback._frames:
180+
if trace[2] == traceback._frames and trace[1] == size:
179181
return trace
180182

181183
self.fail("trace not found")
@@ -186,11 +188,10 @@ def test_get_traces(self):
186188
obj, obj_traceback = allocate_bytes(obj_size)
187189

188190
traces = tracemalloc._get_traces()
189-
trace = self.find_trace(traces, obj_traceback)
191+
trace = self.find_trace(traces, obj_traceback, obj_size)
190192

191193
self.assertIsInstance(trace, tuple)
192194
domain, size, traceback, length = trace
193-
self.assertEqual(size, obj_size)
194195
self.assertEqual(traceback, obj_traceback._frames)
195196

196197
tracemalloc.stop()
@@ -208,17 +209,18 @@ def allocate_bytes4(size):
208209
# Ensure that two identical tracebacks are not duplicated
209210
tracemalloc.stop()
210211
tracemalloc.start(4)
211-
obj_size = 123
212-
obj1, obj1_traceback = allocate_bytes4(obj_size)
213-
obj2, obj2_traceback = allocate_bytes4(obj_size)
212+
obj1_size = 123
213+
obj2_size = 125
214+
obj1, obj1_traceback = allocate_bytes4(obj1_size)
215+
obj2, obj2_traceback = allocate_bytes4(obj2_size)
214216

215217
traces = tracemalloc._get_traces()
216218

217219
obj1_traceback._frames = tuple(reversed(obj1_traceback._frames))
218220
obj2_traceback._frames = tuple(reversed(obj2_traceback._frames))
219221

220-
trace1 = self.find_trace(traces, obj1_traceback)
221-
trace2 = self.find_trace(traces, obj2_traceback)
222+
trace1 = self.find_trace(traces, obj1_traceback, obj1_size)
223+
trace2 = self.find_trace(traces, obj2_traceback, obj2_size)
222224
domain1, size1, traceback1, length1 = trace1
223225
domain2, size2, traceback2, length2 = trace2
224226
self.assertIs(traceback2, traceback1)

0 commit comments

Comments
 (0)