Call signalmanager clear during QtCore exit function instead of QtCoreApplication destrcutor, to avoid memory leaks.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>
Luciano Wolf <luciano.wolf@openbossa.org>
This commit is contained in:
parent
4f51600e20
commit
f4668398e2
3 changed files with 6 additions and 3 deletions
|
|
@ -7,7 +7,6 @@ static char** QCoreApplicationArgValues;
|
||||||
*/
|
*/
|
||||||
void DeleteQCoreApplicationAtExit() {
|
void DeleteQCoreApplicationAtExit() {
|
||||||
if (QCoreApplication::instance()) {
|
if (QCoreApplication::instance()) {
|
||||||
PySide::SignalManager::instance().clear();
|
|
||||||
BindingManager::instance().invalidateWrapper(QCoreApplication::instance());
|
BindingManager::instance().invalidateWrapper(QCoreApplication::instance());
|
||||||
QCoreApplication::instance()->deleteLater();
|
QCoreApplication::instance()->deleteLater();
|
||||||
for (int i = 0; i < QCoreApplicationArgCount; ++i)
|
for (int i = 0; i < QCoreApplicationArgCount; ++i)
|
||||||
|
|
|
||||||
|
|
@ -649,11 +649,13 @@
|
||||||
<enum-type name="QMetaMethod::Access"/>
|
<enum-type name="QMetaMethod::Access"/>
|
||||||
<enum-type name="QMetaMethod::MethodType"/>
|
<enum-type name="QMetaMethod::MethodType"/>
|
||||||
|
|
||||||
|
|
||||||
<!--signal/slot-->
|
<!--signal/slot-->
|
||||||
<inject-code class="target" position="end">
|
<inject-code class="target" position="end">
|
||||||
Shiboken::TypeResolver::createValueTypeResolver<QString>("unicode");
|
Shiboken::TypeResolver::createValueTypeResolver<QString>("unicode");
|
||||||
Shiboken::TypeResolver::createValueTypeResolver<QString>("str");
|
Shiboken::TypeResolver::createValueTypeResolver<QString>("str");
|
||||||
PySide::init(module);
|
PySide::init(module);
|
||||||
|
Py_AtExit(QtCoreModuleExit);
|
||||||
</inject-code>
|
</inject-code>
|
||||||
<inject-code class="native" position="beginning">
|
<inject-code class="native" position="beginning">
|
||||||
#include <pyside.h>
|
#include <pyside.h>
|
||||||
|
|
@ -669,6 +671,10 @@
|
||||||
Shiboken::AutoDecRef arglist(Shiboken::makeTuple(type, msg));
|
Shiboken::AutoDecRef arglist(Shiboken::makeTuple(type, msg));
|
||||||
Shiboken::AutoDecRef ret(PyObject_CallObject(qtmsghandler, arglist));
|
Shiboken::AutoDecRef ret(PyObject_CallObject(qtmsghandler, arglist));
|
||||||
}
|
}
|
||||||
|
void QtCoreModuleExit()
|
||||||
|
{
|
||||||
|
PySide::SignalManager::instance().clear();
|
||||||
|
}
|
||||||
</inject-code>
|
</inject-code>
|
||||||
<add-function signature="qInstallMsgHandler(PyObject)" return-type="PyObject">
|
<add-function signature="qInstallMsgHandler(PyObject)" return-type="PyObject">
|
||||||
<inject-code class="target" position="beginning">
|
<inject-code class="target" position="beginning">
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,6 @@ static char** QApplicationArgValues;
|
||||||
|
|
||||||
void DeleteQApplicationAtExit() {
|
void DeleteQApplicationAtExit() {
|
||||||
if (QApplication::instance()) {
|
if (QApplication::instance()) {
|
||||||
//disconnect and decref all widgets used on signals before destroy qApp
|
|
||||||
PySide::SignalManager::instance().clear();
|
|
||||||
BindingManager::instance().invalidateWrapper(QApplication::instance());
|
BindingManager::instance().invalidateWrapper(QApplication::instance());
|
||||||
QApplication::instance()->deleteLater();
|
QApplication::instance()->deleteLater();
|
||||||
for (int i = 0; i < QApplicationArgCount; ++i)
|
for (int i = 0; i < QApplicationArgCount; ++i)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue