- fix a bunch of python refcount-errors causing major memory leaks
This commit is contained in:
parent
3025ee15e8
commit
36fffc974d
70
rpm-4.7.90-python-refcounts.patch
Normal file
70
rpm-4.7.90-python-refcounts.patch
Normal file
@ -0,0 +1,70 @@
|
||||
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;
|
||||
}
|
7
rpm.spec
7
rpm.spec
@ -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@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@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
|
||||
|
Loading…
Reference in New Issue
Block a user