Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2012-09-04 15:08:47 +0400
committerJeroen Bakker <j.bakker@atmind.nl>2012-09-04 15:08:47 +0400
commitd4be0ec9fbd122e259662f8da0261798a0056430 (patch)
treeb4189c11887226c958c1b13752950ccfcef5c57c /source/blender/compositor
parent6805db676d9d004c8131b13fca095b519997b768 (diff)
* there is a tiny memory leak. I think it happens when you quit blenden
during a WM_draw. tiny is max 8* size of pointer and it is maintained at that size. So no worries there. * cleanup some code to be certain that deinitialization happens correctly.
Diffstat (limited to 'source/blender/compositor')
-rw-r--r--source/blender/compositor/COM_compositor.h7
-rw-r--r--source/blender/compositor/intern/COM_WorkScheduler.cpp26
-rw-r--r--source/blender/compositor/intern/COM_compositor.cpp19
3 files changed, 44 insertions, 8 deletions
diff --git a/source/blender/compositor/COM_compositor.h b/source/blender/compositor/COM_compositor.h
index d9cfae8edb9..e6efd77f8b2 100644
--- a/source/blender/compositor/COM_compositor.h
+++ b/source/blender/compositor/COM_compositor.h
@@ -301,10 +301,17 @@ void COM_execute(RenderData *rd, bNodeTree *editingtree, int rendering);
/**
* @brief Deinitialize the compositor caches and allocated memory.
+ * Use COM_clearCaches to only free the caches.
*/
void COM_deinitialize(void);
/**
+ * @brief Clear all compositor caches. (Compositor system will still remain available).
+ * To deinitialize the compositor use the COM_deinitialize method.
+ */
+void COM_clearCaches(void);
+
+/**
* @brief Return a list of highlighted bnodes pointers.
* @return
*/
diff --git a/source/blender/compositor/intern/COM_WorkScheduler.cpp b/source/blender/compositor/intern/COM_WorkScheduler.cpp
index f9af23faea8..f7ae2945471 100644
--- a/source/blender/compositor/intern/COM_WorkScheduler.cpp
+++ b/source/blender/compositor/intern/COM_WorkScheduler.cpp
@@ -103,7 +103,13 @@ void **g_highlightedNodesRead;
void COM_startReadHighlights()
{
- if (g_highlightedNodesRead) {
+ if (!g_highlightInitialized)
+ {
+ return;
+ }
+
+ if (g_highlightedNodesRead)
+ {
MEM_freeN(g_highlightedNodesRead);
}
@@ -114,6 +120,11 @@ void COM_startReadHighlights()
int COM_isHighlightedbNode(bNode *bnode)
{
+ if (!g_highlightInitialized)
+ {
+ return false;
+ }
+
if (!g_highlightedNodesRead) {
return false;
}
@@ -397,13 +408,18 @@ void WorkScheduler::deinitialize()
/* deinitialize highlighting */
if (g_highlightInitialized) {
- if (g_highlightedNodes)
+ g_highlightInitialized = false;
+ if (g_highlightedNodes)
+ {
MEM_freeN(g_highlightedNodes);
+ g_highlightedNodes = NULL;
+ }
- if (g_highlightedNodesRead)
+ if (g_highlightedNodesRead)
+ {
MEM_freeN(g_highlightedNodesRead);
-
- g_highlightInitialized = false;
+ g_highlightedNodesRead = NULL;
+ }
}
}
diff --git a/source/blender/compositor/intern/COM_compositor.cpp b/source/blender/compositor/intern/COM_compositor.cpp
index daf48d65caf..6369eff3048 100644
--- a/source/blender/compositor/intern/COM_compositor.cpp
+++ b/source/blender/compositor/intern/COM_compositor.cpp
@@ -37,6 +37,11 @@ extern "C" {
static ThreadMutex s_compositorMutex;
static char is_compositorMutex_init = FALSE;
+void intern_freeCompositorCaches()
+{
+ deintializeDistortionCache();
+}
+
void COM_execute(RenderData *rd, bNodeTree *editingtree, int rendering)
{
/* initialize mutex, TODO this mutex init is actually not thread safe and
@@ -86,14 +91,22 @@ void COM_execute(RenderData *rd, bNodeTree *editingtree, int rendering)
BLI_mutex_unlock(&s_compositorMutex);
}
+void COM_freeCaches()
+{
+ if (is_compositorMutex_init)
+ {
+ BLI_mutex_lock(&s_compositorMutex);
+ intern_freeCompositorCaches();
+ BLI_mutex_unlock(&s_compositorMutex);
+ }
+}
+
void COM_deinitialize()
{
if (is_compositorMutex_init) {
BLI_mutex_lock(&s_compositorMutex);
-
- deintializeDistortionCache();
+ intern_freeCompositorCaches();
WorkScheduler::deinitialize();
-
is_compositorMutex_init = FALSE;
BLI_mutex_unlock(&s_compositorMutex);
BLI_mutex_end(&s_compositorMutex);