diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2008-10-27 11:14:31 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2008-10-27 11:14:31 +0000 |
| commit | 7542f853b1a682ad9bf21b592f26e31e3b64521c (patch) | |
| tree | 9659e518a97f81c61c310301b2fb07401b51e5e1 /lib/python/connections.h | |
| parent | 636b9f54ca8b7e51fadfac03cf9703648106c548 (diff) | |
| download | enigma2-7542f853b1a682ad9bf21b592f26e31e3b64521c.tar.gz enigma2-7542f853b1a682ad9bf21b592f26e31e3b64521c.zip | |
add workaround
Diffstat (limited to 'lib/python/connections.h')
| -rw-r--r-- | lib/python/connections.h | 22 |
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); + } } }; |
