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 <david.schulz@qt.io>
This commit is contained in:
Jarek Kobus
2021-07-13 10:37:54 +02:00
parent a71d725e46
commit 0420caa3ce

View File

@@ -854,8 +854,16 @@ TextEditorWidgetPrivate::TextEditorWidgetPrivate(TextEditorWidget *parent)
TextEditorWidgetPrivate::~TextEditorWidgetPrivate() TextEditorWidgetPrivate::~TextEditorWidgetPrivate()
{ {
QObject::disconnect(m_document.data(), &TextDocument::markRemoved, QTextDocument *doc = m_document->document();
this, &TextEditorWidgetPrivate::markRemoved); QTC_CHECK(doc);
auto documentLayout = qobject_cast<TextDocumentLayout*>(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); q->disconnect(this);
delete m_toolBarWidget; delete m_toolBarWidget;
delete m_highlightScrollBarController; delete m_highlightScrollBarController;