diff options
author | Piotr Srebrny <piotr.srebrny@qt.io> | 2021-09-22 12:36:27 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-09-22 17:08:29 +0000 |
commit | 08fb26a9f7165174cf8ad907b283c20b9ebfcea8 (patch) | |
tree | e73ba8f6e38121473fc4746ae00be2ff50ca3cbd | |
parent | 49137f2b93f02fdfb72d4c914f00f3e735d2a5a3 (diff) |
Disconnect signals before releasing reference to objects
Crash bug occurs when QWaveDecoder reads the whole file in one go
and emits formatKnown() signal followed by readyRead() signal.
The formatKnown() signal handler clears the m_waveDecoder pointer,
which the subsequence readyReady() handler tries to dereference.
This patch disconnects all signals before clearing m_waveDecoder
avoiding this problem.
Fixes: QTBUG-96642
Change-Id: I42b876b7f30f81b53c073df0600dece3c1dd5ff3
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
(cherry picked from commit f3bf3155aae30d370be1903a15abaedcdd5ce62f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/multimedia/audio/qsamplecache_p.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/multimedia/audio/qsamplecache_p.cpp b/src/multimedia/audio/qsamplecache_p.cpp index 6c4163080..ddb12b256 100644 --- a/src/multimedia/audio/qsamplecache_p.cpp +++ b/src/multimedia/audio/qsamplecache_p.cpp @@ -314,10 +314,14 @@ void QSample::release() void QSample::cleanup() { qCDebug(qLcSampleCache) << "QSample: cleanup"; - if (m_waveDecoder) + if (m_waveDecoder) { + m_waveDecoder->disconnect(this); m_waveDecoder->deleteLater(); - if (m_stream) + } + if (m_stream) { + m_stream->disconnect(this); m_stream->deleteLater(); + } m_waveDecoder = nullptr; m_stream = nullptr; |