aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-01-11 00:25:55 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2007-01-11 00:25:55 +0000
commit26ff43bdf1eb6fe4da12db2c61a63c0dcd9612c8 (patch)
tree3e39489e819c8743ee88cc26313b0b03ddd762a5
parent928636f5e93f9a06c8f734f97ccddf39807da4ec (diff)
downloadenigma2-26ff43bdf1eb6fe4da12db2c61a63c0dcd9612c8.tar.gz
enigma2-26ff43bdf1eb6fe4da12db2c61a63c0dcd9612c8.zip
do not call and create any python object when no python callback is
connected
-rw-r--r--lib/python/connections.cpp9
-rw-r--r--lib/python/connections.h34
2 files changed, 28 insertions, 15 deletions
diff --git a/lib/python/connections.cpp b/lib/python/connections.cpp
index fd3e2a4b..3c31baf8 100644
--- a/lib/python/connections.cpp
+++ b/lib/python/connections.cpp
@@ -2,13 +2,11 @@
PSignal::PSignal()
{
- m_list = PyList_New(0);
- Py_INCREF(m_list);
}
PSignal::~PSignal()
{
- Py_DECREF(m_list);
+ Py_XDECREF(m_list);
}
void PSignal::callPython(ePyObject tuple)
@@ -24,6 +22,11 @@ void PSignal::callPython(ePyObject tuple)
PyObject *PSignal::get()
{
+ if (!m_list)
+ {
+ m_list = PyList_New(0);
+ Py_INCREF(m_list);
+ }
Py_INCREF(m_list);
return m_list;
}
diff --git a/lib/python/connections.h b/lib/python/connections.h
index d24bb42f..8ff3a620 100644
--- a/lib/python/connections.h
+++ b/lib/python/connections.h
@@ -12,6 +12,7 @@
class PSignal
{
+protected:
ePyObject m_list;
public:
PSignal();
@@ -36,9 +37,12 @@ class PSignal0: public PSignal, public Signal0<R>
public:
R operator()()
{
- PyObject *pArgs = PyTuple_New(0);
- callPython(pArgs);
- Org_Py_DECREF(pArgs);
+ if (m_list)
+ {
+ PyObject *pArgs = PyTuple_New(0);
+ callPython(pArgs);
+ Org_Py_DECREF(pArgs);
+ }
return Signal0<R>::operator()();
}
};
@@ -49,10 +53,13 @@ class PSignal1: public PSignal, public Signal1<R,V0>
public:
R operator()(V0 a0)
{
- PyObject *pArgs = PyTuple_New(1);
- PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
- callPython(pArgs);
- Org_Py_DECREF(pArgs);
+ if (m_list)
+ {
+ PyObject *pArgs = PyTuple_New(1);
+ PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
+ callPython(pArgs);
+ Org_Py_DECREF(pArgs);
+ }
return Signal1<R,V0>::operator()(a0);
}
};
@@ -63,11 +70,14 @@ class PSignal2: public PSignal, public Signal2<R,V0,V1>
public:
R operator()(V0 a0, V1 a1)
{
- PyObject *pArgs = PyTuple_New(2);
- PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
- PyTuple_SET_ITEM(pArgs, 1, PyFrom(a1));
- callPython(pArgs);
- Org_Py_DECREF(pArgs);
+ if (m_list)
+ {
+ PyObject *pArgs = PyTuple_New(2);
+ PyTuple_SET_ITEM(pArgs, 0, PyFrom(a0));
+ PyTuple_SET_ITEM(pArgs, 1, PyFrom(a1));
+ callPython(pArgs);
+ Org_Py_DECREF(pArgs);
+ }
return Signal2<R,V0,V1>::operator()(a0, a1);
}
};