diff options
author | Renato Filho <renato.filho@openbossa.org> | 2010-07-29 13:52:32 -0300 |
---|---|---|
committer | Renato Filho <renato.filho@openbossa.org> | 2010-07-29 14:13:43 -0300 |
commit | f4668398e2c536f4ff191991af4fd992b044d196 (patch) | |
tree | 8fb1c42cfd566905091b685a5b0ac1bba574768a | |
parent | 4f51600e20b25f05eb9730c131ca3cd51eaa1774 (diff) |
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>
-rw-r--r-- | PySide/QtCore/glue/qcoreapplication_init.cpp | 1 | ||||
-rw-r--r-- | PySide/QtCore/typesystem_core.xml | 6 | ||||
-rw-r--r-- | PySide/QtGui/glue/qapplication_init.cpp | 2 |
3 files changed, 6 insertions, 3 deletions
diff --git a/PySide/QtCore/glue/qcoreapplication_init.cpp b/PySide/QtCore/glue/qcoreapplication_init.cpp index d9bc4cfd1..5fcd79a3b 100644 --- a/PySide/QtCore/glue/qcoreapplication_init.cpp +++ b/PySide/QtCore/glue/qcoreapplication_init.cpp @@ -7,7 +7,6 @@ static char** QCoreApplicationArgValues; */ void DeleteQCoreApplicationAtExit() { if (QCoreApplication::instance()) { - PySide::SignalManager::instance().clear(); BindingManager::instance().invalidateWrapper(QCoreApplication::instance()); QCoreApplication::instance()->deleteLater(); for (int i = 0; i < QCoreApplicationArgCount; ++i) diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml index 8f3014366..db038e245 100644 --- a/PySide/QtCore/typesystem_core.xml +++ b/PySide/QtCore/typesystem_core.xml @@ -648,12 +648,14 @@ <enum-type name="Qt::WidgetAttribute" /> <enum-type name="QMetaMethod::Access"/> <enum-type name="QMetaMethod::MethodType"/> + <!--signal/slot--> <inject-code class="target" position="end"> Shiboken::TypeResolver::createValueTypeResolver<QString>("unicode"); Shiboken::TypeResolver::createValueTypeResolver<QString>("str"); PySide::init(module); + Py_AtExit(QtCoreModuleExit); </inject-code> <inject-code class="native" position="beginning"> #include <pyside.h> @@ -669,6 +671,10 @@ Shiboken::AutoDecRef arglist(Shiboken::makeTuple(type, msg)); Shiboken::AutoDecRef ret(PyObject_CallObject(qtmsghandler, arglist)); } + void QtCoreModuleExit() + { + PySide::SignalManager::instance().clear(); + } </inject-code> <add-function signature="qInstallMsgHandler(PyObject)" return-type="PyObject"> <inject-code class="target" position="beginning"> diff --git a/PySide/QtGui/glue/qapplication_init.cpp b/PySide/QtGui/glue/qapplication_init.cpp index 9911a11cf..da9e2dc76 100644 --- a/PySide/QtGui/glue/qapplication_init.cpp +++ b/PySide/QtGui/glue/qapplication_init.cpp @@ -6,8 +6,6 @@ static char** QApplicationArgValues; void DeleteQApplicationAtExit() { if (QApplication::instance()) { - //disconnect and decref all widgets used on signals before destroy qApp - PySide::SignalManager::instance().clear(); BindingManager::instance().invalidateWrapper(QApplication::instance()); QApplication::instance()->deleteLater(); for (int i = 0; i < QApplicationArgCount; ++i) |