Fixed reference leak on PySideSignal for QTimer.SingleShot

Fixes bug #815.

Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
          Hugo Parente Lima <hugo.pl@gmail.com>
This commit is contained in:
Renato Filho 2011-04-20 10:35:24 -03:00 • committed by Hugo Parente Lima
commit 0512a3f98f

View file

@ -2100,7 +2100,8 @@
%PYARG_2, %PYARG_2,
%3) %3)
); );
Shiboken::Object::invalidate((SbkObject*)pyTimer); Shiboken::Object::releaseOwnership((SbkObject*)pyTimer);
Py_XDECREF(pyTimer);
timer->setSingleShot(true); timer->setSingleShot(true);
timer->connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater())); timer->connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater()));
timer->start(%1); timer->start(%1);
@ -2114,7 +2115,6 @@
Shiboken::SbkType&lt;QTimer>()->tp_init(pyTimer, emptyTuple, 0); Shiboken::SbkType&lt;QTimer>()->tp_init(pyTimer, emptyTuple, 0);
QTimer* timer = %CONVERTTOCPP[QTimer*](pyTimer); QTimer* timer = %CONVERTTOCPP[QTimer*](pyTimer);
timer->setSingleShot(true); timer->setSingleShot(true);
timer->connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater()));
if (PyObject_TypeCheck(%2, &amp;PySideSignalInstanceType)) { if (PyObject_TypeCheck(%2, &amp;PySideSignalInstanceType)) {
PySideSignalInstance* signalInstance = reinterpret_cast&lt;PySideSignalInstance*&gt;(%2); PySideSignalInstance* signalInstance = reinterpret_cast&lt;PySideSignalInstance*&gt;(%2);
@ -2138,7 +2138,10 @@
pyargs[1]) pyargs[1])
); );
} }
Shiboken::Object::invalidate((SbkObject*)pyTimer);
timer->connect(timer, SIGNAL(timeout()), timer, SLOT(deleteLater()), Qt::DirectConnection);
Shiboken::Object::releaseOwnership((SbkObject*)pyTimer);
Py_XDECREF(pyTimer);
timer->start(%1); timer->start(%1);
</inject-code> </inject-code>
</add-function> </add-function>