]> granicus.if.org Git - python/commitdiff
merge 3.3
authorBenjamin Peterson <benjamin@python.org>
Sun, 16 Feb 2014 19:53:55 +0000 (14:53 -0500)
committerBenjamin Peterson <benjamin@python.org>
Sun, 16 Feb 2014 19:53:55 +0000 (14:53 -0500)
1  2 
Lib/test/regrtest.py
Lib/test/test_pkgutil.py

index 17cbccbe2218ff0544155b99c9fb7c3bcdb83048,ae62c6e7a0f1851c33a4fa051bf2c047a6e394f4..c1c831ff867c037fa4e3c297df8512a019291e1e
@@@ -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
Simple merge