From 365ef2fcc34ae3a269dd019b232e3dc9c9550f60 Mon Sep 17 00:00:00 2001 From: Artem Dyomin Date: Wed, 25 Jan 2023 14:39:21 +0100 Subject: Fix random crash with windows backend It's not clear how to reproduce the crash, but we have crash reports. The assumption is the crash is a side effect of used deleteLater for a few objects in the windows backend design. In theory, objects can have enqueued events that are handled between deleteLater() and delete, at this time QAudioSink is already deleted. As a result, I propose using qpointer in order to check if the object exists. Task-number: QTBUG-108693 Pick-to: 6.5 6.4 Change-Id: I0c974b1faa6f0a434e95781f22984b532671daa4 Reviewed-by: Lars Knoll --- src/plugins/multimedia/windows/evr/evrcustompresenter_p.h | 3 ++- src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h | 3 ++- src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/multimedia/windows/evr/evrcustompresenter_p.h b/src/plugins/multimedia/windows/evr/evrcustompresenter_p.h index 590285be5..5d49c1db9 100644 --- a/src/plugins/multimedia/windows/evr/evrcustompresenter_p.h +++ b/src/plugins/multimedia/windows/evr/evrcustompresenter_p.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -347,7 +348,7 @@ private: IMediaEventSink *m_mediaEventSink; // The EVR's event-sink interface. IMFMediaType *m_mediaType; // Output media type - QVideoSink *m_videoSink; + QPointer m_videoSink; bool m_canRenderToSurface; qint64 m_positionOffset; // Seek position in microseconds. QRect m_cropRect; // Video crop rectangle diff --git a/src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h b/src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h index c9ad5e9c1..b3be7f560 100644 --- a/src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h +++ b/src/plugins/multimedia/windows/evr/evrd3dpresentengine_p.h @@ -19,6 +19,7 @@ #include #include #include +#include #include @@ -130,7 +131,7 @@ private: QVideoFrameFormat m_surfaceFormat; - class QVideoSink *m_sink = nullptr; + QPointer m_sink; bool m_useTextureRendering = false; #if QT_CONFIG(opengl) WglNvDxInterop m_wglNvDxInterop; diff --git a/src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h b/src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h index 09b7acc2d..3944ba7b6 100644 --- a/src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h +++ b/src/plugins/multimedia/windows/player/mfvideorenderercontrol_p.h @@ -15,7 +15,8 @@ // We mean it. // -#include "qobject.h" +#include +#include #include #include #include @@ -48,7 +49,7 @@ private Q_SLOTS: private: void clear(); - QVideoSink *m_sink = nullptr; + QPointer m_sink; IMFActivate *m_currentActivate = nullptr; IMFSampleGrabberSinkCallback *m_callback = nullptr; -- cgit v1.2.3