From d3067dfaa226a9a4e59508878356f2fdf9b60d04 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 22 May 2012 09:15:05 +0000 Subject: [PATCH] Fix imbuf users leak in MovieClip tiles node Leak was caused by not calling IMB_freeImBuf for result of BKE_movieclip_get_ibuf --- .../blender/compositor/nodes/COM_MovieClipNode.cpp | 5 +++++ .../compositor/operations/COM_MovieClipOperation.cpp | 12 +++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/source/blender/compositor/nodes/COM_MovieClipNode.cpp b/source/blender/compositor/nodes/COM_MovieClipNode.cpp index 0bddd328007..75831130936 100644 --- a/source/blender/compositor/nodes/COM_MovieClipNode.cpp +++ b/source/blender/compositor/nodes/COM_MovieClipNode.cpp @@ -30,6 +30,7 @@ extern "C" { #include "DNA_movieclip_types.h" #include "BKE_movieclip.h" #include "BKE_tracking.h" + #include "IMB_imbuf.h" } MovieClipNode::MovieClipNode(bNode *editorNode): Node(editorNode) @@ -118,4 +119,8 @@ void MovieClipNode::convertToOperations(ExecutionSystem *graph, CompositorContex angleMovieClip->relinkConnections(operationSetValue->getOutputSocket()); graph->addOperation(operationSetValue); } + + if (ibuf) { + IMB_freeImBuf(ibuf); + } } diff --git a/source/blender/compositor/operations/COM_MovieClipOperation.cpp b/source/blender/compositor/operations/COM_MovieClipOperation.cpp index d1dab13a952..b565e48345c 100644 --- a/source/blender/compositor/operations/COM_MovieClipOperation.cpp +++ b/source/blender/compositor/operations/COM_MovieClipOperation.cpp @@ -61,21 +61,27 @@ void MovieClipOperation::initExecution() void MovieClipOperation::deinitExecution() { - this->movieClipBuffer = NULL; + if (this->movieClipBuffer) { + IMB_freeImBuf(this->movieClipBuffer); + + this->movieClipBuffer = NULL; + } } void MovieClipOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[]) { ImBuf *ibuf; - resolution[0] = 0; - resolution[1] = 0; + resolution[0] = 0; + resolution[1] = 0; if (this->movieClip) { ibuf = BKE_movieclip_get_ibuf(this->movieClip, this->movieClipUser); if (ibuf) { resolution[0] = ibuf->x; resolution[1] = ibuf->y; + + IMB_freeImBuf(ibuf); } } }