Skip to content

Commit 98c849a

Browse files
vstinnerpitrou
andauthored
bpo-31217: Fix regrtest -R for small integer (#3260) (#3261)
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]> (cherry picked from commit 6c2feab)
1 parent 60f3f1f commit 98c849a

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
@@ -68,6 +68,14 @@ def dash_R(the_module, test, indirect_test, huntrleaks):
6868
for obj in abc.__subclasses__() + [abc]:
6969
abcs[obj] = obj._abc_registry.copy()
7070

71+
# bpo-31217: Integer pool to get a single integer object for the same
72+
# value. The pool is used to prevent false alarm when checking for memory
73+
# block leaks. Fill the pool with values in -1000..1000 which are the most
74+
# common (reference, memory block, file descriptor) differences.
75+
int_pool = {value: value for value in range(-1000, 1000)}
76+
def get_pooled_int(value):
77+
return int_pool.setdefault(value, value)
78+
7179
nwarmup, ntracked, fname = huntrleaks
7280
fname = os.path.join(support.SAVEDCWD, fname)
7381
repcount = nwarmup + ntracked
@@ -86,9 +94,9 @@ def dash_R(the_module, test, indirect_test, huntrleaks):
8694
abcs)
8795
print('.', end='', file=sys.stderr, flush=True)
8896
if i >= nwarmup:
89-
rc_deltas[i] = rc_after - rc_before
90-
alloc_deltas[i] = alloc_after - alloc_before
91-
fd_deltas[i] = fd_after - fd_before
97+
rc_deltas[i] = get_pooled_int(rc_after - rc_before)
98+
alloc_deltas[i] = get_pooled_int(alloc_after - alloc_before)
99+
fd_deltas[i] = get_pooled_int(fd_after - fd_before)
92100
alloc_before = alloc_after
93101
rc_before = rc_after
94102
fd_before = fd_after

0 commit comments

Comments
 (0)