From dc5ef0b998fefddf873304b54b13c34d874e0740 Mon Sep 17 00:00:00 2001 From: Renato Filho Date: Mon, 11 Jul 2011 18:55:54 -0300 Subject: Increment reference for functions used on QtCore.Property. Fix bug #899. Reviewer: Marcelo Lira Hugo Parente Lima --- libpyside/pysideproperty.cpp | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'libpyside') diff --git a/libpyside/pysideproperty.cpp b/libpyside/pysideproperty.cpp index b1cb19c4e..b3f517836 100644 --- a/libpyside/pysideproperty.cpp +++ b/libpyside/pysideproperty.cpp @@ -169,6 +169,7 @@ int qpropertyTpInit(PyObject* self, PyObject* args, PyObject* kwds) return 0; } + pData->typeName = PySide::Signal::getTypeName(type); if (!pData->typeName) @@ -176,17 +177,38 @@ int qpropertyTpInit(PyObject* self, PyObject* args, PyObject* kwds) else if (pData->constant && (pData->fset || pData->notify)) PyErr_SetString(PyExc_TypeError, "A constant property cannot have a WRITE method or a NOTIFY signal."); - return PyErr_Occurred() ? -1 : 1; + if (!PyErr_Occurred()) { + Py_XINCREF(pData->fget); + Py_XINCREF(pData->fset); + Py_XINCREF(pData->freset); + Py_XINCREF(pData->fdel); + Py_XINCREF(pData->notify); + return 1; + } else { + pData->fget = 0; + pData->fset = 0; + pData->freset = 0; + pData->fdel = 0; + pData->notify = 0; + return -1; + } } void qpropertyFree(void *self) { PyObject *pySelf = reinterpret_cast(self); PySideProperty *data = reinterpret_cast(self); + PySidePropertyPrivate* pData = data->d; + + Py_XDECREF(pData->fget); + Py_XDECREF(pData->fset); + Py_XDECREF(pData->freset); + Py_XDECREF(pData->fdel); + Py_XDECREF(pData->notify); - free(data->d->typeName); - free(data->d->doc); - free(data->d->notifySignature); + free(pData->typeName); + free(pData->doc); + free(pData->notifySignature); delete data->d; pySelf->ob_type->tp_base->tp_free(self); } -- cgit v1.2.3