[Bf-blender-cvs] [2016c92] openvdb: Fix segault when closing Blender.

Kévin Dietrich noreply at git.blender.org
Fri Jun 5 14:07:50 CEST 2015


Commit: 2016c92ef18383cf0b055d0b74e7b034772ba155
Author: Kévin Dietrich
Date:   Sat May 23 05:58:11 2015 +0200
Branches: openvdb
https://developer.blender.org/rB2016c92ef18383cf0b055d0b74e7b034772ba155

Fix segault when closing Blender.

The cache was freed after the smoke domain...

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

M	intern/openvdb/intern/openvdb_writer.cpp
M	intern/openvdb/intern/openvdb_writer.h
M	source/blender/blenkernel/intern/smoke.c

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

diff --git a/intern/openvdb/intern/openvdb_writer.cpp b/intern/openvdb/intern/openvdb_writer.cpp
index 37cd28e..9c2ad40 100644
--- a/intern/openvdb/intern/openvdb_writer.cpp
+++ b/intern/openvdb/intern/openvdb_writer.cpp
@@ -27,8 +27,9 @@
 
 OpenVDBWriter::OpenVDBWriter()
     : m_grids(new openvdb::GridPtrVec())
+    , m_meta_map(new openvdb::MetaMap())
 {
-	m_meta_map.insertMeta("creator", openvdb::StringMetadata("Blender/OpenVDBWriter"));
+	m_meta_map->insertMeta("creator", openvdb::StringMetadata("Blender/OpenVDBWriter"));
 }
 
 OpenVDBWriter::~OpenVDBWriter()
@@ -46,22 +47,22 @@ void OpenVDBWriter::insert(const openvdb::GridBase &grid)
 
 void OpenVDBWriter::insertFloatMeta(const std::string &name, const float value)
 {
-	m_meta_map.insertMeta(name, openvdb::FloatMetadata(value));
+	m_meta_map->insertMeta(name, openvdb::FloatMetadata(value));
 }
 
 void OpenVDBWriter::insertIntMeta(const std::string &name, const int value)
 {
-	m_meta_map.insertMeta(name, openvdb::Int32Metadata(value));
+	m_meta_map->insertMeta(name, openvdb::Int32Metadata(value));
 }
 
 void OpenVDBWriter::insertVec3sMeta(const std::string &name, const openvdb::Vec3s value)
 {
-	m_meta_map.insertMeta(name, openvdb::Vec3SMetadata(value));
+	m_meta_map->insertMeta(name, openvdb::Vec3SMetadata(value));
 }
 
 void OpenVDBWriter::insertVec3IMeta(const std::string &name, const openvdb::Vec3I value)
 {
-	m_meta_map.insertMeta(name, openvdb::Vec3IMetadata(value));
+	m_meta_map->insertMeta(name, openvdb::Vec3IMetadata(value));
 }
 
 void OpenVDBWriter::insertMat4sMeta(const std::string &name, const float value[4][4])
@@ -72,7 +73,7 @@ void OpenVDBWriter::insertMat4sMeta(const std::string &name, const float value[4
 	    value[2][0], value[2][1], value[2][2], value[2][3],
 	    value[3][0], value[3][1], value[3][2], value[3][3]);
 
-	m_meta_map.insertMeta(name, openvdb::Mat4SMetadata(mat));
+	m_meta_map->insertMeta(name, openvdb::Mat4SMetadata(mat));
 }
 
 void OpenVDBWriter::setFileCompression(const int flags)
@@ -84,7 +85,7 @@ void OpenVDBWriter::write(const std::string &filename) const
 {
 	openvdb::io::File file(filename);
 	file.setCompression(m_flags);
-	file.write(*m_grids, m_meta_map);
+	file.write(*m_grids, *m_meta_map);
 	file.close();
 
 	/* Should perhaps be an option at some point */
diff --git a/intern/openvdb/intern/openvdb_writer.h b/intern/openvdb/intern/openvdb_writer.h
index e710397..6f36d62 100644
--- a/intern/openvdb/intern/openvdb_writer.h
+++ b/intern/openvdb/intern/openvdb_writer.h
@@ -30,7 +30,7 @@
 
 class OpenVDBWriter {
 	openvdb::GridPtrVecPtr m_grids;
-	openvdb::MetaMap m_meta_map;
+	openvdb::MetaMap::Ptr m_meta_map;
 
 	int m_flags;
 
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index a9ed7ba..6a2c1e3 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -399,12 +399,13 @@ static void smokeModifier_freeDomain(SmokeModifierData *smd)
 		BKE_ptcache_free_list(&(smd->domain->ptcaches[0]));
 		smd->domain->point_cache[0] = NULL;
 
-		MEM_freeN(smd->domain);
-		smd->domain = NULL;
-
-		for (cache = smd->domain->vdb_caches.first; cache; cache = cache->next) {
+		while ((cache = BLI_pophead(&(smd->domain->vdb_caches)))) {
+			OpenVDBWriter_free(cache->writer);
 			MEM_freeN(cache);
 		}
+
+		MEM_freeN(smd->domain);
+		smd->domain = NULL;
 	}
 }




More information about the Bf-blender-cvs mailing list