[Bf-blender-cvs] [dbe753d1b3e] compositor-full-frame: Compositor: Fix memory leaks when initializing tiles multi-threaded
Manuel Castilla
noreply at git.blender.org
Mon Aug 2 23:12:21 CEST 2021
Commit: dbe753d1b3e3fae475b5df04d1378ef742b4c232
Author: Manuel Castilla
Date: Mon Aug 2 22:35:20 2021 +0200
Branches: compositor-full-frame
https://developer.blender.org/rBdbe753d1b3e3fae475b5df04d1378ef742b4c232
Compositor: Fix memory leaks when initializing tiles multi-threaded
===================================================================
M source/blender/compositor/intern/COM_BufferOperation.cc
M source/blender/compositor/intern/COM_BufferOperation.h
===================================================================
diff --git a/source/blender/compositor/intern/COM_BufferOperation.cc b/source/blender/compositor/intern/COM_BufferOperation.cc
index e1f566b19db..9334244eade 100644
--- a/source/blender/compositor/intern/COM_BufferOperation.cc
+++ b/source/blender/compositor/intern/COM_BufferOperation.cc
@@ -41,20 +41,28 @@ const float *BufferOperation::get_constant_elem()
return buffer_->getBuffer();
}
+void BufferOperation::initExecution()
+{
+ initMutex();
+}
+
void *BufferOperation::initializeTileData(rcti * /*rect*/)
{
if (buffer_->is_a_single_elem() == false) {
return buffer_;
}
+ lockMutex();
if (!inflated_buffer_) {
inflated_buffer_ = buffer_->inflate();
}
+ unlockMutex();
return inflated_buffer_;
}
void BufferOperation::deinitExecution()
{
+ deinitMutex();
delete inflated_buffer_;
}
diff --git a/source/blender/compositor/intern/COM_BufferOperation.h b/source/blender/compositor/intern/COM_BufferOperation.h
index 705264c37b7..b4cbc0a56b6 100644
--- a/source/blender/compositor/intern/COM_BufferOperation.h
+++ b/source/blender/compositor/intern/COM_BufferOperation.h
@@ -32,6 +32,7 @@ class BufferOperation : public ConstantOperation {
const float *get_constant_elem() override;
void *initializeTileData(rcti *rect) override;
+ void initExecution() override;
void deinitExecution() override;
void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override;
void executePixelFiltered(float output[4], float x, float y, float dx[2], float dy[2]) override;
More information about the Bf-blender-cvs
mailing list