Message148944
| Author |
meador.inge |
| Recipients |
Trundle, dmalcolm, meador.inge, ncoghlan, neologix, pitrou, tim.peters, vstinner |
| Date |
2011年12月06日.23:41:41 |
| SpamBayes Score |
6.5440354e-08 |
| Marked as misclassified |
No |
| Message-id |
<1323214903.04.0.78072292975.issue13390@psf.upfronthosting.co.za> |
| In-reply-to |
| Content |
I looked at the 'ctypes' "leak" a bit. I haven't determined exactly what
is going on, but the leak has something to do with a change in the patch that
runs 'dash_R_cleanup' twice instead of once. The new behavior can be reduced
to something like:
import sys, ctypes, gc
ctypes._reset_cache()
gc.collect()
for i in range(0, 5):
ctypes._reset_cache()
gc.collect()
print("%d: start refs = %s" % (i, sys.gettotalrefcount()))
proto = ctypes.CFUNCTYPE(ctypes.POINTER(ctypes.c_char))
ctypes._reset_cache()
gc.collect()
print("%d: after refs = %s" % (i, sys.gettotalrefcount()))
which prints:
0: start refs = 71395
0: after refs = 71462
1: start refs = 71463
1: after refs = 71493
2: start refs = 71465
2: after refs = 71494
3: start refs = 71465
3: after refs = 71494
4: start refs = 71465
4: after refs = 71494
Note that the start/after refs converge on a difference of 29 references.
The existing version 'regrtest.py' does something like:
import sys, ctypes, gc
ctypes._reset_cache()
gc.collect()
for i in range(0, 5):
print("%d: start refs = %s" % (i, sys.gettotalrefcount()))
proto = ctypes.CFUNCTYPE(ctypes.POINTER(ctypes.c_char))
ctypes._reset_cache()
gc.collect()
print("%d: after refs = %s" % (i, sys.gettotalrefcount()))
which prints:
0: start refs = 71391
0: after refs = 71458
1: start refs = 71458
1: after refs = 71489
2: start refs = 71489
2: after refs = 71490
3: start refs = 71490
3: after refs = 71490
4: start refs = 71490
4: after refs = 71490
This one converges on a difference of zero.
So, I am not sure whether there really is a leak, if this is just
a very senstive area of 'regrtest.py', or something else I am missing. |
|