[Zope3-checkins] CVS: Zope3/src/zodb/btrees - BTreeTemplate.c:1.11
Tim Peters
tim.one@comcast.net
Tue, 18 Mar 2003 17:30:46 -0500
Update of /cvs-repository/Zope3/src/zodb/btrees
In directory cvs.zope.org:/tmp/cvs-serv1336/src/zodb/btrees
Modified Files:
BTreeTemplate.c
Log Message:
BTree_newBucket(): This leaked a reference to the bucket-construction
function (like OOBucket). The patch fixes 1 leaking reference per
iteration of a test program I have, leaving about 108 leaking refs per
iteration. So far, I haven't even been able to figure out what kinds
of objects are the leak beneficiaries, except to note that they're
probably static type objects (like OOBucket) since in a Python debug-build
the leaks do reflect in sys.gettotalrefcount() but not in the sum of
sys.getrefcount(x) across all x in sys.getobjects(0) (and, AFAIK, only
static type objects don't show up in the sys.getobjects(0) list).
=== Zope3/src/zodb/btrees/BTreeTemplate.c 1.10 => 1.11 ===
--- Zope3/src/zodb/btrees/BTreeTemplate.c:1.10 Tue Mar 4 17:36:53 2003
+++ Zope3/src/zodb/btrees/BTreeTemplate.c Tue Mar 18 17:30:45 2003
@@ -233,8 +233,9 @@
BTree_newBucket(BTree *self)
{
PyObject *factory;
- /* _bucket_type_str defined in BTreeModuleTemplate.c */
+ Sized *result;
+ /* _bucket_type_str defined in BTreeModuleTemplate.c */
factory = PyObject_GetAttr((PyObject *)self->ob_type, _bucket_type_str);
if (factory == NULL)
return NULL;
@@ -243,7 +244,9 @@
depend on any custom bucket type having the same layout at the
C level.
*/
- return (Sized *)PyObject_CallObject(factory, NULL);
+ result = SIZED(PyObject_CallObject(factory, NULL));
+ Py_DECREF(factory);
+ return result;
}
/*