Skip to content

Commit b0de40d

Browse files
committedJan 12, 2019
Fix crash on exit when project signal is emitted during project destruction
1 parent f7745c9 commit b0de40d

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed
 

‎src/core/qgsproject.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,8 @@ QgsProject::QgsProject( QObject *parent )
406406

407407
QgsProject::~QgsProject()
408408
{
409+
mIsBeingDeleted = true;
410+
409411
clear();
410412
delete mBadLayerHandler;
411413
delete mRelationManager;
@@ -714,7 +716,12 @@ void QgsProject::clear()
714716
mArchive->clear();
715717

716718
emit labelingEngineSettingsChanged();
717-
emit projectColorsChanged();
719+
720+
if ( !mIsBeingDeleted )
721+
{
722+
// possibly other signals should also not be thrown on destruction -- e.g. labelEngineSettingsChanged, etc.
723+
emit projectColorsChanged();
724+
}
718725

719726
// reset some default project properties
720727
// XXX THESE SHOULD BE MOVED TO STATUSBAR RELATED SOURCE

‎src/core/qgsproject.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1502,6 +1502,8 @@ class CORE_EXPORT QgsProject : public QObject, public QgsExpressionContextGenera
15021502

15031503
std::unique_ptr< QTranslator > mTranslator;
15041504

1505+
bool mIsBeingDeleted = false;
1506+
15051507
friend class QgsProjectDirtyBlocker;
15061508

15071509
// Required by QGIS Server for switching the current project instance

‎tests/src/python/test_qgsproject.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,6 +1183,13 @@ def testColorScheme(self):
11831183
self.assertEqual(len(spy), 2)
11841184
self.assertEqual([[c[0].name(), c[1]] for c in scheme.fetchColors()], [])
11851185

1186+
# should be no signal on project destruction -- can cause a crash
1187+
p = QgsProject()
1188+
spy = QSignalSpy(p.projectColorsChanged)
1189+
p.deleteLater()
1190+
del p
1191+
self.assertEqual(len(spy), 0)
1192+
11861193

11871194
if __name__ == '__main__':
11881195
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.