From: Benjamin Peterson Date: Sun, 16 Feb 2014 19:53:55 +0000 (-0500) Subject: merge 3.3 X-Git-Tag: v3.4.1rc1~233^2~311 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f617fa88debe53584b9986f86d9f5c4e2397d5f1;p=thirdparty%2FPython%2Fcpython.git merge 3.3 --- f617fa88debe53584b9986f86d9f5c4e2397d5f1 diff --cc Lib/test/regrtest.py index 17cbccbe2218,ae62c6e7a0f1..c1c831ff867c --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@@ -1393,43 -1343,28 +1392,43 @@@ def dash_R(the_module, test, indirect_t print("beginning", repcount, "repetitions", file=sys.stderr) print(("1234567890"*(repcount//10 + 1))[:repcount], file=sys.stderr) sys.stderr.flush() - dash_R_cleanup(fs, ps, pic, zdc, abcs) for i in range(repcount): - rc_before = sys.gettotalrefcount() - run_the_test() + indirect_test() - alloc_after, rc_after = dash_R_cleanup(fs, ps, pic, zdc, zsc, abcs) ++ alloc_after, rc_after = dash_R_cleanup(fs, ps, pic, zdc, abcs) sys.stderr.write('.') sys.stderr.flush() - dash_R_cleanup(fs, ps, pic, zdc, abcs) - rc_after = sys.gettotalrefcount() if i >= nwarmup: - deltas.append(rc_after - rc_before) + rc_deltas[i] = rc_after - rc_before + alloc_deltas[i] = alloc_after - alloc_before + alloc_before, rc_before = alloc_after, rc_after print(file=sys.stderr) - if any(deltas): - msg = '%s leaked %s references, sum=%s' % (test, deltas, sum(deltas)) - print(msg, file=sys.stderr) - sys.stderr.flush() - with open(fname, "a") as refrep: - print(msg, file=refrep) - refrep.flush() - return True - return False + # These checkers return False on success, True on failure + def check_rc_deltas(deltas): + return any(deltas) + def check_alloc_deltas(deltas): + # At least 1/3rd of 0s + if 3 * deltas.count(0) < len(deltas): + return True + # Nothing else than 1s, 0s and -1s + if not set(deltas) <= {1,0,-1}: + return True + return False + failed = False + for deltas, item_name, checker in [ + (rc_deltas, 'references', check_rc_deltas), + (alloc_deltas, 'memory blocks', check_alloc_deltas)]: + if checker(deltas): + msg = '%s leaked %s %s, sum=%s' % ( + test, deltas[nwarmup:], item_name, sum(deltas)) + print(msg, file=sys.stderr) + sys.stderr.flush() + with open(fname, "a") as refrep: + print(msg, file=refrep) + refrep.flush() + failed = True + return failed - def dash_R_cleanup(fs, ps, pic, zdc, zsc, abcs): + def dash_R_cleanup(fs, ps, pic, zdc, abcs): import gc, copyreg import _strptime, linecache import urllib.parse, urllib.request, mimetypes, doctest