summaryrefslogtreecommitdiffstats
path: root/src/multimedia/audio/qsamplecache_p.cpp
diff options
context:
space:
mode:
authorPiotr Srebrny <piotr.srebrny@qt.io>2021-09-22 12:36:27 +0200
committerPiotr Srebrny <piotr.srebrny@qt.io>2021-09-22 13:29:41 +0000
commitf3bf3155aae30d370be1903a15abaedcdd5ce62f (patch)
tree4f9e7c91ab4b62590664604f8fcdd278afaddda3 /src/multimedia/audio/qsamplecache_p.cpp
parent18159127cfb548301a7e421cdb9d94faec511a8a (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 Pick-to: 6.2 6.2.0 Change-Id: I42b876b7f30f81b53c073df0600dece3c1dd5ff3 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/multimedia/audio/qsamplecache_p.cpp')
-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;