Fixed QApplication exit order.
SignalManager need be destroyed before QApplication to avoid memory
leak.
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>,
Luciano Wolf <luciano.wolf@openbossa.org>
This commit is contained in:
parent
3468ba1eff
commit
2c937c6442
4 changed files with 16 additions and 3 deletions
|
|
@ -6,6 +6,8 @@ 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();
|
||||||
delete QApplication::instance();
|
delete QApplication::instance();
|
||||||
for (int i = 0; i < QApplicationArgCount; ++i)
|
for (int i = 0; i < QApplicationArgCount; ++i)
|
||||||
delete[] QApplicationArgValues[i];
|
delete[] QApplicationArgValues[i];
|
||||||
|
|
|
||||||
|
|
@ -247,10 +247,12 @@ int GlobalReceiver::qt_metacall(QMetaObject::Call call, int id, void** args)
|
||||||
retval = PyObject_CallObject(callback, preparedArgs);
|
retval = PyObject_CallObject(callback, preparedArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!retval)
|
if (!retval) {
|
||||||
qWarning() << "Error calling slot" << m_metaObject.method(id).signature();
|
qDebug() << "Error calling slot" << m_metaObject.method(id).signature();
|
||||||
else
|
PyErr_Print();
|
||||||
|
} else {
|
||||||
Py_DECREF(retval);
|
Py_DECREF(retval);
|
||||||
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -221,6 +221,12 @@ SignalManager::SignalManager() : m_d(new SignalManagerPrivate)
|
||||||
TypeResolver::createValueTypeResolver<ushort>("ushort");
|
TypeResolver::createValueTypeResolver<ushort>("ushort");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SignalManager::clear()
|
||||||
|
{
|
||||||
|
delete m_d;
|
||||||
|
m_d = new SignalManagerPrivate();
|
||||||
|
}
|
||||||
|
|
||||||
SignalManager::~SignalManager()
|
SignalManager::~SignalManager()
|
||||||
{
|
{
|
||||||
delete m_d;
|
delete m_d;
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,9 @@ public:
|
||||||
|
|
||||||
// Used to discovery if SignalManager was connected with object "destroyed()" signal.
|
// Used to discovery if SignalManager was connected with object "destroyed()" signal.
|
||||||
bool hasConnectionWith(const QObject *object);
|
bool hasConnectionWith(const QObject *object);
|
||||||
|
|
||||||
|
// Disconnect all signals managed by Globalreceiver
|
||||||
|
void clear();
|
||||||
private:
|
private:
|
||||||
struct SignalManagerPrivate;
|
struct SignalManagerPrivate;
|
||||||
SignalManagerPrivate* m_d;
|
SignalManagerPrivate* m_d;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue