Skip to content

Commit 6c2feab

Browse files
vstinnerpitrou
andauthored
bpo-31217: Fix regrtest -R for small integer (#3260)
Use a pool of integer objects toprevent false alarm when checking for memory block leaks. Fill the pool with values in -1000..1000 which are the most common (reference, memory block, file descriptor) differences. Co-Authored-By: Antoine Pitrou <[email protected]>
1 parent 122e88a commit 6c2feab

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

Lib/test/libregrtest/refleak.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@ def dash_R(the_module, test, indirect_test, huntrleaks):
3838
for obj in abc.__subclasses__() + [abc]:
3939
abcs[obj] = obj._abc_registry.copy()
4040

41+
# bpo-31217: Integer pool to get a single integer object for the same
42+
# value. The pool is used to prevent false alarm when checking for memory
43+
# block leaks. Fill the pool with values in -1000..1000 which are the most
44+
# common (reference, memory block, file descriptor) differences.
45+
int_pool = {value: value for value in range(-1000, 1000)}
46+
def get_pooled_int(value):
47+
return int_pool.setdefault(value, value)
48+
4149
nwarmup, ntracked, fname = huntrleaks
4250
fname = os.path.join(support.SAVEDCWD, fname)
4351
repcount = nwarmup + ntracked
@@ -56,9 +64,9 @@ def dash_R(the_module, test, indirect_test, huntrleaks):
5664
abcs)
5765
print('.', end='', file=sys.stderr, flush=True)
5866
if i >= nwarmup:
59-
rc_deltas[i] = rc_after - rc_before
60-
alloc_deltas[i] = alloc_after - alloc_before
61-
fd_deltas[i] = fd_after - fd_before
67+
rc_deltas[i] = get_pooled_int(rc_after - rc_before)
68+
alloc_deltas[i] = get_pooled_int(alloc_after - alloc_before)
69+
fd_deltas[i] = get_pooled_int(fd_after - fd_before)
6270
alloc_before = alloc_after
6371
rc_before = rc_after
6472
fd_before = fd_after

0 commit comments

Comments
 (0)