From 0420caa3ceebd32221d15f1c81b44b3033ae4391 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 13 Jul 2021 10:37:54 +0200 Subject: [PATCH] TextEditorWidgetPrivate: Disconnect more signals in d'tor After the TextEditorWidgetPrivate's d'tor has finished, compiler starts destructing all the member fields of TextEditorWidgetPrivate before calling base QObject d'tor. Some d'tors of some members may still emit signals which are connected to TextEditorWidgetPrivate's slots. In this case we may start operating on corrupted internals. Fixes: QTCREATORBUG-26001 Change-Id: I865cad16601b278fe7f7cf95145557310bb83126 Reviewed-by: David Schulz --- src/plugins/texteditor/texteditor.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index b98a5783056..188abfe20ad 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -854,8 +854,16 @@ TextEditorWidgetPrivate::TextEditorWidgetPrivate(TextEditorWidget *parent) TextEditorWidgetPrivate::~TextEditorWidgetPrivate() { - QObject::disconnect(m_document.data(), &TextDocument::markRemoved, - this, &TextEditorWidgetPrivate::markRemoved); + QTextDocument *doc = m_document->document(); + QTC_CHECK(doc); + auto documentLayout = qobject_cast(doc->documentLayout()); + QTC_CHECK(documentLayout); + QTC_CHECK(m_document.data()); + documentLayout->disconnect(this); + documentLayout->disconnect(m_extraArea); + doc->disconnect(this); + m_document.data()->disconnect(this); + q->disconnect(documentLayout); q->disconnect(this); delete m_toolBarWidget; delete m_highlightScrollBarController;