diff options
author | André de la Rocha <andre.rocha@qt.io> | 2021-11-05 12:53:27 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-11-09 16:14:20 +0000 |
commit | 98308b18bb19b45c5b0d6ffa17e3bc5078501596 (patch) | |
tree | c3c8ae85c0667b23dd3c32497491f4d6f0b6f3b0 | |
parent | cb649e195a7a3a81a1df1abd99b8e60fe30ce5ce (diff) | |
download | qtmultimedia-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.cpp | 3 | ||||
-rw-r--r-- | src/multimedia/platform/windows/mfstream_p.h | 3 |
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; |