@@ -173,9 +173,11 @@ def test_set_traceback_limit(self):
173
173
self .assertEqual (len (traceback ), 1 )
174
174
self .assertEqual (traceback , obj_traceback )
175
175
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.
177
179
for trace in traces :
178
- if trace [2 ] == traceback ._frames :
180
+ if trace [2 ] == traceback ._frames and trace [ 1 ] == size :
179
181
return trace
180
182
181
183
self .fail ("trace not found" )
@@ -186,11 +188,10 @@ def test_get_traces(self):
186
188
obj , obj_traceback = allocate_bytes (obj_size )
187
189
188
190
traces = tracemalloc ._get_traces ()
189
- trace = self .find_trace (traces , obj_traceback )
191
+ trace = self .find_trace (traces , obj_traceback , obj_size )
190
192
191
193
self .assertIsInstance (trace , tuple )
192
194
domain , size , traceback , length = trace
193
- self .assertEqual (size , obj_size )
194
195
self .assertEqual (traceback , obj_traceback ._frames )
195
196
196
197
tracemalloc .stop ()
@@ -208,17 +209,18 @@ def allocate_bytes4(size):
208
209
# Ensure that two identical tracebacks are not duplicated
209
210
tracemalloc .stop ()
210
211
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 )
214
216
215
217
traces = tracemalloc ._get_traces ()
216
218
217
219
obj1_traceback ._frames = tuple (reversed (obj1_traceback ._frames ))
218
220
obj2_traceback ._frames = tuple (reversed (obj2_traceback ._frames ))
219
221
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 )
222
224
domain1 , size1 , traceback1 , length1 = trace1
223
225
domain2 , size2 , traceback2 , length2 = trace2
224
226
self .assertIs (traceback2 , traceback1 )
0 commit comments