diff options
author | Lukas Stockner <lukas.stockner@freenet.de> | 2016-05-08 02:44:01 +0300 |
---|---|---|
committer | Lukas Stockner <lukas.stockner@freenet.de> | 2016-05-08 18:44:03 +0300 |
commit | cbaa25eb88a25852791d4f8b18fb9e9137fea401 (patch) | |
tree | 6c11d0aa36ac2f7aac07868262d38964237d0c10 /intern/cycles/render/shader.cpp | |
parent | 6100c2d262c58c611ccc75a20cca23bf9f245767 (diff) |
Cycles: Fix two small memory leaks and deduplicate table freeing
This commit makes remove_table skip the freeing if the offset is
already set to invalid - or, if it wasn't, set it to invalid after freeing.
That's what the current code was already doing in the Manager classes,
this change allows them to just call remove without the additional code.
Also, two potential memory leaks where new tables were always allocated
without freeing the old ones are fixed.
Reviewers: sergey, dingto, brecht
Differential Revision: https://developer.blender.org/D1974
Diffstat (limited to 'intern/cycles/render/shader.cpp')
-rw-r--r-- | intern/cycles/render/shader.cpp | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp index c07c6a04d03..82b607563ed 100644 --- a/intern/cycles/render/shader.cpp +++ b/intern/cycles/render/shader.cpp @@ -404,8 +404,8 @@ void ShaderManager::device_update_common(Device *device, } } beckmann_table_offset = scene->lookup_tables->add_table(dscene, beckmann_table); - ktables->beckmann_offset = (int)beckmann_table_offset; } + ktables->beckmann_offset = (int)beckmann_table_offset; /* integrator */ KernelIntegrator *kintegrator = &dscene->data.integrator; @@ -418,10 +418,7 @@ void ShaderManager::device_update_common(Device *device, void ShaderManager::device_free_common(Device *device, DeviceScene *dscene, Scene *scene) { - if(beckmann_table_offset != TABLE_OFFSET_INVALID) { - scene->lookup_tables->remove_table(beckmann_table_offset); - beckmann_table_offset = TABLE_OFFSET_INVALID; - } + scene->lookup_tables->remove_table(&beckmann_table_offset); device->tex_free(dscene->shader_flag); dscene->shader_flag.clear(); |