Commit: 1cd6c7fcd4664b451f79ccea7f8e46d5070702ef
Author: Kévin Dietrich
Date:   Mon Jan 25 12:43:35 2016 +0100
Branches: openvdb
https://developer.blender.org/rB1cd6c7fcd4664b451f79ccea7f8e46d5070702ef

Cycles: fix memory leaks due to hash collision.

Also clean the code a bit.

===================================================================

M       intern/cycles/util/util_volume.cpp

===================================================================

diff --git a/intern/cycles/util/util_volume.cpp 
b/intern/cycles/util/util_volume.cpp
index b5fca18..b7a4535 100644
--- a/intern/cycles/util/util_volume.cpp
+++ b/intern/cycles/util/util_volume.cpp
@@ -33,18 +33,18 @@ void create_isectors_threads(unordered_map<pthread_t, 
IsectorType *> &isect_map,
                              const vector<pthread_t> &thread_ids,
                              const IsectorType &main_isect)
 {
+       release_map_memory(isect_map);
+
        pthread_t my_thread = pthread_self();
 
        for (size_t i = 0; i < thread_ids.size(); ++i) {
-               IsectorType *isect = new IsectorType(main_isect);
-               pair<pthread_t, IsectorType *> inter(thread_ids[i], isect);
-               isect_map.insert(inter);
+               if (isect_map.find(thread_ids[i]) == isect_map.end()) {
+                       isect_map[thread_ids[i]] = new IsectorType(main_isect);
+               }
        }
 
        if (isect_map.find(my_thread) == isect_map.end()) {
-               IsectorType *isect = new IsectorType(main_isect);
-               pair<pthread_t, IsectorType *> inter(my_thread, isect);
-               isect_map.insert(inter);
+               isect_map[my_thread] = new IsectorType(main_isect);
        }
 }
 
@@ -55,22 +55,23 @@ void create_samplers_threads(unordered_map<pthread_t, 
SamplerType *> &sampler_ma
                              const openvdb::math::Transform *transform,
                              const AccessorType &main_accessor)
 {
+       release_map_memory(sampler_map);
+
        pthread_t my_thread = pthread_self();
 
        for (size_t i = 0; i < thread_ids.size(); ++i) {
                AccessorType *accessor = new AccessorType(main_accessor);
                accessors.push_back(accessor);
-               SamplerType *sampler = new SamplerType(*accessor, *transform);
-               pair<pthread_t, SamplerType *> sampl(thread_ids[i], sampler);
-               sampler_map.insert(sampl);
+
+               if (sampler_map.find(thread_ids[i]) == sampler_map.end()) {
+                       sampler_map[thread_ids[i]] = new SamplerType(*accessor, 
*transform);
+               }
        }
 
        if (sampler_map.find(my_thread) == sampler_map.end()) {
                AccessorType *accessor = new AccessorType(main_accessor);
                accessors.push_back(accessor);
-               SamplerType *sampler = new SamplerType(*accessor, *transform);
-               pair<pthread_t, SamplerType *> sampl(my_thread, sampler);
-               sampler_map.insert(sampl);
+               sampler_map[my_thread] = new SamplerType(*accessor, *transform);
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to