aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2008-11-25 00:34:29 +0100
committerghost <andreas.monzner@multimedia-labs.de>2008-11-25 00:34:29 +0100
commit371e23c22dcec461ee3fbc8c989859cd08717b3d (patch)
tree1b0a2c4c343be884ee6aea064574b577859b1150
parentafc5eb78a27a7c41fffd81eadf7ac650cb6f2043 (diff)
downloadenigma2-371e23c22dcec461ee3fbc8c989859cd08717b3d.tar.gz
enigma2-371e23c22dcec461ee3fbc8c989859cd08717b3d.zip
fix some refcounting bugs
-rw-r--r--lib/base/nconfig.cpp1
-rw-r--r--lib/dvb/dvb.cpp6
-rw-r--r--lib/dvb/epgcache.cpp2
-rw-r--r--lib/gui/elistboxcontent.cpp17
4 files changed, 17 insertions, 9 deletions
diff --git a/lib/base/nconfig.cpp b/lib/base/nconfig.cpp
index 31b0a36f..106558ac 100644
--- a/lib/base/nconfig.cpp
+++ b/lib/base/nconfig.cpp
@@ -25,6 +25,7 @@ RESULT ePythonConfigQuery::getConfigValue(const char *key, std::string &value)
if (PyString_Check(pRet))
{
value.assign(PyString_AS_STRING(pRet));
+ Py_DECREF(pRet);
return 0;
}
Py_DECREF(pRet);
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp
index 7e9a39c6..eac4554d 100644
--- a/lib/dvb/dvb.cpp
+++ b/lib/dvb/dvb.cpp
@@ -1502,7 +1502,7 @@ RESULT eDVBChannel::setCIRouting(const eDVBCIRouting &routing)
void eDVBChannel::SDTready(int result)
{
- ePyObject args = PyTuple_New(2);
+ ePyObject args = PyTuple_New(2), ret;
bool ok=false;
if (!result)
{
@@ -1521,7 +1521,9 @@ void eDVBChannel::SDTready(int result)
Py_INCREF(Py_None);
Py_INCREF(Py_None);
}
- PyObject_CallObject(m_tsid_onid_callback, args);
+ ret = PyObject_CallObject(m_tsid_onid_callback, args);
+ if (ret)
+ Py_DECREF(ret);
Py_DECREF(args);
Py_DECREF(m_tsid_onid_callback);
m_tsid_onid_callback = ePyObject();
diff --git a/lib/dvb/epgcache.cpp b/lib/dvb/epgcache.cpp
index 0bb6e25b..222cba32 100644
--- a/lib/dvb/epgcache.cpp
+++ b/lib/dvb/epgcache.cpp
@@ -1672,7 +1672,7 @@ int handleEvent(eServiceEvent *ptr, ePyObject dest_list, const char* argstring,
{
fillTuple(convertFuncArgs, argstring, argcount, service, ptr, nowTime, service_name);
ePyObject result = PyObject_CallObject(convertFunc, convertFuncArgs);
- if (result)
+ if (!result)
{
if (service_name)
Py_DECREF(service_name);
diff --git a/lib/gui/elistboxcontent.cpp b/lib/gui/elistboxcontent.cpp
index beb12044..69f72a41 100644
--- a/lib/gui/elistboxcontent.cpp
+++ b/lib/gui/elistboxcontent.cpp
@@ -467,7 +467,8 @@ void eListboxPythonConfigContent::paint(gPainter &painter, eWindowStyle &style,
/* type is borrowed */
} else
eWarning("eListboxPythonConfigContent: second value of tuple is not a tuple.");
- /* value is borrowed */
+ if (value)
+ Py_DECREF(value);
}
if (selected && (!local_style || !local_style->m_selection))
@@ -622,7 +623,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
painter.clip(itemregion);
clearRegion(painter, style, local_style, ePyObject(), ePyObject(), ePyObject(), ePyObject(), selected, itemregion, sel_clip);
- ePyObject items;
+ ePyObject items, buildfunc_ret;
if (m_list && cursorValid())
{
@@ -638,7 +639,7 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
if (PyCallable_Check(m_buildFunc)) // when we have a buildFunc then call it
{
if (PyTuple_Check(items))
- items = PyObject_CallObject(m_buildFunc, items);
+ buildfunc_ret = items = PyObject_CallObject(m_buildFunc, items);
else
eDebug("items is no tuple");
}
@@ -983,8 +984,8 @@ void eListboxPythonMultiContent::paint(gPainter &painter, eWindowStyle &style, c
style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry);
error_out:
- if (m_buildFunc && PyCallable_Check(m_buildFunc) && items)
- Py_DECREF(items);
+ if (buildfunc_ret)
+ Py_DECREF(buildfunc_ret);
painter.clippop();
}
@@ -1015,7 +1016,11 @@ int eListboxPythonMultiContent::currentCursorSelectable()
{
ePyObject ret = PyObject_CallObject(m_selectableFunc, args);
if (ret)
- return ret == Py_True;
+ {
+ bool retval = ret == Py_True;
+ Py_DECREF(ret);
+ return ret;
+ }
eDebug("call m_selectableFunc failed!!! assume not callable");
}
else