QShader: fix memory leak in detach()
qAtomicDetach() does d = new T(*d); which calls the copy constructor. Since there was no copy constructor declared for QShaderPrivate, the compiler generated one which copied the refcount over, instead of setting it to 1 in the detached instance. As a result, the destructor didn't delete the QShaderPrivate. Nothing was calling this constructor that takes a pointer, so clearly this was a typo for a copy constructor. Detected in an ASAN build, the qsb tool exited in error. Pick-to: 6.3 6.2 5.15 Change-Id: Idbe659b52d2600ac7c11b09142a6aa5b25310df9 Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>bb10
parent
d8d202a3ba
commit
fd4672d020
|
|
@ -72,14 +72,14 @@ struct Q_GUI_EXPORT QShaderPrivate
|
|||
{
|
||||
}
|
||||
|
||||
QShaderPrivate(const QShaderPrivate *other)
|
||||
QShaderPrivate(const QShaderPrivate &other)
|
||||
: ref(1),
|
||||
qsbVersion(other->qsbVersion),
|
||||
stage(other->stage),
|
||||
desc(other->desc),
|
||||
shaders(other->shaders),
|
||||
bindings(other->bindings),
|
||||
combinedImageMap(other->combinedImageMap)
|
||||
qsbVersion(other.qsbVersion),
|
||||
stage(other.stage),
|
||||
desc(other.desc),
|
||||
shaders(other.shaders),
|
||||
bindings(other.bindings),
|
||||
combinedImageMap(other.combinedImageMap)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -66,18 +66,18 @@ struct Q_GUI_EXPORT QShaderDescriptionPrivate
|
|||
localSize[0] = localSize[1] = localSize[2] = 0;
|
||||
}
|
||||
|
||||
QShaderDescriptionPrivate(const QShaderDescriptionPrivate *other)
|
||||
QShaderDescriptionPrivate(const QShaderDescriptionPrivate &other)
|
||||
: ref(1),
|
||||
inVars(other->inVars),
|
||||
outVars(other->outVars),
|
||||
uniformBlocks(other->uniformBlocks),
|
||||
pushConstantBlocks(other->pushConstantBlocks),
|
||||
storageBlocks(other->storageBlocks),
|
||||
combinedImageSamplers(other->combinedImageSamplers),
|
||||
separateImages(other->separateImages),
|
||||
separateSamplers(other->separateSamplers),
|
||||
storageImages(other->storageImages),
|
||||
localSize(other->localSize)
|
||||
inVars(other.inVars),
|
||||
outVars(other.outVars),
|
||||
uniformBlocks(other.uniformBlocks),
|
||||
pushConstantBlocks(other.pushConstantBlocks),
|
||||
storageBlocks(other.storageBlocks),
|
||||
combinedImageSamplers(other.combinedImageSamplers),
|
||||
separateImages(other.separateImages),
|
||||
separateSamplers(other.separateSamplers),
|
||||
storageImages(other.storageImages),
|
||||
localSize(other.localSize)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue