aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-07-29 13:52:32 -0300
committerRenato Filho <renato.filho@openbossa.org>2010-07-29 14:13:43 -0300
commitf4668398e2c536f4ff191991af4fd992b044d196 (patch)
tree8fb1c42cfd566905091b685a5b0ac1bba574768a
parent4f51600e20b25f05eb9730c131ca3cd51eaa1774 (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.cpp1
-rw-r--r--PySide/QtCore/typesystem_core.xml6
-rw-r--r--PySide/QtGui/glue/qapplication_init.cpp2
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&lt;QString>("unicode");
Shiboken::TypeResolver::createValueTypeResolver&lt;QString>("str");
PySide::init(module);
+ Py_AtExit(QtCoreModuleExit);
</inject-code>
<inject-code class="native" position="beginning">
#include &lt;pyside.h&gt;
@@ -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)