summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré de la Rocha <andre.rocha@qt.io>2021-11-05 12:53:27 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-11-09 16:14:20 +0000
commit98308b18bb19b45c5b0d6ffa17e3bc5078501596 (patch)
treec3c8ae85c0667b23dd3c32497491f4d6f0b6f3b0
parentcb649e195a7a3a81a1df1abd99b8e60fe30ce5ce (diff)
downloadqtmultimedia-98308b18bb19b45c5b0d6ffa17e3bc5078501596.tar.gz
Windows: Fix crash while reloading QMediaPlayer
MFStream uses an event for reading data that used a pointer to an externally owned object that due to a race-condition could dereference the pointer after the pointed object had already been deleted, resulting in a crash. This patch changes it to use a weak reference and test if the object is still valid. Fixes: QTBUG-97992 Change-Id: I4ef37ad49036f9fa33e5f4f753c07c37398996c0 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit 2e857dd4b2d0b7564422b2d99ae8cad77c10cc5d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/multimedia/platform/windows/mfstream.cpp3
-rw-r--r--src/multimedia/platform/windows/mfstream_p.h3
2 files changed, 5 insertions, 1 deletions
diff --git a/src/multimedia/platform/windows/mfstream.cpp b/src/multimedia/platform/windows/mfstream.cpp
index b01dbb7b1..c49971025 100644
--- a/src/multimedia/platform/windows/mfstream.cpp
+++ b/src/multimedia/platform/windows/mfstream.cpp
@@ -261,6 +261,9 @@ STDMETHODIMP MFStream::Close()
void MFStream::doRead()
{
+ if (!m_stream)
+ return;
+
bool readDone = true;
IUnknown *pUnk = NULL;
HRESULT hr = m_currentReadResult->GetObject(&pUnk);
diff --git a/src/multimedia/platform/windows/mfstream_p.h b/src/multimedia/platform/windows/mfstream_p.h
index 725e23417..3c8d6b296 100644
--- a/src/multimedia/platform/windows/mfstream_p.h
+++ b/src/multimedia/platform/windows/mfstream_p.h
@@ -56,6 +56,7 @@
#include <QtCore/qmutex.h>
#include <QtCore/qiodevice.h>
#include <QtCore/qcoreevent.h>
+#include <QtCore/qpointer.h>
QT_USE_NAMESPACE
@@ -142,7 +143,7 @@ private:
};
long m_cRef;
- QIODevice *m_stream;
+ QPointer<QIODevice> m_stream;
bool m_ownStream;
DWORD m_workQueueId;
QMutex m_mutex;