From 6fa2ee7f4a40de6a6faed2227b39533b0ff79803 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 14 Nov 2022 10:15:26 +0100 Subject: Fix crash when resetting a QShader shader = QShader() would crash because qAtomicAssign() requires that the other's d-pointer is non-null. Follows pattern from other usages in Qt. Pick-to: 6.2 6.4 Fixes: QTBUG-108121 Change-Id: I57d25a804340839d03f9dadcbd44e956fb259c30 Reviewed-by: Paul Wicking Reviewed-by: Laszlo Agocs --- src/gui/rhi/qshader.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/gui/rhi') diff --git a/src/gui/rhi/qshader.cpp b/src/gui/rhi/qshader.cpp index 85a0271272..e27ac8365e 100644 --- a/src/gui/rhi/qshader.cpp +++ b/src/gui/rhi/qshader.cpp @@ -241,7 +241,13 @@ QShader::QShader(const QShader &other) QShader &QShader::operator=(const QShader &other) { if (d) { - qAtomicAssign(d, other.d); + if (other.d) { + qAtomicAssign(d, other.d); + } else { + if (!d->ref.deref()) + delete d; + d = nullptr; + } } else if (other.d) { other.d->ref.ref(); d = other.d; -- cgit v1.2.3