From: Andreas Monzner Date: Thu, 11 Jan 2007 00:25:55 +0000 (+0000) Subject: do not call and create any python object when no python callback is X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=26ff43bdf1eb6fe4da12db2c61a63c0dcd9612c8 do not call and create any python object when no python callback is connected --- diff --git a/lib/python/connections.cpp b/lib/python/connections.cpp index fd3e2a4..3c31baf 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 d24bb42..8ff3a62 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 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::operator()(); } }; @@ -49,10 +53,13 @@ class PSignal1: public PSignal, public Signal1 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::operator()(a0); } }; @@ -63,11 +70,14 @@ class PSignal2: public PSignal, public Signal2 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::operator()(a0, a1); } };