aboutsummaryrefslogtreecommitdiff
path: root/lib/python/connections.h
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2008-10-27 11:14:31 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2008-10-27 11:14:31 +0000
commit7542f853b1a682ad9bf21b592f26e31e3b64521c (patch)
tree9659e518a97f81c61c310301b2fb07401b51e5e1 /lib/python/connections.h
parent636b9f54ca8b7e51fadfac03cf9703648106c548 (diff)
downloadenigma2-7542f853b1a682ad9bf21b592f26e31e3b64521c.tar.gz
enigma2-7542f853b1a682ad9bf21b592f26e31e3b64521c.zip
add workaround
Diffstat (limited to 'lib/python/connections.h')
-rw-r--r--lib/python/connections.h22
1 files changed, 19 insertions, 3 deletions
diff --git a/lib/python/connections.h b/lib/python/connections.h
index 76859e7d..ab123137 100644
--- a/lib/python/connections.h
+++ b/lib/python/connections.h
@@ -14,6 +14,7 @@ class PSignal
{
protected:
ePyObject m_list;
+ bool *m_destroyed;
public:
PSignal();
~PSignal();
@@ -37,13 +38,18 @@ class PSignal0: public PSignal, public Signal0<R>
public:
R operator()()
{
+ bool destroyed=false;
+ m_destroyed = &destroyed;
if (m_list)
{
PyObject *pArgs = PyTuple_New(0);
callPython(pArgs);
Org_Py_DECREF(pArgs);
}
- return Signal0<R>::operator()();
+ if (!destroyed) {
+ m_destroyed = 0;
+ return Signal0<R>::operator()();
+ }
}
};
@@ -53,6 +59,8 @@ class PSignal1: public PSignal, public Signal1<R,V0>
public:
R operator()(V0 a0)
{
+ bool destroyed=false;
+ m_destroyed = &destroyed;
if (m_list)
{
PyObject *pArgs = PyTuple_New(1);
@@ -60,7 +68,10 @@ public:
callPython(pArgs);
Org_Py_DECREF(pArgs);
}
- return Signal1<R,V0>::operator()(a0);
+ if (!destroyed) {
+ m_destroyed = 0;
+ return Signal1<R,V0>::operator()(a0);
+ }
}
};
@@ -70,6 +81,8 @@ class PSignal2: public PSignal, public Signal2<R,V0,V1>
public:
R operator()(V0 a0, V1 a1)
{
+ bool destroyed=false;
+ m_destroyed = &destroyed;
if (m_list)
{
PyObject *pArgs = PyTuple_New(2);
@@ -78,7 +91,10 @@ public:
callPython(pArgs);
Org_Py_DECREF(pArgs);
}
- return Signal2<R,V0,V1>::operator()(a0, a1);
+ if (!destroyed) {
+ m_destroyed = 0;
+ return Signal2<R,V0,V1>::operator()(a0, a1);
+ }
}
};