rpms/rpm/devel rpm-4.7.90-python-refcounts.patch, NONE, 1.1 rpm.spec, 1.372, 1.373

Panu Matilainen pmatilai at fedoraproject.org
Wed Dec 9 13:16:52 UTC 2009


Author: pmatilai

Update of /cvs/pkgs/rpms/rpm/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv20968

Modified Files:
	rpm.spec 
Added Files:
	rpm-4.7.90-python-refcounts.patch 
Log Message:
- fix a bunch of python refcount-errors causing major memory leaks


rpm-4.7.90-python-refcounts.patch:
 header-py.c |    4 +++-
 rpmtd-py.c  |    4 +++-
 rpmts-py.c  |    2 ++
 spec-py.c   |    2 ++
 4 files changed, 10 insertions(+), 2 deletions(-)

--- NEW FILE rpm-4.7.90-python-refcounts.patch ---
diff --git a/python/header-py.c b/python/header-py.c
index 0416058..539db0d 100644
--- a/python/header-py.c
+++ b/python/header-py.c
@@ -139,7 +139,9 @@ static PyObject * hdrKeyList(hdrObject * s)
     rpmTag tag;
 
     while ((tag = headerNextTag(hi)) != RPMTAG_NOT_FOUND) {
-	PyList_Append(keys, PyInt_FromLong(tag));
+	PyObject *to = PyInt_FromLong(tag);
+	PyList_Append(keys, to);
+	Py_DECREF(to);
     }
     headerFreeIterator(hi);
 
diff --git a/python/rpmtd-py.c b/python/rpmtd-py.c
index eef35fe..1ba3a3d 100644
--- a/python/rpmtd-py.c
+++ b/python/rpmtd-py.c
@@ -46,7 +46,9 @@ PyObject *rpmtd_AsPyobj(rpmtd td)
     if (array) {
 	res = PyList_New(0);
 	while (rpmtdNext(td) >= 0) {
-	    PyList_Append(res, rpmtd_ItemAsPyobj(td, class));
+	    PyObject *item = rpmtd_ItemAsPyobj(td, class);
+	    PyList_Append(res, item);
+	    Py_DECREF(item);
 	}
     } else {
 	res = rpmtd_ItemAsPyobj(td, class);
diff --git a/python/rpmts-py.c b/python/rpmts-py.c
index f774818..745b526 100644
--- a/python/rpmts-py.c
+++ b/python/rpmts-py.c
@@ -351,6 +351,7 @@ rpmts_HdrFromFdno(rpmtsObject * s, PyObject *arg)
 
     if (rpmrc == RPMRC_OK) {
 	ho = hdr_Wrap(&hdr_Type, h);
+	h = headerFree(h); /* ref held by python object */
     } else {
 	Py_INCREF(Py_None);
 	ho = Py_None;
@@ -518,6 +519,7 @@ rpmts_Problems(rpmtsObject * s)
     while (rpmpsNextIterator(psi) >= 0) {
 	PyObject *prob = rpmprob_Wrap(&rpmProblem_Type, rpmpsGetProblem(psi));
 	PyList_Append(problems, prob);
+	Py_DECREF(prob);
     }
     rpmpsFreeIterator(psi);
     rpmpsFree(ps);
diff --git a/python/spec-py.c b/python/spec-py.c
index e162bb3..f5a4b33 100644
--- a/python/spec-py.c
+++ b/python/spec-py.c
@@ -177,6 +177,7 @@ static PyObject * spec_get_sources(specObject *s, void *closure)
 	PyObject *srcUrl = Py_BuildValue("(sii)", source->fullSource, 
 					 source->num, source->flags);
 	PyList_Append(sourceList, srcUrl);
+	Py_DECREF(srcUrl);
     } 
 
     return sourceList;
@@ -192,6 +193,7 @@ static PyObject * spec_get_packages(specObject *s, void *closure)
     for (pkg = spec->packages; pkg; pkg = pkg->next) {
 	PyObject *po = specPkg_Wrap(&specPkg_Type, pkg);
 	PyList_Append(pkgList, po);
+	Py_DECREF(po);
     }
     return pkgList;
 }


Index: rpm.spec
===================================================================
RCS file: /cvs/pkgs/rpms/rpm/devel/rpm.spec,v
retrieving revision 1.372
retrieving revision 1.373
diff -u -p -r1.372 -r1.373
--- rpm.spec	8 Dec 2009 14:30:07 -0000	1.372
+++ rpm.spec	9 Dec 2009 13:16:52 -0000	1.373
@@ -21,7 +21,7 @@
 Summary: The RPM package management system
 Name: rpm
 Version: %{rpmver}
-Release: 0.%{snapver}.2
+Release: 0.%{snapver}.3
 Group: System Environment/Base
 Url: http://www.rpm.org/
 Source0: http://rpm.org/releases/testing/%{name}-%{srcver}.tar.bz2
@@ -38,6 +38,7 @@ Patch3: rpm-4.7.90-fedora-specspo.patch
 
 # Patches already in upstream
 Patch200: rpm-4.7.90-python-bytecompile.patch
+Patch201: rpm-4.7.90-python-refcounts.patch
 
 # These are not yet upstream
 Patch301: rpm-4.6.0-niagara.patch
@@ -183,6 +184,7 @@ packages on a system.
 %patch3 -p1 -b .fedora-specspo
 
 %patch200 -p1 -b .python-bytecompile
+%patch201 -p1 -b .python-refcounts
 
 %patch301 -p1 -b .niagara
 %patch302 -p1 -b .geode
@@ -397,6 +399,9 @@ exit 0
 %doc doc/librpm/html/*
 
 %changelog
+* Wed Dec 09 2009 Panu Matilainen <pmatilai at redhat.com> - 4.8.0-0.beta1.3
+- fix a bunch of python refcount-errors causing major memory leaks
+
 * Mon Dec 07 2009 Panu Matilainen <pmatilai at redhat.com> - 4.8.0-0.beta1.2
 - fix noise from python bytecompile on non-python packages (#539635)
 - make all our -devel [build]requires isa-specific




More information about the fedora-extras-commits mailing list