[Bf-blender-cvs] [7df9934] openvdb: Fix assert failure.

Kévin Dietrich noreply at git.blender.org
Sun Nov 13 21:44:24 CET 2016


Commit: 7df993425b9078892519ac8e0ad0a6e84d338699
Author: Kévin Dietrich
Date:   Wed May 11 14:18:47 2016 +0200
Branches: openvdb
https://developer.blender.org/rB7df993425b9078892519ac8e0ad0a6e84d338699

Fix assert failure.

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

M	intern/cycles/util/util_volume.cpp
M	intern/cycles/util/util_volume.h

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

diff --git a/intern/cycles/util/util_volume.cpp b/intern/cycles/util/util_volume.cpp
index 9f0d4f3..5f9e86b 100644
--- a/intern/cycles/util/util_volume.cpp
+++ b/intern/cycles/util/util_volume.cpp
@@ -67,6 +67,7 @@ void create_isectors_threads(unordered_map<pthread_t, IsectorType *> &isect_map,
 	}
 
 	std::fprintf(stderr, ": %ld isectors, %ld threads\n", isect_map.size(), thread_ids.size());
+	std::cerr << "Self thread: " << my_thread << '\n';
 }
 
 template <typename SamplerType, typename AccessorType>
@@ -97,6 +98,7 @@ void create_samplers_threads(unordered_map<pthread_t, SamplerType *> &sampler_ma
 	}
 
 	std::fprintf(stderr, ": %ld samplers, %ld threads\n", sampler_map.size(), thread_ids.size());
+	std::cerr << "Self thread: " << my_thread << '\n';
 }
 
 /* ********** OpenVDB floating pointing scalar volume ************ */
diff --git a/intern/cycles/util/util_volume.h b/intern/cycles/util/util_volume.h
index 54701c5..6a52815 100644
--- a/intern/cycles/util/util_volume.h
+++ b/intern/cycles/util/util_volume.h
@@ -160,8 +160,16 @@ public:
 	{
 		pthread_t thread = pthread_self();
 		isect_map::iterator iter = isectors.find(thread);
-		assert(iter != isectors.end());
-		isector_t *vdb_isect = iter->second;
+
+		isector_t *vdb_isect;
+		/* this is not really thread safe. */
+		if (iter == isectors.end()) {
+			vdb_isect = new isector_t(*main_isector);
+			isectors[thread] = vdb_isect;
+		}
+		else {
+			vdb_isect = iter->second;
+		}
 
 		vdb_ray_t::Vec3Type P(ray->P.x, ray->P.y, ray->P.z);
 		vdb_ray_t::Vec3Type D(ray->D.x, ray->D.y, ray->D.z);




More information about the Bf-blender-cvs mailing list