* 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.
This commit is contained in:
@@ -301,9 +301,16 @@ 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
|
||||
|
@@ -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)
|
||||
MEM_freeN(g_highlightedNodes);
|
||||
|
||||
if (g_highlightedNodesRead)
|
||||
MEM_freeN(g_highlightedNodesRead);
|
||||
|
||||
g_highlightInitialized = false;
|
||||
if (g_highlightedNodes)
|
||||
{
|
||||
MEM_freeN(g_highlightedNodes);
|
||||
g_highlightedNodes = NULL;
|
||||
}
|
||||
|
||||
if (g_highlightedNodesRead)
|
||||
{
|
||||
MEM_freeN(g_highlightedNodesRead);
|
||||
g_highlightedNodesRead = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user