summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Srebrny <piotr.srebrny@qt.io>2021-09-22 12:36:27 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-09-22 17:08:29 +0000
commit08fb26a9f7165174cf8ad907b283c20b9ebfcea8 (patch)
treee73ba8f6e38121473fc4746ae00be2ff50ca3cbd
parent49137f2b93f02fdfb72d4c914f00f3e735d2a5a3 (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.cpp8
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;